Académique Documents
Professionnel Documents
Culture Documents
1. INTRODUCCIÓN
La función principal del nivel de transporte es aceptar los datos de las capas superiores,
dividirlos si es necesario, en unidades más pequeñas y pasarlos al nivel de red
garantizando que lleguen a su destino de una forma económica y segura,
independientemente la red o redes físicas que se encuentren en uso.
A diferencia de lo que ocurre en la capa red, donde solo existe el protocolo IP para llevar
a cabo las funcionalidades de direccionamiento y encaminamiento, para la capa de
transporte se especifican dos alternativas: UDP y TCP. El primer protocolo se
caracteriza por ofrecer, al igual que IP, un servicio no fiable y no orientado a conexión.
Por el contrario, TCP ofrece un servicio orientado a conexión que incluye el control de
flujo, control de errores y control de congestión.
El protocolo UDP se encapsula sobre IP, tomando el campo “protocolo” del datagrama IP el valor
17. UDP
utiliza la funcionalidad ‘best effort’ (intenta lo mejor pero no lo asegura). RFC es un manual para
saber cómo funcionan las reglas de comunicación de UDP.
Sus principales características son:
Servicio no orientado a conexión
Servicio no fiable
No hay garantías de entrega ordenada: esto implica que si has basado tu programa en
UDP, hay que programar que se ordenen los paquetes. Se programa en la capa de
aplicación con sockets.
No hay control de congestión: entrega tan rápida como se pueda.
Hace comprobaciones de errores, luego si un paquete está mal, lo desecha.
Multiplexación/demultiplexación: transporta las TDPU al proceso correcto
Suele usarse para aplicaciones multimedia, ya que son tolerantes a fallos y sensibles a retardos.
Porigen: campo de 16 bits que especifica el puerto del proceso que envía.
Pdestino: campo de 16 bits que identifica el puerto del proceso destino.
Longitud UDP: 16 bits que indican el número de octetos de que consta el datagrama
UDP completo.
Comprobación (checksum): campo redundante que contiene la suma de comprobación
usual, es decir, el complemento a uno de la suma en complemento a uno de todo el
datagrama y de una pseudo-cabecera que contiene los siguientes cuatro campos:
dirección IP origen, dirección IP destino, protocolo del paquete IP y campo longitudUDP
del datagrama.
El campo de puerto tiene una longitud de 16 bits, lo que permite un rango que va desde 0 a
65535, pero no todos estos puertos son de libre uso:
- El puerto 0 es un puerto reservado, pero es un puerto permitido si el emisor no permite
respuestas del receptor.
- Los puertos 1 a 1023 reciben el nombre de Puertos bien conocidos, y en sistemas Unix,
para enlazar con ellos, es necesario tener acceso como superusuario.
- Los puertos 1024 a 49151 son los llamados puertos registrados, y son los de libre
utilización.
- Los puertos del 491552 al 65535 son puertos efímeros, de tipo temporal, y se utilizan
sobre todo por los clientes al conectar con el servidor.
A diferencia de UDP, TCP implementa todas las funciones necesarias para llevar a cabo un
control de transmisión extremo a extremo entre dos estaciones finales.
SEGMENTO TCP
La TPDU de TCP denominada “segmento TCP” es más compleja que la cabecera de UDP.
Tiene más metadatos (los necesitamos para mantener la comunicación entre origen y
destino). Se definen los siguientes campos:
A. MULTIPLEXACIÓN Y DEMULTIPLEXACIÓN
B. CONTROL DE CONEXIÓN
TCP ofrece un servicio fiable orientado a conexión, es decir, previo al intercambio de los datos,
entre las dos aplicaciones finales se establece una conexión y una vez finalizada la transmisión
se procederá al cierre de la conexión.
Para establecer una conexión TCP es necesario acoplar las entidades origen y destino mediante
la definición de un estado común a ambas. La conexión puede explicarse como una “tubería”
(full-duplex) establecida entre las dos aplicaciones a través de la cual todos los segmentos que
entran por uno de los extremos salen por el otro. Para establecer dicha conexión es necesario
una fase previa al intercambio de datos denominada establecimiento de la conexión donde se
define el estado común de ambas entidades y mediante la que se reservan recursos del sistema.
Tras el intercambio, debe haber una fase de cierre de conexión, en la que se liberan los recursos
reservados del sistema, tanto en el emisor como en el receptor. Ambos procedimientos se llevan
a cabo usando los bits R, S y F del campo control definidos en el segmento TCP.
NÚMEROS DE SECUENCIA
Los campos del segmento TCP involucrados en el control de errores son los siguientes:
• Campo secuencia: Offset (en bytes) dentro del mensaje que indica la posición que ocupa el
primer octeto del campo datos. Permite la entrega ordenada.
• Campo de “acuse” de recibo: indica el número de byte que se espera recibir en el destino.
Dado su carácter acumulativo, recibe un determinado valor en el campo acuse que confirma
todos los bytes pendientes de confirmación hasta justo el anterior (Si A=1, el campo acuse debe
ser tenido en cuenta por el receptor, mientras que si A=0 no).
• Bit A (ACK) del campo de control: este bit indica la validez o no de la confirmación de acuse.
• Campo comprobación: checksum (se calcula igual que en UDP) de todo el segmento y eso
de pseudo-cabecera. Permite al receptor determinar si el segmento se ha recibido correctamente
o no.
ESCENARIOS DE RETRANSMISIÓN
1. Pérdida de ack:
Host A le quiere mandar un mensaje a Host B. En un determinado momento, Host A manda un
segmento con el campo de secuencia a 92 (esto significa que el primer byte de este segmento
tiene el número de secuencia 92). Se manda el 92 con 8 bytes de datos, es decir, se está
mandando hasta el byte 99. El host B le responde con un ACK = 100, que es el siguiente que
espera. En este caso, el ACK se pierde. El host A no puede eliminar los paquetes que ha enviado
de su buffer hasta que reciba el ACK. Como se ha perdido el ACK, el temporizador que tiene el
host A se activa y lo tiene que volver a enviar. Como el host B ya había recibido el paquete que
le ha vuelto a mandar el host A, tira el segmento a la basura porque ya lo tenía y, simplemente,
vuelve a enviar el ACK = 100.
2. Timeout prematuro y ACK acumulativo.
El host A manda dos segmentos a la vez, el 92 con 8 bytes (hasta el 99), y el segundo segmento
con número de secuencia 100 con 20 bytes de datos (hasta el 119). En cuanto le llega el primer
segmento al host B, manda un ACK = 100 (correspondiente al primer paquete) y cuando recibe
el segundo segmento, manda otro ACK = 120 (correspondiente al segundo paquete). El ACK =
100 se retrasa y se le expira el time out, entonces el host A vuelve a enviar el segmento 92 con
8 bytes y el host B, como ya lo había recibido y también ha recibido el 100 con 20 bytes de datos,
le manda un ACK = 120.
En la siguiente tabla se identifican diferentes eventos que pueden ocurrir cuando un receptor
recibe paquetes (ordenados o no según su número de secuencia), detallándose cómo el receptor
debe devolver las confirmaciones:
• Tiene que ser mayor que el tiempo de ida y vuelta (RTT, Round Trip Time). No puede ser
menor de lo que se tarda en enviar un paquete y recibirlo.
• Si es demasiado pequeño, se producen timeouts prematuros y por tanto, se desperdiciarían
recursos en la red.
• Si es demasiado grande, reacción lenta a pérdida de segmentos (el emisor tardaría mucho
tiempo en darse cuenta de posibles problemas).
La mejor solución es que sea adaptable. El método para a estimación del timeout en TCP:
Hay que tener en cuenta que cuando ventana ofertada = 0 por parte del receptor, el emisor se
bloqueará. Si la aplicación receptora consume más segmentos se genera un nuevo segmento
ACK anunciando la nueva ventana ofertada con tamaño >0.
Posible problema: síndrome de la ventana tonta. Este problema se da cuando el emisor,
receptor o ambos son muy lentos (se utilizan segmentos muy pequeños).
Posible mejora: método de la ventana optimista que consiste en el envío por parte del emisor
de una cantidad de datos mayor a la realmente ofertada por el receptor, es decir,
Los segmentos que son urgentes (flag U), el receptor los manda a capa de aplicación del tirón,
no espera a que la capa de aplicación los extraiga. Al igual que los segmentos que tengan el flag
P activado (push).
D. CONTROL DE CONGESTIÓN
Por medio del tamaño de ventana el receptor puede dosificar al emisor en función del buffer
disponible: control de flujo.
Pero puede que el receptor tenga espacio de sobra, pero la red esta congestionada. En este
caso el TCP debe regularse para no inyectar demasiado tráfico, a pesar de que la ventana
disponible sea muy grande: control de congestión.
Para controlar la velocidad, TCP adopta una aproximación de prueba y error que consiste en
aumentar la ventana_de_congestión (implica aumentar la tasa de transmisión) mientras no se
produzca congestión (esta situación se identifica al producirse un timeout).
La ventana_de_congestión se adapta dependiendo la zona en la que se encuentre (inicio lento,
prevención de congestión, decremento multiplicativo).
4. EXTENSIONES TCP
TCP se define como múltiples “sabores”, cada uno de los cuales no afectan a la interoperabilidad
entre los extremos.
En el RFC 1323 se recogen algunas mejoras a TCP que persiguen aumentar la eficiencia de este
protocolo cuando se implementa sobre redes de mayor velocidad a las existentes cuando fue
diseñado:
• Ventana escalada: Opcion TCP → factor de escala en segmentos SYN de inicio de conexión
(hasta 214 × 216 = 1GB autorizados). Frente a los 65.535 bytes que un receptor TCP autoriza a
transmitir a un emisor sin esperar confirmación.
• Estimación RTT: Opción TCP de cálculo del RTT para cada segmento enviado mediante un
sello de tiempo, de forma que cuando se genera un segmento TCP se incluye dicha opción, que
será devuelta en un paquete ACK.
• PAWS (“Protect Against Wrapped Sequence numbers”): Protección contra números de
secuencia ya recibidos, que hace uso del sello de tiempo de TCP para el rechazo de segmentos
duplicados que podrían corromper una conexión TCP abierta.
• SACK: Confirmaciones selectivas. Dice que paquetes reenviar ante la pérdida aislada de un
segmento.