Modelo de servicio de TCP
El servicio de TCP se ofrece permitiendo que el origen y destino establezcan sus puntos de comunicación llamados socket. El socket ya vimos que contiene la dirección del nodo y un número de puerto. El puerto de TCP (por ejemplo el 23 para telnet) es un TSAP (Transport Service Access Point). En un mismo socket se pueden establecer múltiples conexiones, cada conexión es identificada por el par (socket1, socket2). Los puertos cuyo número sea menor a 256 se les llama puertos bien conocidos (well known ports), y son descritos en el RFC 1700.
Todas las conexiones de TCP son full-duplex y punto a punto, TCP no soporta multicasting ni broadcasting.
El flujo de datos con TCP es similar a la concepción de lo que es un archivo en UNIX: un flujo de bytes sin ninguna estructura en particular, por esto, si se envían 2 mensajes de 128 bytes, estos pueden llegar al destino como tales o como un solo mensaje de 256 bytes.
Existen varias banderas que influyen en cómo trabaja TCP. Por ejemplo, existe la manera de decirle que los datos no sean almacenados en buffers en la capa de transporte, sino que los envíe de inmediato a la aplicación, también hay forma de indicarle que los datos son urgentes.
Un segmento de TCP se conforma de un encabezado de 20 bytes. Enseguida pueden ubicarse cero o más palabras de 32 bits de opciones, seguidas de hasta 65 Kb de datos. Si recordamos que el encabezado de IP consume 20 bytes, tenemos un consumo de 40 bytes de control contra 65 Kb de datos, lo cual nos da aproximadamente un 0.06% de sobrecarga de control. Los componentes del encabezado de TCP son como sigue.
- Puerto Origen y Destino: Identifica un servicio con un número entero de 0 a 65535, por ejemplo, el correo electrónico es el puerto 25. La dirección IP añadida al puerto nos da un socket que es un TSAP (Transport Service Access Point).
- El número de secuencia: Indica en una comunicación completa, qué segmento o parte es la actual.
- El número de confirmación: Indica qué byte o segmento se espera recibir enseguida, lo cual es una confirmación del byte o fragmento anterior.
- La longitud del encabezado TCP: Indica cuántas palabras de 32 bits forman el encabezado, como son tres bits, puede haber de 0 a 7 palabras, lo cual se usa para saber en dónde comienzan los datos.
- Zona Roja: Luego hallamos 6 bits que no tienen uso, y que no se han usado por más de diez años, lo cual algunos autores atribuyen al buen diseño de TCP, pero ¿Realmente no se usa, los militares qué dicen?
- Bit URG: Indica si el apuntador de urgencia tiene significado para este segmento.
- Bit ACK: Indica si el número de confirmación tiene significado para este segmento.
- Bit PHS: Indica si este segmento debe entregarse de inmediato sin pasar a un buffer.
- Bit RST: Indica que la conexión debe reiniciarse porque se presentó algún problema mayor, por ejemplo, que un nodo se dañó y se quiere comenzar desde cero.
- Bit SYN: Indica que se quiere iniciar una conexión, el par (SYN=1,ACK=0) indica la primitiva Conexión Solicitada y el par (SYN=1, ACK=1) es Conexión Aceptada.
- Bit FIN: Indica que el emisor, y sólo el emisor ya no va a enviar más datos y que desea terminar con la conexión. Pero puede suceder que aún transitan segmentos hacia el destino, esos segmentos tendrán un número de secuencia menor al segmento que contiene el FIN=1.
- Longitud de ventana: El control de flujo en TCP se hace con una ventana deslizante de tamaño variable, y este campo indica cuántos bytes se deben enviar a partir de la posición con valor número de confirmación. Un valor de cero indica que el receptor ya no puede procesar más bytes y necesita un descanso. Cuando el emisor reciba un segmento con el mismo número de confirmación y con este campo diferente de cero, significa que puede continuar la transmisión.
- Cadena de chequeo: Permite verificar que el encabezado, los datos y un encabezado interno a la cadena de chequeo estén correctos. El algoritmo usado consiste en ir sumando cada 16 bits en complementos a unos y luego tomar el complemento a unos del resultado de la suma, lo cual da la cadena de chequeo. El receptor debe obtener un cero al sumar todo, si no, el segmento está dañado.
- Apuntador de urgencia: Es interpretado si el Bit URG=1. Entonces este apuntador contiene el número de byte a partir del número de secuancia en donde hay datos urgentes (como una interrupción), lo cual permite que ya no se procesen datos inutilmente.
- Las opciones: Sirven para que se implanten nuevas facilidades en el protocolo que no se contemplaron en el diseño original de TCP (por eso no se usa la Zona Roja). Por ejemplo, un uso común es que con las opciones se indica el tamaño máximo de segmento entre dos nodos.
Una conexión típica en TCP, donde N1=nodo 1, N2=nodo2, sería:1.
N1_SYN
- ( SEQ=x ) ->
N2
2.
N2_SYN
- ( SEQ=y, ACK=x+1 ) ->
N1
- ,
3
- .
N1_SYN
- ( SEQ=x+1, ACK=y+1 ) ->
N2Esta plática se conoce como «three way handshake». En el intercambio de mensajes de control para crear y terminar una conexión, TCP puede caer en varios estados.