Ejemplo: si la VC es de 10 MSS [1] se podrán enviar 10 segmentos de MSS octetos. Cuando se reciba el ACK que confirma el décimo segmento, la VC pasará a ser de 11.}}
Por lo tanto, el VC se incrementa en cada vez que se recibe el ACK de un segmento [1-1].
El modo de Evitación de la Congestión finaliza cuando se cumple cualquiera de estos dos eventos:
La cabecera TCP es de longitud {{variable}}, pero siempre un múltiplo de {{32 bits}}.
Existe una parte obligatoria y una parte opcional.
El campo Data Offset de la cabecera TCP indica el número de palabras de 32 bits que contiene la cabecera de un segmento determinado.
El campo Data Offset tiene 4 bits, por lo que el número máximo de palabras de 32 bits en la cabecera es de 15. Como la parte obligatoria de la cabecera TCP ocupa 5 palabras de 32 bits, quedan 10 para la parte opcional.
Indica el {{número el identificador del primer octeto}} que transporta el segmento con respecto al flujo total de octetos en una dirección de la comunicación.
En general, cliente y servidor utilizan números de secuencia diferentes.
El primer número de secuencia se elige de manera {{aleatoria}} por cliente y servidor de manera independiente durante La conexión TCP.
El establecimiento de la conexión TCP se realiza en tres fases
- Intercambio de tres segmentos especiales.
- Los dos primeros segmentos ({{SYN y SYN+ACK}}) no portan datos de la Capa de Aplicación. Estos dos segmentos incluyen cabeceras opcionales que se utilizan para negociar el MSS.
- El tercer segmento ({{ACK}}) puede portar datos de la Capa de Aplicación
- El establecimiento de la conexión TCP finaliza con el establecimiento de {{las variables de estado2 y capacidades en buffers[1]}} que se utilizarán en la fase de envío de datos.
Una vez se ha terminado el intercambio de datos, cualquiera de las dos entidades (digamos, la A) inicia el cierre de la conexión TCP enviando un segmento con los flags FIN y ACK a 1. La otra entidad debe enviar un segmento de confirmación con el ACK a 1. Posteriormente, la entidad B debe enviar otro segmento con los flags FIN y ACK a 1, a lo que responde A con un segmento con el flag ACK a 1.
Mecanismo empleado en TCP para {{detectar posibles errores durante la transmisión}}.
El emisor calcula el checksum, que es función del contenido del segmento TCP a transmitir y de la pseudo-cabecera IP[1], para luego incluirlo en el campo correspondiente de la cabecera TCP. El receptor comprueba si el valor incluido en el campo checksum coincide con sus propios cálculos de dicho valor.
la pseudo-cabecera IP incluye las direcciones IP origen y destino, la longitud del segmento TCP y el protocolo de transporte, así como una secuencia fija de ceros (ver Pseudo-Cabecera IP). Esta pseudo-cabecera sólo se utiliza para calcular el checksum, pero no se transmite.↩︎
{{Cantidad máxima de datos que puede transportar un segmento TCP}}
¿De qué depende?
{{Depende de la MTU[1] y del tamaño de las cabeceras de nivel de red y de transporte: MSS = MTU - cabecera_red - cabecera_transporte}}
¿Cuándo se acuerda la MSS de la conexión TCP?
{{En la fase de establecimiento de conexión, ya que el cliente envía su MSS, luego el servidor contesta con su propio MSS y finalmente ambas entidades calculan el MSS de la conexión como el valor mínimo anunciado por ambos extremos. Cada entidad envía sus respectivos MSS en un campo opcional de la cabecera TCP sólo en los dos primeros segmentos (SYN y SYN+ACK)}}
La entidad que envía un segmento TCP incluye en este campo {{el número de octetos que puede almacenar en su memoria o Buffer del receptor en TCP[1].}}
en toda conexión TCP, ambas entidades reservan una cierta cantidad de memoria para almacenar temporalmente los segmentos que recibe de la entidad contraria (ver Control de flujo en TCP).↩︎
Es el {{espacio de memoria reservado en cada conexión TCP para almacenar provisionalmente los segmentos recibidos de la entidad TCP par, hasta que puedan ser procesados.}}
Una vez procesados, los datos pueden ser leídos por la aplicación y eliminados del búffer del receptor.
Esto significa que {{ambas entidades pueden enviar datos a su entidad par[1]}}
En TCP hay flujo de octetos, no de mensajes.
Para TCP lo que recibe del nivel de aplicación es una cadena de octetos, y por lo tanto en el receptor el nivel de TCP no tiene la noción de mensajes.
TCP es un protocolo punto a punto (sólo hay dos entidades conectadas)
No permite Multicast (un equipo envía a un grupo de equipos) ni Broadcast (un equipo envía al resto de equipos de la red)
Se necesita establecer una conexión TCP antes de enviar segmentos con datos, para negociar los parámetros de la conexión (ver Establecimiento de la conexión en TCP)
Una vez la fase de establecimiento de la conexión TCP termina:
El proceso Cliente pasa datos a la capa TCP utilizando el {{Socket TCP}} creado.
TCP realiza Segmentación si fuese necesario, añade Cabecera TCP a dichos segmentos y genera PDUs
Una vez se termina el intercambio de datos se debe cerrar la conexión TCP (ver Cierre de la conexión TCP)
NO descarta segmentos recibidos fuera de secuencia. Los asentimientos son acumulativos.
Ante la llegada de un segmento de la entidad contraria:
Identificador
Evento
Acción del Receptor TCP
CR1
Establecimiento o cierre de la conexión TCP
Se envía ACK de forma inmediata
CR2
Hay datos que enviar a la entidad contraria
Se envía ACK de forma inmediata
CR3
Se recibe segmento con Nº de secuencia esperado. Nºs de secuencia anteriores ya reconocidos. No hay otro segmento en orden esperando transmisión de un ACK.
ACK retardado*. Se espera 500 mseg la llegada de otro segmento en secuencia. Si no llega, se envía ACK.
CR4
Se recibe segmento con Nº de secuencia esperado. Hay otro segmento en orden esperando transmisión de ACK.
ACK único acumulativo. De inmediato se reconocen ambos segmentos ordenados.
CR5
Se recibe segmento fuera de secuencia, con Nº mayor que el esperado. Se detecta un “hueco”.
ACK duplicado. Se envía de inmediato ACK con Nº de secuencia del siguiente octeto esperado (límite inferior del “hueco”).
CR6
Se recibe segmento que completa parcial o totalmente “hueco” en los datos recibidos.
ACK inmediato. Se envía ACK de inmediato si el segmento comienza en el límite inferior del “hueco”. De lo contrario, ACK duplicado de inmediato.
Si el AN > BaseEmision esto significa que {{el ACK confirma uno o más segmentos que estaban pendientes de ser confirmados}}. Por lo tanto:
Se actualiza el valor de la variable BaseEmision al número de secuencia más antiguo esperando por ser asentido.
Si quedan segmentos por confirmar, se actualiza el valor del temporizador (Temporizadores en TCP - Cálculo) y {{se inicia un nuevo temporizador}} asociado al segmento {{más antiguo pendiente de ser confirmado}}.
En TCP, los reconocimientos son acumulativos. Esto quiere decir que si se recibe un segmento cuyo campo Número de asentimiento de TCP es , esto indica al receptor de dicho segmento que todos los segmentos enviados hasta el octeto han llegado correctamente a la otra entidad par.
Ante el vencimiento de un temporizador o al entrar en el modo de Recuperación Rápida, el emisor debe reenviar el segmento más antiguo pendiente de confirmación.
Al vencer un temporizador, TCP retransmite {{el segmento asociado a dicho temporizador}} que, siguiendo la recomendación del RFC 2988, será el {{más antiguo pendiente de ser confirmado}}.
Se redefine el tiempo del temporizador como {{el doble del valor del temporizador anterior}}.
Se inicia un nuevo temporizador asociado al segmento reenviado.
Cuando un temporizador activo vence, se recalcula el timeout como el doble del timeout anterior.
cuando se envía un segmento, la entidad TCP emisora inicia un cronómetro, que se detiene cuando se recibe un asentimiento que confirma dicho segmento. Así se pueden obtener muestras de los valores del para diferentes segmentos.↩︎
Ejemplos utilizando la figura 1 que se puede ver más abajo.
Cuando se transmite el segmento con SN=1 se activa un temporizador asociado a dicho segmento. Cuando se recibe el segmento con AN=11, que confirma la recepción del segmento transmitido anteriormente, se desactiva el temporizador del segmento con SN=1.
Cuando se transmite el segmento con SN=11 se activa un temporizador, asociado a dicho segmento, ya que no existe ningún temporizador activo. Al transmitirse el segmento con SN=21, no se activa ningún temporizador para dicho segmento [1]. Cuando se recibe el asentimiento que confirma los dos segmentos enviados anteriormente, se desactiva el temporizador activo, asociado al SN=11.
Figura 1:
Ejemplos utilizando la figura 2 que se puede ver más abajo.
Cuando se transmite el segmento con SN=31, se activa un temporizador asociado a dicho segmento. Los segmentos con SN 41, 51 y 61 no generan nuevos temporizadores, ya que en el momento de su transmisión ya hay un temporizador activo.
Al recibir el AN=51 en el host A, se detecta que se confirma el segmento al que está asociado el temporizador activo. Por lo tanto, se desactiva el temporizador activo. Además, y como los segmentos SN=51 y SN=61 están aún pendiente de confirmación, se activa un nuevo temporizador asociado al más antiguo de ellos, es decir, para el SN=51.
Cuando se recibe el AN=71, se desactiva el temporizador activo, ya que se confirma el segmento asociado a dicho temporizador. Como no hay ningún segmento pendiente de ser confirmado, no se activa ningún temporizador.
Al enviar el segmento con SN=71, se activa un temporizador para dicho segmento. Como dicho segmento se pierde, el host B al recibir el SN=81 (fuera de secuencia) envía un ACK duplicado con AN=71.
Ya que un sólo ACK duplicado no genera ningún evento, el temporizador asociado al segmento SN=71 vence, por lo que se envía otra vez el segmento SN=71. El host B envía un ACK con AN=91, que al llegar al host A, desactiva el temporizador activo.
Figura 2:
se asume que sólo puede haber un temporizador activo, como se recomienda en el RFC 2988 Temporizadores en TCP↩︎
Ante la pérdida de segmentos, es posible que un emisor no reciba los asentimientos del receptor. Para ello se utilizan los Temporizadores en TCP. Cuando un temporizador vence, se inicia la Retransmisión en TCP.