INTRODUCCIÓN
El modelo de trasporte constituye el núcleo del modelo OSI. Los protocolos de este nivel de
encargan de la entrega de datos desde un programa de aplicación situado en un dispositivo a
otro programa de aplicación situado en otro dispositivo. Más importante aún, actúan como un
enlace entre protocolos de los niveles superiores (sesión, presentación y de aplicación) y los
servicios ofrecidos por los niveles inferiores (de red, de enlace de datos y físico). Los niveles
superiores pueden utilizar los servicios del nivel de transporte para interactuar con la red sin
tener que interactuar o preocuparse directamente con la existencia de niveles inferiores. Para
que esta separación sea posible, el nivel de transporte es independiente de la red física.
En este contexto, la capa de transporte del modelo TCP/IP posee dos protocolos: TCP y UDP.
TCP (Transmisión Control Protocol) es un protocolo orientado a la conexión y confiable. UDP
(User Datagram Protocol) es un protocolo no orientado a la conexión y no confiable. Algunos
autores señalan que UDP es sólo una extensión de IP. Se discutirá ello posteriormente.
TCP es un protocolo que proporciona una conexión confiable de extremo a extremo (E2E)
Tanto éste como su colega UDP se encapsulan en el protocolo IP, el cual, como ya se ha
mencionado en el módulo anterior, es un protocolo no orientado a la conexión y no confiable,
basado en la política del best effort. TCP surge entonces como una alternativa que soluciona el
problema de la ausencia de una conexión confiable entre los dos extremos que establecen una
comunicación.
Para comprender mejor el papel del nivel de transporte, es útil visualizar una Internet formada
por variedad de redes físicas diferentes como las LAN, MAN o WAN mostradas en la Fig. 5.1
Estas redes se conectan para permitir el transporte de datos desde una computadora de una
red a otra computadora situada en otra red. Cuando la transmisión se transfiere de red a red,
los datos pueden ser encapsulados en diferentes tipos y longitudes de paquetes.
Las funciones del nivel de enlace o de red de una red pueden fraccionar los datos en
segmentos más pequeños para que entren en un tamaño de paquete o trama más limitado,
mientras que las funciones paritarias de otra red pueden enlazar varios segmentos juntos en un
único gran paquete. No importa que transformaciones deban realizarse; sin embargo, los datos
deben llegar a su destino en su formato original.
Los servicios del nivel de transporte son implementados por un protocolo de transporte utilizado
entre dos entidades de transporte (Fig. 5.2)
Los servicios ofrecidos son similares a los ofrecidos por el nivel de enlace de datos. El nivel de
enlace de datos, sin embargo, está diseñado para ofrecer sus servicios dentro de una única
red, mientras que el nivel de transporte ofrece los servicios a lo largo de un conjunto de redes
interconectadas.
El nivel de enlace de datos controla el nivel físico, mientras que el nivel de transporte controla
los tres niveles inferiores (Fig. 5.3).
Direccionamiento
El nivel de transporte interactúa con las funciones del nivel de sesión. Sin embargo, muchos
protocolos (como pilas de protocolos, que significa grupos de protocolos que interactúan en
niveles diferentes) combinan protocolos de nivel de sesión, presentación y aplicación. En estos
casos, la entrega a funciones de nivel de sesión es, en realidad, la entrega a una aplicación.
Por ello, la comunicación tiene lugar no solo de una máquina a otra máquina, sino de una
aplicación a otra aplicación. Los datos generados por una aplicación de una máquina deben ser
recibidos no sólo por la otra máquina, sino por la aplicación correcta dentro de la máquina.
En la mayoría de los cados, por tanto, terminamos con la comunicación entre muchas a
muchas entidades, denominadas puntos de acceso al servicio (véase Fig. 5.4). Pero, ¿cómo se
identifica la red qué punto de acceso a servicio en una estación está comunicándose con qué
punto de acceso a servicio en otra estación?
Para asegurar la entrega precisa de un punto de acceso a servicio a otro, se necesita otro nivel
de direccionamiento además de los utilizados en los niveles de red y enlace de datos. Los
protocolos de nivel de enlace de datos necesitan conocer que dos computadoras dentro de una
red se están comunicando. Los protocolos de nivel de red necesitan conocer que dos
computadoras dentro de Internet se están comunicando. Pero en el nivel de transporte, el
protocolo necesita conocer qué protocolos de nivel superior se están comunicando.
En el nivel de transporte, la entrega fiable tiene cuatro aspectos: control de errores, control de
secuencia, control de pérdidas y control de duplicación.
Control de errores
Pero si tenemos que tratar errores en el nivel de enlace de datos, ¿por qué se necesita
el nivel de transporte? Las funciones del nivel de enlace de datos garantizan la entrega
libre de errores nodo a nodo para cada enlace. Sin embargo, la fiabilidad nodo a nodo
no asegura la fiabilidad extremo a extremo. La Fig. 5.5 muestra una situación en la que
un error introducido no puede ser tratado por los controles de error que realiza el nivel
de enlace de datos. En la Fig. 5.5, el nivel de enlace de datos se encarga de que los
paquetes que pasan de una red a otra se encuentren libres de errores. Pero se
introduce un error cuando el paquete es procesado dentro de los encaminadores. Este
error no será detectado por las funciones que sólo comprueban que no se hayan
introducido errores entre el comienzo y el fin de ese enlace. En nivel de transporte
debe, por tanto, hacer su propia comprobación extremo a extremo para estar seguro de
que el paquete ha llegado tal y como fue enviado por el origen.
Control de secuencia
Número de secuencia
Imagine una situación en la que un cliente de un banco envía un mensaje al banco para
ordenar que primero transfiera 5000 euros desde una cuenta corriente de otro cliente.
Imagínese lo que ocurriría si las dos partes del mensaje fueran recibidas fuera de orden
(Fig. 5.6).
Desde el punto de vista del emisor y del receptor, no es importante en qué orden viajen
los distintos trozos de la transmisión. Lo que es importante es que se reensamblen de
forma adecuada en el destino, de igual forma en la que las piezas de su coche llegan a
la cadena de montaje, sino que lo que quiere es que estén montadas adecuadamente
cuando a usted le entreguen el coche.
Control de perdidas
Control de duplicados
Control de flujo
Con una ventana de tamaño variable, la cantidad de datos real que la ventana puede
almacenar es negociable. En la mayoría de los casos, el control del tamaño de la
ventana es competencia del receptor. El receptor, en su paquete de confirmación,
puede especificar que el tamaño de la ventana se ha incrementado (o disminuido, pero
en la mayoría de los protocolos no permiten disminuir el tamaño). En la mayoría de los
casos, las ventanas deslizantes en el nivel de transporte se basan en el número de
bytes que el receptor puede almacenar en lugar del número de tramas. Un par de
entidades que se comunican utilizan un buffer de 'x' bytes que puede almacenar 'y'
tramas.
Se utiliza una ventana deslizante para hacer que la transmisión de los datos sea más
eficiente, así como para controlar el flujo de datos de forma que el receptor no se
sature. Las ventanas deslizantes utilizadas en el nivel de transporte están normalmente
orientadas a byte en lugar de a tramas.
Multiplexación
La entrega extremo a extremo puede llevarse a cabo de dos formas: con conexión o sin
conexión. De estos dos, el modo orientado a conexión establece un circuito virtual o camino a
través de Internet entre el emisor y el receptor. Todos los paquetes que pertenecen a un mismo
mensaje son enviados por este mismo camino. El empleo de un único camino para el mensaje
entero facilita el proceso de confirmación y retransmisión de tramas perdidas o dañadas. Los
servicios orientados a conexión, por tanto, se consideran generalmente como fiables.
Establecimiento de la conexión
Antes de que un dispositivo pueda enviar datos a otro, el dispositivo que inicia
la transmisión debe determinar en primer lugar la disponibilidad del otro para
intercambiar los datos y debe encontrar un camino en la red a través del cual
enviar los datos. Esta etapa se conoce como establecimiento de conexión (Fig.
5.11)
El establecimiento de la conexión requiere tres acciones que se denominan
diálogo en tres partes:
o La computadora que solicita la conexión envía un paquete de petición de
conexión al receptor.
o La computadora receptora devuelve un paquete de confirmación a la
computadora que realiza la solicitud.
o La computadora que realiza la solicitud devuelve un paquete para
confirmar la confirmación.
Terminación de la conexión
Cuestiones previas
TCP vio la luz gracias al RFC 793. El lector recordará que IP nació en un RFC anterior pero
cercano, el 791. Tanto TCP como IP fueron definidos el 01 de septiembre de 1981.
Específicamente en el caso de TCP, el protocolo evolucionó, dando origen al RFC 1122, al
RFC 1323 y a muchos otros más recientes. IP también evolucionó, pero dio el gran salto recién
con el RFC 2460, que marca el origen del Ipv6 en 1998.
El lector posiblemente se vea abrumado con esta pregunta. Tal vez la interrogante idónea sería
¿CUÁLES SON LAS APLICACIONES QUE ACCEDEN A TCP? Incluso el lector más lego ha
tenido oportunidad de manejar personalmente aplicaciones: accede a su página web desde la
comodidad de su escritorio; posiblemente ha accedido a una PC remota empleando TELNET o
incluso ha configurado un router empleando esta aplicación, o tal vez ha realizado una
transferencia de archivos entre dos laptops de la oficina utilizando FTP, etc.
Las aplicaciones se basan en protocolos. Entre los protocolos de aplicación que hacen uso de
TCP (es decir, se encapsulan en TCP) se tienen los siguientes: BGP, FTP, HTTP, SMTP,
TELNET, MIME, etc.
Cada SOCKET posee un número o una dirección de SOCKET, la cual está constituida por la
dirección IP del host y un número de 16 bits local a ese host, denominado PUERTO. En TCP,
PUERTO es el nombre de un TSAP (TRANSPORT SERVICE ACCESS POINT) Para obtener el
servicio TCP, debe establecerse explícitamente una conexión entre el SOCKET de la máquina
transmisora y el SOCKET de la máquina receptora. Para complementar esta parte, recordar
que SOCKET es un concepto lógico ligado a Informática.
Un SOCKET puede emplearse para varias conexiones al mismo tiempo. En otras palabras, dos
o más conexiones pueden confluir en un mismo SOCKET. Por otro lado, las conexiones se
identifican exclusivamente con los números de SOCKET de los dos host, o sea, (SOCKET 1,
SOCKET 2).
Toda conexión TCP es dúplex integral y punto a punto. Dúplex integral quiere decir que la
comunicación puede fluir simultáneamente en ambos sentidos. Punto a punto se refiere a que
las conexiones se estructuran sólo de extremo a extremo, o expresado de otra manera, sólo
entre dos puntos terminales. TCP ignora de qué se trata la multitransmisión y la difusión.
Una conexión TCP está constituida por una corriente de BYTES, no de MENSAJES. Los límites
de mensajes no se conservan de extremo a extremo. Por ejemplo, si una aplicación genera
cuatro mensajes de 512 bytes cada uno, TCP puede llevarlos a la aplicación de destino
respetando los límites originales de los mensajes, como también puede llevarlos como dos
mensajes de 1024 bytes o como un solo mensaje de 2048 bytes. El lector debe recordar que
en el modelo TCP/IP la capa de aplicación y la de transporte intercambian mensajes. Asunto
aparte es si TCP respeta el formato de separación original de los mensajes o no para llevarlos
a la aplicación de destino. En conclusión, la aplicación receptora no tiene forma de enterarse
acerca de cuántas partes poseía el mensaje original. No tiene tampoco porqué saberlo. La
capa de aplicación, por cierto, se abstrae de lo que ocurre en la de transporte. Cuando un
usuario abre su página web favorita detalles como éstos no le interesan en lo más mínimo.
Los lectores que en cuanto a conocimientos consideren aventajar con creces a los encargados
de elaborar este material, posiblemente estén familiarizados con UNIX. Por ejemplo, en el caso
de un usuario UNIX éste no tiene forma de saber si el mensaje original fue enviado por TCP,
bloque por bloque, byte por byte, o de una sola ráfaga. Y siguiendo la política de la abstracción
de capas, si a la capa de aplicación no le interesa lo mencionado, mucho menos a la capa de
transporte le interesará el tipo de dato que transporta. TCP sólo se interesará en la información
de su cabecera, de la cual se hablará más adelante.
¿Y si para acelerar las cosas se empleara siempre el FLAG PUSH? A priori podría pensarse en
acelerar la descarga de una página web desde un servidor remoto ordenando la aplicación de
usuario al TCP acelerar el pedido. De igual modo, algo parecido debe efectuar la aplicación en
el lado del servidor. Las aplicaciones pueden exigir todo lo que deseen, pero aún no se ha
inventado, al parecer, un protocolo que les recuerde que Internet posee limitaciones. Una
limitación práctica, ya que se ha hablado de ROUTERS, es el encolamiento que tiene lugar en
estos dispositivos, ya que no sólo se las tienen que arreglar con el paquete del apresurado
usuario que solicita su página web, sino con paquetes de toda índole, tal vez miles de éstos.
TCP resuelve fácilmente este asunto. Si el mensaje llegó, por ejemplo, en cuatro partes, y cada
una desea encapsularse en TCP con el FLAG PUSH activo, TCP considera las cosas y de
observar que el TCP del servidor web remoto no puede responder con rapidez (posiblemente
los ROUTERS están de malas leyendo miles de cabeceras y enrutando miles de paquetes),
efectúa una negociación entre las capas pares y el TCP emisor toma la decisión de juntar en un
solo datagrama IP todos los fragmentos del mensaje y enviarlos en cuanto los ROUTERS se
encuentren en condiciones de atender al datagrama IP. El ejemplo propuesto es algo empírico
pero ilustra de manera práctica el empleo del FLAG PUSH. Sin embargo, este ejemplo es
propicio para señalar que una de las funciones más importantes de TCP es llevar a cabo el
control de flujo, es decir, evitar que un emisor rápido sature a uno lento. Se deja la
interpretación en manos del lector.
En la próxima sección se estudiarán en detalle los campos que constituyen la cabecera TCP, la
cual consta de 20 bytes. El objetivo, por el momento, es esbozar el funcionamiento de TCP
para luego entrar en los detalles técnicos de la cabecera.
Sin embargo, se debe tener en cuenta que si bien el paquete IP soporta 65535 bytes en total,
las redes poseen un parámetro denominado MTU (MAXIMUM TRANSFER UNIT) Supóngase
que un dispositivo de red desea enviar los datagramas IP a través de una red ETHERNET, la
cual posee un MTU de 1500 bytes. De este modo, IP deberá fragmentar la información en
datagramas de 1500 bytes (cabecera y datos de IP) con los que la capa de interfaz de red
formará las tramas ETHERNET que serán enviadas al medio físico.
El protocolo básico empleado por TCP es el de ventana corrediza. Cuando un proceso TCP en
el extremo emisor envía la información al proceso TCP en el receptor inicia un temporizador; el
receptor deberá generar un acuse de recibo en el que solicite el siguiente segmento del
mensaje, incorporando de paso datos, de ser necesario. Si el temporizador del transmisor
expira antes de recibirse el acuse de recibo, se reenvía el segmento. Resulta evidente que TCP
al emplear como protocolo básico el de ventana corrediza, desempeña como una de sus más
importantes funciones el control de flujo.
El funcionamiento de TCP parece sencillo. El lector que desee simplificar las cosas ya habrá
inferido que TCP posee dos funciones esenciales: la primera, establecer una conexión
confiable E2E, y la segunda, llevar a cabo el control de flujo de dicha conexión.
Sin embargo, Internet es un escenario donde pululan los problemas. El primer embrollo surge
por default, vale decir, que cae por su propio peso: TCP, un protocolo orientado a la conexión y
confiable, debe encapsularse en IP, el cual no es orientado a la conexión y mucho menos
confiable. Esto se traduce en las siguientes dificultades que deberá arrostrar TCP: los paquetes
que viajan por la red lo hacen de manera independiente, así que unos llegarán pero otros no.
Podría suceder que el receptor emita un acuse de recibo de un paquete, pero no pueda hacer
lo propio con otro que jamás llegó. Puede ocurrir que los acuses se extravíen en el camino,
provocando la retransmisión de duplicados y un largo etc. TCP debe estar preparado para
resolver estos problemas de manera eficiente.
La cabecera TCP
La cabecera TCP posee una longitud fija de 20 bytes, la cual puede estar seguida de opciones
de cabecera si las hay. La longitud máxima de la parte de datos es de 65495 bytes. En
resumen, un segmento TCP tiene como longitud fija 65515 bytes. Ahora se realizará el análisis
de la cabecera TCP campo por campo (véase Fig. 5.13).
Indica el número de palabras de 32 bits que conforman la cabecera. De este modo, si este
campo indica que la longitud de la cabecera es de 5, entonces ésta posee (5 x 4 bytes) =
20 bytes. Recordar que debido a la existencia del campo opciones la longitud de la
cabecera puede variar.
A continuación de este campo viene uno de 06 bits vacío. Se utilizará en el futuro de tener
que realizar modificaciones en el diseño de la cabecera TCP original.
o FLAG URG:
o FLAG PSH:
Cuando este FLAG se encuentra activo, el receptor está obligado a entregar de inmediato
el mensaje a la aplicación y no guardarlo en un buffer.
o FLAG RST:
Utilizado para establecer una conexión. Cuando el emisor solicita establecer una conexión
SYN = 1 y ACK = 0, ya que no existe acuse. De aceptar el receptor, éste responde con
SYN = 1 y ACK = 1.
Mediante este campo TCP lleva a cabo el control de flujo. El tamaño de la ventana es
variable, pero como máximo es de 16 bits. A través de la negociación entre el emisor y el
receptor, éste puede indicarle al emisor con un 0 en este campo que los datos llegaron,
hasta el último enviado, correctamente, pero no desea más datos por el momento pero. De
cambiar de opinión, el receptor envía un tamaño de ventana específico para proseguir la
comunicación.
Mediante este campo se lleva a cabo el chequeo de la cabecera, los datos y la cabecera
ficticia TCP, que se explicará más adelante. (Ver Fig. 5.14)
Cuando tiene lugar la suma de comprobación, el campo con el mismo nombre es puesto a
cero, y de ser la longitud de los datos un número de bytes impar, entonces se rellena con
un byte cero. Luego, el algoritmo de comprobación suma todas las palabras de 16 bits en
complemento a 1 y después obtiene el complemento a uno de la suma. De este modo, al
efectuar el cálculo del segmento completo (cabecera y datos) la suma de comprobación
debe ser cero.
o OPCIONES (OPTIONS):
Este campo se diseñó con la finalidad de tener una alternativa de agregar características
extra a la cabecera. Fundamentalmente permite refinar la negociación entre los hosts al
momento de definir el tamaño de los segmentos que se intercambiarán. De este modo,
cada host propone el tamaño máximo de segmento que podrá aceptar, “ganando” la
negociación quien propone el menor tamaño. Claro está que emplear segmentos grandes
favorece el rendimiento de la red, puesto que la relación datos / control es mayor, o dicho
de otra manera, en un segmento grande el tamaño de la cabecera (20 bytes) es
“despreciable” si se le compara a la parte de datos, la cual como mínimo debe ser de
536 bytes. De este modo, TCP podrá enviar paquetes a la capa de red con un
Cabecera UDP
Un segmento UDP posee una cabecera de 8 bytes y otra parte restante de datos. La
cabecera UDP posee cuatro campos (Fig. 5.15), los que se analizarán a continuación.
Cumplen la misma función que en TCP, vale decir, identificar los puntos terminales
de las máquinas de origen y destino. Cada uno de estos campos posee 16 bits de
longitud.
LONGITUD UDP:
SUMA DE COMPROBACIÓN:
Posee una longitud de 16 bits. Opera de la misma manera que en TCP, es decir,
calculando el complemento a uno de la suma en complemento a uno de la longitud
de la cabecera ficticia, de la cabecera UDP y sus datos, rellenándose con ceros de
ser necesario para completar los dos octetos. La suma de verificación es opcional y