INTRODUCCIÓN A LOS PROTOCOLOS TCP/IP
por: elpamplinadecai@gmail.com
TPC/IP son una familia de protocolos que se usan como estándar en Internet. Los más conocidos son TCP, IP, UDP, FTP, etc. Por ser los dos primeros los más generales, dan nombre a toda la familia.
Existe otra versión de TCP/IP, que se llama MILSPEC, definida por el Departamento de Defensa de EE.UU., y que es más formalizada que la original.
FTP (Transferencia de ficheros)
RLP (Impresión remota)
TELNET (Ejecución remota)
HTTP (Transferencia de hipertexto)
etc.
TCP/IP se estructura en capas, ocupando aproximadamente los niveles Red y Transporte del modelo OSI. Cada uno de ellos es como una librería de rutinas a ser llamadas para gestionar las comunicaciones.
IP es una librería de rutinas que pueden ser llamadas por TCP o por otros protocolos y aplicaciones directamente. Se dedican a tareas básicas de entrega de paquetes, abstrayendo la red física subyacente (LAN, línea serie, etc.). Se encarga de encontrar la ruta hacia su destino, pero no se preocupa de que los paquetes se pierdan o queden desordenados. A esto se la llama entrega no confiable. Estas son las rutinas que todo programa necesitará, ya sea por sí mismo o a través de TCP.
Es también una entrega punto a punto, pues se abstraen las redes intermedias por las que pasan los datos, dando la impresión a la capa superior de que existe una conexión directa entre los extremos.
TCP es responsable de hacer que los comandos y mensajes lleguen a su destino correctamente, reordenándolos y retransmitiendo lo que se pierda por el camino. Es lo que se llama transporte confiable. Además, TCP se encarga de separar los datos en DATAGRAMAS (unidades en que se divide el flujo de información para hacerla más manejable). TCP funciona también como librería de rutinas que son llamadas por las aplicaciones.
La ventaja de la separación en capas conceptuales es que TCP/IP se convierte así en una arquitectura robusta y adaptable. Es posible reemplazar o mejorar un servicio sin afectar a los demás. En la práctica, la arquitectura en capas no es tan directa como aparece en la figura, sino que el software IP puede comunicarse con varios módulos a nivel de transporte y/o con varios interfaces físicos.
En las máquinas intermedias (gateways) que dan paso a los datagramas a través de las redes por donde van pasando, éstos sólo llegan a subir hasta la capa IP, pues es ésta la que se encarga de su rutado. Para los niveles superiores al IP, los gateways simplemente no existen, de la misma manera que IP no tiene conocimiento de los puentes (nivel de enlace) y los repetidores (nivel físico) por los que pasan los datagramas.
Ha de tenerse en cuenta que la equivalencia entre capas OSI y capas TCP/IP no es perfecta, pues los presupuestos subyacentes son diferentes, y ambos modelos han tenido origen en trabajos muy distintos.
La principal diferencia está en la confiabilidad de la capa de red. En el modelo OSI el nivel de red contiene comprobación de errores y retransmisión, mientras que el protocolo IP se basa en la idea de que la confiabilidad punto a punto es más un problema que una ventaja, dejando a la capa de transporte manejar la mayor parte de la recuperación de errores.
La principal consecuencia de este planteamiento es que las máquinas finales intervienen activamente en la detección y corrección de errores, mientras que en el modelo OSI es el proveedor el que se encarga de ésto. Se puede ver, por tanto, a una red TCP/IP como un conjunto de nodos inteligentes unidos por un servicio de entrega muy sencillo.
TCP/IP sigue el modelo Catenet, consistente en la interconexión de redes locales mediante gateways (también llamados routers). Un usuario será capaz de acceder a cualquier máquina de cualquiera de los sistemas interconectados (es la base de la idea de Internet como "red de redes"). Los datagramas pueden pasar por decenas de redes antes de llegar a su destino, siendo esto totalmente transparente al usuario.
Se sigue un tipo de protocolo sin conexiones, es decir, cada datagrama se trata por separado, sin establecerse una conexión permanente por la que fluyan los datagramas. Para la red, cada datagrama no tiene relación con ningún otro. En este sentido, el término "datagrama" en la jerga de TCP/IP no coincide con el concepto tradicional que se le suele atribuir.
La dirección que identifica a cada nodo en el nivel IP se compone de cuatro números de 8 bits cada uno. Está pensado para que sirva de guía de la localización de la máquina desde entornos más grandes (los primeros números), discriminando con los últimos. Los números 0 y 255 no se usan pues tienen significados especiales.
La notación habitual es en formato decimal separando los números con puntos, p.e. 192.168.1.101
Una dirección IP no especifica necesariamente una computadora individual, sino una conexión de red. Así pues, un solo nodo puede tener varias direcciones, según el número de redes a las que esté conectado. Cuando un ordenador tiene varias interfaces de red sin ser un gateway, se le llama multi-homed.
Un inconveniente de este sistema de direccionamiento según conexión es que cuando un ordenador se mueve de una red a otra, debe cambiar su dirección. Así pues, las computadoras personales o las portátiles a menudo no pueden tener asignada una dirección permanentemente.
La cantidad de direcciones IP posibles (en la versión 4, que es la más extendida) parecía en su momento que era inalcanzable, pero con la expansión que ha tenido Internet a nivel mundial, se ha quedado pequeño. En la siguiente versión del protocolo (versión 6), este espacio se amplia enormemente, pero su uso todavía no está muy extendido. Parece claro que el agotamiento de direcciones, tarde o temprano, forzará el cambio de versión en todo el mundo.
TCP (Protocolo de Control de Transmisiones) se encarga de:
El tamaño máximo del datagrama se establece al iniciar la conexión. La forma más fácil de hacerlo es que cada extremo indique el datagrama mayor que es capaz de manejar, eligiéndose el menor de ellos.
TCP deja en manos de IP un datagrama y su destinatario, siendo trabajo de éste último su transmisión. Usa un mecanismo llamado demultiplexación, que consiste en que cada datagrama "sabe" a qué conexión pertenece gracias a la información contenida en una serie de cabeceras, que se van conteniendo unas a las otras, a medida que va pasando por las manos de los diferentes protocolos y niveles.
La CABECERA TCP tiene los siguientes campos:
El trabajo de IP consiste únicamente en encontrar el camino y enviar el datagrama. No se preocupa ni de la información que contiene, ni de la cabecera TCP, ni de su relación con otros datagramas. Sólo tiene que saber la dirección IP a la que debe enviarlo. IP añade su propia cabecera, que contiene información que servirá a los gateways y otros sistemas que el datagrama vaya encontrando por el camino. Su formato es el de la figura.
El significado de los campos es:
El protocolo establece específicamente el orden de los bits. Esto es importante, porque en una red de redes formada por millones de ordenadores, hay diferentes formas de representar internamente los números binarios. En general hay dos formas de hacerlo, con el octeto menos significativo en la dirección más baja de memoria, o bien con el octeto más significativo primero. Como la cabecera de los paquetes que se transmiten en la red contiene valores binarios que hay que interpretar correctamente, se ha de imponer un estándar, y dejar a cada nodo la tarea de reconvertirlo a su representación interna.
En los protocolos TCP/IP se ha establecido la norma de transmitir primero los bits más significativos (big endian).
Cuando se reciben los paquetes en destino, las diferentes capas deben actuar a la inversa, desmontando sus cabeceras, y reordenando paquetes y datagramas. El proceso que se sigue es el siguiente:
Nivel IP:
Nivel TCP:
Mientras que los protocolos básicos que se han visto se encargan de la transmisión, encaminamiento y reconstrucción de los mensajes, los protocolos de aplicación son los que permiten al usuario abrir conexiones remotas, pedir ficheros, enviar correo electrónico, etc.
Los niveles básicos que hemos visto se encargan de las tareas de transporte de los datos, proporcionando al nivel de aplicación una corriente de bytes, para que las aplicaciones la utilicen como si se tratara de una línea telefónica o un terminal.
La mayoría de los sistemas tienen programas especializados que actúan de servidores a la llamada de sistemas remotos (FTP, mail, etc.). Cuando un sistema se conecta con otro, necesita alguna manera de especificar con qué servidor quiere hablar. Para ello se establecen los llamados accesos predeterminados (well-known sockets), que no son más que determinados números de puerto que se reservan para cada servidor. Así, p.e., el puerto 21 se reserva siempre para el servidor FTP. Si existen varias conexiones FTP simultáneas, sólo se diferencian por el par dirección IP/puerto de destino (de cada máquina remota conectada), siendo el mismo puerto (el 21) en el servidor. El puerto asignado por la máquina remota no está predeterminado, y siempre será diferente a cualquier otro que tenga esa misma máquina en conexión. Generalmente, elegirá un número aleatorio superior a 1024 (es lo que se llama puerto anónimo). El servidor pedirá siempre a la máquina remota que escoja e identifique el puerto que está usando.
Las direcciones IP están en la cabecera IP, mientras que los puertos están en la cabecera TCP. Estos cuatro números en conjunto sirven para identificar unívocamente el datagrama.
Una vez establecida la conexión, existen tres formas de trabajar a nivel de aplicación:
a) Una vez las máquinas se han identificado mutuamente y han asignado los correspondientes puertos, el nivel de aplicación comienza a funcionar intercambiando mensajes que pueden ser comandos (palabras humanas al estilo de los lenguajes de programación), o bien datos. Los datos y los comandos se diferencian sólo por el contexto. El receptor sabe que lo que está recibiendo son datos porque el último comando que vió fue "Comienza el envío de datos". Una marca especial localiza el final de los datos (p.e., en mail se usa un punto al comienzo de una línea).
b) Algunas aplicaciones (como FTP) usan conexiones diferentes para datos y para comandos. En el momento en que FTP comienza a transferir un fichero, abre una conexión con nuevos números de puerto, dejando activa la anterior para permitir que se envíen comandos mientras dure la transmisión (p.e. para abortarla).
c) Las aplicaciones de tipo terminal (como telnet) establecen una sóla conexión donde, por defecto, se envían datos. Un carácter especial sirve para "incrustar" comandos tras él. Si este carácter se llegara a teclear en la terminal, se enviaría dos veces para así dejar claro que no se trata de un comando.
Un trabajo fundamental que debe hacer el nivel de aplicación es adaptar las particularidades de los sistemas (códigos, saltos de línea, etc.), para así permitir el intercambio de información entre sistemas diferentes. TCP e IP no se preocupan de ello, sólo envían octetos tal y como se los proporcionan. Los estándares establecidos marcan las conexiones tipo para cada aplicación, de tal manera que siempre puedan conectarse dos sistemas totalmente diferentes. Sin embargo, se da libertad para que sistemas parecidos puedan ponerse de acuerdo para usar normas comunes más eficaces. Los estándares más comunes son:
El estándar SMTP (Simple Mail Transfer Protocol) puede servir de ejemplo de cómo funcionan en general las aplicaciones de red.
SMTP asume la existencia de unas direcciones de mail al estilo usuario@máquina. La máquina que quiere enviar un mensaje, abre una conexión con el servidor de la máquina destinataria, usando el puerto 25 como acceso predeterminado. Se identifica él mismo, identifica al usuario que envía el mensaje, y al destinatario (recipiente). Luego envía el mensaje, siguiendo un esquema de cabecera identificativa, una línea en blanco y texto de mensaje, terminando con un punto al principio de una línea. Si un mensaje llegase a contener dicho punto, se envía el punto dos veces.
Los comandos son de texto normal, facilitando así el seguimiento de las conexiones. Los mensajes de respuesta del servidor van precedidos de un número que los hace identificables por el programa. La parte textual de éstos es para las personas, aunque a veces puede ser usada parte de ésta por el protocolo. Los números de los mensajes están pensados para que baste, en la mayor parte de los casos, con leer el primer dígito. Los mensajes que empiezan por 2 indican éxito; los que empiezan por 3 señalan que se espera una determinada acción; 4 indica errores "temporales", que se pueden subsanar y reintentar la transmisión; el 5 indica errores permanentes.
Un ejemplo de diálogo usando SMTP: se desea enviar un mensaje de lopez@inca.cau.es a perez@lince.cau.es:
220 lince.cau.es SMTP Service at 9 May 95 18:20:35 EDT HELO inca.cau.es 250 lince.cau.es - Hello, inca.cau.es MAIL From:<lopez@inca.cau.es> 250 MAIL accepted RCPT To:<perez@lince.cau.es> 250 Recipient accepted DATA 354 Start mail input; end with <CRLF>.<CRLF> Date: Sat, 6 May 95 11:11:11 EDT From: lopez@inca.cau.es To: perez@lince.cau.es Subject: Reunion Te propongo una reunion a las 16:00 horas, proximo jueves Saludos. . 250 OK QUIT 221 lince.cau.es Service closing transmission channel
Existen casos en los que no vale la pena usar las complejas estructuras de TCP, cuando la información que se va a intercambiar cabe en un sólo datagrama. No es necesario un protocolo tan complejo. Un ejemplo típico son las búsquedas de direcciones a partir de nombres Internet (DNS). La máquina que hace la pregunta sólo manda el nombre a buscar, y el servidor de nombres no retorna más que la dirección correspondiente.
UDP (User datagram protocol) está diseñado para aplicaciones que no necesitan enviar mensajes de más de un datagrama. Sustituye a TCP, encajando exactamente en el hueco que deja éste: coloca su cabecera y pasa la información a IP (el cual pondrá el número de protocolo de UDP en su cabecera, en vez del de TCP). No divide el mensaje en datagramas, ni tampoco controla si el mensaje llega a su destino.
ICMP (Internet control message protocol) se usa para enviar mensajes de error, o de otro tipo. Es usado por el propio software TCP/IP (más que por otro tipo de aplicaciones) para comunicarse, por ejemplo, un fallo en la conexión. Es aún más simple que UDP, y también maneja mensajes de un sólo datagrama, y ni siquiera usa números de puerto.
@ElPamplina@masto.es
elpamplinadecai@gmail.com