En TCP, el cliente envía un SYN y luego el servidor responde con un ACK del SYN. Pero luego el cliente regresa y envía otro ACK antes de enviar datos. ¿Cuál es el punto del segundo ACK?

Aunque parece una única sesión TCP bidireccional entre el cliente y el servidor, cada mitad de la conexión se configura por separado. Esto se hace porque el algoritmo de control de flujo depende de que el emisor realice el cálculo de la ventana de congestión en función de los acuses de recibo del segmento individual del receptor. Para una conexión, hay dos pares de emisor / receptor, cada máquina de estado se ejecuta de forma independiente.

El cliente inicia una nueva conexión enviando un SYN, al que el servidor responde con un ACK para configurar la máquina de estado distribuida cliente = remitente, servidor = receptor.

Una vez que el servidor tiene la intención de abrir la conexión desde el cliente (es decir, el primer SYN), envía su propio SYN para configurar su máquina de estado servidor = remitente, cliente = receptor.

Cada configuración de máquina de estado se completa cuando el SYN se reconoce con un ACK.

Como optimización, el ACK del servidor al primer SYN del cliente y su propio SYN se contraen en el mismo paquete, que se denomina SYN-ACK. El ACK del cliente al SYN del servidor se parece al tercer paquete, lo que se denomina un “apretón de manos de tres vías”.

En realidad NO son TRES paquetes, sino CUATRO, optimizados para TRES.

Con la explicación anterior, debe quedar claro por qué se requiere el “tercer” ACK.

Este segundo ACK es para el SYN del servidor, por lo que el servidor puede estar seguro de que el cliente lo recibió. Cuando cada uno de ellos ha enviado / recibido un SYN / ACK, significa que ha establecido una conexión confiable.

El segundo elemento en su descripción es en realidad un SYN-ACK , una única señal de que ambos ACK son el SYN del cliente y solicitan un ACK del cliente, por lo que el proceso de señalización en ambos lados es completamente simétrico.

More Interesting

¿Se puede usar async / await en C # para programar un servidor TCP? Dado que en realidad no están creando un nuevo hilo, ¿el servidor colapsará bajo demasiados clientes?

¿Cómo podemos optimizar el tamaño del paquete durante la transmisión de datos, suponiendo que la posibilidad de que un paquete se corrompa y necesite una nueva transmisión es directamente proporcional al tamaño del paquete, y suponiendo que podamos transmitir un paquete por unidad de tiempo sin importar el tamaño del paquete?

¿Por qué el modo de transferencia asincrónica (ATM) perdió a IP?

Protocolos de red: en una conexión de capa de transporte entre dos procesos de host, ¿cómo conoce el proceso de host de destino la dirección IP del host de origen?

¿Hay algún beneficio para el TCP transaccional?

¿Cuál es la responsabilidad de una dirección IP, MAC y de puerto?

¿Cuál es el estado del arte en la protección DDoS?

¿Qué significa 'protocolo' en términos de redes?

¿Qué cosas debo hacer para asegurar mi dirección IP?

¿Cómo se relaciona TCP / IP con HTTP?

¿Dónde puedo encontrar mi dirección IP en mi iPhone?

Cómo averiguar las direcciones IP de las universidades de EE. UU.

¿Cómo se puede acceder a un disco duro conectado a través del puerto USB de un segundo enrutador dentro de una red?

Para resolver el problema de agotamiento del espacio de direcciones con IPv4, ¿por qué no simplemente aumentamos la especificación de tamaño de octetos TCP / IP de 32 bits a 64 bits, en lugar de diseñar un nuevo protocolo IPv6?

¿Cómo se implementan exactamente los protocolos de red?