# Open Shortest Path First

O OSPF - Open Shortest Path First - é um protocolo de roteamento para redes que operam com protocolo IP; desenvolvido pelo grupo de trabalho da IGPs (Interior Gateway Protocol) da IETF (Internet Engineering Task Force), foi descrito inicialmente em 1989 pela RFC 1131. Baseado no algoritmo SPF - Shortest Path First (menor rota primeiro), o OSPF foi criado para substituir o protocolo RIP empregado no final da década de 1980 na então Arpanet (atual Internet) e que apresentava diversos problemas e limitações para operar satisfatoriamente em uma rede de porte.
Atualmente o OSPF é um dos protocolos de roteamento mais empregados, sendo suportado pela maioria dos roteadores, assim como por servidores que implementem os sistemas operacionais Linux e Unix. Versátil, o OSPF pode ser empregado tanto a redes de pequeno quanto grande porte.

## Princípio de funcionamento

Embora possua inúmeros detalhes de implementação e configuração, o princípio de roteamento do OSPF é relativamente simples. Ao invés de manter uma tabela com todas as rotas possíveis (como faz o protocolo RIP), cada nó (roteador) OSPF contêm dados sobre todos os links da rede. Cada entrada da tabela de roteamento OSPF contém um identificador de interface, um número do link e uma distância ou custo (esse último pode ser atribuído pelo administrador da rede). Com todas essas informações, cada nó possui uma visão da topologia da rede e pode, dessa forma, descobrir sozinho qual é a melhor rota para um dado destino.
Caso ocorra uma alteração num dos links de rede, os nós adjacentes avisam seus vizinhos. Esses por sua vez, verificam o número da mensagem ou a hora no cabeçalho do pacote OSPF para saberem se este aviso é novo ou velho. Se o aviso for novo, é feita a verificação da existência da entrada. Caso ela não exista, é adicionada à tabela de roteamento. Se a entrada já existir, são comparados os números da mensagem recebida com a entrada existente na tabela de roteamento. Se o número da mensagem recebida for maior que a entrada existente, a entrada é substituída, caso contrário, a entrada da tabela é transmitida como uma nova mensagem. Se os números forem iguais, o nó não executa nenhuma ação.

## Principais características

Há duas características principais no OSPF. A primeira, é que se trata de um protocolo aberto, o que significa que suas especificações são de domínio público; suas especificações podem ser encontradas na RFC (Request For Comments) número 1247 e também na RFC 2328 . A segunda, é que ele se baseia no algoritmo SPF, também chamado de algoritmo de Dijkstra, nome de seu criador.
OSPF é um protocolo de roteamento do tipo link-state, que envia avisos sobre o estado da conexão (link-state advertisements, LSA) a todos os outros roteadores em uma mesma área hierárquica. Informações sobre interfaces ligadas, métrica usada e outras variáveis são incluídas nas LSAs. Ao mesmo tempo em que o roteador OSPF acumula informações sobre o estado do link, ele usa o algoritmo SPF para calcular a melhor rota para cada nó.
Por ser um protocolo do tipo link-state, o OSPF difere-se do RIP e do IGRP, que são protocolos de roteamento baseados em vetores de distância. Os roteadores que trabalham com algoritmos de vetor de distância, a cada atualização, enviam toda ou parte de suas tabelas de roteamento para seus vizinhos.

## Pacote OSPF

Ao contrário de outros protocolos de roteamento, o OSPF não carrega dados por meio de um protocolo de transporte, como o UDP (User Datagram Protocol) ou o TCP (Transmission Control Protocol). Em vez disso, o OSPF forma datagramas IP diretamente, empacotando-os usando o número de protocolo 89 para o campo "Protocolo IP" ¹. Há cinco tipos distintos de pacotes OSPF e cada um dos cinco tipos iniciam com um cabeçalho padrão de 24 bytes, são eles:
* Pacote de aviso. (Hello packet)
* Pacote de informações do Banco de Dados (Database Description packet)
* Requisição de estado de link (Link State Request packet)
* Atualização de estado de link (Link State Update packet)
* Recebimento de informações de link (Link State Acknowledgment packet)

### Cabeçalho do pacote OSPF

Todo pacote OSPF inicia com um cabeçalho de 24 bytes. Esse cabeçalho contem todas as informações necessárias para determinar se o pacote deve ser aceito para futuras operações. O pacote tem a seguinte estrutura:
* Version - O número da versão do protocolo OSPF.
* Type - O tipo do pacote OSPF.
* Packet length - O tamanho do pacote em bytes. O tamanho inclui também o cabeçalho.
* Router ID - O identificador do roteador que enviou o pacote.
* Area ID - Um número de 32 bits que indica a área a qual o pacote pertence. Todo pacote é associado a uma única área.
* Checksum - O checksum do pacote completo, incluindo o cabeçalho, mas excluindo os 64 bits de autenticação.
* AuType - Indica o esquema de autenticação a ser usado no pacote.
* Authentication - Um campo de 64 bits usado para informar o esquema de autenticação a ser utilizado.

## Tópicos relacionados

* BGP
* Intermediate System to Intermediate System
* IEEE 802.1aq - Shortest Path Bridging (SPB)
* Ping2
* RIP
* WHOIS
* Traceroute