Tema 4 - Capa de Red

Introducción


📖
Introducción a la capa de red
Cuando los paquetes pasan de la capa de transporte a la capa de red, estos segmentos son encapsulados con las cabeceras de la capa de red, y pasan a ser llamados datagramas
 
Los protocolos de capa de red están presentes en los hosts y routers
 
Los datos de la cabecera del datagrama será usados por cada nodo de la red para decidir que hacer con dicho paquete
🔤
Funciones básicas de la capa de red
🔀 Forwarding (reenvío)
Consiste en mover los paquetes entre los puertos de entrada y salida del router
🗺️ Routing (enrutamiento)
Consiste en determinar la ruta que seguirán los paquetes desde el origen hasta el destino. Se usarán algoritmos de enrutamiento
🧮
Algoritmos de enrutamiento
Los algoritmos de enrutamiento determinarán los valores que se almacenarán en las tablas de reenvío.
 
Los algoritmos de enrutamiento pueden gestionarse de forma…
  • Centralizada → Un servidor se encarga de gestionar al resto de routers de la red
  • Descentralizada → Los routes de la red se gestionan de manera autónoma
⚙️
Configuración de la conexión
En algunas arquitecturas de red, esta capa es muy importante dado que lleva a cabo la función de configuración de la red
💡
En las redes de internet (IP), la capa de red no tienen esta función, pero en otras redes sí, como en las : ATM, Frame Relay, X.25, etc.
La configuración de la conexión consite en:
  • Establecer una conexión virtual antes del comienzo de la transferencia de datos
  • Involucrar a los routers que formarán parte de la ruta
🗨️
Servicios de conexión en cada red
⚠️
No confundir con el servicio orientado a conexión de la capa de transporte
Diferencias entre el servicio de conexión de la capa de red y la capa de transporte
Diferencias
  • En la capa de transporte, TCP usa un handshake para iniciar la conexión. En la capa de red no hay un servicio de configuración de la conexión
  • En la capa de transporte, la conexión se realiza entre dos procesos, en la capa de red la conexión es entre dos hosts
💡 Una empresa que quisiera ganar dinero con un servicio de capa de red, debería ofrecer los siguientes servicios
Para cada datagrama
  • Entrega garantizada sin retardo ó entrega garantizada con retardo limitado
Para flujos de datagramas
  • Entrega de datagramas en orden
  • Ancho de banda mínimo garantizado
  • Fluctuación máxima garantizada
 
💡
La capa de red, a traves de el protocolo IP (internet) proporciona un único servicio denominado best effort que quiere decir que intentará proporcinar el mejor servicio, pero no promete nada
 
Modelos de servicios de la capa de red
Arquitectura (de red)
Modelo de servicio
Ancho de banda
Sin perdidas
Orden garantizado
Temporizador
Indicación de congestión
Internet (IP)
Best effort
Sin garantías
No
No
No
No (se asume observando los paquetes que se pierden)
ATM
CBR
Velocidad constante
No produce congestión
ATM
VBR
Velocidad garantizada
No produce congestión
ATM
ABR
Velocidad mínima garantizada
No
No
ATM
UBR
Ninguna
No
No
No
Redes ATM
  • CBR → Constant Bit Rate
  • VBR → Variable Bit Rate
  • ABR → Available Bit Rate
  • UBR → Unspecified Bit Rate

Redes de circuitos virtuales y de datagramas


🗨️
Servicios de red con y sin conexión
En la capa de red tenemos dos arquitecturas que proporcionan servicio sin conexión en la capa de red y otras que sí
  • No proporcionan servicio de conexión → Internet, IPX/ISX, CLNP, etc.
  • Proporcionan servicio de conexión → ATM, Frame Relay, etc.
💡
En la capa de transporte podíamos elegir el protocolo que usar. En la capa de red no, solo podemos usar el protocolo establecido por la red
🌐
Circuitos Virtuales (VC)
Se suele implementar usando los siguientes mecanismos
  • Establecimiento de conexión antes de empezar el flujo de datos
  • Cada paquete tiene un identificador de VC
  • Se mantienen informados del estado de la conexión a cada router de VC
  • Se pueden asignar los recursos de un router a cada VC específicamente
💡
La ruta origen-destino se comporta de forma similar a un circuito telefónico
  • El rendimiento es similar al de un circuito físico donde se garantiza la temporización
  • La red participa en la configuración de la ruta
🏗️
Estructura de los circuitos virtuales
Un circuito virtual está formado por:
  • Una ruta (origen-destino)
  • Los números de VC (será diferente en cada router)
  • Una tabla de reenvío en cada router
💡
Los números de VC y el número de interfaz
Los números del circuito virtual a la entrada del router identifica los paquete que vienen desde el mismo origen (host inicial), aunque estos entará por una de las interfaces del router, las cuales también están numeradas.
 
El paquete entrará al router con un número de VC, y por una interfaz específica, y saldrá por otra interfaz, con otro número de VC (el número de VC de salida depende de los números que tenga disponibles el router)
🗃️
Tabla de reenvío de los VCs
Los routers mantienen la información de todos los cirucitos virtuales a le atraviesan, y registra en una tabla las correspondencias de los CVs de entrada y los CVs de salida
Tabla de ejemplo
Tabla de reenvío de router A
Interfaz entrada
N. VC Entrada
Interfaz salida
N. VC salida
1
12
3
22
2
56
3
21
3
2
1
40
1
20
2
50
La primera fila se muestra en la imágen, el resto de filas so datos inventados
 
notion image
 
🔀
Redes de datagramas
Las redes de datagramas, a diferencia de las redes de CV, se caracterizan por:
  • No hay establecimiento de conexión, no hay handshaking
  • Los routers no mantienen estado, para los routers hay paquetes entrando, pero no hay una conexión establecidad como tal
  • Los datagramas pueden tomar diferentes rutas, cada vez
🗃️
Tablas de reenvío en una red de datagramas
Como las redes de datagramas manejan millones de conexiones, seguir el mismo enfoque que las tablas de las redes de CV nos daría una tabla gigantesca. Para atajar este problema, las tablas de enrutamiento no almacenan las direcciónes sino unos rangos. Estos rangos no son más que los bits más significativos de las direcciones (prefijos)
Ejemplo
📝
Hallar el prefijo de los siguientes rangos
💡 Observar los bits comunes al inicio y al final del rango
Rango 1
Desde 11001000 00010111 00010000 00000000
Hasta 11001000 00010111 00010111 11111111
Prefijo → 11001000 00010111 00010
Rango 2
Desde 11001000 00010111 00011000 00000000
Hasta 11001000 00010111 00011000 11111111
Prefijo → 11001000 00010111 00011000
Rango 3
Desde 11001000 00010111 00011001 00000000
Hasta 11001000 00010111 00011111 11111111
Prefijo → 11001000 00010111 00011
Rango 4
Desde 11100000 01000001 00000000 00000000
Hasta 11100001 01111111 11111111 11111111
💡
En este caso no es tan sencillo hallar el prefijo ya que:
Si usamos 1110000 como prefijo estamos cogiendo direcciones de más por el límite inferior y superior.
Para evitar coger direcciones del límite inferior, deberemos hacer un prefijo hasta el último bit que difiere y que esté dirigido a otra interfaz. Este, al ser un prefijo más largo se evaluará por encima del actual.
  • 11100000 01000000 (al prefijo le añadiremos un 0 en el bit meno significativo)
Para dejar fuera las direcciones que quedan por encima deberemos usar dos prefijos para la interfaz actual
  • 11100000 → Hasta la primera diferencia
  • 11100001 01 → Hasta la penultima diferencia (no tenemos en cuenta la última)
Prefijo
  • 11100000 (suponemos que ya hay un prefijo anterior que cubre el caso mencionado anteriormente)
  • 11100001 01
 
La tabla tiene varios prefijos emparejados con la interfaz por la que debe salir dicho paquete. La tabla de prefijos tiene las siguientes reglas:
  • Si no se cumple ningún prefijo, hay una interfaz de salida por defecto
  • Si una dirección cumple varios prefijos, sale por la interfaz del prefijo más largo

Dentro de un router


⚙️
Arquitectura de un router
Un router de Internet tiene dos funciones clave:
  • Ejecutar algoritmos/protocolos de enrutamiento (RIP, OSPF, BGP)
  • Reenviar datagramas desde los enlaces de entrada a los enlaces de salida
🧩
Componentes pricipales de los routers
  • Puertos de entrada → Recibe los paquete de los enlaces
  • Puertos de salida → Transmite los paquetes al enlace
  • Entramado de comunicación → Conecta los puertos de entrada con los de salida
  • Procesador de enrutamiento → Ejecuta el protocolo de enrutamiento
📥
El puerto de entrada
Funciones del puerto de entrada
notion image
  • Terminación de línea → Actúa en la capa física y se encarga de la recepción de los bits.
  • Procesamiento del enlace de datos → En la capa de enlace, que tiene un protocolo de desencapsulación (por ejemplo Ethernet).
  • Conmutación → En la capa de red, que a su vez puede realizar dos tareas:
    • Puesta en cola: si los datagramas llegan más rápido que la tasa de reenvío al entramado de conmutación.
    • Búsqueda/Reenvío descentralizado: dado el destino del datagrama, buscar el puerto de salida. Esta operación se desea que se realice a “velocidad de línea”, por ello es ideal que la realice un procesador del puerto, distinto al procesador de enrutamiento, usando una tabla de reenvío en memoria propia
Encolado en los puertos de entrada
Si el entramado de conmutación no es suficientemente rápido distribuyendo los paquetes a los respectivos puertos de salida, pueden producirse retardos de cola
 
En concreto el retardo HOL (Head-Of-Line) se produce cuando un paquete está bloqueado por el primero de la cola, el cual estará esperando a que se haga espacio en el buffer del puerto de salida
notion image
📤
El puerto de salida
Funciones del puerto de salida
notion image
En el puerto de salida se realizan procesos en las 3 capas,
  • En la capa de red realizan 2 procesos:
    • Buffering (puesta en cola) requerido cuando los datagramas llegan desde el entramado más rápido que la tasa de trasmisión de salida
    • Planificación de paquetes: elegir entre los datagramas almacenados aquellos que serán transmitidos: enfoque FIFO u otro.
  • Procesamiento del enlace de datos: en la capa de enlace, la encapsulación en tramas.
  • Terminación de línea, en la capa física, poniendo los datos en el enlace.
Encolado en los puertos de salida
Hace falta buffer en el puerto de salida debido a que la velocidad del entramado de conexión puede exceder la velocidad de línea de salida.
 
Se pueden llegar a producir retardos y pérdida de paquetes si el buffer de salida se llena
🔀
El entramado de conexión
El entramado de conexión se puede construir de diferentes formas
Computación en memoria compartida
Los paquetes se copian en memoria al llegar al bus de entrada, y se leen de memoria al situarlos en el bus de salida
🏎️ La velocidad está limitada por la velocidad de la memoria (dos lecturas)
Comutación de bus
El puerto de entrada transfiere directamente al puerto de salida a través de un bus.
🏎️ La velocidad está limitada por el ancho de banda del bus
Ejemmplo: Cisco 5600 → 32Gbps
Conmutación de malla
Diseño avanzado basado en la fragmentación de los datagramas en celdas de tamaño fijo que se conmutan en el entramado
Las redes de bayarn (entre otras) inicialmente fueron desarrolladas para interconectar sistemas con multiprocesadores
🏎️ Supera las limitaciones del ancho de banda del bus
Ejemplo: Cisco 12000 → 60Gbps
🔀
Tamaño del buffer
La regla de oro (RFC 3439). Consitía en usar un tamaño igual al valor medio de RTT multiplicado por la capacidad del enlace (C)(C)
Taman~oBuffer=C×RTTMTamañoBuffer = C\times RTT_M

Internet Protocol (IP) y Formato de un datagrama


ℹ️
Funciones de la capa de red
La capa de red en Internet incluye las siguientes funciones
Protocolos de enrutamiento
Se encargan de decidir el camino que deberá seguir un paquete para llegar a su destino
Ejemplo: RIP, OSPF, BGP
Gestión de la Tabla de Reenvío
Relacionado con el protocolo de enrutamiento, la capa de red también definirá como debe ser la gestión de la tabla de reenvío
🏗️
Formato de un datagrama IPv4
notion image

Descripcción de los campos

Versión de IP (4-bits)
Si usa IPv4 contendrá un 4 , si usa IPv6 contendrá un 6 . El formato del resto del datagrama cambiará según la versión que aparezca aquí
Logitud de la cabecera (4-bits)
Longitud de la cabecera en words (el valor que aparezca aqui se multiplica por 4 para obtener el valor en bytes) este campo es necesario dado que al haber un campo de opciones, la longitud de la cabecera puede variar
Tipo de servicio (Type Of Service: TOS) (8-bits)
El campo está diseñado para proporcionar información acerca del servicio proporcionado como: la prioridad del paquete, el retardo, etc. Sin embargo actualmente se le da un uso algo diferente.
 
Actualmente se usa para
  • 6-bits → Diferenciación de Servicios (DS) (best effort, priority, immediate, etc.)
  • 2-bits → Notificar la congestión
Longitud del datagrama (16-bits)
Longitu máxima del datagrama: 65535
Identificador (16-bits)
Identificador del fragmento. Este campo de identificación es útil principalmente para la reensamblaje de fragmentos de datagramas IP en el host destino, en caso de que el datagrama original se haya dividido en fragmentos debido a restricciones de tamaño en la red
⚠️
No confundir con el número de secuencia de un paquete, ese campo es del protocolo TCP en la capa de transporte
Flags (3-bits)
Modificadores o atributos del paquete: Reserved, Don’t fragment, More fragments, etc.
Desplazamiento del fragmento (13-bits)
Desplazamiento de 8-bits
Time-To-Live (TTL) (8-bits)
Número máximo de routers que deberá atravesar un paquete antes que el paquete muera. Cuando este valor llega a 0 , el siguiente router al que llegue el paquete no lo propagará más
Protocolo de capa superior (8-bits)
Este campo se usa para que al llegar al host de destino, se pueda saber que protocolo usar para desempaquetar el mensaje
Ejemplos: TCP, UDP, ICMP, IPinIP, ESP, AH, etc.
Checksum de la cabecera (16-bits)
Solo se calcula sobre la cabecera
  • Dirección IP origen (32-bits)
  • Dirección IP destino (32-bits)
Opciones (longitud variable, el valor de segundo campo)
Ejemplo: Fecha y hora, Registro de la ruta, lista de routers visitados, etc.
⚠️
Como la longitud de cabecera del paquete es un número multiplicado por 4, si el tamaño del paquete no llega a dicho valor, se añaden bytes extra en este espacio
Datos (longitud variable)
Casi siempre contendrá un segmento TCP o UDP

Fragmentación y Reensamblado

💔
Las tramas de la capa de enlace tienen un tamaño máximo (MTU, Maximum Transmission Unit), sin embargo, puede darse el caso que en el camino del paquete hacia su destino, este se encuentre con un enlace con un ancho de banda limitado, por lo que en este caso el paquete se dividirá en paquetes más pequeños para poder atravesar el enlace (fragmentación), una vez los fragmentos atraviesan el enlace y llegan al router, estos se reensamblan. Para identificar y ordenar los paquete se utilizan los bits de cabecera
Ejemplo
Pongamos que queremos enviar un datagrama de 4000 bytes de longitud, pero en uno de los routers el MTU es de 1500 bytes
 
Aspecto del paquete original
Long
ID
Indicador de más fragmentos
Desplazamiento
4000
72
0
0
Recordemos que el ID viene dado, así como los valores del indicador el cual está a 0 ya que ese paquete no ha sido fragmentado todavía, y el desplazamiento por la misma razón que el indicador
 
Fragmentar
Nos debemos dar cuenta que como el MTU del enlace es de 1500, y siempre tiene que haber 20 bytes de cabecera, los paquetes de datos contendrán como máximo 1480 bytes. Nuestro paquete original cuenta con 4000 bytes, pero solo 3980 son datos. Por lo que si calculamos 39801480=2.6\frac{3980}{1480} = 2.6 nos daremos cuenta que necesitaremos como mínimo fragmentar el paquete entre tres
Long
ID
Indicador de más fragmentos
Desplazamiento
1500
72
1
0
1500
72
1
185
1040
72
0
370
  • Nos fijaremos que la suma de las longitudes de los paquete (si le restamos a cada uno su cabecera de 20 bytes) nos debería dar la longitud de 3980 del paquete original
  • El ID de todos los paquetes será el mismo ya que todos vienen del mismo paquete
  • El indicador de más fragmentos estará activado en todos menos en el último
  • El desplazamiento se calcula dividiendo entre 8 la cantidad de datos (sin contar las cabeceras) enviada por los paquetes anteriores. Esto se debe a que este valor está representado en un campo que debe poder representar 2162^{16} valores pero solo tiene 13-bits por lo que el valor de este campo está desplazado 3-bits

IP - Internet Protocol - Direccionamiento IPv4


🏷️
Una dirección IPv4 es un número de 32-bits usado para identificar una interfaz de un host o router
🚪
Una interfaz es una conexión entre un host o router a través de un enlace.
💡
Podríamos decir que una IP es asignada a un host, pero esto no sería totalmente cierto ya que un host podría estar conectado a diferentes redes a través de diferentes adaptadores (ethernet, wifi) a cada uno de estos adaptadores se le conoce como interfaz por lo que un mismo host se identificará con una IP diferente en cada una de estas redes
🎱
Las direcciones IPv4 son de 32-bits, pero estas se suelen expresar en grupos de 8-bit llamados octetos (octeto = byte)
Ejemplo
IPv4 →223.129.9.65 = 11011111.10000001.00001001.01000001
🔤
Arquitectura de clases
Los posibles rangos de direcciones IP se dividen en clases
Tabla de direcciones para redes públicas
Clase
Bits iniciales
Rango (desde - hasta)
Máscara de red
N.º de redes
N.º de Hosts
Broadcast ID
A
0
0.0.0.0 - 127.255.255.255
255.0.0.0
128
16,777,214
X.255.255.255
B
10
128.0.0.0 - 191.255.255.255
255.255.0.0
16,384
65,534
X.X.255.255
C
110
192.0.0.0 - 223.255.255.255
255.255.255.0
2,097,152
254
X.X.X.255
D
1110
224.0.0.0 - 239.255.255.255
No definido
No definido
No definido
No definido
E
1111
240.0.0.0 - 255.255.255.255
No definido
No definido
No definido
No definido
Tabla de direcciones para redes privadas
Clase
Rango (desde - hasta)
Máscara de red
N.º de Hosts
A
10.0.0.0 - 10.255.255.255
255.0.0.0
16,777,214
B
172.16.0.0 - 172.31.255.255
255.240.0.0
1,048,574
C
192.168.0.0 - 192.168.255.255
255.255.255.0
65,534
🔤
CIDR (Classless InterDomain Routing)
Actualmente ya no se utiliza el sistema de clases debido a que no permitía una asignación más flexible de las direcciones de red. En su lugar se utiliza el CIDR el cual permite asignar libremente que parte de la dirección forma parte de la dirección de red, y que parte forma parte de la dirección de host
 
El CIDR consiste en especificar la dirección de red junto con un valor que corresponde con la subred (cuántos bits de la direccion corresponden a la dirección de red)
Ejemplo
En la dirección de red 200.23.16.0/23 nos están diciendo que los 23 bits más significativos de la dirección identifican la red a la que pertenece la dirección, y el resto identifican un host de esa red
11001000 00010111 00010000 00000011
|-----------------------||--------|

Red  -> 200.23.16.0/23
Host -> 200.23.16.3
Direcciones especiales
Dirección 0.0.0.0
Desde el punto de vista de un host
Esta dirección es usada por un host cuando quiere hacer referencia a todas las IPs del host. Es decir, si el host esta alojando un servidor, si este en lugar de alojar el servidor asignadole una dirección de alguna de sus interfaces, le asigna la dirección 0.0.0.0 entonces el servidor será acesible a través de cualquier interfaz
Desde el punto de vista del proceso de enrutado
Significa que debe enviar el paquete por el router por defecto
Desde el punto de vista de una dirección IPv4
Representa un destino inalcanzable
Direccion de red: Todos los bits de host a 0
Se utiliza para designar la red a la que pertenece dicho host
 
Dirección de broadcast: Todos los bits de host a 1
Los paquetes enviado con esta dirección serán enviados para que los reciba todos los host de la red
Direcciones de loopback: 127.X.X.X
Son utilizadas por la propia máquina para identificarse a sí misma en una red imaginaria donde solo está la propia máquina
Router
Normalmente el router tomará la dirección más baja disponible en una red. Por ello, estos suelen tener una dirección acabada en X.X.X.1 (el valor cero es para identificar la red)
🪆
Subredes
Una subred no es más que una red que ha sido dividida en redes más pequeñas. En una subred, todos los hosts comparten una parte de la dirección IP. Las redes se dividen en subredes y se separan a través de routers.
💡
Para identificar las subredes de una red, eliminaremos los routers y observaremos la cantidad de componetes conexas que nos quedan. ⚠️ Si una componente conexa no tiene hosts, solo queda un enlace, esta sigue contando como una subred
Ejemplo
Determinar las subredes en la siguiente imagen
notion image
Solución
Hay 6 subredes, las tres que conectan los hosts entre sí, y las 3 que conectar los routers entre sí

Obtención de bloques de direcciones por los ISP

🌐
ICANN (Internet Corporation for Assigned Names and Numbers)
Las responsabilidades de la ICANN son:
  • Asignar bloques de direcciones IP
  • Gestionar DNS
  • Asignar nombres de dominios y resolver disputas
🏦
Obtención de direcciones de un ISP
Una vez el ICANN asigna a un ISP un bloque de direcciones IP, este querrá dividirlas en paquetes más pequeños para venderselos a sus clientes. Normalmente, la gente en casa tiene un router con una dirección IP, y no necesita más. Pero en el caso de empresas grandes, estas pueden tener varias oficinas y ofrecer varios servicios por lo que pueden querer tener diferentes direcciones IP

Direccionamiento jerárquico

El direccionamiento jerárquico consiste en la utilización de aquella parte común a todas las direcciones de un bloque para aunciar un ISP a otros ISPs, que el tráfico con destino a cualquiera de las direcciones que coincidan los bits más significativos con dicho prefijo deberán ser mandados a este para luego ser reenviados
Ejemplo
Un ISP anuncia la dirección de red 200.23.16.0/20 , por lo que el resto de ISPs que tengan un paquete cuyo destino coincida con los primeros 20 bits de la dirección anunciada, serán redirigidos a dicho ISP

Asignación de direcciones IP a un Host dentro de una red


🪪
Protocolo DHCP
Podemos asignar la dirección IP de un host manualmente, pero lo normal es que el sistema operativo envíe un paquete a través del protocolo DHCP a la dirección de broadcast de la red para que el servidor DHCP (suele estar alojado en el router) responda con una dirección libre que el host podría usar.
🎯 El objetivo del protocolo DHCP es asignar direcciones dinámicamente a los clientes que se conectan a una red. Dicho protocolo tiene las siguientes características:
  • Préstamo de direcciones → El servidor puede adjudicar direcciones por un tiempo limitado. Esta característica permite asignar la misma dirección a otro host diferente cuando se le acaba el tiempo al primero.
  • Gestión dinámica El protocolo es sencillo y permite a todo tipo de dispositivos conectarse a una red y empezar a navegar directamente, sin configuraciones manuales.
📔 El protocolo proporciona en su respuesta la siguiente información al cliente
  • Dirección IP adjudicada
  • Dirección IP del router (gateway)
  • Dirección IP del servidor DNS
  • Máscara de subred
⏱️ Fases del protocolo DHCP
1️⃣ Descubrimiento (opcional)
Se hace la petición de dirección al servidor DHCP (puerto 67), utilizando la dirección de broadcast. Se genera una ID de trasacción aleatoriamente
Src: 0.0.0.0:68  // Dirección de origen (nula ya que de momento no tenemos ninguna IP, es lo que estamos solicitando)
Dst: 255.255.255.255:67  // Al Broadcast ya que no sabemos cual es la dirección de red ni la IP del servidore DHCP
SubDirL: 0.0.0.0  // Dirección solicitada (nula, no proponemos ninguna en especial)
ID: 101  // ID generado aleatoriamente
2️⃣ Oferta (opcional)
El servidor propone al cliente una dirección
Src: 223.1.2.5:67  // Dirección del servidor DHCP
Dst: 223.1.2.4:68  // Dirección del cliente (sería nula, así que coloca la que le propone)
SubDirL: 223.1.2.4  // Dirección propuesta al cliente
ID: 101  // Mismo ID que la solicitud
TTL: 3600  // Tiempo de prestamo (segundos)
3️⃣ Solicitud
El cliente solicita una dirección (como el una conexión diferente, el ID será diferente). El cliente podrá proponer una dirección (propuesta por el servidor en la fase de oferta), o pondrá una dirección nula 0.0.0.0 para solicitar una nueva propuesta
Src: 0.0.0.0:68  // Dirección de origen (nula ya que de momento no tenemos ninguna IP, es lo que estamos solicitando)
Dst: 255.255.255.255:67  // Al Broadcast ya que no sabemos cual es la dirección de red ni la IP del servidore DHCP (si hemos realizado la fase de descubrimiento si podremos saberlo)
SubDirL: 223.1.2.4  // Dirección solicitada (solicitamos la que nos ha propuesto el servidor DHCP en la fase de oferta)
ID: 999  // Generamos otro ID aleatorio para esta solicitud
TTL: 3600  // Proponemos un TTL
4️⃣ Descubrimiento
El servidor DHCP acepta la petición del cliente
// El servidor responde con los mismos valores para aceptar la propuesta
Src: 223.1.2.5:67
Dst: 223.1.2.4:68
SubDirL: 223.1.2.4
ID: 999
TTL: 3600
🏎️ El protocolo DHCP funciona sobre el protocolo UDP

Protocolo NAT


📖
Existe una problemática actual debido a la limitada cantidad de direcciónes IP para la gran cantidad de nuevos dispositivos.
 
Para tratar de frenar esto se propuso que en lugar de que cada dispositivo tuviese una dirección IP asignada para solo para el, se asignará una IP únicamente al router de cada red, y todos los dispositivos de dicha red se comunicarían a través de una única dirección. (como si fuera el portavoz)
 
De esta forma, se aisla a los dispositivos en una red privada separandolos de la red de internet
♻️
El protocolo NAT (Network Address Translation) consite en hacer una modificación de los paquetes que recibe un router de un host de la red privada que tiene como destino un host en internet. Esta transformación consiste en coger la dirección de origen del paquete, cambiarla por la dirección del router y por un puerto abierto temporalmente para esa conexión.
🕵🏻 Esta característica de MiTM (Man In The Middle) de los routers NAT proporciona un extra de privacidad (los hosts de destino no conocen que host hizo la petición) y seguridad (el router puede actuar como firewall para filtrar el contenido no deseado)
Ejemplo de comunicación por NAT
notion image
⚔️ Problemas/contraargumentos de los routers NAT
  • El hecho de que un router modifique el puerto, el cual está en la capa de transporte, viola el concepto terminal a terminal, el cual dice que los routers son dispositivos de capa de red, por lo que no deben tocar la capa de transporte
  • Los puertos direccionan procesos, pero en los routers NAT, los puertos direccionan hosts
♻️
NAT Transversal
El problema con los routers NAT es que no permiten que los hosts dentro de la red privada actúen como servidores ya que el router evita que haya direcciones entrantes, las conexiones se establecen siempre desde dentro hacia afuera
 
Esto se soluciona utilizando un host auxiliar fuera de la NAT, cuando el servidor dentro de la NAT se arranca, este se conecta al servidor auxiliar permanentemente. Aquellas conexiones que reciba el servidor auxiliar, avisarán al servidor dentro de la NAT para que establezca la conexión con el cliente
 
Ejemplo: Skype

Universal Plug and Play (UPnP)


🔀
Esta caracterísitca de los routers soluciona el problema anteriormente mencionado con los servidores tras un router NAT
 
Este mecanismo permite establecer una regla en un router para que redireccione todas las conexiones a un puerto concreto hacia un host previamente establecido
 
Esto se conoce también como un túnel

Internet Communication Message Protocol (ICMP)


📪
El protocolo ICMP lo utilizan los hosts y los routers para comunicar información a nivel de red como:
  • Informe de errores → Se utiliza para comunicar que un puerto es inalcanzable, o que un paquete ha alcanzada su TTL, protocolo incorrecto, etc.
  • ECO → Se utiliza para detectar si un host está activo o no
 
Un mensaje ICMP consta de tres campos
  • Tipo → Tipo de mensaje (error alcanzando el destino, eco, anuncio, TTL, error de cabecera)
  • Código → Tipo de mensaje respecto del campo tipo (error de cabecera, puerto, etc.)
  • Los primeros 8 bits del datagrama que causó el error (si procede)
Tabla de tipos y códigos de mensaje ICMP
Tipo
Código
Descripción
0
0
Respuesta de eco (para ping)
3
0
Red de destino inalcanzable
3
1
Host de destino inalcanzable
3
2
Protocolo de destino inalcanzable
3
3
Puerto de destino inalcanzable
3
6
Red de destino desconocida
3
7
Host de destino desconocido
4
0
Regulación del origen (control de congestión)
8
0
Solicitud de eco (ping)
9
0
Anuncio de router
10
0
Descubrimiento de router
11
0
TTL caducado
12
0
Cabecera IP errónea
📟
La aplicación traceroute utiliza este protocolo para detectar el camino de los paquetes. Esto lo hace mandando paquetes con un TTL empezando desde TTL=1 para que cuando el router lo reciba. este le responda que su paquete ha muerto

IP - Internet Protocol - IPv6


6️⃣
Las direcciones IPv6 usan 128-bits (cuatro veces más que IPv4). En este nuevo formato, la cabecera se simplifica para ayudar a acelerar el procesamiento/reenvío en los routers
🏗️
Campos de una IPv6
notion image
  • Versión IP (4-bits)IPv4/v6
Clase de tráfico (8-bits)
Este campo contiene el tipo de información que transporta el mensaje. esto permitirá dar prioridad a los paquete críticos (video/audio/ICMP) frente a los datos de texto
 
Etiqueta de flujo (20-bits)
Identifica datagramas en el mismo flujo para facilitar transmisiones como las de audio o vídeo
Logitud de los datos (16-bits)
Número de bytes sin contar la cabecera
Cabecera siguiente (8-bits)
Este campo indica al receptor lo que contienen los datos del paquete
  • Pueden contener opciones de la cabecera
 
Tras la cabecera, puede haber más cabeceras extendidas
 
En la última cabecera extendida, este campo contendrá el protocolo de capa superior
TTL (8-bits)
Número de saltos restantes del paquete
  • IP Origen (128-bits)
  • IP Destino (128-bits)
🔁
IPv6 frente a IPv4
  • Se utilizan direcciones de 128-bits
    • 64-bits para la subred
    • 64-bits para la interfaz
  • La cabecera tiene una logitud fija de 40 Bytes
  • No se permite fragmentación
  • Se elimina el campo checksum dado que las capas anteriores ya lo incluyen
  • Se elimina el campo opciones de cabecera
  • Nuevos mensajes de error en ICMPv6
  • Funciones de multidifusión
♻️
Transformación de IPv4 a IPv6
2️⃣ Pila dual
Actualmente hay routers IPv4 e IPv6. Los routers IPv6 tienen retransmiten también los paquetes IPv4 dado que tienen un segundo stack (pila) para estos paquetes (simulan ser un router IPv4)
🚂 Tunelización
Cuando hay un router IPv4, los paquetes IPv6 se mandan en los datos de los paquetes IPv4 hasta lleguar al router y reensamblarse

Algoritmos de enrutamiento


📖
Modelo de Grafo de una red
Es habitual representar una red como un grafo, donde los nodos son los routers y las aristas los enlaces. También podemos asignar los pesos de las aristas para representar la capacidad del enlace, ancho de banda, etc.
💡
En este contexto, un algoritmo de enrutamiento, es un algoritmo que encuentra la ruta de menor coste
🗃️
Clasificación de algoritmos de enrutamiento
  • ℹ️ Según la información que conoce cada nodo sobre grafo
    • Algoritmos globales / Algoritmos de Estado de Enlaces / Linked-State (LS)
      En estos, todos los nodos conocen la topología de la red, osea, todos los nodos conocen a todos los nodos y los costes de las aristas
      Algortimos descentralizados
      En estos, cada nodo solo conoce a sus vecinos. Hay un proceso iterativo de intercambio de información con sus vecinos
      • Ejemplo: Algoritmo de Vector de Distancias (DV)
  • 🏗️ Según la posibilidad de cambio en la estructura del grafo
    • Estáticos
      Las rutas no cambian, o cambian muy lentamente
      Dinámicos
      Las rutas cambian rápidamente. Esto supone que las tablas de enrutamiento deben ser actualizadas periodicamente

Algoritmo de Estado de Enlace

📐
Algoritmo de Estado de enlace / Linked-State (LS)
Este algoritmo usa básicamente el Algoritmo de Dijsktra. Este algorimo empieza desde un nodo cualquiera y va añadiendo nodos a la componente conexa según sean estos los más cercanos (el términos del peso de la arista) al nodo inicial de algoritmo. Tras cada iteración, el algoritmo conoce la ruta mínima a cada nodo en nn saltos. Tras la ejecución del algoritmo, se conoce la distancia más corta hasta cada nodo (sin importar el número de saltos)
🔀
Problema de las oscilaciones
Si todos los nodos ejecutan el algoritmo de manera sincronizada, puede darse la situación en que todo elijan redirigir los paquetes por una misma ruta, la menos congestionada en ese momento, pero en el siguiente instante se va a convertir en la más congestionada, y las rutas anteriores pasan a estar menos cogestionadas, por lo que se repetirá este escenario cíclicamente
 
La solución es evitar que los nodos ejecuten el algoritmo sincronizadamente, por ello se debe hacer que cada nodo ejecute el algoritmo en un momento a azar

Algoritmo de Vector de Distancias

📐
Algoritmos de Vector de Distancias (DV)
Este algoritmo está basado en la ecuación de Bellman-Ford, este se basa en que si nuestro vecino conoce la distancia a un nodo, y nosotros conocemos nuestra distancia al vecino, entonces conocemos la distancia al nodo
Ejemplo
Si soy el nodo aa y quiero llegar a zz, y mis vecinos son ii, jj y kk entonces la distancia mínima será la suma de la arista hacia el vecino, más la distancia desde el vecino. La función c(x1,x2)c(x_1, x_2) devuelve en peso de la arista que va de x1x_1 a x2x_2
da(z)=min{e(i,z)+di(z)e(j,z)+dj(z)e(k,z)+dk(z)d_a(z) = min \begin{cases} e(i,z) + d_i(z) \\ e(j, z) + d_j(z) \\ e(k, z) + d_k(z) \end{cases}
🏗️
Construcción de los DVs de cada nodo (ejemplo)
Cuando un nodo actualiza su vector de distancias, este lo notifica a todos sus vecinos para que estos actualicen también el suyo
 
Cada DV almacena:
  • El nodo de destino
  • La distancia al nodo
  • La interfaz por la que debe salir para llegar al dicho nodo
💡 La distancia a sí mismo es 0

Ejemplo
Dado el siguiente grafo
notion image
Se construye la tabla DV inicial en cada nodo. Aquellos nodos desconocidos se dejan con las distancias en blanco/infinito
notion image
Cada nodo enviará su tabla al resto de nodos
En cada nodo se llevará a cabo una operación similar a esta:
 
El nodo uu recibe las tablas de vv, ww y xx. Para cada nodo en la tabla de uu, este comprobará si aplicando la ecuanción de bellman-ford, puede mejorar alguna entrada de su tabla con la información recibida del resto de tablas de los nodos
 
En la imágen el nodo uu comprobará si puede mejorar la entrada Du(v)D_u(v) con la información de los nodos vv, ww y zz. En este caso no se mejora.
notion image
notion image
 
En la siguiente imágen, el nodo uu comprobará si puede mejorar la entrada Du(w)D_u(w) con la información de los nodos vv, ww y xx. En este caso si se mejora.
notion image
notion image
 
Tras recalcular todas las entradas, la tabla de DV del nodo uu queda tal que así
notion image
 
A continuación, deberemos realizar el mismo procedimiento con vv, y tras recalcular su DV, si ha habido cambios, entonces se notificarán estos a uu y este recalculará otra vez su DV
 
Realizaremos este procedimiento con todos los nodos del grafo
⚖️
El problema de los cambios de peso en una arista
Cuando el peso de una arista se incrementa, el resto de aristas no notarán el cambio por que hay otras nodos que les notifican que la arista tiene otro valor mejor (el valor obsoleto) por lo que el nuevo valor de la arista no tendrá efecto inmediato, sino que cada nodo recalculará numerosas veces las distancias afectadas por el cambio de peso de la arista en incrementos según el peso de las aristas de los vecino (con información obsoleta)
 
El problema mayor viene cuando un enlace deja de estar disponible, dicho enlace pasa a tener una distancia de infinito, lo que produce un intercambio de paquetes infinito hasta alcanzar un valor inalcanzable
🐍
Tecnica de la inversa envenenada
Esta técnica consiste en que cuando una distancia a un router depende del router al que estamos notificando nuestra tabla de distancias, la notificación de esta distancia mencionada pasará a ser infinito, para evitar posibles iteraciones infinitas en el cálculo de esa distancia. Esto provocará que el router notificado entienda que es imposible mejorar una distancia a ese nodo a través del router notificador.

Algoritmos de enrutamiento - Jerárquico


📖
En la práctica no se suelen utilizar los algoritmos anteriores ya que para redes muy grandes, suponen problemas para gestionarlos, y los intercambios de mensajes saturarían los enlaces. Por ello en la práctica se implementa un enrutamiento jerárquico
Este algorimo consiste en agrupar los nodos/routers en redes aisladas llamadas Autonomous Systems (AS), y en cada red hay uno o varios routers que encargados de comunicarse con el exterior llamados gateways
Imagen
notion image
 
La interconexión de los ASs se realiza teniendo en cuenta si el destino del paquete está en el interior del AS, o en el exterior
  • Para destinos internos se utiliza el protocolo intra-AS
  • Para destinos externos se utiliza el protocolo inter-AS

Enrutamiento de internet


🔌
Interior Gateway Protocols (IGP)
Este es el protocolo que ejecutan los ASs para configurar las tablas de reenvío para enrutar las direcciones que se encuentran dentro del propio AS
 
Históricamente se han utilizado 2 protocolos de enrutamiento interno:
  • Routing Information Protocol (RIP)
  • Open Source Path First (OSPF)
 
🔒 Aunque también hay otros protocolos como los de Cisco cuyas especificaciones no son públicas
⚰️
Protocolo RIP
Este es un protocolo de vector de distancias (DV) donde todos los enlaces pesan 1, a cada una de las aristas se las llama saltos (hops) de tal manera que cada vez que se atraviesa un router, se considera como un salto. Las tablas de cada router almacenan la cantidad de saltos necesarios hasta cada router
 
En RIP, los mensajes de respuesta se intercambian entre vecinos aproximadamente cada 30s. Cada mensaje contiene una lista de hasta 25 subredes internas del AS
💡 Cada router tiene una tabla RIP
 
Los mensajes RIP se propagan por la red en paquetes llamados daemon routed, estos anuncios se envían en paquetes UDP
🛑
Fallo de enlace
Si un vecino no responde en 180s, se declara muerto y las rutas que pasaban por este se invalidan a través de la técnica de la inversa envenenada.
💡 Se suele utilizar para representar el infinito, el valor máximo de saltos que pueda representarse en un paquete que RIP, este valor es 1616
🔓
Protocolo OSPF
Utiliza un algoritmo de estado de enlace (LS) donde cada arista se representa como un peso de 1, o como la inversa de su capacidad. Cada nodo almacena un mapa topológico de la subred a la que pertenece. Los routers envían periodicamente un paquete HELLO para comprobar si sus vecinos están operativos, normalmente al menos cada 30mins
 
Los paquetes OSPF se transportan directamente sobre IP (en lugar de TCP/UDP) lo que implica que el protocolo debe encargarse de la transferencia fiable
 
Características avanzadas de OSPF
  • Permite autenticar mensajes (mediante un hash)
  • Permite usar varias rutas entre dos routers cuando tienen el mismo coste
  • Permite definir diferentes métricas de coste para cada función
  • Permite enrutamiento por multidifusión MOSPF
  • Permite estructurar de manera jerárquica
💡
Por estas razones se suele usar OSPF en los ISPs de nivel superior y RIP en los ISPs de nivel inferior
💡
OSPF Jerárquico
notion image
  • Los routers del backbone son los que están en contacto con el exterior.
  • Los anuncios AS se realizan solo dentro del mismo area

Enrutamiento de internet - BGP


📖
El protocolo BGP (Border Gateway Protocol) es un protocolo de enrutamiento entre sistemas autónomos (inter-AS). Actualmente en la versión 4 (BGP4)
⚙️
Actualmente proporciona mecanismos para
  • Obtener información de alcanzabilidad
  • Propagar la información de alcanzabilidad
    • Solo propagará cierta información dependiendo de la política del AS (no dar información a la competencia)
    • Anunciar las subredes al resto de AS
🧠
¿Cómo funciona BGP? (a grandes rasgos)
En BGP, a las parejas de routers se les llama pares BGP intercambian información de enrutamiento a través de conexiones TCP semipermanentes a través del puerto 179. A estas conexiones se las llama TCP-BGP
  • Si la sesión es entre routers de diferentes AS se le llama eBGP
  • Si la sesión es entre routers de dentro del mismo AS se llama iBGP
💡 También puede haber una sesión entre dos routers que no tengan una conexión directa a través de un enlace
🏷️
En BGP, los destinos no son hosts sino prefijos CIDR. Estos prefijos son la manera que tiene los routers de anunciarse, y de anunciar otros destinos conocidos
 
Si un router gateway del AS quiere anunciar una subred a otro router de otro AS, este enviará un prefijo de alcanzabilidad a través de una sesión eBGP que tiene con el router del otro AS.
Cuando el router del otro AS ha recibido el prefijo de alcanzabilidad, este lo manda a la subred correspondiente a través de una sesión iBGP
notion image
notion image
🏷️
En BGP, un AS se identifica mediante un número de sistema autónomo (ASN) los cuales son asignados por la ICANN
🧩
A la combinación del prefijo y los atributos BGP se le denomina ruta
 
Los atributos más importantes son:
  • AS-PATH → Contiene la lista de los AS por los que ha ido pasando el prefijo
  • NEXT-HOP → Contiene la dirección IP de la interfaz del router a la que debe ser enviado un paquete para que este alcance la subred anunciada
🗺️
Selección de ruta BGP
Cuando un router conoce varias rutas hacia un prefijo, este usa un criterio de decisión. Dicho criterio se basa en las siguientes reglas (son tenidas en cuenta como si se tratasen de filtros por capas, las que empatan en el criterio 1 se desempatan con el criterio 2, …):
  1. Valor de preferencia local: Routers favoritos del AS, esto es un criterio fijado por el administrador del AS por los motivos que considere
  1. Camino AS-PATH más corto: Se usa un algoritmo de DV
  1. NEXT-HOP más próximo: Este paso hace uso del protocolo intra-AS
  1. ASN: Se usa un criterio basado en este identificador
💬
Mensajes BGP
  • OPENAbre una nueva conexión TCP con el par BGP
  • UPDATEAnuncia una nueva ruta, o elimina una antigua
  • KEEPALIVE → Se manda periodicamente para asegurar que la sesión se mantiene viva. Envía ACKs de una solicitud OPEN
  • NOTIFICATION → Informa de errores en mensajes anteriores o cierra la conexión
📖
Motivos detrás del protocolo intra-AS
  • Motivos políticos → El administrador quiere controlar cómo y quién enruta tráfico a través de su AS
  • Motivos de escala → Ayuda a los AS a dividirse para no tener tablas tan grandes
  • Motivos de rendimiento → Puede ayudar a mejorar la el rendimiento de la red

Enrutamiento por difusión y multidifusión


📖
El enrutamiento por difusión proporciona un servicio de capa de red para entregar un paquete a todos los nodos de una red
📖
El enrutamiento por multidifusión proporciona un servicio de capa de red para entregar un paquete a un subconjunto de nodos de una red

Protocolos de difusión

ℹ️
Difusión por duplicación en la fuente
Esta opción consiste en enviar una copia del paquete a cada destino.
Esta opción plantea un problema si la el host de origen no conoce todos los nodos de la red
ℹ️
Difusión por duplicación en la red (I)
Esta técnica se conoce como inundación no controlada, y consiste en enviar una copia a cada vecino, y esta enviará a su vez una copia a sus vecinos.
Esta opción plantea un problema de ciclos conocido como tormenta de difusión
ℹ️
Difusión por duplicación en la red (II)
El enfoque de inundación controlada es como el de inundación no controlada, pero tiene dos opciones para evitar la tormenta:
  • Inundación por número de secuencia: Cada nodo solo enviará un paquete si no lo ha enviado antes
  • Reenvío por el camino inverso (RPF): Cada router solo continuará con la inundación, si el paquete que le ha llegado, ha llegado por camino más corto hacia el origen
⚠️ Esta técnicas evitan la tormenta de difusión, pero no garantizan que no haya paquetes redundantes
ℹ️
Difusión por árbol de recubrimiento
Como cada grafo se puede expresar como un arbol de recubrimiento mínimo, cada nodo solo propagará un paquete hacia abajo del arbol
notion image
🌐
Algoritmos usado en la práctica
  • OSPF → Utiliza inundación controlada por número de secuencia
  • Gnutella Utiliza inundación controlada por número de secuencia
  • Ethernet → Utiliza la difusión por árbol de recubrimiento mínimo (STP, Spanning Tree Protocol)

Protocolos de multidifusión / multicast

📖
En la multidifusión, como no tiene sentido que cada datagrama contenga la dirección de todos los destinatarios, se suele utilizar un identificador único para el grupo (indirección de direcciones)
  • En internet se suelen utilizar direcciones de Clase D
  • El grupo de receptores se denomina grupo de multidifusión
 
La multidifusión en internet se consigue gracias a dos protocolos:
  • IGMP → Opera entre un host y un router
  • Un protocolo de multidifusión → Realiza la coordinación de los routers que participan en la multidifusión
🧑🏻‍⚖️
IGMP (Internet Group Management Protocol)
  • Opera entre un host y su router
  • Estos mensajes se transmiter por IP
Dispone de 3 tipos de mensajes
  • membership_query → Es enviado por un router para conocer el estado de los hosts que participan en una multidifusión
  • membership_reportEs enviado por el host para unirse a un grupo de multidifusión, o para responder a un membership_query
  • leave_group → Es usado opcionalmente por los hosts cuando abandonan un grupo
🧮
Algoritmos enrutamiento por difusión
  • Árbol compartido → Todos los nodos usan el mismo arbol, calculado a partir de un nodo central
  • Árbol basado en origen → Se calcula un arbol por cada posible origen
  • Reenvío por el camino inverso y poda → Mecanismo de poda (prunning)
🌐
Algoritmos de multidifusión en la práctica
DVMRP → El primero que se inventó
Distance-Vector Multicast Routing Protocol
  • Utiliza un arbol basado en RPF y Poda
  • Periodicamente olvida rama podadas
  • Los routers puede reconectarse a través de mensajes IGMP
  • Usado en routers comerciales
PIM → El más frecuente
Protocol Independent Multicast
  • No depende de ningún algoritmo de enrutamiento de unidifusión específico
  • Utiliza RPF y poda como DVMRP pero con algunas mejoras
Tiene dos modos:
  • Modo denso → Cuando la mayoría de los routers estan involucrados
  • Modo disperso → Cuando pocos routers están involucrados. Utiliza puntos de cita para configurar el arbol. Permite SSM (Source Specific Multicast)
  • MOSPF