Segment Structure

De Departamento de Informatica
Saltar a: navegación, buscar

TCP es un protocolo que asegura la entrega de datos fiables y ordenados, para lo cual incluye mecanismos de detección de errores, retransmisiones, números de secuencia en la cabecera, etc. Para establecer la conexión entre dos hosts, estos tienen que enviarse segmentos preliminares, de tal forma que definan parámetros de transferencia de datos. Una vez que se establece la conexión, se puede iniciar la transferencia de datos, para lo cual TCP transmite esos datos en segmentos.

Contenido

Estructura del segmento TCP

Estructura del segmento TCP
El segmento TCP, como la mayoría de los protocolos construidos bajo el modelo de referencia OSI, consta de campos de cabecera (que contienen los campos necesarios para el funcionamiento del protocolo) y un campo de datos (que contiene un fragmento de los datos).

Campos de cabecera

La cabecera de un segmento TCP, contiene los siguientes campos:

  • Números de puerto de origen y de destino: Se utilizan para multiplexar y demultiplexar los datos de y para las aplicaciones de la capa superior. Estos identifican los puertos que se van a utilizar en cada host para comunicar las aplicaciones que intercambian datos.
  • Suma de comprobación: Proporciona un mecanismo de detección de errores, los cuales pueden ser debido a errores de transmisión no detectados, a fallos en los equipos (por ejemplo en los routers) o a problemas en el software (por ejemplo reensamblado incorrecto de fragmentos). Se utiliza para determinar si los bits contenidos en el segmento TCP han sido alterados según se desplazaba desde el origen hasta el destino. El algoritmo utilizado consiste en la suma de todos los campos de 16 bits usando complemento a 1 y luego calcula el complemento a 1 del resultado. En este caso, la suma de comprobación, se hace sobre todo el segmento, no solo sobre la información de la cabecera. Para este cálculo se antepone al segmento una pseudocabecera que incluye la dirección IP de origen y destino y la longitud del segmento, de esta forma se comprueba que no ha habido errores en la transmisión a nivel IP (detecta por ejemplo cuando un segmento se entregó a un host equivocado).
  • Número de secuencia (de 32 bits) y Número de reconocimiento (de 32 bits): Son utilizados por el emisor y el receptor de TCP para implementar un servicio de transferencia de datos fiable. Este indica el número de secuencia que corresponde en la conexión al primer byte que se envía en el campo de datos.
  • Tamaño de ventana (de 16 bits): Se utiliza para el control de flujo, indicando el número de bytes que un receptor está dispuesto a aceptar.
  • Longitud de cabecera (de 4 bits): Especifica la longitud de la cabecera TCP en palabras de 32 bits. La cabecera TCP puede tener una longitud variable a causa del campo opciones de TCP (normalmente, este campo está vacío, por lo que la longitud de una cabecera TCP típica es de 20 bytes).
  • Opciones TCP: Es opcional y de longitud variable. Se utiliza cuando un emisor y un receptor negocian el tamaño máximo de segmento (MMS) o como un factor de escala de la ventana en las redes de alta velocidad. También se define una opción de marca temporal. Consulte los documentos RFC 854 y RFC 1323 para conocer detalles adicionales.
  • Campo indicador (6 bits): El bit ACK se utiliza para indicar que el valor transportado en el campo de reconocimiento es válido, es decir, el segmento contiene un reconocimiento para un segmento que ha sido recibido correctamente. Los bits RST, SYN y FIN se utilizan para el establecimiento y cierre de conexiones. El bit URG indica si el segmento tiene datos urgentes y el bit PSH indica que el segmento tiene datos que deben ser enviados rápidamente.
  • Puntero de datos urgente: Indica el final de éstos. TCP no marca el principio, quedando a responsabilidad de la aplicación averiguarlo.

Campo de datos

El campo de datos contiene un fragmento de los datos de la aplicación, el cual está limitado por el tamaño máximo de segmento (MSS, Maximum Segment Size). Cuando TCP envía un archivo grande, como por ejemplo una imagen como parte de una página web, normalmente divide el archivo en fragmentos de tamaño MMS (a excepción del último, que normalmente será más pequeño que MMS).

Número de secuencia y números de reconocimiento

Estos son los campos más importantes dentro de un segmento TCP y se relacionan con la transferencia de datos fiable. Para explicar esto supongamos una conexión entre un host A y un host B. EL host A envía datos a B en segmentos de 1000 bytes. Si tenemos un archivo de 10000 bytes, TCP construye 10 segmentos de 1000 bytes numerando cada byte del segmento del 0 hasta el tamaño del archivo: el primer segmento tendrá los bytes del 0 al 999, el segundo del 1000 al 1999, en tercero del 2000 al 2999, etc. A partir de esto, TCP crea el número de secuencia considerando el primer byte numerado de cada segmento, es decir, 0 1000 2000 3000 4000. Cada uno de estos números es insertado en el segmento TCP que corresponde.

Ahora bien, para explicar el número de reconocimiento debemos considerar que TCP es full-duplex, es decir, A puede enviar datos a B al mismo tiempo que recibe datos de B. Supongamos que A ha recibido un segmento del host B numerado del 0 al 699, por lo que el siguiente segmento a recibir debiese ser el que comience por el byte 700, por lo tanto, en el segmento que A envie a B incluirá en su número de reconocimiento el 700. Con esto podemos decir que el número de reconocimiento es el número de secuencia del siguiente byte que un host está esperando recibir del otro.

En los ejemplos hemos supuesto que las secuencias comienzan en 0, pero en la realidad TCP escoge un número aleatorio para la secuencia inicial.

Telnet: caso de estudio de los números de secuencia y de reconocimiento

Números de secuencia y de reconocimiento en una aplicación Telnet simple sobre TCP
Es el protocolo de red que nos permite manejar otra máquina remotamente. Actualmente el uso de Telnet ha sido limitado por el uso de SSH, debido a que Telnet envía datos no cifrados, lo que hace que sea vulnerable a ataques.

Para explicar su ejecución bajo TCP, supongamos que A inicia sesión Telnet con B. Como A inicia la sesión es etiquetado como cliente y B como servidor. Su sistema consiste en lo siguiente: supongamos que A escribe una letra del abecedario cualquiera, el segmento TCP, tanto en cliente como en servidor, inicia el segmento con un número aleatorio, para el caso 3 en el cliente, y con un número 12 en el servidor. Por lo tanto, el primer segmento enviado por A tendrá en el número de secuencia el número del primer byte del segmento enviando (en este caso el tamaño de la letra es de 1 byte, por lo que el segmento tiene ese tamaño), es decir el 3, y en el número de reconocimiento el byte que espera del servidor, en este caso 12.

El segundo segmento corresponde al enviado por el servidor, el cual contiene en en su número de secuencia el 12 y en el número de reconocimiento el siguiente byte que espera, en este caso el 4. Esta respuesta sirve, en una primera instancia, para informar al cliente que ha recibido todo correctamente hasta el byte 3 y está esperando el 4, y también para garantizar que los caracteres enviados por el cliente han sido recibidos y procesados por el sitio remoto. Esto último lo realiza retornando la misma letra del abecedario que A le había enviado.

El tercer y último segmento contiene el número de secuencia 4 y como número de reconocimiento el 13 y sirve solo para confirmar que los ha recibido los datos del servidor. Aunque este segmento no tenga datos, de igual forma se le asigna un número de secuencia, puesto que este campo no puede estar vacío.

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas