Las redes de datos e Internet brindan soporte a la red humana al
proporcionar la comunicación continua y confiable entre las personas,
tanto de manera local como alrededor del mundo. En un único dispositivo,
las personas pueden utilizar varios servicios como correo electrónico,
la Web y la mensajería instantánea para enviar mensajes o recuperar
información. Las aplicaciones como clientes de correo electrónico,
exploradores web y clientes de mensajería instantánea permiten a la
gente utilizar las computadoras y las redes para enviar mensajes y
encontrar información.
Los datos de cada una de estas aplicaciones se empaqueta, se transporta y
se entrega al demonio del servidor adecuado o a la aplicación en el
dispositivo de destino. Los procesos descritos en la capa de Transporte
del modelo OSI aceptan los datos de la capa de Aplicación y los preparan
para el direccionamiento en la capa de red. La capa de Transporte es
responsable de la transferencia de extremo a extremo general de los
datos de aplicación.
FUNCIONES DE LA CAPA DE TRANSPORTE
4.1.1 Propósito de la capa de transporte
La capa de transporte permite la segmentación de datos y brinda el
control necesario para reensamblar las partes dentro de los distintos
streams de comunicación. Las responsabilidades principales que debe
cumplir son:
Rastreo de comunicación individual entre aplicaciones en los hosts de origen y destino
Segmentación de datos y manejo de cada parte
Reensamble de segmentos en streams de datos de aplicación
Identificación de diferentes aplicaciones
Rastreo de conversaciones individuales
Cualquier host puede tener múltiples aplicaciones que se comunican a
través de la red. Cada una de estas aplicaciones se comunicará con una o
más aplicaciones en hosts remotos. Es responsabilidad de la capa de
transporte mantener los streams de comunicación múltiple entre estas
aplicaciones.
Segmentación de datos
Así como cada aplicación crea datos de stream para enviarse a una
aplicación remota, estos datos se pueden preparar para enviarse a través
de los medios en partes manejables. Los protocolos de la capa de
transporte describen los servicios que segmentan estos datos de la capa
de aplicación. Esto incluye la encapsulación necesaria en cada sección
de datos. Cada sección de datos de aplicación requiere que se agreguen
encabezados en la capa de transporte para indicar la comunicación a la
cual está asociada.
Reensamble de segmentos
En el host de recepción, cada sección de datos se puede direccionar a la
aplicación adecuada. Además, estas secciones de datos individuales
también deben reconstruirse para generar un stream completo de datos que
sea útil para la capa de aplicación. Los protocolos en la capa de
transporte describen cómo se utiliza la información del encabezado de la
capa para reensamblar las partes de los datos en streams para pasarlos a
la capa de aplicación.
Identificación de aplicaciones
Para pasar streams de datos a las aplicaciones adecuadas, la capa de
transporte debe identificar la aplicación meta. Para lograr esto, la
capa de transporte asigna un identificador a la aplicación. Los
protocolos TCP/IP denominan a este identificador número de puerto. A
todos los procesos de software que requieran acceder a la red se les
asigna un número de puerto exclusivo en ese host. Este número de puerto
se utiliza en el encabezado de la capa de transporte para indicar qué
aplicación se asocia a qué parte.
La capa de transporte es el enlace entre la capa de aplicación y la capa
inferior que es responsable de la transmisión de la red. Esta capa
acepta los datos de diferentes conversaciones y las pasa a las capas
inferiores como partes manejables que se pueden multiplexar de forma
eventual en la red.
Las aplicaciones no necesitan saber los detalles operativos de la red en
uso. Las aplicaciones generan datos que se envían desde una aplicación a
otra sin tener en cuenta el tipo de host destino, el tipo de medios
sobre los que los datos deben viajar, el paso tomado por los datos, la
congestión en un enlace o el tamaño de la red.
Además, las capas inferiores no tienen conocimiento de que existen
varias aplicaciones que envían datos en la red. Su responsabilidad es
entregar los datos al dispositivo adecuado. La capa de transporte
clasifica entonces estas piezas antes de enviarlas a la aplicación
adecuada.
Los requisitos de datos varían
Hay múltiples protocolos de la capa de transporte debido a que las
aplicaciones tienen diferentes requisitos. Para algunas aplicaciones,
los segmentos deben llegar en una secuencia específica de manera que
puedan ser procesados en forma exitosa. En algunos casos, todos los
datos deben recibirse para ser utilizados por cualquiera de las mismas.
En otros casos, una aplicación puede tolerar cierta pérdida de datos
durante la transmisión a través de la red.
En las redes convergentes actuales, las aplicaciones con distintas
necesidades de transporte pueden comunicarse en la misma red. Los
diferentes protocolos de la capa de transporte poseen distintas reglas
para permitir a los dispositivos manejar estos diversos requerimientos
de datos.
Algunos protocolos proporcionan sólo las funciones básicas para enviar
de forma eficiente partes de datos entre las aplicaicones adecuadas.
Estos tipos de protocolos son útiles para aplicaciones cuyos datos son
sensibles a retrasos.
Otros protocolos de la capa de transporte describen los procesos que
proporcionan características adicionales, como asegurar un envío
confiable entre las aplicaciones. Si bien estas funciones adicionales
proveen una comunicación más sólida entre aplicaciones de la capa de
transporte, representan la necesidad de utilizar recursos adicionales y
generan un mayor número de demandas en la red.

Separación de comunicaciones múltiples
Considere una computadora conectada a una red que recibe y envía correos
electrónicos y mensajes instantáneos, explora sitios Web y realiza una
llamada telefónica de VoIP de manera simultánea. Cada una de estas
aplicaciones envía y recibe datos en la red al mismo tiempo. Sin
embargo, los datos de la llamada telefónica no están dirigidos al
explorador Web, y el texto de un mensaje instantáneo no aparece en el
correo electrónico.
Además, los usuarios necesitan que el correo electrónico o página Web se
reciba por completo y se presente para la información que se considere
útil. Los retrasos ligeros se consideran aceptables para asegurar que la
información se reciba y se presente por compelto.
En cambio, la pérdida ocasional de partes pequeñas de una conversación
telefónica se puede considerar aceptable. Se puede inferir la parte de
audio perdida del contexto de la conversación o se puede solicitar a la
otra persona que repita lo que dijo. Es preferible esto último a las
demoras que se producirían si se solicita a la red que gestione y vuelva
a enviar los segmentos perdidos. En este ejemplo, el usuario, no la
red, gestiona el reenvío o reemplazo de información que falta.

Como se explicó en un capítulo anterior, el envío de algunos tipos de
datos, un video por ejemplo, a través de la red como un stream de
comunicación completa puede impedir que se produzcan otras
comunicaciones al mismo tiempo. También dificulta la recuperación de
errores y la retransmisión de datos dañados.
Dividir datos en pequeñas partes y enviarlas del origen al destino
permite que muchas comunicaciones diferentes se intercalen
(multiplexadas) en la misma red.
La segmentación de los datos, que cumple con los protocolos de la capa
de transporte, proporciona los medios para enviar y recibir datos cuando
se ejecutan varias aplicaciones de manera concurrente en una
computadora. Sin segmentación, sólo una aplicación, la corriente de
video por ejemplo, podría recibir datos. Puede no recibir correos
electrónicos, chatear en mensajería instantánea o ver páginas Web
mientras ve un video.
En la capa de transporte, cada conjunto de piezas particular que fluye
entre la aplicación de origen y la de destino se conoce como
conversación.
Para identificar cada segmento de datos, la capa de transporte añade a
la pieza un encabezado que contiene datos binarios. Este encabezado
contiene campos de bits. Son los valores de estos campos los que
permiten que los distintos protocolos de la capa de transporte lleven a
cabo las diversas funciones.
Control de las conversaciones
Las funciones principales que especifican los protocolos de la capa de transporte incluyen:
Segmentación y reensamble: la mayoría de las redes tienen una limitación
en la cantidad de datos que se pueden incluir en una simple PDU. La
capa de transporte divide los datos de aplicación en bloques de datos de
un tamaño adecuado. En el destino, la capa de transporte reensambla los
datos antes de enviarlos a la aplicación o servicio de destino.
Multiplexación de conversación: puede haber aplicaciones o servicios que
se ejecutan en cada host de la red. A cada una de estas aplicaciones o
servicios se les asigna una dirección conocida como puerto, de manera
que la capa de transporte determina con qué aplicación o servicio se
identifican los datos.
Además de utilizar la información contenida en los encabezados, para las
funciones básicas de segmentación y reensamble de datos algunos
protocolos en la capa de transporte proporcionan:
-
Conversaciones orientadas a la conexión
-
Entrega confiable
-
Reconstrucción de datos ordenada
-
Control del flujo
Establecimiento de una sesión
La capa de transporte puede brindar esta orientación a la conexión
creando una sesión entre las aplicaciones. Estas conexiones preparan las
aplicaciones para que se comuniquen entre sí antes de que se transmitan
los datos. Dentro de estas sesiones, se pueden gestionar de cerca los
datos para la comunicación entre dos aplicaciones.
Entrega confiable
Por varias razones, es posible que una sección de datos se corrompa o se
pierda por completo a medida que se transmite a través de la red. La
capa de transporte puede asegurar que todas las partes alcancen su
destino haciendo que el dispositivo origen retransmita todos los datos
perdidos.
Entrega en el mismo orden
Los datos pueden llegar en el orden equivocado, debido a que las redes
pueden proporcionar múltiples rutas que pueden tener diferentes tiempos
de transmisión. Al numerar y secuenciar los segmentos, la capa de
transporte puede asegurar que los mismos se reensamblen en el orden
adecuado.
Control del flujo
Los hosts de la red cuentan con recursos limitados, como memoria o ancho
de banda. Cuando la capa de transporte advierte que estos recursos
están sobrecargados, algunos protocolos pueden solicitar que la
aplicación que envía reduzca la velocidad del flujo de datos. Esto se
lleva a cabo en la capa de transporte regulando la cantidad de datos que
el origen transmite como grupo. El control de flujo puede evitar la
pérdida de segmentos en la red y evitar la necesitad de la
retransmisión.
Así como se discuten los protocolos en este capítulo, estos servicios se explicarán a mayor detalle.

Soporte de comunicación confiable
Cabe recordar que la función principal de la capa de transporte es
administrar los datos de aplicación para las conversaciones entre hosts.
Sin embargo, cada aplicación tiene determinados requisitos para sus
datos y, por lo tanto, se han desarrollado diferentes protocolos de
transporte para que cumplan con estos requisitos.
Un protocolo de la capa de transporte puede implementar un método para
asegurar el envío confiable de datos. En términos de redes,
confiabilidad significa asegurar que cada sección de datos que envía el
origen llegue al destino. En la capa de transporte, las tres operaciones
básicas de confiabilidad son:
rastreo de datos transmitidos
acuse de recibo de datos recibidos
retransmisión de cualquier dato sin acuse de recibo
Esto requiere que los procesos de la capa de transporte en el origen dé
seguimiento a todas las partes de datos de cada conversación y
retransmitan cualquier dato del cual el destino no acuso recibo. La capa
de transporte del host de recepción también debe rastrear los datos a
medida que se reciben y reconocer la recepción de los mismos.
Estos procesos de confiabilidad generan un uso adicional de los recursos
de la red debido al reconocimiento, rastreo y retransmisión. Para
admitir estas operaciones de confiabilidad se intercambian más datos de
control entre los hosts emisores y receptores. Esta información de
control se encuentra en el encabezado de la Capa 4.
Esto crea una compensación entre el valor de la confiabilidad y la carga
que hay en la red. Los desarrolladores de aplicaciones deben elegir qué
tipo de protocolo de transporte es adecuado en base a los
requerimientos de sus aplicaciones. En la capa de transporte, existen
protocolos que especifican métodos para la entrega confiable,
garantizada o de máximo esfuerzo. En el contexto de networking, el envío
del mejor esfuerzo se conoce como poco confiable, porque no hay acuse
de recibo de que los datos se recibieron en el destino.
Determinación de la necesidad de confiabilidad
Las aplicaciones, tales como bases de datos, páginas Web y correo
electrónico, necesitan que todos los datos enviados lleguen al destino
en su condición original para que los datos sean útiles. Todos los datos
perdidos pueden corromper una comunicación y dejarla incompleta o
ilegible. Por lo tanto, estas aplicaciones se diseñan para utilizar un
protocolo de capa de transporte que implemente la confiabilidad. Los
gastos de red adicionales se consideran necesarios para estas
aplicaciones.
Otras aplicaciones son más tolerantes a la pérdida de cantidades
pequeñas de datos. Por ejemplo, si uno o dos segmentos de un stream de
vídeo no llegan al destino, sólo generará una interrupción momentánea en
el stream. Esto puede representar distorsión en la imagen pero quizás
ni sea advertido por el usuario.
Imponer el uso de recursos adicionales para asegurar la confiabilidad
para esta aplicación puede reducir la utilidad de la misma. La imagen en
un streaming video se degradaría en gran medida si el dispositivo de
destino tuvo que dar cuenta de los datos perdidos y demorar el stream
mientras espera que lleguen. Es conveniente proporcionar la mejor imagen
posible al momento en que llegan los segmentos y renunciar a la
confiabilidad. Si por algún motivo se requiere confiabilidad, estas
aplicaciones pueden proveer verificación de errores y solicitudes de
retransmisión.
TCP y UDP
Los dos protocolos más comunes de la capa de transporte del conjunto de
protocolos TCP/IP son el Protocolo de control de transmisión (TCP) y el
Protocolo de datagramas de usuario (UDP). Ambos protocolos gestionan la
comunicación de múltiples aplicaciones. Las diferencias entre ellos son
las funciones específicas que cada uno implementa.
Protocolo de datagramas de usuario (UDP)
UDP es un protocolo simple, sin conexión, descrito en la RFC 768. Cuenta
con la ventaja de proveer la entrega de datos sin utilizar muchos
recursos. Las porciones de comunicación en UDP se llaman datagramas.
Este protocolo de la capa de transporte envía estos datagramas como
"mejor intento".
Las aplicaciones que utilizan UDP incluyen:
Sistema de nombres de dominio (DNS)
Streaming video
Voz sobre IP (VOIP)
Protocolo de control de transmisión (TCP)
TCP es un protocolo orientado a la conexión descrito en RFC 793. El TCP
utiliza recursos adicionales para ganar funciones. Las funciones
adicionales especificadas por TCP están en el mismo orden de entrega,
son de entrega confiable y de control de flujo. Cada segmento de TCP
posee 20 bytes de carga en el encabezado que encapsulan los datos de la
capa de aplicación, mientras que cada segmento UDP sólo posee 8 bytes de
carga. Vea la figura para hacer una comparación.
Las aplicaciones que utiliza el TCP son:
-
Exploradores Web
-
Correo electrónico
-
Transferencias de archivos
Direccionamiento del puerto
Identificación de conversaciones
Considere el ejemplo anterior de una computadora que recibe y envía
correos electrónicos, mensajes instantáneos, páginas Web y llamadas
telefónicas VoIP de manera simultánea.
Los servicios basados en TCP y UDP mantienen un seguimiento de las
diversas aplicaciones que se comunican. Para diferenciar los segmentos y
datagramas para cada aplicación, tanto TCP como UDP cuentan con campos
de encabezado que pueden identificar de manera exclusiva estas
aplicaciones. Estos identificadores únicos son números de puertos.
En el encabezado de cada segmento o datagrama, hay un puerto origen y
uno de destino. El número de puerto de origen es el número para esta
comunicación asociado con la aplicación que origina la comunicación en
el host local. El número de puerto de destino es el número para esta
comunicación asociado con la aplicación de destino que origina la
comunicación en el host local.
Los números de puerto se asignan de distintas maneras, en virtud de si
el mensaje es una solicitud o una respuesta. Mientras que los procesos
del servidor tienen números de puerto estáticos asignados, los clientes
eligen de forma dinámica un número de puerto para cada conversación.
Cuando una aplicación de cliente envía una solicitud a una aplicación de
servidor, el puerto de destino contenido en el encabezado es el número
de puerto asignado al demonio de servicio se ejecuta en el host remoto.
El software del cliente debe conocer el número de puerto asociado con el
proceso del servidor en el host remoto. Este número de puerto de
destino se puede configurar, ya sea de forma predeterminada o manual.
Por ejemplo, cuando una aplicación de explorador Web realiza una
solicitud a un servidor Web, el explorador utiliza TCP y el número de
puerto 80 a menos que se especifique otro valor. Esto sucede porque el
puerto TCP 80 es el puerto predeterminado asignado a aplicaciones de
servidores Web. Muchas aplicaciones comunes tienen asignados puertos
predeterminados.
El puerto de origen en el encabezado de un segmento o de un datagrama de
la solicitud de un cliente se crea de forma aleatoria desde los números
de puerto mayores de 1023. Mientras no haya un conflicto con otros
puertos en uso en el sistema, el cliente puede elegir cualquier número
de puerto del rango de números predeterminados que utiliza el sistema
operativo. El número de puerto actúa como dirección de retorno para la
aplicación que realiza la solicitud. La capa de transporte mantiene un
seguimiento de este puerto y de la aplicación que generó la solicitud,
de manera que cuando se devuelva una respuesta, se pueda ser enviar a la
aplicación correcta. El número de puerto de la aplicación que realiza
la solicitud se utiliza como número de puerto de destino en la respuesta
que vuelve del servidor.
La combinación del número de puerto de la capa de transporte y de la
dirección IP de la capa de red asignada al host identifica de manera
exclusiva un proceso en particular que se ejecuta en un dispositivo host
específico. Esta combinación se denomina socket. Eventualmente, los
términos número de puerto y socket se utilizan en forma indistinta. En
el contexto de este curso, el término socket hace referencia sólo a la
combinación exclusiva de dirección IP y número de puerto. Un par de
sockets, que consiste en las direcciones IP de origen y destino y los
números de puertos, también es exclusivo e identifica la conversación
entre los dos hosts.
Por ejemplo, una solicitid de página Web HTTP que se envía a un servidor
Web (puerto 80) que se ejecuta en un host con una dirección IPv4 de
Capa 3 de 192.168.1.20 se destinaría al socket 192.168.1.20:80.
Si el explorador Web que solicita una página Web se ejecuta en el host
192.168.100.48 y el número de puerto dinámico que se asignó al
explorador es 49152, el socket para la página Web sería
192.168.100.48:49152.
La Autoridad de números
asignados de Internet (IANA) asigna números de puerto. IANA es un
organismo normativo responsable de asegurar diferentes estándares de
direccionamiento.
Hay diversos tipos de números de puerto:
Puertos bien conocidos
(números del 0 al 1023): estos números se reservan para servicios y
aplicaciones. Por lo general, se utilizan para aplicaciones como HTTP
(servidor Web), POP3/SMTP (servidor de correo electrónico) y Telnet. Al
definir estos puertos bien conocidos para las aplicaciones de los
servidores, las aplicaciones cliente se pueden programar para solicitar
una conexión a dicho puerto y su servicio asociado.
Puertos registrados
(números del 1024 al 49151): estos números de puerto se asignan a
procesos o aplicaciones del usuario. Estos procesos son principalmente
aplicaciones individuales que el usuario elige instalar en lugar de
aplicaciones comunes que recibiría un puerto bien conocido. Cuando no se
utilizan para un recurso del servidor, estos puertos se pueden utilizar
también seleccionados de forma dinámica por un cliente como su puerto
de origen.
Puertos dinámicos o
privados (números 49152 a 65535): también conocidos como puertos
efímeros, están usualmente asignados de forma dinámica a las
aplicaciones cliente cuando se inicia una conexión. No es muy común que
un cliente se conecte a un servicio utilizando un puerto dinámico o
privado (aunque algunos programas que comparten archivos punto a punto
lo hacen).
Uso de TCP y UDP
Algunas aplicaciones
pueden utilizar ambos. Por ejemplo, el bajo gasto de UDP permite que DNS
atienda rápidamente varias solicitudes de clientes. Sin embargo, a
veces el envío de la información solicitada puede requerir la
confiabilidad de TCP. En este caso, el número de puerto bien conocido de
53 lo utilizan ambos protocolos con este servicio.
Enlaces
Una lista actual de números de puerto se puede encontrar en http://www.iana.org/assignments/port-numbers.
A veces es necesario
conocer las conexiones TCP activas que están abiertas y en ejecución en
el host de red. Netstat es una utilidad de red importante que puede
usarse para verificar esas conexiones. Netstat indica el protocolo en
uso, la dirección y el número de puerto locales, la dirección y el
número de puerto ajenos y el estado de la conexión.
Las conexiones TCP no
descritas pueden representar una importante amenaza a la seguridad. Esto
se debe a que pueden indicar que algo o alguien está conectado al host
local. Además, las conexiones TCP innecesarias pueden consumir recursos
valiosos del sistema y por lo tanto disminuir el rendimiento del host.
Netstat debe utilizarse para determinar las conexiones abiertas de un
host cuando el rendimiento parece estar comprometido.
Existen muchas opciones útiles para el comando netstat.
Segmentación y Reensamblaje: Divide y vencerás
Un capítulo anterior explicaba cómo se construyen las PDU enviando datos
de una aplicación a través de los varios protocolos para crear una PDU
que luego se transmita en el medio. En el host de destino, este proceso
se revierte hasta que los datos se puedan transferir a la aplicación.
Algunas aplicaciones transmiten grandes cantidades de datos, en algunos
casos muchos gigabytes. Resultaría poco práctico enviar todos estos
datos en una sola gran sección. No puede transmitirse ningún otro
tráfico de red mientras se envían estos datos. Una gran sección de datos
puede tardar minutos y hasta horas en enviarse. Además, si hubiera
algún error, el archivo de datos completo se perdería o tendría que ser
reenviado. Los dispositivos de red no cuentan con buffers de memoria lo
suficientemente grandes como para almacenar esa cantidad de datos
durante la transmisión o recepción. El límite varía dependiendo de la
tecnología de networking y de medio físico específico a utilizar.
Dividir los datos de la aplicación en partes asegura que éstos se
transmitan dentro de los límites de los medios y que se puedan
multiplexar en el medio.
Segmentación diferente para el manejo de TCP y UDP.
En TCP, cada encabezado de segmento contiene un número de secuencia.
Este número de secuencia permite que las funciones de la capa de
transporte del host de destino reensamblen los segmentos en el mismo
orden en el cual se transmitieron. Esto asegura que la aplicación de
destino tiene los datos en la misma forma que el emisor la planeó.
Aunque los servicios de UDP rastrean también las conversaciones entre
las aplicaciones, no están preocupados por el orden en que se transmite
la información o por mantener una conexión. No existe número de
secuencia en el encabezado UDP. UDP es un diseño simple y genera menos
carga que TCP, lo que produce una transferencia de datos más rápida.
La información puede llegar en un orden distinto al que fue transmitida,
ya que los paquetes pueden tomar diversas rutas a través de la red. Una
aplicación que utiliza UDP debe tolerar el hecho de que los datos no
lleguen en el orden en que se enviaron.
TCP: Cómo generar conversaciones confiables
La diferencia clave entre TCP y UDP es la confiabilidad. La
confiabilidad de la comunicación TCP se lleva a cabo utilizando sesiones
orientadas a la conexión. Antes de que un host que utiliza TCP envíe
datos a otro host, la capa de transporte inicia un proceso para crear
una conexión con el destino. Esta conexión permite el rastreo de una
sesión, o stream de comunicación entre los hosts. Este proceso asegura
que cada host tenga conocimiento de la comunicación y se prepare. Una
conversación completa de TCP necesita establecer una sesión entre los
hosts de ambas direcciones.
Después de establecer una sesión, el destino envía un acuse de recibo al
origen por los segmentos que recibe. Estos acuses de recibo forman la
base de la confiabilidad dentro de la sesión TCP. Cuando el origen
recibe un acuse de recibo, reconoce que los datos se han entregado con
éxito y puede dejar de rastrearlos. Si el origen no recibe el acuse de
recibo dentro de un tiempo predeterminado, retransmite esos datos al
destino.
Parte de la carga adicional que genera el uso de TCP es el tráfico de
red generado por los acuses de recibo y las retransmisiones. El
establecimiento de las sesiones genera cargas en forma de segmentos
adicionales intercambiados. Hay también sobrecarga en los hosts
indivuduales creada por la necesidad de mantener un registro de los
segmentos que esperan un acuse de recibo y por el proceso de
retransmisión.
Esta confiabilidad se logra al tener archivos en el segmento TCP, cada
uno con su función específica, como se muestra en la figura. Estos
campos se explicarán más adelante en esta sección.