-- Leo's gemini proxy

-- Connecting to elpamplina.duckdns.org:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

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.


PROTOCOLOS BASICOS: Los protocolos de bajo nivel son tres: IP, TCP y UDP. Se encargan de dar servicio al resto de protocolos especializados de alto nivel.


PROTOCOLOS DE APLICACION: Se especializan en tareas determinadas, dejando a los de bajo nivel el establecimiento y control de las conexiones. Algunos de ellos son:


FTP (Transferencia de ficheros)

RLP (Impresión remota)

TELNET (Ejecución remota)

HTTP (Transferencia de hipertexto)

etc.


ESTRUCTURA EN CAPAS


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.


EL MODELO CATENET


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 DIRECCION IP


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.


FUNCIONAMIENTO BÁSICO


1) EL NIVEL TCP


TCP (Protocolo de Control de Transmisiones) se encarga de:


Dividir el mensaje en datagramas.

Reenviar los datagramas que se pierdan.

Reensamblarlos en su orden correcto.


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:


Puertos (ports) de origen y destino: Son números que identifican cada "conversación" que mantiene un mismo nodo. Gracias a esta diferenciación, una misma máquina puede estar enviando y recibiendo varios flujos de información al mismo tiempo sin mezclarse. Un datagrama tiene que saber a qué número de puerto pertenece en origen y a cuál en destino. Una conexión es identificada unívocamente por los dos pares dirección IP/puerto TCP de origen y destino.

Número secuencial (sequence number): Sirve para mantener el orden de los datagramas, y así poder reordenarlos en destino. No se numeran los datagramas, sino los octetos transmitidos. P.e. si el tamaño del datagrama es 500, el primero se numera 0, el segundo 500, el tercero 1000, y así sucesivamente.

Checksum: La suma de todos los octetos del datagrama sirve para el control de errores.

Número de acuse de recibo (acknowledgement): Por cada datagrama recibido, el destinatario devuelve un datagrama con el número de confirmación, que es el número secuencial del que acaba de recibir. Si en origen no se recibe confirmación de un determinado datagrama en un tiempo razonable, se reenvía.

Desplazamiento al área de datos (HLEN): Indica al mismo tiempo el tamaño de la cabecera y el desplazamiento (offset), medido en múltiplos de 32 bits, hacia el lugar donde empiezan los datos. Este campo ocupa sólo tres bits.

Banderas de operación (Code bits): Estos seis bits diferencian entre varios tipos de datagramas (datos, asentimientos, solicitud de conexión, etc.)

Ventana (Window): Indica la cantidad de información que es capaz de absorber de golpe el destinatario, en forma de un número de 16 bits. El nodo origen sabe así cuántos datagramas seguidos puede enviar sin recibir confirmación. Se suele usar el mismo datagrama que el del número de confirmación, de tal manera que, a medida que se van confirmando los datagramas, el nodo origen va sabiendo la cantidad de información que puede ir enviando.

Puntero de urgencias (Urgent pointer): Cuando se envían órdenes de interrupción, o cualquier otra información que deba atenderse de inmediato, este puntero señala el lugar donde se encuentra, de manera que se salte inmediatamente a ella. Se usa en eventos asíncronos. Una de las banderas de operación se activa en estos casos.

El campo de opciones es de tamaño variable, rellenándose hasta ocupar 32 bits.


2) EL NIVEL IP


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.


Cabecera IP


El significado de los campos es:


Versión (VERS, 4 bits): Identifica la versión del protocolo IP que se utilizó para generar el datagrama. Así se evita que los equipos puedan malinterpretar el contenido de los campos al cambiar de estándar. La versión que mostramos aquí es la 4.

Longitud del encabezado (IHL o HLEN, 4 bits): Está medida en palabras de 32 bits. El formato más común es el de 5 palabras (el de la figura), pero puede aparecer opcionalmente una palabra más, llamada opciones IP. Si las opciones que se incluyen no completan 32 bits, se pone un campo de relleno.

Tipo de servicio (TOS, 8 bits): Especifica cómo debe manejarse el datagrama. Tiene subcampos que indican la prioridad y el grado de confiabilidad, retardo y capacidad que se requieren para la entrega de el datagrama. Se debe entender esta solicitud como simples indicaciones para los algoritmos de ruteo que ayuden para la selección de una ruta entre varias posibles. Una red de redes nunca garantiza el tipo de servicio solicitado.

Longitud total (16 bits): La longitud del datagrama, incluídos la cabecera y los datos. Los 16 bits de este campo limitan la longitud máxima posible de un datagrama IP a 65535 bytes.

Identificador (16 bits): Es un número entero que sirve para identificar los trozos de un datagrama fragmentado. Todos los trozos de un datagrama determinado tienen el mismo identificador.

Direcciones de origen y destino (Source and destination addresses): Son las direcciones IP (32 bits) de los nodos de origen y de destino. La primera sirve para que el destinatario reconozca el origen del datagrama; la segunda para el posible reenvío por gateways intermedias.

Número de protocolo (Protocol number): Identifica el protocolo de alto nivel que ha generado el datagrama. Éste suele ser TCP, pero, como ya se ha explicado, IP puede trabajar para diferentes protocolos, o incluso directamente con las aplicaciones. Este campo, básicamente sirve para que el receptor pueda interpretar correctamente el formato de la información que va encapsulada en el área de datos del datagrama.

Checksum (16 bits): Suma para control de errores. El propio campo checksum no entra en la suma (se toma como cero). IP y TCP tienen cada uno su propio checksum, que les permite realizar más eficientemente el control de errores. De hecho, el checksum IP sólo computa los campos de la cabecera IP, y deja a los protocolos de alto nivel la tarea de mantener su propio cómputo.

Indicadores y offset de fragmento (Flags and fragment offset): Cuando, en su recorrido, un datagrama se divide en varios fragmentos, estos campos permiten recomponerlo correctamente. Esto suele ocurrir cuando atraviesa redes que no pueden manejar datagramas de su tamaño.

Tiempo de vida (Time to live): Es un contador (en segundos) que se va decrementando a medida que pasa por diferentes sistemas. Cuando llega a cero, se considera que ha entrado en un bucle, y se descarta. Esto no es normal que llegue a ocurrir, pero se implementa esta protección para asegurar cualquier tipo de contingencia.


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:


Elimina la cabecera IP, comprobando el checksum.


Según el número de protocolo, le pasa el datagrama a TCP, u otro al que le corresponda.


Nivel TCP:


Elimina la cabecera TCP, comprobando el checksum.


Retorna datagramas de confirmación aceptando o rehusando los diferentes datagramas.


Reoganiza el mensaje según el orden marcado por los números de secuencia.


4) EL NIVEL DE APLICACION


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.


Establecimiento de la conexión


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.


Intercambio de comandos y datos


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:


Código ASCII para la representación de caracteres.

Las nuevas líneas se abren con un retorno de carro seguido de un salto de línea (esto se suele llamar "net ASCII").

Las conexiones de terminal son half-duplex con eco local.


Un ejemplo de funcionamiento: SMTP (mail)


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

5) PROTOCOLOS QUE SUSTITUYEN A TCP


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


Volver al índice

-- Response ended

-- Page fetched on Thu May 9 14:41:53 2024