2011-07-24 24 views
5

¿Por qué the TCP three-way handshake se topa con el número de secuencia cuando aparece durante el saludo inicial? ¿Cómo es mejor que simplemente dejar el número de acuse de recibo igual al número de secuencia?¿Por qué el handshake de tres vías de TCP choca con el número de secuencia al anotar?

La conexión se establece con

Client sends SYN,A 
Server responds with SYN-ACK,A+1,B 
Client confirms with ACK,B+1 

¿Cómo es eso mejor que

Client sends SYN,A 
Server responds with SYN-ACK,A,B 
Client confirms with ACK,B 
+0

posible duplicado de [¿Por qué un bit SYN o FIN en un segmento TCP consume un byte en el espacio de número de secuencia?] (Http://stackoverflow.com/questions/2352524/why-does-a-syn-or -fin-bit-in-a-tcp-segment-consume-a-byte-in-the-sequence-number) –

Respuesta

3

Eso es porque el campo ACK que esto significa cuando la bandera ACK se establece:

número de reconocimiento (32 bits): si se establece el indicador ACK, el valor de este campo es el siguiente número de espera que el receptor espera.

Si no se establece en (inital número de secuencia + 1), sería inconsistente significa tanto ack'ing los SYN (ambos SYN y ACK banderas deben ser establecidas en este paquete) y diciendo que está a la espera de que número de secuencia nuevamente (es decir, no lo ha recibido).

+0

Lo siento, debo ser denso. No veo la "inconsistencia", de ahí mis ediciones. –

+0

'ACK == n' significa" He recibido todos los mensajes hasta el número de secuencia 'n-1' así que por favor envíeme lo que tiene para el número de secuencia' n' ". Entonces eso sería solicitar un reenvío del 'SYN' del cliente en su ejemplo que no tiene sentido. Tratar con una semántica de número de secuencia diferente para el protocolo de enlace inicial haría que todo el protocolo fuera más difícil de implementar de lo que ya es sin una buena razón. – Mat

+0

Creo que lo que está diciendo es que no es necesario encontrar el número de secuencia para el primer saludo inicial de conexión, sino que se necesitan golpes para los siguientes bloqueos TCP, por lo que simplemente se usa todo el tiempo. Lo aceptaré como la respuesta. –

Cuestiones relacionadas