Explicación del protocolo de enlace triple a través de TCP/IP
En este artículo se describe el proceso de protocolo de enlace triple de Protocolo de control de transmisión (TCP) entre un cliente y un servidor al iniciar o finalizar una conexión TCP.
Número de KB original: 172983
Resumen
Este artículo está pensado para audiencias que están familiarizados con el Protocolo de control de transmisión/Protocolo de Internet (TCP/IP). Describe el proceso del protocolo de enlace triple TCP entre un cliente y un servidor al iniciar o finalizar una conexión TCP.
Más información
El nivel TCP del protocolo de transporte TCP/IP está orientado a la conexión. Orientado a la conexión significa que, antes de que se puedan transmitir datos, se debe obtener y confirmar una conexión confiable. Las transmisiones de datos de nivel TCP, el establecimiento de conexiones y la terminación de conexión mantienen parámetros de control específicos que rigen todo el proceso. Los bits de control se enumeran de la siguiente manera:
URG: campo puntero urgente significativo
ACK: Campo de confirmación significativo
PSH: función push
RST: Restablecer la conexión
SYN: Sincronizar números de secuencia
FIN: No más datos del remitente
Hay dos escenarios en los que se realizará un protocolo de enlace de tres vías:
Establecer una conexión (una abierta activa)
Finalización de una conexión (un cierre activo)
La siguiente información de ejemplo se obtuvo de una captura de Network Monitor. Network Monitor es un analizador de protocolos que se puede obtener de Microsoft Systems Management Server.
Establecer una conexión
En la secuencia siguiente se muestra el proceso de establecimiento de una conexión TCP:
Marco 1:
Como ve en la primera trama, el cliente, NTW3, envía un segmento SYN (TCP ....S.
). Es una solicitud al servidor para sincronizar los números de secuencia. Especifica su número de secuencia inicial (ISN). Isn se incrementa en 1 (8221821+1=8221822) y se envía al servidor. Para iniciar una conexión, el cliente y el servidor deben sincronizar los números de secuencia del otro. También hay una opción para el tamaño máximo de segmento (MSS) que se va a establecer, que se define por la longitud (léase: 4). Esta opción comunica el MSS que el remitente quiere recibir. El campo Confirmación (ack: 0) se establece en cero porque es la primera parte del protocolo de enlace triple.
1 2.0785 NTW3 --> BDC3 TCP ....S., len: 4, seq: 8221822-8221825, ack: 0,
win: 8192, src: 1037 dst: 139 (NBT Session) NTW3 --> BDC3 IP
TCP: ....S., len: 4, seq: 8221822-8221825, ack: 0, win: 8192, src: 1037
dst: 139 (NBT Session)
TCP: Source Port = 0x040D
TCP: Destination Port = NETBIOS Session Service
TCP: Sequence Number = 8221822 (0x7D747E)
TCP: Acknowledgement Number = 0 (0x0)
TCP: Data Offset = 24 (0x18)
TCP: Reserved = 0 (0x0000)
TCP: Flags = 0x02 : ....S.
TCP: ..0..... = No urgent data
TCP: ...0.... = Acknowledgement field not significant
TCP: ....0... = No Push function
TCP: .....0.. = No Reset
TCP: ......1. = Synchronize sequence numbers
TCP: .......0 = No Fin
TCP: Window = 8192 (0x2000)
TCP: Checksum = 0xF213
TCP: Urgent Pointer = 0 (0x0)
TCP: Options
TCP: Option Kind (Maximum Segment Size) = 2 (0x2)
TCP: Option Length = 4 (0x4)
TCP: Option Value = 1460 (0x5B4)
TCP: Frame Padding
00000: 02 60 8C 9E 18 8B 02 60 8C 3B 85 C1 08 00 45 00 .`.....`.;....E.
00010: 00 2C 0D 01 40 00 80 06 E1 4B 83 6B 02 D6 83 6B .,..@....K.k...k
00020: 02 D3 04 0D 00 8B 00 7D 74 7E 00 00 00 00 60 02 .......}t~....`.
00030: 20 00 F2 13 00 00 02 04 05 B4 20 20 .........
Marco 2:
Como se ve en la segunda trama, el servidor, BDC3, envía un segmento ACK y SYN (TCP .A..S.
). En este segmento, el servidor confirma la solicitud del cliente para la sincronización. Mientras tanto, el servidor también envía su solicitud al cliente para la sincronización de sus números de secuencia. Hay una diferencia importante en este segmento. El servidor transmite un número de confirmación (8221823) al cliente. La confirmación es solo una prueba para el cliente de que el ACK es específico del SYN iniciado por el cliente. El proceso de confirmación de la solicitud del cliente permite al servidor incrementar el número de secuencia del cliente en uno y lo usa como número de confirmación.
2 2.0786 BDC3 --> NTW3 TCP .A..S., len: 4, seq: 1109645-1109648, ack:
8221823, win: 8760, src: 139 (NBT Session) dst: 1037 BDC3 --> NTW3 IP
TCP: .A..S., len: 4, seq: 1109645-1109648, ack: 8221823, win: 8760,
src: 139 (NBT Session) dst: 1037
TCP: Source Port = NETBIOS Session Service
TCP: Destination Port = 0x040D
TCP: Sequence Number = 1109645 (0x10EE8D)
TCP: Acknowledgement Number = 8221823 (0x7D747F)
TCP: Data Offset = 24 (0x18)
TCP: Reserved = 0 (0x0000)
TCP: Flags = 0x12 : .A..S.
TCP: ..0..... = No urgent data
TCP: ...1.... = Acknowledgement field significant
TCP: ....0... = No Push function
TCP: .....0.. = No Reset
TCP: ......1. = Synchronize sequence numbers
TCP: .......0 = No Fin
TCP: Window = 8760 (0x2238)
TCP: Checksum = 0x012D
TCP: Urgent Pointer = 0 (0x0)
TCP: Options
TCP: Option Kind (Maximum Segment Size) = 2 (0x2)
TCP: Option Length = 4 (0x4)
TCP: Option Value = 1460 (0x5B4)
TCP: Frame Padding
00000: 02 60 8C 3B 85 C1 02 60 8C 9E 18 8B 08 00 45 00 .`.;...`......E.
00010: 00 2C 5B 00 40 00 80 06 93 4C 83 6B 02 D3 83 6B .,[.@....L.k...k
00020: 02 D6 00 8B 04 0D 00 10 EE 8D 00 7D 74 7F 60 12 ...........}t`.
00030: 22 38 01 2D 00 00 02 04 05 B4 20 20 "8.-......
Marco 3:
Como se ve en la tercera trama, el cliente envía un segmento ACK (TCP .A....
). En este segmento, el cliente confirma la solicitud del servidor para la sincronización. El cliente usa el mismo algoritmo que el servidor implementado para proporcionar un número de confirmación. La confirmación del cliente de la solicitud de sincronización del servidor completa el proceso de establecer una conexión confiable y el protocolo de enlace triple.
3 2.787 NTW3 --> BDC3 TCP .A...., len: 0, seq: 8221823-8221823, ack:
1109646, win: 8760, src: 1037 dst: 139 (NBT Session) NTW3 --> BDC3 IP
TCP: .A...., len: 0, seq: 8221823-8221823, ack: 1109646, win: 8760,
src: 1037 dst: 139 (NBT Session)
TCP: Source Port = 0x040D
TCP: Destination Port = NETBIOS Session Service
TCP: Sequence Number = 8221823 (0x7D747F)
TCP: Acknowledgement Number = 1109646 (0x10EE8E)
TCP: Data Offset = 20 (0x14)
TCP: Reserved = 0 (0x0000)
TCP: Flags = 0x10 : .A....
TCP: ..0..... = No urgent data
TCP: ...1.... = Acknowledgement field significant
TCP: ....0... = No Push function
TCP: .....0.. = No Reset
TCP: ......0. = No Synchronize
TCP: .......0 = No Fin
TCP: Window = 8760 (0x2238)
TCP: Checksum = 0x18EA
TCP: Urgent Pointer = 0 (0x0)
TCP: Frame Padding
00000: 02 60 8C 9E 18 8B 02 60 8C 3B 85 C1 08 00 45 00 .`.....`.;....E.
00010: 00 28 0E 01 40 00 80 06 E0 4F 83 6B 02 D6 83 6B .(..@....O.k...k
00020: 02 D3 04 0D 00 8B 00 7D 74 7F 00 10 EE 8E 50 10 .......}t....P.
00030: 22 38 18 EA 00 00 20 20 20 20 20 20 "8....
Finalización de una conexión
Aunque el protocolo de enlace de tres vías solo requiere que se transmitan tres paquetes a través de nuestros medios en red, la terminación de esta conexión confiable necesita transmitir cuatro paquetes. Dado que una conexión TCP es dúplex completo (los datos pueden fluir en cada dirección independientemente de la otra), cada dirección debe finalizarse de forma independiente.
Marco 4:
En esta sesión de marcos, verá que el cliente envía un FIN que va acompañado de un ACK (TCP .A...F
). Este segmento tiene dos funciones básicas. En primer lugar, cuando se establece el parámetro FIN, informará al servidor de que no tiene más datos que enviar. En segundo lugar, el ACK es esencial para identificar la conexión específica que han establecido.
4 16.0279 NTW3 --> BDC3 TCP .A...F, len: 0, seq: 8221823-8221823,
ack:3462835714, win: 8760, src: 2337 dst: 139 (NBT Session) NTW3 --> BDC3
IP
TCP: .A...F, len: 0, seq: 8221823-8221823, ack: 1109646, win: 8760, src:
1037 dst: 139 (NBT Session)
TCP: Source Port = 0x040D
TCP: Destination Port = NETBIOS Session Service
TCP: Sequence Number = 8221823 (0x7D747F)
TCP: Acknowledgement Number = 1109646 (0x10EE8E)
TCP: Data Offset = 20 (0x14)
TCP: Reserved = 0 (0x0000)
TCP: Flags = 0x11 : .A...F
TCP: ..0..... = No urgent data
TCP: ...1.... = Acknowledgement field significant
TCP: ....0... = No Push function
TCP: .....0.. = No Reset
TCP: ......0. = No Synchronize
TCP: .......1 = No more data from sender
TCP: Window = 8760 (0x2238)
TCP: Checksum = 0x236C
TCP: Urgent Pointer = 0 (0x0)
00000: 00 20 AF 47 93 58 00 A0 C9 22 F5 39 08 00 45 00 . .G.X...".9..E.
00010: 00 28 9B F5 40 00 80 06 21 4A C0 5E DE 7B C0 5E .(..@...!J.^.{.^
00020: DE 57 09 21 05 48 0B 20 96 AC CE 66 AE 02 50 11 .W.!.H. ...f..P.
00030: 22 38 23 6C 00 00 "8#l..
Marco 5:
En este marco, no verá nada especial excepto el servidor que reconoce el FIN que se transmitió desde el cliente.
5 16.0281 BDC3 --> NTW3 TCP .A...., len: 0, seq: 1109646-1109646,
ack: 8221824, win:28672, src: 139 dst: 2337 (NBT Session) BDC3 --> NTW3
IP
TCP: .A...., len: 0, seq: 1109646-1109646, ack: 8221824, win:28672, src:
139 dst: 2337 (NBT Session)
TCP: Source Port = 0x040D
TCP: Destination Port = NETBIOS Session Service
TCP: Sequence Number = 1109646 (0x10EE8E)
TCP: Acknowledgement Number = 8221824 (0x7D7480)
TCP: Data Offset = 20 (0x14)
TCP: Reserved = 0 (0x0000)
TCP: Flags = 0x10 : .A....
TCP: ..0..... = No urgent data
TCP: ...1.... = Acknowledgement field significant
TCP: ....0... = No Push function
TCP: .....0.. = No Reset
TCP: ......0. = No Synchronize
TCP: .......0 = No Fin
TCP: Window = 28672 (0x7000)
TCP: Checksum = 0xD5A3
TCP: Urgent Pointer = 0 (0x0)
TCP: Frame Padding
00000: 00 A0 C9 22 F5 39 08 00 02 03 BA 84 08 00 45 00 ...".9........E.
00010: 00 28 D2 82 00 00 3F 06 6B BD C0 5E DE 57 C0 5E .(....?.k..^.W.^
00020: DE 7B 05 48 09 21 CE 66 AE 02 0B 20 96 AD 50 10 .{.H.!.f... ..P.
00030: 70 00 D5 A3 00 00 90 00 01 00 86 00 p...........
Marco 6:
Después de recibir el FIN desde el equipo cliente, el servidor se ACK. Aunque TCP ha establecido conexiones entre los dos equipos, las conexiones siguen siendo independientes entre sí. Por lo tanto, el servidor también debe transmitir un FIN (TCP .A...F
) al cliente.
6 17.0085 BDC3 --> NTW3 TCP .A...F, len: 0, seq: 1109646-1109646, ack:
8221824, win:28672, src: 139 dst: 2337 (NBT Session) BDC3 --> NTW3 IP
TCP: .A...F, len: 0, seq: 1109646-1109646, ack: 8221824, win:28672, src:
139 dst: 2337 (NBT Session)
TCP: Source Port = 0x0548
TCP: Destination Port = 0x0921
TCP: Sequence Number = 1109646 (0x10EE8E)
TCP: Acknowledgement Number = 8221824 (0x7D7480)
TCP: Data Offset = 20 (0x14)
TCP: Reserved = 0 (0x0000)
TCP: Flags = 0x11 : .A...F
TCP: ..0..... = No urgent data
TCP: ...1.... = Acknowledgement field significant
TCP: ....0... = No Push function
TCP: .....0.. = No Reset
TCP: ......0. = No Synchronize
TCP: .......1 = No more data from sender
TCP: Window = 28672 (0x7000)
TCP: Checksum = 0xD5A2
TCP: Urgent Pointer = 0 (0x0)
TCP: Frame Padding
00000: 00 A0 C9 22 F5 39 08 00 02 03 BA 84 08 00 45 00 ...".9........E.
00010: 00 28 D2 94 00 00 3F 06 6B AB C0 5E DE 57 C0 5E .(....?.k..^.W.^
00020: DE 7B 05 48 09 21 CE 66 AE 02 0B 20 96 AD 50 11 .{.H.!.f... ..P.
00030: 70 00 D5 A2 00 00 02 04 05 B4 86 00 p...........
Marco 7:
El cliente responde en el mismo formato que el servidor, mediante acKing the server's FIN e incrementando el número de secuencia en 1.
7 17.0085 NTW3 --> BDC3 TCP .A...., len: 0, seq: 8221824-8221824, ack:
1109647, win: 8760, src: 2337 dst: 139 (NBT Session) NTW3 --> BDC3 IP
TCP: .A...., len: 0, seq: 8221824-8221824, ack: 1109647, win: 8760, src:
2337 dst: 139 (NBT Session)
TCP: Source Port = 0x0921
TCP: Destination Port = 0x0548
TCP: Sequence Number = 8221824 (0x7D7480)
TCP: Acknowledgement Number = 1109647 (0x10EE8F)
TCP: Data Offset = 20 (0x14)
TCP: Reserved = 0 (0x0000)
TCP: Flags = 0x10 : .A....
TCP: ..0..... = No urgent data
TCP: ...1.... = Acknowledgement field significant
TCP: ....0... = No Push function
TCP: .....0.. = No Reset
TCP: ......0. = No Synchronize
TCP: .......0 = No Fin
TCP: Window = 8760 (0x2238)
TCP: Checksum = 0x236B
TCP: Urgent Pointer = 0 (0x0)
00000: 00 20 AF 47 93 58 00 A0 C9 22 F5 39 08 00 45 00 . .G.X...".9..E.
00010: 00 28 BA F5 40 00 80 06 02 4A C0 5E DE 7B C0 5E .(..@....J.^.{.^
00020: DE 57 09 21 05 48 0B 20 96 AD CE 66 AE 03 50 10 .W.!.H. ...f..P.
00030: 22 38 23 6B 00 00 "8#k..
El cliente acKing the FIN notification from the server identifica un cierre correcto de una conexión TCP.
Referencias
Obtenga RFC 793.
Las RFC se pueden obtener a través de Internet de la siguiente manera:
Las copias en papel de todas las RFC están disponibles en la NIC, ya sea individualmente o en una suscripción (para obtener más información, póngase en contacto con NIC@NIC.DDN.MIL). Las copias en línea están disponibles a través de FTP o Kermit desde NIC.DDN.MIL como rfc/rfc##.txt o rfc/rfc####.PS (#### es el número RFC sin ceros iniciales).