# Open Shortest Path First

Open Shortest Path First (OSPF), "Abrir el camino más corto primero" en español, es un protocolo de red para encaminamiento jerárquico de pasarela interior o Interior Gateway Protocol (IGP), que usa el algoritmo Dijkstra, para calcular la ruta más corta entre dos nodos.
Su medida de métrica se denomina cost, y tiene en cuenta diversos parámetros tales como el ancho de banda y la congestión de los enlaces. OSPF construye además una base de datos enlace-estado (Link-State Database, LSDB) idéntica en todos los routers de la zona.
OSPF puede operar con seguridad usando MD5 para autenticar sus puntos antes de realizar nuevas rutas y antes de aceptar avisos de enlace-estado.
OSPF es probablemente el protocolo IGP más utilizado en redes grandes; IS-IS, otro protocolo de encaminamiento dinámico de enlace-estado, es más común en grandes proveedores de servicios. Como sucesor natural de RIP, acepta VLSM y CIDR desde su inicio. A lo largo del tiempo, se han ido creando nuevas versiones, como OSPFv3 que soporta IPv6 o las extensiones multidifusión para OSPF (MOSPF), aunque no están demasiado extendidas. OSPF puede "etiquetar" rutas y propagar esas etiquetas por otras rutas.
Una red OSPF se puede descomponer en regiones (áreas) más pequeñas. Hay un área especial llamada área backbone que forma la parte central de la red a la que se encuentran conectadas el resto de áreas de la misma. Las rutas entre las diferentes áreas circulan siempre por el backbone, por lo tanto todas las áreas deben conectar con el backbone. Si no es posible hacer una conexión directa con el backbone, se puede hacer un enlace virtual entre redes.
Los routers (también conocidos como encaminadores) en el mismo dominio de multidifusión o en el extremo de un enlace punto-a-punto forman enlaces cuando se descubren los unos a los otros. En un segmento de red Ethernet los routers eligen a un router designado (Designated Router, DR) y un router designado secundario o de copia (Backup Designated Router, BDR) que actúan como hubs para reducir el tráfico entre los diferentes routers. OSPF puede usar tanto multidifusiones (multicast) como unidifusiones (unicast) para enviar paquetes de bienvenida y actualizaciones de enlace-estado. Las direcciones de multidifusión usadas son 224.0.0.5 y 224.0.0.6. Al contrario que RIP o BGP, OSPF no usa ni TCP ni UDP, sino que se encapsula directamente sobre el protocolo IP poniendo "89" en el campo protocolo.

## Tráfico de encaminamiento

OSPF mantiene actualizada la capacidad de encaminamiento entre los nodos de una red mediante la difusión de la topología de la red y la información de estado-enlace de sus distintos nodos. Esta difusión se realiza a través de varios tipos de paquetes:
* Paquetes Hello (tipo 1): cada router envía periódicamente a sus vecinos un paquete que contiene el listado de vecinos reconocidos por el router, indicando el tipo de relación que mantiene con cada uno.
* Paquetes de descripción de base de datos estado-enlace o DataBase Description o DBD (tipo 2): se emplean en el intercambio de base de datos enlace-estado entre dos nodos, y permiten informar al otro nodo implicado en la sincronización acerca de los registros contenidos en la LSDB propia, mediante un resumen de estos.
* Paquetes de estado-enlace o Link State Advertisements (LSA): los cambios en el estado de los enlaces de un router son notificados a la red mediante el envío de mensajes LSA. Dependiendo del estado del router y el tipo de información transmitido en el LSA, se distinguen varios formatos (entre paréntesis, las versiones de OSPF en que se utilizan):
** (OSPFv2 y v3) Router-LSA o LSA de router.
** (OSPFv2 y v3) Network-LSA o LSA de red.
** (OSPFv2 y v3) Summary-LSA o LSA de resumen. En OSPFv2 se distinguen dos tipos: tipo 3, dirigidos a un router fronterizo de red; y tipo 4, dirigidos a una subred interna. En OSPFv3, los Summary-LSA tipo 3 son renombrados como Inter-Area-Prefix-LSA, y los tipo 4 pasan a denominarse Intra-Area-Prefix-LSA.
** (OSPFv2 y v3) AS-External-LSA o LSA de rutas externas a la red.
** (OSPFv3) Link-LSA o LSA de enlace, que no se retransmite más allá del enlace del origen.

## Encaminamiento, routers y áreas

OSPF organiza un sistema autónomo (AS) en áreas. Estas áreas son grupos lógicos de routers cuya información se puede resumir para el resto de la red. Un área es una unidad de encaminamiento, es decir, todos los routers de la misma área mantienen la misma información topológica en su base de datos de estado-enlace (Link State Database): de esta forma, los cambios en una parte de la red no tienen por qué afectar a toda ella, y buena parte del tráfico puede ser "parcelado" en su área.

### Tipos de router en OSPF

Un router OSPF clásico es capaz de encaminar cualquier paquete destinado a cualquier punto del área en el que se encuentra (encaminamiento intra-área). Para el encaminamiento entre distintas áreas del AS (encaminamiento inter-área) y desde el AS hacia el exterior (encaminamiento exterior), OSPF utiliza routers especiales que mantienen una información topológica más completa que la del área en la que se sitúan. Así, pueden distinguirse:
* Routers fronterizos de área o Area Border Routers (ABR), que mantienen la información topológica de su área y la conectan con el resto de las áreas, permitiendo encaminar paquetes a cualquier punto de la red (inter-area routing).
* Routers fronterizos del Sistema Autónomo o Autonomous System Border Routers (ASBR), que permiten encaminar paquetes fuera del AS en que se alojen, es decir, a otras redes conectadas al Sistema Autónomo o resto de Internet (external routing).
Un paquete generado en la red será enviado, de forma jerárquica, a través del área si su destino es conocido por el emisor; al ABR del área correspondiente si el destino es inter-área; este lo enviará al router del área de destino, si este se encuentra en el AS; o al ASBR si el destino del paquete es exterior a la red (desconocida por el ABR).

## Tipo de áreas

Cuando los sistemas autónomos son grandes por sí mismos y nada sencillos de administrar. OSPF les permite dividirlos en áreas numeradas donde un área es una red o un conjunto de redes inmediatas. Un área es una generalización de una subred. Fuera de un área, su topología y detalle no son visibles.
OSPF distingue los siguientes tipos de área:

### Área Backbone

El backbone, también denominado área cero, forma el núcleo de una red OSPF. Es la única área que debe estar presente en cualquier red OSPF, y mantiene conexión, física o lógica, con todas las demás áreas en que esté particionada la red. La conexión entre un área y el backbone se realiza mediante los ABR, que son responsables de la gestión de las rutas no-internas del área (esto es, de las rutas entre el área y el resto de la red).

### Área stub

Una área stub es un área en la que no se anuncia rutas externas al SA (sistema autónomo) y el encaminamiento dentro del área está basado completamente en una ruta por defecto. Un enrutador frontera de área (ABR) borra los anuncios de rutas externas de tipo 4 y tipo 5 de los routers internos del área y envía a todos esos routers la ruta por defecto 0.0.0.0 para salir del área a través del ABR, convirtiéndose así en el gateway por defecto. Esto reduce la base de datos LSDB y el tamaño de la tabla de encaminamiento de los routers internos del área.

### Área not-so-stubby

También conocidas como NSSA, constituyen un tipo de área stub que puede importar rutas externas de sistemas autónomos y enviarlas al backbone y otras áreas, pero no puede recibir rutas externas de sistemas autónomos desde el backbone u otras áreas. No puede recibir rutas externas de Sistema Autónomo desde otras áreas (del propio sistema autónomo). NSSA es una extensión de las áreas stub que permite la inyección de rutas externas de forma limitada dentro de las áreas stub. El concepto de NSSA es tratado en su propia RFC 3101

## Interfaces en OSPF

Los nodos de una red basada en OSPF se conectan a ella a través de una o varias interfaces con las que se conectan a otros nodos de la red. El tipo de enlace define la configuración que asume la interfaz correspondiente. OSPF soporta las siguientes tipos de enlace, y provee para cada uno de ellos una configuración de interfaz:
* Punto a punto (point-to-point, abreviado ptp), cuando la interfaz está conectada exclusivamente a otra interfaz.
* Punto a multipunto (point-to-multipoint, abreviado ptmp).
* Broadcast, para enlaces en los que todas las interfaces pueden conectarse directamente entre ellas. El ejemplo típico de enlace broadcast es el que corresponde a una red de tipo Ethernet.
* Enlace virtual (virtual link), cuando no responde a una topología física.
* Enlace de acceso múltiple acceso sin difusión (Non-Broadcast Multiple Access, NBMA), para enlaces en los que el medio es compartido, pero no todas las interfaces participantes pueden comunicarse directamente entre sí.

## Relación con los vecinos en OSPF

Cada router OSPF realiza un seguimiento de sus nodos vecinos, estableciendo distintos tipos de relación con ellos. Respecto a un router dado, sus vecinos pueden encontrarse en siete estados diferentes. Los vecinos OSPF progresan a través de estos estados siguiendo el diagrama de la derecha.

### Estados de OSPF

* Desactivado (DOWN): en el estado desactivado, el proceso OSPF no ha intercambiado información con ningún vecino. OSPF se encuentra a la espera de pasar al siguiente estado (Estado de Inicialización).
* Inicialización (INIT): los routers OSPF envían paquetes tipo 1, o paquetes Hello, a intervalos regulares con el fin de establecer una relación con los routers vecinos. Cuando una interfaz recibe su primer paquete Hello, el router entra al estado de Inicialización. Esto significa que este sabe que existe un vecino a la espera de llevar la relación a la siguiente etapa. Los dos tipos de relaciones son Bidireccional y Adyacencia. Un router debe recibir un paquete Hello (Hola) desde un vecino antes de establecer algún tipo de relación.
* Bidireccional (TWO-WAY): (enrutador = enrutador), empleando paquetes Hello, cada router OSPF intenta establecer el estado de comunicación bidireccional (dos-vías) con cada enrutador vecino en la misma red IP. Entre otras cosas, el paquete Hello incluye una lista de los vecinos OSPF conocidos por el origen. Un enrutador ingresa al estado Bidireccional cuando se ve a sí mismo en un paquete Hello proveniente de un vecino. El estado Bidireccional es la relación más básica que vecinos OSPF pueden tener, pero la información de encaminamiento no es compartida entre estos. Para aprender los estados de enlace de otros routers y eventualmente construir una tabla de encaminamiento, cada router OSPF debe formar a lo menos una adyacencia. Una adyacencia es una relación avanzada entre routers OSPF que involucra una serie de estados progresivos basados no solo en los paquetes Hello, sino también en el intercambio de otros 4 tipos de paquetes OSPF. Aquellos routers intentando volverse adyacentes entre ellos intercambian información de encaminamiento incluso antes de que la adyacencia sea completamente establecida. El primer paso hacia la adyacencia es el estado ExStart.
* Inicio de Intercambio (EXSTART): técnicamente, cuando un router y su vecino entran al estado ExStart, su conversación es similar a aquella en el estado de Adyacencia. ExStart se establece empleando descripciones de base de datos tipo 2 (paquetes DBD), también conocidos como DDPs. Los dos routers vecinos emplean paquetes Hello para negociar quien es el "maestro" y quien es el "esclavo" en su relación y emplean DBD para intercambiar bases de datos. Aquel router con el mayor router ID "gana" y se convierte en el maestro. Cuando los vecinos establecen sus roles como maestro y esclavo entran al estado de Intercambio y comienzan a enviar información de encaminamiento.
* Intercambio (EXCHANGE): en el estado de intercambio, los routers vecinos emplean paquetes DBD tipo 2 para enviarse entre ellos su información de estado de enlace. En otras palabras, los routers se describen sus bases de datos de estado de enlace entre ellos. Los routers comparan lo que han aprendido con lo que ya tenían en su base de datos de estado de enlace. Si alguno de los routers recibe información acerca de un enlace que no se encuentra en su base de datos, este envía una solicitud de actualización completa a su vecino. Información completa de encaminamiento es intercambiada en el estado Cargando.
* Cargando (LOADING): después de que las bases de datos han sido completamente descritas entre vecinos, estos pueden requerir información más completa empleando paquetes tipo 3, requerimientos de estado de enlace (LSR). Cuando un router recibe un LSR este responde empleando un paquete de actualización de estado de enlace tipo 4 (LSU). Estos paquetes tipo 4 contienen las publicaciones de estado de enlace (LSA) que son el corazón de los protocolos de estado de enlace. Los LSU tipo 4 son confirmados empleando paquetes tipo 5 conocidos como confirmaciones de estado de enlace (LSAcks).
* Adyacencia completa (FULL): cuando el estado de carga ha sido completada, los routers se vuelven completamente adyacentes. Cada router mantiene una lista de vecinos adyacentes, llamada base de datos de adyacencia.

## Algoritmo de Dijkstra

OSPF utiliza el algoritmo de Dijkstra para determinar la mejor ruta a seguir. También se denomina algoritmo SPF (Shortest Path First). Fue formulado por Edsger Dijkstra.
OSPF activa sus actualizaciones con cada cambio en la topología de la red, lo que reduce el tiempo de convergencia. A partir de una actualización, un enrutador crea una base de datos topológica que permite calcular la accesibilidad a las redes gracias al cálculo de un árbol de la topología de la que el enrutador es la raíz.

## Especificación

* J. Moy: RFC 1131, OSPF Specification. IETF (octubre de 1989). (Obsoleto por el RFC 1247, después RFC 2328).
* J. Moy: RFC 2328, OSPF Version 2. IETF (abril de 1998).
* R. Coltun, D. Ferguson, J. Moy: RFC 2740, OSPF for IPv6. IETF (diciembre de 1999). (Obsoleto por el RFC 5340).
* R. Coltun, D. Ferguson, J. Moy, A. Lindem: RFC 5340, OSPF for IPv6. IETF (julio de 2009).
* Murphy, Pat. [rfc:3101 RFC 3101, The OSPF Not-So-Stubby Area (NSSA) Option]. tools.ietf.org (en inglés).