Voy a comenzar una serie de artículos con un objetivo claro: entender y analizar el tráfico de una red. Seguramente más de una vez os hayáis enfrentado a problemas como: lentitud en la red, infecciones de spyware, pérdida de conexión a internet, etc… Puede ser realmente un quebradero de cabeza solventar este tipo de problemas, pero si conocemos como viaja la información por la red nos resultará más fácil atajarlos. Para entender cómo se comunican las máquinas hay que ir al más bajo nivel y analizar los paquetes. Esto se hace con sniffers o programas de análisis como por ejemplo Wireshark.
¿Cómo se comunican las máquinas?
Para poder analizar el tráfico de una red necesitamos conocer previamente como se comunican las máquinas, aquí tenemos que hablar de los protocolos, del modelo OSI, de las unidades de protocolo de datos (PDU) y del hardware necesario para capturar ese tráfico.
Protocolos
Las redes de ordenadores están formadas por diferentes sistemas corriendo en diferentes plataformas. Para poder comunicarse entre ellas utilizan una serie de lenguajes o reglas que llamamos protocolos. Entre los protocolos más comunes están: TCP (Transmission Control Protocol), IP (Internet Protocol), ARP (Address Resolution Protocol) o HTTP (Hypertext Tranfer Protocol). Cuando tenemos un conjunto de protocolos que trabajan juntos se llama «protocol stack» o pila de protocolos.
Podemos pensar en los protocolos como en el lenguaje que utilizamos las personas para comunicarnos. Tenemos reglas para conjugar los verbos, para saludar a la gente, o incluso para dar las gracias. Pues los protocolos actúan de la misma forma, definiendo como «enrutar» o encaminar los paquetes, como iniciar una conexión, como confirmar la recepción de los datos, etc…
Los protocolos pueden ser simples o complicados dependiendo de su función. Sin embargo, la mayor parte de los protocolos tienen que lidiar con los siguientes problemas:
• Inicio de la conexión: ¿Quién inicia la conexión, el cliente o el servidor? ¿Qué información debe ser intercambiada antes de iniciar la comunicación?
• Negociación de las características de la conexión: ¿La comunicación es cifrada? ¿Cómo transmitimos las «encryption keys» entre las máquinas?
• Formato de los datos: ¿Cómo organizamos el contenido de los datos de la comunicación en el paquete? ¿En qué orden se procesan los datos al recibirlos?
• Detección y corrección de errores: ¿Qué ocurre si el paquete tarda mucho tiempo en llegar a su destino? ¿Qué ocurre si el cliente pierde la conexión con el servidor durante un breve espacio de tiempo?
• Fin de la conexión: ¿Cómo le indica una máquina a la otra que la conversación ha terminado? ¿Qué información debemos enviar para terminar una conexión de forma correcta?
Hablaremos en detalle de los protocolos más comunes más adelante.
El modelo OSI
El modelo OSI (Open System Interconnection) o también llamado la pila de capas o niveles del modelo OSI, es un modelo de referencia ideal para los protocolos de la red, los cuales están separados de acuerdo a sus funciones. Fue desarrollado originalmente en 1983 por la International Organization for Standardization (ISO) en un documento llamado ISO 7498. Muchos de los estándares están disponibles mediante pago pero algunos pueden ser libremente descargados desde aquí. Es simplemente un estándar, una recomendación para la industria. Los desarrolladores de software o hardware no tienen por qué seguirlo al pie de la letra. De hecho, no lo siguen, ya que el más utilizado es el modelo TCP/IP.
En el modelo OSI tenemos siete capas o niveles distintos («layers» en inglés) que nos permiten entender perfectamente las comunicaciones de red:
• Las 4 capas de la parte de arriba se llaman «Host layers» y son las responsables de proporcionar una entrega precisa de los datos entre los equipos.
• Las 3 capas de la parte de abajo se llaman «Media layers» y son las responsables de controlar la entrega física de los datos a través de la red.
Las funciones de cada capa, nivel o «layer» son las siguientes:
– Application (layer 7): La capa de aplicación es el nivel más alto del modelo OSI, es la capa vista por los usuarios finales, proporciona la interfaz de comunicación entre las aplicaciones y los distintos servicios de red. Aquí se encuentran los protocolos HTTP, SMTP, FTP, DHCP, DNS, etc…
– Presentation (layer 6): La capa de presentación se encarga de transformar los datos que recibe en un formato que pueda ser leído por la capa de aplicación o por las capas inferiores. La codificación o decodificación hecha de los datos, depende del protocolo de aplicación que envía o recibe los datos. Realiza funciones de compresión de datos. Aquí también tiene lugar el cifrado o descifrado para segurizar las comunicaciones. Ejemplos de protocolos de esta capa son ASCII, JPEG, MP3, TLS, SSL, etc…
– Session (layer 5): La capa de sesión controla el diálogo (o sesión, valga la redundancia) entre los dispositivos. Establece, gestiona, mantiene y termina las conexiones entre los equipos involucrados en la comunicación. Es responsable de establecer si la comunicación es full-duplex (simultáneamente en los dos sentidos) o half-duplex (en un solo sentido al mismo tiempo) y se encarga de terminar correctamente una conexión entre dispositivos. También tienen lugar aquí las funciones de autenticación y autorización. Ejemplos de protocolos de sesión son RPC, NetBIOS, SMB, etc…
– Transport (layer 4): La capa de transporte tiene como principal objetivo garantizar la correcta transferencia de los datos entre equipos manteniendo la calidad del servicio y asegurando que la comunicación se produce libre de errores. Esto se consigue vía mecanismos de corrección de errores, con segmentación o desegmentación, con controles de flujo, etc… El transporte de los datos es algo muy importante y un tema bastante extenso, y es por eso que el modelo OSI le dedica una capa entera. Aquí tenemos principalmente dos protocolos: TCP (orientado a conexiones o «connection-oriented») y UDP (no orientado a conexiones o «connectionless»). Algunos firewalls y servidores proxy operan en esta capa.
– Network (layer 3): La capa de red es una de las capas más complejas del modelo OSI, es responsable de enrutar los datos entre las distintas redes físicas. Utiliza las direcciones lógicas de los dispositivos de red (por ejemplo, las direcciones IP). Se encarga también, si es necesario, de dividir los datos en fragmentos más pequeños («splitting») y en algunos casos de la detección de errores. Los routers operan en esta capa. Son protocolos de esta capa IPv4 e IPv6, ARP, ICMP, etc…
– Data link (layer 2): La capa de enlace proporciona la transferencia de datos de nodo a nodo, un enlace o medio de transporte entre dos o más dispositivos directamente conectados. Su principal objetivo es realizar un esquema de direcciones para identificar los dispositivos (por ejemplo, a través de las MAC). Generalmente se divide en dos subcapas: una superior llamada LLC (Logical Link Control) y una inferior llamada MAC (Media Access Control). LLC define la forma de transferencia de los datos mientras que MAC se encarga del direccionamiento, por poner un ejemplo, la electrónica que utiliza una tarjeta de red (NIC) para comunicarse con otras tarjetas de red sería la subcapa MAC, mientras que el controlador o driver sería la subcapa LLC. Los switches operan en esta capa. Ojo, hablamos de switches de capa 2, existen también switches de capa 3 que operan también en la capa de red (capaces de trabajar con direcciones MAC e IP). Protocolos de esta capa son Ethernet, Token Ring, PPP, VLAN, etc…
– Physical (layer 1): La capa física es la más baja del modelo OSI y es el medio físico por el cual los datos de red son transferidos. Establece una conexión física entre los dispositivos para habilitar la comunicación entre ellos. La información que se intercambia aquí se transfiere en bits (unos y ceros). En esta capa se define el hardware y las características eléctricas empleadas, incluyendo voltajes, conectores, tipos de cable, pines, tarjetas de red, repetidores, etc… Esta capa define la topología de la red, establece y termina conexiones y convierte también señales digitales en analógicas (y viceversa). Protocolos de esta capa incluyen todos los relacionados con el cableado o las conexiones inalámbricas como pueden ser RJ45, 802.11, RS-232, USB, DSL, etc…
El modelo TCP/IP
Además del modelo OSI también tenemos la Familia de Protocolos de Internet (Internet Protocol Suite ó IP Suite) más conocido como el modelo TCP/IP que fue desarrollado por el Departamento de Defensa de los Estados Unidos, de hecho, muchas veces se conoce como el modelo DoD (Department of Defense). Es anterior al modelo OSI, de la década de 1970, y fue implantado originalmente en la red ARPANET (por ello también lo encontraréis como modelo DARPA). Debe su nombre a sus dos protocolos más importantes: TCP (Transmission Control Protocol) e IP (Internet Protocol). Es un modelo que se adecúa más a la implementación física, de hecho, Internet se basa en este conjunto de protocolos.
El modelo TCP/IP y los protocolos relacionados son mantenidos por la IETF (Internet Engineering Task Force) a través de una serie de publicaciones llamadas Request for Comments (RFC) que podéis encontrar aquí.
El modelo OSI es más fácil de entender, pero el modelo TCP/IP es el que realmente se usa. La idea es similar a la del modelo OSI, pero aquí en vez de tener siete capas, tenemos cuatro. En la siguiente imagen tenéis un resumen de las distintas capas del modelo OSI comparadas con el modelo TCP/IP:
Si buscáis información sobre alguno de estos protocolos vais a encontrar que algunos aparecen repetidos en distintas capas del modelo OSI. Un ejemplo es ARP, el cual, en la tabla que he confeccionado, lo he puesto como capa 3, sin embargo lo encontrareis también en la capa 2 (hay quien dice que está en la capa 2,5). El modelo OSI es una representación ideal de las capas, pero en la realidad un protocolo puede no estar claramente definido dentro de este modelo. El modelo TCP/IP es más realista y es por eso que es el que se sigue en industria. Las 7 capas del modelo OSI están muy bien para entender cómo funcionan las comunicaciones de red, pero en la vida real, estas capas o límites no son tan claros.
Ahora que ya entendemos las distintas capas ¿cómo acordarnos de ellas de forma sencilla? Una que particularmente me gusta es la siguiente frase (encontraréis muchas otras en Internet):
«All People Say They Never Download Porn»
A – Application – layer 7
P – Presentation – layer 6
S – Session – layer 5
T – Transport – layer 4
N – Network – layer 3
D – Data Link – layer 2
P – Physical – layer 1
Muchas veces se utilizan las capas del modelo OSI para clasificar los problemas de red. Así encontraréis que los problemas con los routers se denominan «problemas de capa 3», o los problemas con el software son «problemas de capa 7». Como curiosidad, si alguna vez os encontráis con técnicos denominando al problema como «de capa 8», que sepáis que esta capa no oficial hace referencia al usuario 😉 .
Flujo de datos a través del modelo OSI
¿Cómo van viajando los datos a través del modelo OSI? Inicialmente la transferencia de datos entre dos equipos comienza por la capa superior de aplicación para ir bajando por los distintos niveles hasta llegar a la capa física, en donde se transmite al equipo receptor. El equipo receptor recibe los datos por la capa física y van subiendo por las distintas capas hasta llegar a la de aplicación:
Cada capa del modelo OSI sólo se puede comunicar con las capas directamente conectadas, por ejemplo, la capa 3 o de red sólo puede interactuar con la capa 4 y la capa 2 para recibir o enviar información.
Los protocolos no son redundantes, es decir, sin un protocolo de la capa 7 ofrece un determinado servicio, entonces ningún otro protocolo de ninguna otra capa ofrecerá el mismo servicio. Podrán tener características u objetivos similares pero siempre serán diferentes. Además los protocolos son complementarios en el emisor y el receptor, si un protocolo de la capa 7 en el emisor se encarga de formatear los datos a enviar, el mismo protocolo de la capa 7 del equipo receptor será el encargado de «desformatear» esos datos recibidos. Es por esto que se dice que utiliza una comunicación horizontal.
Encapsulación de los datos
Los protocolos de las distintas capas del modelo OSI intercambian los datos entre ellas con la ayuda de la encapsulación. Cada capa es responsable de añadir una cabecera (header) o cola (footer o trailer) a los datos transferidos. Estas headers o footers no son más que unos bits extra de información que permiten a las capas comunicarse entre ellas.
El proceso de la encapsulación da como resultado una unidad de protocolo de datos o PDU (Protocol Data Unit), el cual incluye los datos que se envían y además todas las headers o footers añadidos. Por ejemplo, cuando la capa 6 recibe datos de la capa 7, ésta añade su propia header a los datos antes de traspasarlos a la capa 5, la capa 5 a su vez añadirá su propia header a los datos antes de transferirlos a la capa 4, y así sucesivamente mientras vamos bajando por las capas. Por lo tanto esta PDU a medida que va bajando por las capas va aumentando su tamaño, llegando a su tamaño final en la capa física. Una vez se transmite y llega al receptor, esta PDU empieza a subir por las capas, pero ahora, en vez de seguir añadiendo headers o footers los va eliminando en sus correspondientes capas. De tal forma, que cuando alcanza la capa 7 tiene su formato original.
Dependiendo de en qué capa estemos, la PDU tiene un nombre diferente. Normalmente a los PDUs de las tres capas superiores (Aplicación APDU, Presentación PPDU y Sesión SPDU) se les llama directamente datos, mientras que en las capas inferiores podemos tener segmentos o datagramas, paquetes, frames y finalmente bits. Aunque en general, a todos los PDUs se les acaba llamado paquetes indistintamente.
El footer se utiliza normalmente en los frames (capa 2), ya que éstos incluyen una comprobación de errores (como por ejemplo checksum o CRC) que se calcula en el momento en que se envía el paquete. Es por esta razón que va detrás y no delante como los headers.
El siguiente gráfico muestra un ejemplo de encapsulación, como se van añadiendo las distintas cabeceras o colas a medida que descendemos por las capas:
Podríamos representar un paquete de la siguiente forma:
Encontraréis que normalmente a la información que va entre el header y el footer de una capa se le denomina payload. Seguramente también hayáis visto el término SDU (Service Data Unit), que está relacionado con el PDU pero no es lo mismo. La diferencia es que la PDU de una capa, especifica el conjunto de datos a enviar al protocolo par ubicado en el receptor, mientras que la SDU es el conjunto de datos que proviene de la capa superior, aún no encapsulada. Es decir, la unidad de datos de servicio de una capa corresponderá a la porción de datos (payload) de la PDU de la misma capa.
A veces ocurre que el tamaño de la SDU que se recibe de una capa superior excede el tamaño máximo de la PDU de la capa inferior, por lo que se deberá realizar una fragmentación (separar un paquete en varios bloques de datos). Ésta se produce cuando un paquete sobrepasa la unidad máxima de transferencia del canal físico (MTU – Maximum Transmission Unit), que para Ethernet es por ejemplo 1500 bytes. Se conoce como «IP fragmentation» pero hablaremos de ello más adelante.
Para mostrar cómo funciona la encapsulación de los datos, vamos a poner un ejemplo práctico de comunicación entre cliente y servidor a la hora de acceder a una página web:
En el ejemplo el cliente está tratando de acceder a la web https://itadmins.es/ alojada en el servidor, por lo que el protocolo de la capa de aplicación usado en este caso es HTTP. Cuando abrimos el navegador y escribimos la url, HTTP se encarga de solicitar el archivo index de nuestra web a través de una petición o comando (paquete request) (asumiremos que la sesión TCP/IP ya ha sido iniciada).
Una vez generada la petición, el paquete request tiene que llegar a su destino. Aquí vamos a omitir las capas de presentación y sesión, por lo que el paquete baja por las capas del modelo OSI hasta llegar a la capa de transporte, en la cual se crea una cabecera TCP que se añade a la PDU. TCP es el protocolo de transporte que garantiza que los datos sean entregados en su destino sin errores y en el mismo orden en que se transmitieron, por lo que la cabecera TCP es una secuencia de números y otros datos destinados a cumplir con este propósito.
HTTP va encapsulado en TCP, encontraréis que en inglés dicen «rides on» o «sits on» debido al diseño top-down del modelo OSI. También se le suele llamar al protocolo TCP el «worker», y al protocolo IP el «workhorse» haciendo símil con el jinete y el caballo de batalla. TCP a su vez va encapsulado en IP, por lo que TCP «rides on» IP.
Una vez hecho su trabajo TCP, bajamos a la capa de red en la que IP se encarga de crear su cabecera la cual contiene información sobre la dirección lógica de envío y la añade al PDU. Una vez hecho esto envía el paquete a la capa de enlace en la cual se crea una cabecera Ethernet, conteniendo ésta información sobre la dirección Ethernet física. Aquí ya tenemos el paquete completo y sólo queda enviarlo por el medio físico donde se transmite por medio de ceros y unos.
El paquete viajará por el cable de red llegando a nuestro servidor web, donde comenzará a leerlo e irá ascendiendo por las distintas capas. Primero leerá la cabecera de enlace – Ethernet, en la que la tarjeta de red comprueba a través de su dirección física que el paquete ha llegado a su destino correcto. Una vez procesada esta información, la cabecera Ethernet es desechada y se procesa la cabecera IP. Aquí se comprueba que el paquete se ha recibido correctamente y que no ha sido fragmentado, una vez comprobado esto se desecha su cabecera y procede a leer la cabecera TCP. En esta cabecera se comprueba que el paquete ha llegado en la secuencia correcta, y una vez comprobado se desecha también para dejar sólo los datos de la capa de aplicación (nuestra petición), los cuales se envían directamente al servidor web que almacena nuestra web. En respuesta a esta petición del cliente, el servidor debería enviar un paquete TCP ACK (acknowledge – acuse de recibo) para que el cliente sepa que su petición ha sido recibida, seguido del archivo index.
Más adelante hablaremos en detalle de cada uno de los protocolos que han intervenido en esta comunicación. Si habéis conseguido llegar hasta aquí… ¡enhorabuena! pero por hoy es suficiente, en el siguiente artículo hablaremos del hardware de red, tipos de tráfico y más cosillas fundamentales 🙂 .
Un saludo!
Deja una respuesta