Estoy ejecutando un cuadro de Linux ejecutando 2.6.9-55.ELsmp, x86_64.Configuración de la ventana de recepción de TCP en C y trabajo con tcpdump en Linux
Estoy tratando de establecer la ventana de recepción TCP mediante el uso de la función setsockopt() usando C. Yo intente lo siguiente:
rwnd = 1024;
setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&rwnd, sizeof(rwnd));
El segmento de código anterior es en un programa cliente que recibe datos de un servidor . Cuando me quito el programa para recibir y observar la salida de tcpdump, observo negociación ventana de este modo:
11:34:40.257755 IP clientReceiver.42464 > serverSender.8991:
S 1742042788:1742042788(0) win 5840
<mss 1460,sackOK,timestamp 1688222886 0,nop,wscale 2>
vemos que el programa cliente es de hecho la negociación de una ventana diferente de lo que he puesto en el programa cliente. Sin embargo, de cómo puedo interpretar el texto de Steven ("TCP/IP Illustrated, Volumen 1") Sección 20.4, creo que usted hace lo que él menciona en la segunda frase del bloque en la Sección 20.4 usando la llamada setsockopt() que uso (vea arriba)
Me gustaría saber dónde me he equivocado.
Quizás mi interpretación de lo que dice Stevens es incorrecta. En ese caso, ¿podría indicarme la forma correcta de configurar el tamaño del búfer de recepción? Como una prueba de mi confusión, remito a la página man de los sockets TCP de Linux en http://linux.die.net/man/7/tcp (vea el comentario en SO_RCFBUF).
¿Qué me falta en esta historia? ¿Cómo controlo el tamaño del buffer de recepción (y lo muestro en la salida de tcpdump)? Tenga en cuenta que aludo a aquí una configuración de la opción de socket SO_RCFBUF - Entiendo que eso es lo que aparece en la ventana de negociación en el SYN.
Se agradece cualquier entrada.
Tenga en cuenta también que la abrazadera mínima está limitada a la mitad del RCVBUF mínimo (generalmente 4096, por lo que la abrazadera mínima suele ser 2048). – caf
Comprobé esto, y los números son en realidad 256 y (por lo tanto) 128 para el valor mínimo de CLAMP configurable resp. Comprueba el código de tcp.c :: setsockopt() en el caso TCP_WINDOW_CLAMP, y echa un vistazo a sock.h :: # define SOCK_MIN_RCVBUF 256.Gracias a todos. ¡Aclamaciones! – Sonny