Formato de la cabecera de segmentos TCP
Estracto del RFC 793 en español, a modo de resumen y como información útil para la sección de Apuntes de redes, recojo en este post la documentación contenida en el RFC 793 referente a la estructura y formato de la cabecera de paquetes TCP.
Nota: Se trata de una copia exacta de la sección 3.1 del RFC 793 publicado por el grupo de traducción de RFC al español. Aprovecho la ocasión para darles las gracias por su trabajo.
Los segmentos de TCP se envían como datagramas de internet. La cabecera del protocolo de internet transporta varios campos de información, entre los que se incluyen las direcciones de los ‘host’ de origen y de destino. Una cabecera de TCP sigue a la cabecera de internet, aportando información específica del protocolo de TCP. Esta división permite la existencia de otros protocolos de la capa de ‘host’ distintos de TCP.
Formato de la cabecera de TCP
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Puerto de origen | Puerto de destino |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Número de secuencia |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Número de acuse de recibo |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Posic | |U|A|P|R|S|F| |
| de los| Reservado |R|C|S|S|Y|I| Ventana |
| datos | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Suma de control | Puntero urgente |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Opciones | Relleno |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Datos |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Formato de la cabecera de TCP
Nótese que cada marca horizontal representa un bit.
Figura 3.
Puerto de origen: 16 bits
El número del puerto de origen.
Puerto de destino: 16 bits
El número del puerto de destino.
Número de secuencia: 32 bits
El número de secuencia del primer octeto de datos de este segmento (excepto cuando el indicador SYN esté puesto a uno). Si SYN está puesto a uno es el número de secuencia original (ISN: 'initial sequence number') y, entonces, el primer octeto de datos es ISN+1.
Número de acuse de recibo: 32 bits
Si el bit de control ACK está puesto a uno, este campo contiene el valor del siguiente número de secuencia que el emisor del segmento espera recibir. Una vez que una conexión queda establecida, este número se envía siempre.
Posición de los datos: 4 bits
El número de palabras de 32 bits que ocupa la cabecera de TCP. Este número indica dónde comienzan los datos. La cabecera de TCP (incluso una que lleve opciones) es siempre un número entero de palabras de 32 bits.
Reservado: 6 bits
Reservado para uso futuro. Debe valer 0.
Bits de control: 6 bits (de izquierda a derecha):
URG: Hace significativo el campo "Puntero urgente"
ACK: Hace significativo el campo "Número de acuse de recibo"
PSH: Función de "Entregar datos inmediatamente" ('push')
RST: Reiniciar ('Reset') la conexión
SYN: Sincronizar ('Synchronize') los números de secuencia
FIN: Últimos datos del emisor
Ventana: 16 bits
El número de octetos de datos, a contar a partir del número indicado en el campo de "Número de acuse de recibo", que el emisor de este segmento está dispuesto a aceptar.
Suma de control: 16 bits
El campo "Suma de control" es el complemento a uno de 16 bits de la suma de los complementos a uno de todas las palabras de 16 bits de la cabecera y del texto. Si un segmento contiene un número impar de octetos de cabecera y texto, el último octeto se rellena con ceros a la derecha para formar una palabra de 16 bits con el propósito de calcular la suma de control. En el cálculo de la suma de control, el propio campo suma de control se considera formado por ceros.
La suma de control también incluye una pseudocabecera de 96 bits prefijada imaginariamente a la cabecera TCP. Esta pseudocabecera contiene la dirección de origen, la dirección de destino, el protocolo, y la longitud del segmento de TCP. Esto proporciona una protección ante segmentos mal encaminados. Esta información es transportada por el protocolo de internet y es transferida a través de la interfaz TCP/Red en los argumentos o en los resultados de las llamadas de TCP a IP.
+--------+--------+--------+--------+
| Dirección de origen |
+--------+--------+--------+--------+
| Dirección de destino |
+--------+--------+--------+--------+
| cero | PTCL | Longitud TCP |
+--------+--------+--------+--------+
La "longitud TCP" consiste en la suma de la longitud de la cabecera de TCP más la de los datos en octetos (esto no es una cantidad transmitida explícitamente, sino que ha de calcularse), y no incluye los 12 octetos de la pseudo cabecera.
Puntero urgente: 16 bits.
Este campo indica el valor actual del puntero urgente como un desplazamiento positivo desde el número de secuencia de este segmento. El puntero urgente apunta al número de secuencia del octeto al que seguirán los datos urgentes. Este campo es interpretado únicamente si el bit de control URG está establecido a uno.
Opciones: variable
Los campos de opciones pueden ocupar un cierto espacio al final de la cabecera de TCP, pero siempre de una longitud múltiplo de 8 bits.
En el cálculo de la suma de control, se incluyen todas las opciones.
Una opción puede empezar en cualquier posición múltiplo de ocho.
Existen dos posibilidades para el formato de una opción:
Caso 1: Un octeto único con el tipo de opción.
Caso 2: Un octeto con el tipo de opción, un octeto con la longitud de la opción, y los octetos con los datos propiamente dichos de la opción.
La longitud de la opción tiene en cuenta tanto el octeto con el tipo de opción como el propio octeto de longitud así como los octetos con los datos de la opción.
Nótese que la lista de opciones puede ser más corta que lo que el campo "Posición de los datos" podría implicar. El contenido de la cabecera más allá de la opción "Fin de la lista de opciones" debe ser un relleno de cabecera (es decir, ceros).
Un módulo de TCP debe implementar todas las opciones.
Las opciones definidas en la actualidad incluyen (donde el tipo se indica en octal):
Tipo Longitud Significado
---- -------- -----------
0 - Fin de la lista de opciones.
1 - Sin operación.
2 4 Tamaño máximo de segmento.
Definiciones de opciones específicas
Fin de la lista de opciones
+--------+
|00000000|
+--------+
Tipo=0
Este código de opción indica el final de la lista de opciones.
Éste podría no coincidir con el final de la cabecera de TCP deducida a partir del campo "Posición de los datos".
Esta opción se utiliza al final de todas las opciones, no al final de cada opción, y sólo es necesario utilizarla si el final de las opciones restantes no coincide con el final de la cabecera de TCP.
Sin operación
+--------+ |00000001| +--------+
Tipo=1
Este código de opción puede ser utilizado entre opciones, por ejemplo, para alinear el comienzo de una opción subsiguiente con el comienzo de una palabra. No se garantiza que los emisores vayan a utilizar esta opción, por lo que los receptores deben estar preparados para procesar todas las opciones, incluso si no comienzan al principio de una palabra.
Máximo tamaño de segmento
+--------+--------+---------+--------+
|00000010|00000100| max tam seg |
+--------+--------+---------+--------+
Tipo=2 Longitud=4
Datos de la opción "Máximo tamaño de segmento": 16 bits
Si esta opción está presente, entonces indica el tamaño máximo de segmento que puede recibir el módulo de TCP que envía este segmento. Este campo debe enviarse únicamente en la petición inicial de conexión (i.e., en los segmentos con el bit de control SYN puesto a uno). Si no se utiliza esta opción, se permite cualquier tamaño de segmento.
Relleno: variable
El relleno de la cabecera de TCP se utiliza para asegurar que la cabecera de TCP finaliza, y que los datos comienzan, en una posición múltiplo de 32 bits. El relleno está compuesto de ceros.
Fuentes:
http://www.rfc-es.org/rfc/rfc0793-es.txt (pags. 13-17)
Fuente de la imagen del post













Pingback: Nueva sección de apuntes de redes | openredes - Networking Open Source