Tema 6 - Par
Tema 6 - Par
Tema 6 - Par
TEMA 6
Capa de transporte
La capa de red transfiere datagramas entre dos ordenadores a través de la red utilizando como identificado-
res las direcciones IP. La capa de transporte añade la noción de puerto para distinguir entre los muchos
destinos dentro de un mismo host. No es suficiente con indicar la dirección IP del destino, además hay que
especificar la aplicación que recogerá el mensaje. Cada aplicación que esté esperando un mensaje utiliza un
número de puerto distinto; más concretamente, la aplicación está a la espera de un mensaje en un puerto
determinado (escuchando un puerto).
Pero no sólo se utilizan los puertos para la recepción de mensajes, también para el envío: todos los
mensajes que envíe un ordenador debe hacerlo a través de uno de sus puertos. El siguiente diagrama repre-
senta una transmisión entre el ordenador 194.35.133.5 y el 135.22.8.165. El primero utiliza su puerto 1256 y
el segundo, el 80.
La capa de transporte transmite mensajes entre las aplicaciones de dos ordenadores. Por ejemplo,
entre nuestro navegador de páginas web y un servidor de páginas web, o entre nuestro programa de correo
electrónico y un servidor de correo.
HTTP HTTP
(navegador (servidor web) Capa de aplicación
web)
mensaje HTTP
TCP TCP
(puerto mayor (puerto 80) Capa de transporte
de 1024)
segmento TCP
IP IP IP
(dirección IP (direcciones (dirección
privada o pú- IP públicas) IP pública está-
Capa de red
blica dinámica) tica)
datagrama IP
Ethernet Ethernet Ethernet
Capa de acceso
(dirección fí- (direcciones físi- (dirección fí-
sica) cas) sica) a la red
trama Ethernet
UTP CAT5 en Capa física
UTP CAT 5 UTP CAT 5
ambas redes secuencia de bits
Red 1 Red n
Secuencia de n
Cliente Servidor
routers
59
TEMA 6: CAPA DE TRANSPORTE Planificación y Administración de Redes
1. PUERTOS
Un ordenador puede estar conectado con distintos servidores a la vez; por ejemplo, con un servidor de noti-
cias y un servidor de correo. Para distinguir las distintas conexiones dentro de un mismo ordenador se utilizan
los puertos.
Un puerto es un número de 16 bits, por lo que existen 65.536 puertos en cada ordenador. Las aplica-
ciones utilizan estos puertos para recibir y transmitir mensajes.
Los números de puerto de las aplicaciones cliente son asignados dinámicamente y generalmente son
superiores al 1.024. Cuando una aplicación cliente quiere comunicarse con un servidor, busca un número de
puerto libre y lo utiliza.
En cambio, las aplicaciones servidoras utilizan unos números de puerto prefijados: son los llamados
puertos well-known (bien conocidos). Estos puertos están definidos en la RFC 1700 y se pueden consultar en
http://www.ietf.org/rfc/rfc1700.txt. A continuación se enumeran los puertos well-known más habituales:
Los puertos tienen una memoria intermedia (buffer) situada entre los programas de aplicación y la
red, de tal forma que las aplicaciones transmiten la información a los puertos. Aquí se va almacenando hasta
que pueda enviarse por la red. Una vez que pueda transmitirse, la información irá llegando al puerto destino
donde se irá guardando hasta que la aplicación esté preparada para recibirla.
Los dos protocolos principales de la capa de transporte son UDP y TCP. El primero ofrece una transfe-
rencia de mensajes no fiable y no orientada a conexión, y el segundo, una transferencia fiable y orientada a
conexión.
2. PROTOCOLO UDP
El protocolo UDP (User Datagram Protocol, protocolo de datagrama de usuario) proporciona una comunica-
ción muy sencilla entre las aplicaciones de dos ordenadores. Al igual que el protocolo IP, UDP es:
No orientado a conexión. No se establece una conexión previa con el otro extremo para trans-
mitir un mensaje UDP. Los mensajes se envían sin más y éstos pueden duplicarse o llegar desor-
denados al destino.
No fiable. Los mensajes UDP se pueden perder o llegar dañados.
UDP utiliza el protocolo IP para transportar sus mensajes. Como vemos, no añade ninguna mejora en
la calidad de la transferencia, aunque sí incorpora los puertos origen y destino en su formato de mensaje. Las
aplicaciones (y no el protocolo UDP) deberán programarse teniendo en cuenta que la información puede no
llegar de forma correcta.
Encabe-
Área de datos UDP
zado UDP
Encabezado del
Área de datos del datagrama IP
datagrama
Encabezado Final de la
Área de datos de la trama
de la trama trama
Puerto UDP de origen (16 bits, opcional). Número de puerto de la máquina origen.
Puerto UDP de destino (16 bits). Número de puerto de la máquina destino.
61
TEMA 6: CAPA DE TRANSPORTE Planificación y Administración de Redes
Longitud del mensaje UDP (16 bits). Especifica la longitud medida en bytes del mensaje UDP
incluyendo la cabecera. La longitud mínima es de 8 bytes.
Suma de verificación UDP (16 bits, opcional). Suma de comprobación de errores del mensaje.
Para su cálculo se utiliza una pseudo-cabecera que también incluye direcciones IP origen y des-
tino. Para conocer estos datos, el protocolo UDP debe interactuar con el protocolo IP.
Datos. Aquí viajan los datos que se envían las aplicaciones. Los mismos datos que envía la apli-
cación origen son recibidos por la aplicación destino después de atravesar toda la Red de redes.
3. PROTOCOLO TCP
El protocolo TCP (Transmission Control Protocol, protocolo de control de transmisión) está basado en IP que
no es fiable y no orientado a conexión, y sin embargo es:
Orientado a conexión. Es necesario establecer una conexión previa entre las dos máquinas an-
tes de poder transmitir ningún dato. A través de esta conexión los datos llegarían siempre a la
aplicación destino de forma ordenada y sin duplicados. Finalmente, es necesario cerrar la cone-
xión.
Fiable. La información que envía el emisor llega de forma correcta al destino.
El protocolo TCP permite una comunicación fiable entre dos aplicaciones. De esta forma, las aplicacio-
nes que lo utilicen no tienen que preocuparse de la integridad de la información: dan por hecho que todo lo
que reciben es correcto.
El flujo de datos entre una aplicación y otra viaja por un circuito virtual. Sabemos que los datagramas
IP pueden seguir rutas distintas, dependiendo del estado de los encaminadores intermedios, para llegar a un
mismo sitio. Esto significa que los datagramas IP que transportan los mensajes siguen rutas diferentes aun-
que el protocolo TCP logre la ilusión de que existe un único circuito por el que viajan todos los bytes uno
detrás de otro (algo así como una tubería entre el origen y el destino). Para que esta comunicación pueda ser
posible es necesario abrir previamente una conexión. Esta conexión garantiza que todos los datos lleguen
correctamente de forma ordenada y sin duplicados. La unidad de datos del protocolo es el byte, de tal forma
que la aplicación origen envía bytes y la aplicación destino recibe estos bytes.
Sin embargo, cada byte no se envía inmediatamente después de ser generado por la aplicación, sino
que se espera a que haya una cierta cantidad de bytes, se agrupan en su segmento y se envía el segmento
completo. Para ello son necesarias unas memorias intermedias o buffers. Cada uno de estos segmentos viaja
en el campo de datos de un datagrama IP. Si el segmento es muy grande será necesario fragmentar el data-
grama, con la consiguiente pérdida de rendimiento; y si es muy pequeño, se estarán enviando más cabeceras
que datos. Por consiguiente, es importante elegir el mayor tamaño posible que no provoque fragmentación.
El protocolo TCP envía un flujo de información no estructurado. Esto significa que los datos no tienen
ningún formato, son únicamente los bytes que una aplicación envía a otra. Ambas aplicaciones deberán po-
nerse de acuerdo para comprender la información que se están enviando.
Cada vez que se abre una conexión, se crea un canal de comunicación bidireccional en el que ambas
aplicaciones pueden enviar y recibir información, es decir, una conexión es full-dúplex.
3.1.Fiabilidad
¿Cómo es posible enviar información fiable basándose en un protocolo no fiable? Es decir, si los datagramas
que transportan los segmentos TCP se pueden perder, ¿cómo pueden llegar los datos de las aplicaciones de
forma correcta al destino?
La respuesta a esta pregunta es sencilla: cada vez que llega un mensaje se devuelve una confirmación
(acknowledgement) para que el emisor sepa que ha llegado correctamente. Si no le llega esta confirmación
pasado un cierto tiempo, el emisor reenvía el mensaje.
Veamos a continuación la manera más sencilla (aunque ineficiente) de proporcionar una comunicación
fiable. El emisor envía un dato, arranca su temporizador y espera su confirmación (ACK). Si recibe su ACK
antes de agotar el temporizador, envía el siguiente dato. Si se agota el temporizador antes de recibir el ACK,
reenvía el mensaje. Los siguientes esquemas representan este comportamiento:
62
TEMA 6: CAPA DE TRANSPORTE Planificación y Administración de Redes
Este esquema es perfectamente válido aunque muy ineficiente debido a que sólo se utiliza un sentido
de la comunicación a la vez y el canal está desaprovechando la mayor parte del tiempo. Para solucionar este
problema se utiliza un protocolo de ventana deslizante, que se resume en el siguiente esquema. Los mensa-
jes y las confirmaciones van numerados y el emisor puede enviar más de un mensaje antes de haber recibido
todas las confirmaciones anteriores.
3.2.Conexiones
Una conexión son dos pares dirección IP: puerto. No puede haber dos conexiones iguales en un mismo ins-
tante en toda la Red. Aunque bien es posible que un mismo ordenador tenga dos conexiones distintas y
simultáneas utilizando un mismo puerto. El protocolo TCP utiliza el concepto de conexión para identificar las
63
TEMA 6: CAPA DE TRANSPORTE Planificación y Administración de Redes
transmisiones. En el siguiente ejemplo se han creado tres conexiones. Las dos primeras son al mismo servidor
Web (puerto 80) y la tercera a un servidor de FTP (puerto 21).
Host 1 Host 2
194.35.133.5:1256 135.22.8.165:80
184.42.15.16:1305 135.22.8.165:80
184.42.15.16:1323 135.22.10.15:21
Para que se pueda crear una conexión, el extremo del servidor debe hacer una apertura pasiva del
puerto (escuchar su puerto y quedar a la espera de conexiones) y el cliente, una apertura activa en el puerto
del servidor (conectarse con el puerto de un determinado servidor).
Nota: El comando netstat muestra las conexiones abiertas en un ordenador, así como estadísticas de
los distintos protocolos de Internet.
0 10 20 30
0 1 2 3 4 5 6 7 8 9 0 1 2 3 3 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Puerto TCP origen Puerto TCP destino
Número de secuencia
Número de acuse de recibo
HLEN Reservado Bits código Ventana
Suma de verificación Puntero de urgencia
Opciones (si las hay) Relleno
Datos
...
Puerto fuente (16 bits). Puerto de la máquina origen. Al igual que el puerto destino es necesario
para identificar la conexión actual.
Puerto destino (16 bits). Puerto de la máquina destino.
64
TEMA 6: CAPA DE TRANSPORTE Planificación y Administración de Redes
Número de secuencia (32 bits). Indica el número de secuencia del primer byte que transporta
el segmento.
Número de acuse de recibo (32 bits). Indica el número de secuencia del siguiente byte que se
espera recibir. Con este campo se indica al otro extremo de la conexión que los bytes anteriores
se han recibido correctamente.
HLEN (4 bits). Longitud de la cabecera medida en múltiplos de 32 bits (4 bytes). El valor mínimo
de este campo es 5, que corresponde a un segmento sin datos (20 bytes).
Reservado (6 bits). Bits reservados para un posible uso futuro.
Bits de código o indicadores (6 bits). Los bits de código determinan el propósito y contenido del
segmento. A continuación se explica el significado de cada uno de estos bits (mostrados de iz-
quierda a derecha) si está a 1.
o URG. El campo Puntero de urgencia contiene información válida.
o ACK. El campo Número de acuse de recibo contiene información válida, es decir, el seg-
mento actual lleva un ACK. Observemos que un mismo segmento puede transportar los
datos de un sentido y las confirmaciones del otro sentido de la comunicación.
o PSH. La aplicación ha solicitado una operación push (enviar los datos existentes en la me-
moria temporal sin esperar a completar el segmento).
o RST. Interrupción de la conexión actual.
o SYN. Sincronización de los números de secuencia. Se utiliza al crear una conexión para
indicar al otro extremo cual va a ser el primer número de secuencia con el que va a co-
menzar a transmitir (veremos que no tiene porqué ser el cero).
o FIN. Indica al otro extremo que la aplicación ya no tiene más datos para enviar. Se utiliza
para solicitar el cierre de la conexión actual.
Ventana (16 bits). Número de bytes que el emisor del segmento está dispuesto a aceptar por
parte del destino.
Suma de verificación (24 bits). Suma de comprobación de errores del segmento actual. Para su
cálculo se utiliza una pseudo-cabecera que también incluye las direcciones IP origen y destino.
Puntero de urgencia (8 bits). Se utiliza cuando se están enviando datos urgentes que tienen
preferencia sobre todos los demás e indica el siguiente byte del campo Datos que sigue a los
datos urgentes. Esto le permite al destino identificar donde terminan los datos urgentes. Nótese
que un mismo segmento puede contener tanto datos urgentes (al principio) como normales
(después de los urgentes).
Opciones (variable). Si está presente únicamente se define una opción: el tamaño máximo de
segmento que será aceptado.
Relleno. Se utiliza para que la longitud de la cabecera sea múltiplo de 32 bits.
Datos. Información que envía la aplicación.
65
TEMA 6: CAPA DE TRANSPORTE Planificación y Administración de Redes
1. La máquina que quiere iniciar la conexión hace una apertura activa enviando al otro extremo un
mensaje que tenga el bit SYN activado. Le informa además del primer número de secuencia que
utilizará para enviar sus mensajes.
2. La máquina receptora (un servidor generalmente) recibe el segmento con el bit SYN activado y
devuelve la correspondiente confirmación. Si desea abrir la conexión, activa el bit SYN del seg-
mento e informa de su primer número de secuencia. Deja abierta la conexión por su extremo.
3. La primera máquina recibe el segmento y envía su confirmación. A partir de este momento
puede enviar datos al otro extremo. Abre la conexión por su extremo.
4. La máquina receptora recibe la confirmación y entiende que el otro extremo ha abierto ya su
conexión. A partir de este momento puede enviar ella también datos. La conexión ha quedado
abierta en los dos sentidos.
Observamos que son necesarios 3 segmentos para que ambas máquinas abran sus conexiones y sepan
que la otra también está preparada.
Números de secuencia – Se utilizan números de secuencia distintos para cada sentido de la comunica-
ción. Como hemos visto el primer número para cada sentido se acuerda al establecer la comunicación. Cada
extremo se inventa un número aleatorio y envía éste como inicio de secuencia. Observamos que los números
de secuencia no comienzan entonces en el cero. ¿Por qué se procede así? Uno de los motivos es para evitar
conflictos: supongamos que la conexión en un ordenador se interrumpe nada más empezar y se crea una
nueva. Si ambas han empezado en el cero es posible que el receptor entienda que la segunda conexión es una
continuación de la primera (si utilizan los mismos puertos).
El mecanismo de cierre es algo más complicado que el de establecimiento de conexión debido a que
las conexiones son full-duplex y es necesario cerrar cada uno de los dos sentidos de forma independiente.
1. La máquina que ya no tiene más datos que transferir, envía un segmento con el bit FIN activado
y cierra el sentido de envío. Sin embargo, el sentido de la recepción de la conexión sigue todavía
abierto.
2. La máquina receptora recibe el segmento con el bit FIN activado y devuelve la correspondiente
confirmación. Pero no cierra inmediatamente el otro sentido de la conexión sino que informa a
la aplicación de la petición de cierre. Aquí se produce un lapso de tiempo hasta que la aplicación
decide cerrar el otro sentido de la conexión.
3. La primera máquina recibe el segmento ACK.
66
TEMA 6: CAPA DE TRANSPORTE Planificación y Administración de Redes
67