1: Introducción a Redes

Protocolos

La familia de protocolos TCP/IP IP (Transport Control Protocol/ Internet Protocol) es la base actual de Internet y de las redes. Esta formada por más protocolos de los que su nombre indica y lo que realizan es permitir que los equipos se comuniquen entre s�. Windows Server necesita de TCP/IP para su Directorio Activo (AD, Active Directory)

Existen dos estándares al respecto, el modelo ISO OSI y el propio TCP/IP.

El modelo OSI

El modelo ISO OSI comienza con la premisa de que la comunicación entre dos equipos es tan compleja que no podría considerarse como una sola entidad. Por ello el proceso de comunicación debe dividirse en capas diferentes, donde cada una se situará sobre la inferior, utilizando funciones asignadas por capa. Dejando a los desarrolladores el funcionamiento interno de las mismas. Siete son las capas definidas por la ISO OSI, en orden ascendente:

  • Física: Es la encargada de dejar las secuencias de bits en los medios o de recogerlas. Se implementa por hardware.
  • Enlace de datos: Define los paquetes (tramas), permitiendo el envío de los mismos entre equipos interconectados físicamente. Se implementa combinando hardware y software.
  • Red: Se encarga que los equipos se envíen tramas mediante las capas inferiores. Se implementa por software y no es fiable, es decir, los paquetes pueden perderse, dañarse o encaminarse incorrectamente. La confiabilidad le corresponde a capas superiores.
  • Transporte: Se encarga de la transmisión fiable de datos a través de la red. Utiliza la comunicación extremo a extremo añadiéndole confiabilidad.
  • Sesión: Controla la comunicación entre aplicaciones de lado a lado. Abre y cierra las sesiones.
  • Presentación: Traduce los formatos de los datos para las diferentes aplicaciones.
  • Aplicación: Aplicaciones y usuarios; por ejemplo el programa de correo.

El modelo DARPA (TCP/IP)

Modelo utilizado en internet. Con sólo cuatro capas aunque compatibles con el modelo OSI.

Veamos una tabla de correspondencia entre modelos.

IP Internet Protocol

Para una comprensión de TCP/IP es necesario conocer uno de sus protocolos más importantes: IP. IP es el bloque de construcción de red del resto de protocolos y capas. Se halla perfectamente definido en la RFC 791, Protocolo de Internet. IP ofrece varios servicios a la capa superior:

  • Protocolo de red: Protocolo de red y enrutable. La cabecera contiene la información necesaria para el encaminamiento de un paquete, con dirección IP de origen y dirección IP de destino. Una dirección IP tiene dos componentes, la parte de dirección de red y la parte de host. La entrega de paquetes y su enrutamiento es posible al tener una dirección de red de destino. Así mismo también contiene una cuenta de saltos para limitar el número de enlaces por los que pasará el paquete antes de ser descartado.
  • Protocolos de clientes múltiples: IP es un transportador entre redes para los protocolos de capa superior, pudiendo transportar distintos protocolos, pero cada paquete IP sólo puede contener datos de un protocolo. Tanto el cliente como el servidor utilizan el mismo protocolo, así el paquete no necesita indicar protocolo de origen y destino. Algunos protocolos son TCP, ICMP, IGMP o UDP.
  • Entrega de datagramas: Proporciona un servicio de entrega sin conexión y no confiable a los protocolos de capas superiores. Sin conexión: no hay negociación previa entre nodos IP para enviar datos y no se crea ni mantiene conexión lógica. No confiable: El paquete se envía sin secuencia y sin confirmación de llegada a su destino, esto es responsabilidad de TCP.
  • Independencia de la capa de interfaz de red: IP es independiente de la tecnología presente en la interfaz de red. Utiliza una dirección de 32 bits (ipv4) que es independiente del esquema de direccionamiento de la capa de interfaz de red.
  • Fragmentación y reensamblado: Para ser compatible con el tamaño máximo de trama de distintas tecnologías de la capa de interfaz de red, IP permite la fragmentación de una carga al reenviarla por un enlace con una MTU menor que el tamaño del datagrama IP. Los enrutadores o el host fragmentan la carga y puede ocurrir en varias ocasiones. El host de destino reensambla los fragmentos.
  • Extensible mediante opciones IP: Si se necesita pueden utilizarse opciones IP para características no disponibles en la cabecera estándar. Las opciones se anexan a la cabecera, añadiendo funcionalidad personalizada. Por ejemplo especificar una ruta que pueda seguir un datagrama IP en una red IP.
  • Tecnología de intercambio de paquetes de datagramas: Cada paquete es un datagrama, cuya dirección de destino es significativa y que será examinada por cada enrutador, el cual tomará independientemente su decisión de enrutamiento para reenviar el paquete. Ello hace que las rutas de cada paquete puedan ser distintas, y llegar en distinto orden del que se envió.
    -Un datagrama está formado por una cabecera IP y una carga IP. La cabecera tiene un tamaño entre 20 y 60 bytes, con incrementos de 4 bytes. Proporciona compatibilidad de enrutamiento, identificación de carga, tamaño del datagrama y cabecera, compatibilidad de fragmentación y opciones IP. Mientras la carga tiene un tamaño variable entre 8 bytes (datagrama de 68 bytes con cabecera de 60 bytes) y 65515 bytes ( un datagrama de 65535 bytes con cabecera de 20 bytes).-

Quizás lo que más interese a éste nivel sean las direcciones IP; Es muy importante que la asignación de éstas sean únicas y correctas a todos los nodos de la red. No es que parezca tener demasiada dificultad dicha asignación, pero en realidad hacerlo usando técnicas de subred si que lo complica.

Una dirección IP es una dirección lógica de 32 bits (ipv4) que puede ser:

  • Una dirección IP de unidifusión, que se asigna a una única interfaz de red. Se utilizan en comunicaciones de uno a uno.
  • Una dirección IP de difusión, que está diseñada para ser recibida por todos los nodos IP del mismo segmento de red. Se utilizan en comunicaciones de uno a todos.
  • Una dirección IP de Multidifusión, es una dirección para escuchar en un segmento de red o en distintos. Se utilizan en comunicaciones de uno a varios.

¿Cómo se expresan?
Una IP es un valor de 32 bits, que pueden manejar perfectamente los equipos. Sin embargo nosotros no pensamos en binario, normalmente lo hacemos en decimal, por lo que parece más habitual expresarlas así.
La IP se divide en octetos, cantidades de 8 bits, si la dirección es de 32 bits entonces nos encontramos con 4 octetos. Por tanto expresamos la dirección IP con cuatro octetos decimales separados por un punto, conocido como notación decimal con puntos.
Esto es una IP: 00001010000000011111000101000011
Si la dividimos en cuatro octetos: 00001010 00000001 11110001 01000011
Cada octeto se pasa a base 10: 10.1.241.67
Si observamos vemos que el número mayor sería 11111111, lo que en decimal supone 255.
Utilizaremos la notación w.x.y.z para referirnos a las direcciones IP.
Clases de direcciones
Hay 5 clases de direcciones IP, clasificadas como Clase A, B, C, D y E.
Las direcciones de la clase A se destinan para redes con gran número de hosts. El primer octeto es el Id de red, los restantes Id de host.
w = Id de red.
x.y.z = Id de host

Un ejemplo: 10.0.1.137
Id de red = 10
Id de host = 0.1.137
A esta clase se le asignan las direcciones comprendidas desde 1.0.0.0 a 126.0.0.0, y de ellas 10.0.0.0 para ámbito privado.

Las direcciones de la clase B para redes de tamaño mediano, aquí los dos primeros octetos serán el Id de red y los segundos el Id de host.
w.x = Id de red
y.z = Id de host

Un ejemplo: 172.16.0.25
Id de red = 172.16
Id de host = 0.25

Aquí tenemos desde 128.0.0.0 hasta 191.255.0.0, siendo el rango 172.16.0.0 hasta 172.31.0.0 para redes privadas.

Las direcciones de la clase C serían para redes pequeñas, en donde el Id de red le corresponde a los tres primeros octetos, siendo el último el significativo Id de host.
w.x.y = Id de red
z = id de host

Un ejemplo: 192.168.0.29
Id de red: 192.168.0
Id de host: 29

Aquí está el rango comprendido entre 192.0.0.0 hasta 223.255.255.0, extrayendo el rango 192.168.0.0 hasta 192.168.255.0 para el ámbito privado.
Estas tres clases son para IP de difusión.

La clase D se destina para direcciones IP de multidifusión y las de la clase E son direcciones experimentales.

El rango 127.x.y.z se reserva como direcciones de bucle invertido.
Veamos unas tablas:

Como vemos, la primera dirección y la última no son utilizables, ya que la primera w.0.0.0, w.x.0.0, w.x.y.0 es la dirección de red y la última w.255.255.255, w.x.255.255, w.x.y.255 está destinada a difusión (broadcast).
Con las máscaras de red podemos segmentar una red en distintas subredes, se verá pero esto indica que la primera y última dirección de esa subred también son inutilizables.
Para que un host o un enrutador puedan distinguir el Id de red del Id de host, la RFC 950 define el uso de una máscara de bits para identificar cada Id. Llamada máscara de subred o máscara de dirección . En cada configuración de dirección IP ha de existir una máscara de subred. Se expresa con el mismo formato que las IP pero no son direcciones IP.
Genéricamente tenemos:
Así cuando expresamos un Id de red podemos hacerlo correctamente de dos formas:

- 192.168.4.0, 255.255.255.0
- 192.168.4.0/16

¿Cómo se determina el Id de red?

Con el resultado del AND lógico entre la IP y la máscara de subred.

Un ejemplo:

IP 10000011 01101011 10100100 00011010
Máscara 11111111 11111111 11110000 00000000
Id de red 10000011 01101011 10100000 00000000

131.107.160.0/20, o 131.107.160.0, 255.255.240.0

Utilizando la máscara podemos dividir cada red en subredes, si nos fijamos, las posibilidades son exactas, es decir: /9, /10, /11, /12, ............./31.

Un ejemplo con la clase C:
/25 = 126 host en dos subredes, 255.255.255.128
/26 = 62 host en cuatro subredes, 255.255.255.192
/27 = 30 host en ocho subredes, 255.255.255.224
/28 = 14 host en dieciséis subredes 255.255.255.240
/29 = 6 host en treinta y dos subredes 255.255.255.248
/30 = 2 host en sesenta y cuatro subredes 255.255.255.252

¿Bueno y todo esto?

Veámoslo con un ejemplo:

Tenemos una red de clase C con ID de red 192.168.0.0, la subdividimos en 2 subredes utilizando 192.168.0.0/25, todos los equipos están físicamente conectados al mismo medio, pero forman dos redes lógicas distintas.
Así tenemos que el equipo con IP 192.168.0.1/25 no puede comunicarse con el equipo con IP 192.168.0.129/25, pero si con todos los que tengan un Id menor o igual a 126 y con ninguno que lo tenga superior. Por supuesto las direcciones 192.168.0.0 y 192.168.0.126 no son aplicables a host, ni tampoco la 192.168.0.127 y 192.168.0.255, direcciones de red y broadcast respectivamente de cada segmento. Para que se vieran se necesitaría un enrutador o cambiar la máscara de subred.

Tabla de enrutamiento (accesible con el comando route print desde la línea de comandos)

Esta tabla contiene las rutas en memoria del nodo (cada nodo tiene una) y cada entrada presenta la información necesaria para el reenvío de paquetes para un intervalo de IP de destino. Además contiene la puerta (o puertas) de enlace predeterminadas para las rutas. Todo ello es utilizado para generar la interfaz de próximo salto y la IP de próximo salto.

El primero es el dispositivo físico o lógico a través del que se reenvía el datagrama IP, el segundo la dirección IP del nodo al que se reenvía el datagrama.

Una ruta de la tabla tiene la información necesaria para identificar el destino, la interfaz y dirección de próximo salto y además decidir la ruta más conveniente cuando hay varias.

La tabla de enrutamiento contiene la información referente a:

-Destino: Junto a la máscara de red, representa el intervalo de direcciones IP al que se puede tener acceso con esta ruta. Puede ser una Id de red o una dirección IP.
-Máscara de red: Máscara de bits utilizada para determinar los bits significativos de Destino. Debe formarse por una serie de bits 1 contiguos seguidos por una serie de bits 0 contiguos. Como hemos dicho, Destino y máscara definen el intervalo de IP. Un datagrama IP con dirección IP de destino del intervalo coincide con la ruta. Para determinar si una IP de destino de un datagrama reenviado coincide con una ruta, se realiza un AND lógico a nivel de bit entre la IP de destino y la máscara. El resultado se compara con el valor del campo Destino para la ruta. Si coinciden, la ruta es correcta para el paquete y se utiliza la IP de próximo salto.
-IP de próximo salto: IP a la que se reenviará el datagrama IP si coincide con la ruta. Es relevante para enlaces de difusión, e irrelevante en enlaces punto a punto. Para rutas de segmentos de red directamente conectados, el campo Próximo salto puede configurarse con la IP de la interfaz de ese segmento de red.
-Interfaz: Designación de la interfaz lógica o física utilizada al reenviar datagramas mediante esta ruta. Puede ser un nombre lógico o la IP de la propia interfaz. Windows utiliza la IP asignada a la interfaz de red.
-Métrica: Coste de la ruta, ayuda a determinar la ruta a elegir entre varias con el mismo destino y máscara, se utilizará la ruta con métrica más baja. Se utiliza para reflejar la cuenta de saltos(enrutadores hasta el destino).

Las rutas pueden ser de los tipos:

-Ruta de host: Ruta a un IP específica, por tanto la máscara de red es /32 (255.255.255.255). Se utilizaría para especificar una ruta más óptima a host específicos en una subred remota.
-Ruta de Id de red: ruta para destinos con clase, sin clase, de subred y de superred. La máscara se encuentra entre /1 y /31.
-Ruta predeterminada: Ruta hacia todos los destinos, se utiliza cuando no hay coincidencias con el destino. Viene representada por 0.0.0.0 y una máscara /0, mejor 0/0. Una puerta de enlace predeterminada configurada en un host, crea una ruta predeterminada en la tabla de enrutamiento. Se utiliza para enrutamiento estático y para resumir todos los destinos de una gran red IP, como Internet.

  • Ruta predeterminada 0/0: es la ruta para cuando nos hay otras coincidencias. En caso de ser elegida, el paquete se reenvía a la IP de la puerta de enlace predeterminada (192.168.0.1) mediante la interfaz con IP 192.168.0.4.
  • Ruta de bucle invertido 127.0.0.0/8, coincide con cualquier ruta comprendida entre 127.0.0.0 y 127.255.255.255. Todos los datagramas de este intervalo se reenvían a la dirección reservada de bucle invertido 127.0.0.1 mediante la interfaz de bucle invertido (127.0.0.1).
  • Ruta de red conectada directamente 192.168.0.0/24. El datagrama IP se reenvía a la IP de destino mediante la interfaz asignada a la IP 192.168.0.4. (ruta de subred conectada localmente)
  • Ruta de host local 192.168.0.4/32, todo el tráfico dirigido a la IP de host local se reenvía a la dirección de bucle invertido (127.0.0.1) mediante la interfaz de bucle invertido(127.0.0.1)
  • Ruta de difusión dirigida a todas las subredes 192.168.0.255/32. Los paquetes destinados a la dirección de difusión dirigidas a todas las subredes se envían como difusiones de nivel MAC, mediante la interfaz con IP 192.168.0.4
  • Ruta de multidifusión 224.0.0.0/4, se utiliza para coincidir con todas las direcciones de clase D reservadas para el tráfico IP de multidifusión. Se envían como multidifusiones de nivel MAC utilizando la interfaz con IP 192.168.0.4
  • Ruta de difusión limitada 255.255.255.255/32, ruta de host para dirección de difusión limitada. Los datagramas dirigidos a esta dirección se envían como difusiones de nivel MAC mediante la interfaz con IP 192.168.0.4.
Las métricas de enrutamiento 20 indican una interfaz ethernet a 100 Mbps.
(Las rutas de las interfaces virtuales vmware han sido eliminadas a propósito)

ICMP (Internet Control Message Protocol)

Este protocolo informa de condiciones de error y control en nombre de IP. Protocolo extensible, proporciona funciones para comprobar la conectividad IP y ayudar en la configuración automática de los host. No hace que IP sea confiable. Aunque informa de un error, no tiene requisitos de cómo ha de tratarlos. Depende de la implementación TCP/IP interpretar el error y ajustar su comportamiento.

Los tipos de ICMP son:
0 Respuesta de eco
3 Destino inaccesible
4 Flujo de origen
5 Redirección
8 Solicitud de eco (Eco)
9 Anuncio de enrutador
10 Solicitud de enrutador
11 Tiempo de espera agotado
12 Problema de parámetros


Protocolo ARP

ARP es un protocolo utilizado en redes basadas en difusión., como ethernet y Token Ring. Resuelve la dirección IP de próximo salto de un nodo a su dirección correspondiente de control de acceso al medio MAC, conocida como dirección física, hardware o de adaptador de red. La dirección MAC resuelta se convierte en la MAC de destino en la cabecera Ethernet o Token Ring a la que se dirige un datagrama IP cuando se envía en el medio. En resumen, ARP resuelve la dirección de capa de internet(IP) a una de la capa de interfaz de red(MAC).

Está formado por dos mensajes:

Solicitud ARP, el nodo de reenvío utiliza �éste para averiguar la direcci�n MAC correspondiente a una IP específica.

Respuesta ARP, se utiliza para responder al solicitante ARP. Una trama MAC de unidifusión enviada a la MAC de destino del solicitante.

Puesto que la solicitud es una difusión MAC, todas las IP de próximo salto deben alcanzarse directamente(la misma subred) desde la que envía la solicitud. Si una entrada de la tabla de enrutamiento contiene una IP próximo salto no válida y no puede alcanzarse directamente por la interfaz, ARP no podrá responder la solicitud.

Windows mantiene una tabla basada en RAM de asignaciones IP-MAC conocida como caché ARP. Cuando se completa un intercambio ARP, el solicitante y el contestador almacenan la correspondencia IP-MAC en su caché, los siguientes paquetes reenviados a las ya resueltas utilizarán la MAC de la caché ARP. La caché siempre se comprueba antes de enviar una solicitud ARP. Existe una diferente para cada interfaz IP.

El comando arp desde el símbolo de sistema nos ofrece los parámetros utilizables con el propio comando.

Por ejemplo arp -a mostrará la caché RAM. Si esta sale vacía, sólo hemos de efectuar un ping a una IP de la red y repetir el comando, ahora nos aparecerá dicha resolución, con la IP utilizada en el ping y su correspondiente MAC.


Protocolo TCP

En la capa de transporte hay dos protocolos que se utilizan normalmente: TCP y UDP(User Datagram Protocol). TCP es el encargado de proporcionar un servicio de entrega confiable entre extremos.

TCP tiene las siguientes características:

  • Orientado a la conexión: Antes de transferir información, dos procesos de la capa de aplicación negocian una conexión TCP mediante el proceso de establecimiento de conexión TCP. Y se cierra mediante finalización de conexión TCP.
  • Dúplex completo: Para cada principal TCP hay una canalización de salida y una de entrada. Los datos pueden salir entrar y salir simultáneamente. La cabecera TCP contiene el número de secuencia de los datos de salida y una confirmación de los de entrada.
  • Fiable: Los datos se envían secuencialmente y se espera confirmación de recepción. En caso de fallar la respuesta se transmite de nuevo. El receptor descarta los duplicados y los que están fuera de secuencia se reordenan en la correcta. Siempre se utiliza una suma de comprobación para verificar la integridad de nivel de bit del segmento TCP.
  • Secuencia de bytes: TCP ve los datos de entrada y salida como una secuencia continua de bytes. TCP no reconoce límites de mensajes o registros en la secuencia. El protocolo de la capa de aplicación debe proporcionar el análisis de la secuencia de bytes de entrada.
  • Control de flujo del emisor y del receptor: en evitación de un envío masivo de datos a la vez y saturar la red, TCP implementa control de flujo del emisor que, gradualmente, escala la cantidad de datos enviados a la vez, y a su vez control de flujo del receptor para evitar que el emisor envíe datos que no puede recibir, indicando la cantidad de espacio libre en el búfer del propio receptor.
  • Segmentación de datos de la capa de aplicación: TCP segmenta los datos obtenidos desde la capa de aplicación para adaptarlos a un datagrama IP. Cambia el tamaño máximo que puede recibir cada uno y lo ajustan mediante la PMTU.
  • Entrega de uno a uno: Una conexión TCP es un circuito lógico punto a punto entre dos protocolos de la capa de aplicación. TCP no proporciona servicio de entrega de uno a varios.

Un segmento TCP se envía como un datagrama IP. Tiene una cabecera y un segmento, cuyo tamaño máximo es de 65495 bytes.

La cabecera TCP es de longitud variable, sin opciones TCP tiene 20 bytes de longitud.
Los campos que contiene son:

  • Puerto de origen: Indica el protocolo de la capa de aplicación de origen que envía el segmento. La combinación de la IP de origen y el puerto de origen crean un socket de origen, dirección única desde la que se envía el segmento.
  • Puerto de destino: Indica el protocolo de la capa de aplicación destino. Aquí se crea un socket de destino, dirección única a la que se envía el segmento.
  • Número de secuencia: Número de secuencia basado en secuencias de bytes de salida.
  • Número de confirmación: Número de secuencia del siguiente octeto de la secuencia de bytes de entrada que el receptor espera recibir.
  • Desplazamiento de datos: Indica el inicio del segmento TCP.
  • Reservado: campo sin utilizar.
  • Indicadores: Aquí se encuentran 6 indicadores TCP, URG(urgente), ACK, PSH, RST, SYN y FIN.
  • Ventana: Número de bytes de espacio disponible en el búfer de recepción del emisor de este segmento. Al indicarlo está informando de la cantidad que se pueden enviar y almacenar.
  • Suma de comprobación: Comprueba la integridad a nivel de bit para el segmento.
  • Puntero urgente: Ubicación de datos urgentes dentro del segmento.
  • Opciones: Se pueden agregar opciones en tamaños de 4 bytes.