Story Transcript
Niveles TCP/IP Un protocolo de red es una especificación detallada de las "reglas" que deben seguir los diferentes programas que emplean una red de comunicaciones para intercambiar información. Para que un protocolo de red sea útil, su especificación debe ser pública y debe ser aceptada por una parte significativa de la industria. Es el caso de TCP/IP, que es, desde hace más de 20 años, el protocolo de red de mayor uso en el mundo y el "motor" sobre el que está construida Internet. Los protocolos de red suelen especificarse mediante "capas" superpuestas de funcionalidad. Cada una de las capas que define un protocolo tiene que ver con un determinado "nivel" de funcionalidad, y precisamente por ello, se denominan "niveles". Los niveles más bajos tienen que ver con el hardware, los superiores son responsabilidad únicamente de los programas que intercambian información, y los niveles centrales constituyen el "núcleo" del protocolo y están implementados, normalmente, en el Sistema Operativo o alguna librería estándar. A continuación vamos a describir brevemente los diferentes niveles de protocolo, y cómo se implementan en TCP/IP. Nivel Físico Para que dos ordenadores puedan intercambiar información, debe existir algún medio físico que los interconecte. Las posibilidades son muchas, desde una línea telefónica hasta un sofisticado enlace vía satélite. A TCP/IP le importa poco este nivel, puesto que TCP/IP no "habla" nunca de manera directa con el nivel físico, sino que lo hace siempre a través de un nivel intermedio. Esta independencia del nivel físico es una de las características más interesantes de TCP/IP, puesto que nos permite escribir programas o sistemas de comunicaciones que funcionarán de manera idéntica independientemente de que estemos conectados con un MODEM, con una línea RDSI o cualquier otra tecnología que pueda aparecer en el futuro.
Nivel de Enlace Para entender el nivel de enlace, vamos a fijarnos en el comportamiento de un elemento que nos resulta familiar. La mayor parte de nosotros conectamos a Internet mediante un MODEM, que a su vez está conectado a una línea telefónica convencional. Las líneas telefónicas se inventaron para transmitir voz. Cuando hablamos por teléfono, nuestro aparato convierte las ondas sonoras en señales eléctricas que se envían por un cable de cobre. Después de pasar por varias centrales de conmutación de circuitos de la compañía telefónica, la señal llega al aparato situado en el extremo opuesto y éste hace la función inversa, es decir, convierte la señal eléctrica en señal sonora. Los ordenadores, por el contrario, sólo usan el sistema binario, es decir, mediante largas sucesiones de ceros y unos. Para comunicar dos ordenadores necesitamos, por tanto, alguna manera de convertir ceros y unos a una señal eléctrica que pueda transmitirse por la línea telefónica y, por supuesto, volver a construir la cadena de ceros y unos en el destino a partir de la señal recibida. Esta es precisamente la función que realiza un MODEM (la palabra MODEM viene de modulador−demodulador). Los módems modernos son bastante sofisticados, e incluyen además mecanismos de corrección de errores, de compresión. Determinados niveles físicos permiten que sean varios los ordenadores o dispositivos conectados. Es el caso, por ejemplo, de una red Ethernet, en que muchos ordenadores se conectan a un cable coaxial o a concentradores basados en doble par). Si nos limitamos a convertir cadenas de bits (unos y ceros) a señales eléctricas, podría ocurrir que la información procedente de distintos ordenadores se mezcle formando un conjunto de unos y ceros sin significado coherente. Para evitar que esto ocurra, el nivel de enlace introduce un 1
concepto básico: el paquete de datos. Todo dispositivo que conecte a la red ha de enviar (y por tanto recibir) la información en forma de paquetes de datos. El nivel de enlace se preocupa de asegurar que los paquetes procedentes de diferentes orígenes fluyan uno detrás de otro, sin que colapsen entre sí. De manera inversa, el nivel de enlace es capaz, en recepción, de diferenciar el comienzo y el fin de cada paquete de datos, y por tanto identificar paquetes individuales dentro del continuo flujo de bits que se produce en la red Resumiendo, el nivel de enlace es responsable de traducir cadenas de bits (en forma de paquetes de datos) al medio concreto de transmisión del nivel físico (y a la inversa), y debe evitar que los paquetes se "mezclen" y pierdan, por tanto, sentido. TCP/IP no especifica completamente un nivel de enlace (es algo demasiado próximo al hardware), pero sí especifica el modo en que los niveles superiores del protocolo utilizarán el nivel de enlace, sea éste el que sea. Dicho en términos muy simples, cualquier nivel de enlace, para ser utilizable bajo TCP/IP, debe soportar un pequeño conjunto de funciones del tipo "envía este paquete", "recibe el siguiente paquete", etc.
Nivel de Red Ya que el nivel de enlace nos permite enviar y recibir paquetes de datos, debemos afrontar el siguiente problema. En una red hay muchos ordenadores, y todos ellos envían y reciben paquetes de datos. Necesitamos algún modo de "canalización" de cada paquete de datos, para que llegue a su destinatario sin molestar a los demás, y así convertirlos en conversaciones individuales. Aquí es precisamente donde entra el nivel de red, que realiza esencialmente tres funciones, que conviene comentar por separado: • En primer lugar, el nivel de red "marca" cada paquete de datos con la identificación del ordenador originador y la del destinatario. En el caso de TCP/IP, la identificación consiste en una "dirección IP", que es una especie de número de teléfono único para cada ordenador conectado a la red. Cada ordenador en la red debe tener un identificativo único para que todo el invento funcione. La identificación de los paquetes de datos hace posible que cada ordenador de la red procese únicamente aquellos en los que es el destinatario, descartando todos los demás, y además permite saber quién es el remitente de cada uno de los paquetes. • La segunda función del nivel de red es asegurar la consistencia del paquete de datos. Dicho de otro modo, la cadena de unos y ceros que constituye un paquete puede, en su largo camino a través de la red, sufrir algún tipo de deterioro. Puede ser que en alguno de los enlaces un "uno" se haya interpretado erróneamente como un "cero", puede que se haya perdido algún BIT, etc. ¿Como saber si el paquete que nos llega es correcto o contiene errores y por tanto es inutilizable? TCP/IP emplea una técnica de verificación conocida como CRC (cyclic redundancy check). El originador construye una especie de "firma" en base al contenido del mensaje, y agrega la firma al propio mensaje. El ordenador que recibe el paquete repite exactamente el mismo proceso con los datos, y genera su propia "firma". Si la firma generada coincide con la que viene en el mensaje, la probabilidad de que el mensaje sea erróneo es despreciable, mientras que si las firmas no coinciden, es seguro que el mensaje nos ha llegado mal. Este mecanismo de verificación es extremadamente importante, puesto que es la base para asegurar la "fiabilidad" de las comunicaciones. • Por último, el nivel de red incorpora mecanismos de control basados en mensajes (paquetes) que no contienen datos, sino instrucciones que comandan determinadas funcionalidades de la red. TCP/IP incorpora varios protocolos de control, pero el más importante es el llamado ICMP (Internet control messaging protocol). En TCP/IP, los diferentes servicios de nivel de red se agrupan en lo que se conoce como IP (inter−net protocol). Precisamente de ahí viene la parte final de las siglas TCP/IP. Un último detalle: en terminología IP, cada paquete de datos, incluyendo sus identificativos de originador y destinatario y su CRC se denomina un "datagrama". 2
Nivel de Sesión La práctica totalidad de los ordenadores modernos son multitarea, es decir, pueden ejecutar simultáneamente varios programas. Algunos de esos programas emplean servicios de comunicaciones para acceder a la red, y cada uno de ellos requiere mantener su propia "conversación". Es posible, incluso, que un programa precise mantener más de una conversación con otros elementos de la red. El nivel de red que acabamos de ver identifica los paquetes (datagramas) con las direcciones IP de los ordenadores originador y destinatario, pero eso es insuficiente, como estamos comprobando. Necesitamos una identificación más precisa para poder separar las diferentes conversaciones. El nivel de sesión nos permite establecer múltiples conversaciones (sesiones) entre múltiples ordenadores, sin que ninguna interfiera con las demás. El truco, una vez más, consiste en asignar un identificador único a cada conversación, y "marcar" cada datagrama (paquete) con los identificadores de la sesión originadora y destinataria. El identificador de sesión es único en cada ordenador, y combinado con la dirección IP constituye una identificación única en toda la red, por extensa que ésta sea. Una sesión TCP/IP se denomina un socket. En TCP/IP, el nivel de sesión incorpora un nuevo concepto, el servicio. El programa que desea iniciar una conversación (el cliente), llama a una dirección IP (la empresa X) solicitando un determinado servicio (asistencia técnica, por ejemplo), y en el ordenador destino (el servidor), se iniciará una conversación con un proceso especializado en ése servicio que hemos solicitado. Pues bien, en TCP/IP los servicios se identifican mediante un número (conocido habitualmente como puerto). Los puertos 1 al 1024 están asociados a servicios "conocidos" o de uso general (el servicio http que se emplea en la Web está asignado al puerto 80, por ejemplo), mientras que los puertos superiores se emplean para servicios específicos de un determinado producto, de un programa concreto o incluso asociados a un determinado ordenador. TCP/IP soporta dos protocolos de nivel de sesión: TCP (transmission control protocol) y UDP (user datagram protocol). La diferencia entre ambos se puede explicar muy fácilmente: TCP es un protocolo "confirmado", es decir, emplea mensajes de respuesta para asegurar que cada datagrama llega a su destino, y reenvía el datagrama si es necesario. Por contra, UDP se limita a enviar el datagrama, sin esperar ninguna respuesta del destinatario. Cada uno de los protocolos tiene ventajas para determinadas funcionalidades, e incluso a veces se usa una combinación de ambos. Por ejemplo, ftp utiliza un socket TCP para el control de la transferencia, mientras que el envío o recepción de datos se realiza mediante un segundo socket UDP. El nivel de sesión nos permite establecer conversaciones múltiples, basadas en servicios, y (en el caso de TCP) libres de errores. Este último aspecto es, probablemente, el más llamativo, puesto que libera a los programas de la tediosa tarea de comprobar cada cosa que llega y asegurar que lo que envían llega a su destino. Realmente la importancia actual de TCP/IP se debe, en buena medida, a la combinación de un buen diseño del nivel de red (IP), y un excelente protocolo de sesión confirmado (TCP). De hecho el protocolo en su conjunto se conoce por la combinación de dichas siglas.
Nivel de Aplicación TCP/IP nos provee de una plataforma excelente de comunicaciones, pero no especifica, ni le importa, cuál es el contenido y significado de los mensajes que puedan intercambiar los programas involucrados en una conversación. Las "reglas" de contenido y significado se especifican en el nivel de aplicación y son, por supuesto, específicas de cada pareja o conjunto de programas o, para ser más exactos, de cada servicio. Puesto que el nivel de aplicación es responsabilidad de los programas, cualquiera puede inventar su propio protocolo, y adaptarlo a las necesidades específicas del servicio que se quiera proveer. Existen probablemente varios cientos de miles de protocolos de este tipo, que se emplean en aplicaciones concretas en todo el mundo. 3
Cuando alguien inventa un protocolo de uso general y cree que ese protocolo debe publicarse para que otra gente pueda usarlo, escribe una especificación del mismo y la envía a una organización llamada IETF (Internet Engineering Task Force). Esta organización), asigna un número a la especificación y la publica en la red como un RFC (request for comments), estableciendo un debate público en el que la especificación se retoca y mejora hasta tener una aceptación suficiente. En ese momento, pasa a convertirse en un estándar, y además el IETF asigna al servicio descrito uno de esos "puertos conocidos" que comentábamos un poco más arriba. Por ejemplo, la inmensa mayoría de programas de correo electrónico emplean un protocolo de aplicación conocido como SMTP (simple mail transmission protocol), que es un estándar público y aceptado por el IETF, y cuyo puerto asignado es el 25. Otros ejemplos muy conocidos de protocolos de aplicación son TELNET, PING, HTTP, FTP, POP3, IMAP, IRC, etc.
4