Administración de una red TCP/IP

Contenidos
TCP/IP: una familia de protocolos
Arquitectura de TCP/IP
Transmitiendo los paquetes
Multiplexación: Puertos y Sockets
En resumen...

TCP/IP: una familia de protocolos8

TCP/IP es un conjunto de protocolos de comunicaciones desarrollado para permitir a un conjunto de computadoras cooperar y compartir recursos a través de una red de comunicaciones. De entre sus muchas características, hay dos que lo han transformado en uno de los protocolos de mayor difusión:

 

Arquitectura de TCP/IP

La familia TCP/IP está formada por múltiples protocolos de diferentes propósitos. Algunos de ellos, tales como IP, TCP y UDP constituyen el mecanismo básico de transmisión de datos, y serán utilizados por todas las aplicaciones. Otros protocolos permiten realizar tareas mucho más específicas, tales como transferir archivos entre computadoras (FTP), obtener páginas o documentos de la Web (HTTP), o sincronizar la hora desde otro equipo (XNTP).

Cualquier aplicación real utilizará varios de esos protocolos. Un caso típico es el envío de correo electrónico. En primer lugar, existe un protocolo para enviar y recibir correo electrónico (denominado SMTP), que define una serie de comandos que una máquina envía a la otra cuando requiere transferirle un mensaje. Esos comandos permiten especificar quien es el autor del mensaje, a quien va dirigido y cual es el texto a enviar. Sin embargo, ese protocolo (como todos los otros protocolos de aplicación) asume que hay alguna manera confiable para comunicar datos entre ambas computadoras, limitándose simplemente a definir a muy alto nivel los comandos necesarios para manejar la transmisión, pero no los detalles acerca de como va a efectivizarse la misma. Dichos detalles son dejados en manos de alguno de los protocolos de menor nivel, llamados protocolo de transporte: TCP o UDP.

SMTP utiliza a TCP como protocolo de transporte. TCP es responsable de asegurar que los comandos trasmitidos lleguen al otro extremo de la comunicación, contabilizando qué ha sido transmitido ya y retransmitiendo toda información que no haya llegado exitosamente a destino. Si la información a transmitir es demasiado larga, TCP la segmentará en varios paquetes que se transmitirán individualmente.

Obsérvese que esta funcionalidad se requiere para muchas aplicaciones; es por ello que conforma un protocolo independiente en vez de formar parte de la especificación de protocolos como SMTP. Desde el punto de vista del programador, TCP es una libraría de rutinas que las aplicaciones utilizan cuando necesitan comunicaciones confiables con otra computadora a través de la red.

De manera similar, TCP utiliza los servicios de IP para efectivamente desplazar los paquetes alrededor de la red. IP constituye un protocolo de red, y es el encargado de determinar que rutas deberán seguir los paquetes para llegar al punto de destino desde el punto de origen. Nuevamente, IP se presenta como una librería que utilizan protocolos de transporte como TCP al momento de enviar la información.

Esta estrategia para construir protocolos en varios niveles se denomina diseño estratificado (o layering). Consiste en considerar a las aplicaciones, a TCP y a IP como diferentes capas, cada una de las cuales hace uso de los servicios ofrecidos por la capa inmediatamente inferior. En general, la arquitectura de las aplicaciones basadas en TCP/IP presentan 4 capas:

 

Transmitiendo los paquetes

A fin de ejemplificar el proceso completo, supongamos que se desea transmitir un archivo de 15000 bytes. El protocolo de aplicación especializado en transferencia de archivos proporciona al protocolo de transporte el contenido del archivo a transmitir. La mayoría de las redes no pueden manejar paquetes de 15000 bytes, por lo que el archivo será segmentado en, digamos, 30 paquetes de 500 bytes cada uno, que entrega al protocolo de red para que sean enviados individualmente al otro extremo de la comunicación. Allí, los paquetes se reunirán para reensamblar el archivo original. Sin embargo, mientras los paquetes estén en tránsito, la red no sabrá que existe algún tipo de relación entre ellos9. Es también posible que el paquete número 15 llegue antes que el 14, o que algunos paquetes se pierdan en el camino y deban ser retransmitidos. Todas estas tareas (segmentación, retransmisión y reensamblaje) son llevadas a cabo por TCP (abreviatura de Transmission Control Protocol, o Protocolo de Control de Transmisión), mientras que el ruteo de paquetes individuales es responsabilidad de IP (abreviatura de Internet Protocol, o Protocolo de Inter-redes). A simple vista podría parecer que TCP es quien hace todo el trabajo, sin embargo, el rutear un paquete desde el origen hacia su destino puede ser una tarea muy compleja.

TCP/IP asume que la red está formada por un gran numero de redes independientes, interconectadas entre si por dispositivos denominados gateways10, proporcionando al usuario la capacidad para acceder a recursos ubicados en cualquiera de esas redes, independientemente de su dispersión geográfica11. Los paquetes frecuentemente atravesarán numerosas redes para llegar a su destino, pero el ruteo requerido para ello deberá ser totalmente invisible para el usuario final. Todo lo que el usuario debe conocer es la dirección IP del punto de destino, un número que identifica unívocamente a cada computadora dentro de la inter-red.

Así, TCP entrega los paquetes a IP especificándole simplemente la dirección IP de destino hacia donde debe enviarlos. Queda en manos de IP determinar la mejor ruta para que la entrega se haga efectiva. Dicha ruta (continuando con el ejemplo anterior, y en el contexto de la estructura de la red de la UTN Facultad Córdoba), podría implicar que cada paquete tenga que atravesar varios segmentos de LAN Ethernet dentro de la UTN FC, un enlace de microondas hasta el nodo de conexión a Internet, otro hasta algún telepuerto en Buenos Aires desde donde se establece una conexión satelital hacia los EEUU, y así sucesivamente hasta llegar a la red de destino, en donde deberá ser ruteado internamente hasta la computadora de destino.

Finalmente, para transmitir cada paquete, IP utiliza el protocolo de enlace físico que conoce las particularidades para acceder al medio físico de transmisión (por ejemplo, una placa de red Ethernet).

Multiplexación: Puertos y Sockets

En los párrafos anteriores se ha descripto el proceso para transferir información a lo largo de una conexión TCP/IP. Sin embargo, en un momento dado podrían existir, entre las computadoras de origen y destino, múltiples conexiones ocurriendo simultáneamente; pensemos, por ejemplo, en varios usuarios abriendo sesiones remotas o transfiriendo simultáneamente archivos o correo electrónico entre dos máquinas de la red.

Claramente, no es suficiente lograr que los paquetes lleguen al destino correcto; es necesario además poder discriminar a cual conexión pertenecen de las múltiples conexiones simultáneas que pueden existir en un momento dado.

Para identificar cada conexión, TCP asigna un número de puerto a cada una. Supongamos que tres personas están transfiriendo archivos entre dos computadoras. TCP asignaría un número de puerto a cada transferencia, por ejemplo, 1000, 1001 y 1002. Todos los paquetes que se envíen como parte de una misma conexión tendrán asignado ese número como puerto de origen. El número de puerto de origen permite también establecer una correspondencia directa entre una conexión de red y el programa de usuario que interviene en uno de los extremos de la conversación. En el otro extremo, habrá otro programa que recibe los datos transmitidos, que también deberá poder asociarse a dicha conexión. Esa asociación se hace por medio del puerto de destino que TCP asigna a cada paquete que transmite.

Cuando un programa de usuario (conocido como proceso cliente) abre una conexión de red por medio de TCP, se le asigna (mas o menos al azar) un número de puerto. Ese programa asume que en la otra computadora estará en ejecución otro programa (conocido como proceso servidor o, en la jerga Unix, demonio de red) que espera recibir peticiones desde la red. Cuando ese programa fue iniciado, su capa TCP le asignó también un número de puerto. Obviamente, el número de puerto que se asigne a procesos servidores no puede ser aleatorio, ya que sería imposible para los clientes saber que número especificar como puerto de destino. Los procesos servidores se asocian, entonces, con números de puerto fijos (llamados "números bien conocidos" -- "well-known numbers"), mientras que los procesos cliente obtienen números de puertos aleatorios al iniciar las conexiones12.

Obsérvese que una conexión de red puede entonces identificarse unívocamente por medio de un conjunto de 4 números: las direcciones IP de ambos extremos y los números de puerto de origen y destino. Para el caso de las tres transferencias de archivos que se ponían como ejemplo mas arriba, si las direcciones IP de las maquinas de origen y destino son 172.16.10.150 y 172.16.8.123, y la transferencia se hace utilizando el protocolo FTP (que tiene asignado el número de puerto 21), cada conexión se puede identificar de la siguiente manera:

 

Conexión 1
Dirección IP: 172.16.10.150 
Puerto: 1000
Dirección IP: 172.16.8.123
Puerto: 21

Conexión 2
Dirección IP: 172.16.10.150 
Puerto: 1001
Dirección IP: 172.16.8.123 
Puerto: 21

Conexión 3
Dirección IP: 172.16.10.150 
Puerto: 1002
Dirección IP: 172.16.8.123 
Puerto: 21
 

No pueden existir dos conexiones que compartan el mismo conjunto de números, pero es suficiente con que al menos uno sea diferente. En el ejemplo anterior, en donde tres usuarios transfieren archivos entre dos computadoras, dado que las computadoras involucradas en cada transferencia son las mismas, las direcciones IP son iguales para cada conexión y todos realizan transferencias vía FTP, por lo que el puerto de destino para las tres conexiones es el 21. Lo único que difiere es el número de puerto de origen, que permite diferenciar a los tres usuarios.

Cada par formado por una dirección IP y un número de puerto se denomina socket (enchufe), por lo que una conexión TCP puede verse como un canal virtual a través de una red, "enchufada" a un socket en cada extremo. Por otra parte, el utilizar un único canal de comunicaciones para combinar múltiples conexiones de datos se denomina multiplexación; la información que arriba desde la red debe ser demultiplexada a fin de que cada módulo de software reciba los paquetes que le corresponden.

De hecho, hay varios niveles de multiplexación en TCP/IP. Por una parte, TCP la utiliza para mantener múltiples conexiones, tal como se describió previamente. Por otra parte, sin embargo, existen otros protocolos (como UDP e ICMP) que utilizan IP como un medio para distribuir paquetes a lo largo de la red. Cuando IP recibe paquetes entrantes desde la red, debe poder determinar a cual protocolo de mayor nivel pasar el paquete. Esto constituye también otra forma de demultiplexación, y se realiza por medio de la asignación a cada paquete, por parte del IP de origen, de un numero de protocolo. Dicho número tiene un rol similar al número de puerto, con la diferencia de que no identifica conexión sino el protocolo de transporte que está administrando esa conexión.

El proceso de multiplexación y demultiplexación de TCP/IP se esquematiza en la siguiente figura:

En resumen...

 


8. Adaptado principalmente de un articulo de Charles Hedrick (Rutgers Univ., New Brunswick, N.J.) publicado en los newsgroups de Internet el 28 de Junio de 1987, y de otras fuentes mencionadas en la Bibliografía.

9. Más aún, la red ni siquiera sabe que los paquetes conforman un archivo.

10. En la jerga TCP/IP se denomina gateways a dispositivos que están conectados a mas de una red, y ofrecen capacidad para rutear paquetes entre esas redes. Es decir, se trata de ruteadores (dispositivos de nivel OSI 3) y no estrictamente de gateways (dispositivos de nivel OSI superiores, capaces de hacer transformaciones de protocolos, formatos, codificaciones, etc.)

11. De hecho, el término internet (con i minúscula) proviene de internetwork y se refiere a un conjunto de redes interconectadas. No debe confundirse con Internet (con I mayúscula), que se refiere a la red de redes de alcance global.

12. No es necesario que un proceso cliente obtenga un "numero bien conocido" ya que nadie está tratando de encontrarlo; por el contrario, es necesario que los servidores tengan esos números a fin de que los clientes puedan conectarse a ellos.