2 votos

¿Qué hace y qué no hace exactamente un proceso TCP suspendido en linux?

En relación con Conexiones TCP mediante NetGui (y wireshark para analizar):

Establezco una conexión TCP entre dos PCs utilizando el comando nc -p 11111 etc... para el servidor, y el correspondiente para el cliente, para que efectivamente pudieran enviar y leer (en pc2 (servidor)) mensajes.

Después, pulsé Ctrl Z en pc2 (servidor debe ser suspendido) y envió algunos mensajes con pc1 (cliente). Utilizando netstat -tna comando puedo ver los mensajes en espera en el buffer. Antes de volver a poner el servidor en primer plano Paro el tcpdump captura en el router entre estos dos pcs y se da cuenta de que estos mensajes habían sido enviados (como se esperaba) pero también ACKed por el servidor.

Ahora bien, si el servidor ACKs los mensajes a medida que salen del buffer (es decir, a medida que son procesados y subidos a otra capa), ¿fueron estos mensajes realmente "cogidos" del buffer por el servidor? Si es así, ¿cuál es el significado de ser suspendidos?

Si, sin embargo, los mensajes son ACKed antes de ser procesados, entonces ¿no pensaría pc1 que estos mensajes han sido procesados y por lo tanto, el buffer está libre y seguiría enviando mensajes hasta que la ventana llegue a valor cero? Si es así, ¿qué significa la siguiente fórmula?

rwnd = ReceiveBuffer - (LastByteReceived – LastByteReadByApplication)

¿En qué me equivoco?

2voto

Simon Puntos 165

Los segmentos TCP son aceptados por la pila TCP del núcleo en el momento en que la pila TCP del núcleo los recibe del controlador NIC. Así que sí, la ventana de recepción TCP representa un buffer en el kernel, y si el proceso de destino nunca lee los datos entrantes que han sido almacenados en el kernel, la ventana de recepción se llenará y el remitente dejará de enviar.

El emisor empezará entonces a hacer "sondeos de ventana cero"; es decir, enviará segmentos TCP vacíos sólo para conseguir que la pila TCP del receptor envíe de vuelta Acks con actualizaciones de la ventana de recepción, para ver si se ha abierto algún espacio en la ventana de recepción para que el emisor pueda empezar a enviar de nuevo. Una vez que el proceso de destino finalmente lee algunos de los datos que el kernel ha almacenado para él, la siguiente sonda de ventana cero del remitente resultará en un Ack con una actualización de ventana de recepción mostrando espacio en la ventana de recepción, por lo que el remitente reanudará el envío de segmentos TCP con carga útil.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X