SYN solo está al principio.
ACK se encuentra en segmentos posteriores en cualquier dirección. [edit] El ACK también definirá un tamaño de ventana. Si el tamaño de la ventana es 100, por ejemplo, el remitente puede enviar 100 segmentos antes de esperar recibir un ACK. Por ejemplo, si el remitente envía 100 segmentos pero se pierde el número de segmento 50, el receptor recibirá 1-49 & 51 -100. El receptor ACK recibirá 50 (próximo segmento que espera) y establecerá el tamaño de la ventana en 1. El remitente reenviará 1 segmento con el número de secuencia 50. El receptor ACK recibirá 101 y restablecerá el tamaño de la ventana a un número mayor [editar]
Ambos son en realidad campos en el encabezado TCP y se pueden enviar con datos, aunque el SYN y el primer ACK normalmente no tienen datos.
Por lo tanto, ninguno de los escenarios que describe es bastante correcto.El primero está realmente más cerca de la realidad, pero todos los paquetes de datos después del SYN tienen que incluir un ACK, y también un campo de número de acuse de recibo que identifica el número del próximo paquete esperado.
El final de una sesión también implica los apretones de manos con los paquetes señalados con FIN y los ACK relacionados con ellos.
Los números de secuencia intercambiados se utilizan para identificar paquetes perdidos y habilitar un mecanismo de reintento, y también para volver a ensamblar todo el flujo de paquetes en el orden correcto.
Además, si es el primer caso, ¿hay algún beneficio de UDP sobre TCP si solo mantiene la conexión abierta durante un largo período de tiempo?
Con UDP no puede simplemente mantener la conexión abierta durante un largo período de tiempo. No hay conexión.
Esta secuencia de banderas SYN/ACK/FIN es lo que hace una conexión.
Con UDP, no hay SYN o ACK, por lo que la comunicación es unidireccional, la entrega no está garantizada y el orden no se preserva. Pero tiene menos sobrecarga, por lo que es útil cuando la velocidad es más importante que la confiabilidad, como por ejemplo en los medios de transmisión.
Esto es un poco simplificado aún, pero es lo mejor que puedo hacer en este momento.
Hay mucho más sobre esto en el wikipedia entry on TCP y, por supuesto, en las RFC.
No hay "paquetes" en TCP/IP. Vea la terminología correcta aquí: http://stackoverflow.com/questions/955369/protocol-terminology-message-versus-packet –
@Phillips - TCP es un protocolo en capas sobre IP. No hay concepto de segmentos hasta que no sea procesado por TCP. Durante este proceso, definitivamente es aceptable referirse a los datos entrantes como paquetes en lugar de segmentos, porque después de todo solo son paquetes IP en ese punto. Entra en TCP como paquetes de IP, sale como segmentos, mensajes, etc. – JSON