# Protocolos de Roteamento

### 📑 **Índice Geral**

1. Visão Geral dos Protocolos de Roteamento
2. RIP (Routing Information Protocol)
3. TTL (Time To Live)
4. BGP (Border Gateway Protocol)
5. EIGRP (Enhanced Interior Gateway Routing Protocol)
6. OSPF (Open Shortest Path First)
7. Comparativo entre Protocolos
8. Tabela de Decisão para Escolha de Protocolo

***

### 🔍 **Visão Geral dos Protocolos de Roteamento**

#### **A Importância dos Protocolos**

```yaml
Identificação e Endereçamento (ARP/RARP/DHCP):
  - Ponte entre o mundo físico (hardware) e lógico (software)
  - Permite que dispositivos saibam para quem enviar pacotes
  - DHCP permite conexão automática a redes Wi-Fi sem configuração manual

Camada de Transporte (TCP vs UDP):
  - Define COMO os dados serão entregues
  - TCP: Entrega registrada, garantia de integridade (bancos, e-commerce)
  - UDP: Prioridade de agilidade (streaming, VoIP, jogos)

Roteamento (OSPF, BGP):
  - Sistema nervoso da internet
  - OSPF/EIGRP: Eficiência interna, maior largura de banda
  - BGP: Diplomacia da internet, conecta países e continentes
```

#### **Hierarquia dos Protocolos**

```mermaid
graph TD
    subgraph "Camada de Rede"
        IP[IP Protocol]
    end
    
    subgraph "Protocolos de Roteamento IGP (Interior)"
        RIP[RIP - Vetor Distância]
        OSPF[OSPF - Link State]
        EIGRP[EIGRP - Híbrido]
        IS-IS[IS-IS - Link State]
    end
    
    subgraph "Protocolos de Roteamento EGP (Exterior)"
        BGP[BGP - Path Vector]
    end
    
    IP --> RIP
    IP --> OSPF
    IP --> EIGRP
    IP --> IS-IS
    IP --> BGP
```

***

### 📡 **RIP (Routing Information Protocol)**

#### **Fundamentos**

| Característica       | Descrição                     |
| -------------------- | ----------------------------- |
| **Tipo**             | Vetor de Distância            |
| **Métrica**          | Contagem de saltos (hops)     |
| **Limite de Saltos** | Máximo 15 (16 = infinito)     |
| **Atualizações**     | Periódicas a cada 30 segundos |
| **Porta**            | UDP 520                       |
| **Convergência**     | Lenta (minutos)               |

#### **Timers RIP**

```yaml
Timers Padrão:
  UPDATE_TIMER: 30 segundos (atualizações periódicas)
  INVALID_TIMER: 180 segundos (rota inválida)
  FLUSH_TIMER: 240 segundos (remove rota)
  HOLD_DOWN_TIMER: 180 segundos (aguarda convergência)
```

#### **Versões do RIP**

| Característica   | RIPv1     | RIPv2     | RIPng     |
| ---------------- | --------- | --------- | --------- |
| **VLSM/CIDR**    | ❌         | ✅         | ✅         |
| **Autenticação** | ❌         | ✅ (MD5)   | ✅ (IPsec) |
| **Multicast**    | Broadcast | 224.0.0.9 | FF02::9   |
| **IPv6**         | ❌         | ❌         | ✅         |

#### **Problema Count-to-Infinity**

```python
# Demonstração do problema
Topologia: A -- B -- C
Rota para 10.0.0.0: A(1), B(2), C(3)

# Falha no link A-B
# B ainda acredita que pode chegar via C (distância 3)
# A ouve B (agora distância 4)
# Convergência leva múltiplas iterações
```

***

### ⏳ **TTL (Time To Live)**

#### **Conceito Fundamental**

O **TTL (Time To Live)** é um campo de 8 bits no cabeçalho IP que funciona como um **contador de saltos** para evitar roteamento infinito.

#### **Funcionamento**

```yaml
Mecanismo:
  1. Dispositivo de origem define valor inicial (ex: 64, 128, 255)
  2. Cada roteador subtrai 1 do valor
  3. Se TTL chegar a 0, pacote é descartado
  4. ICMP Time Exceeded é enviado à origem

Uso para Pentesters:
  - OS Fingerprinting (identificação de SO)
  - Mapeamento de distância em saltos
  - Traceroute (baseado no TTL)
```

#### **Exemplo de Análise**

```bash
ping -c 1 8.8.8.8
# Saída: 64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=15ms
# TTL 117 sugere valor inicial 128 - 11 roteadores
```

***

### 🌐 **BGP (Border Gateway Protocol)**

#### **Fundamentos**

| Característica | Descrição                                |
| -------------- | ---------------------------------------- |
| **Tipo**       | Path Vector (Vetor de Caminho)           |
| **Porta**      | TCP 179                                  |
| **Função**     | Roteamento entre Sistemas Autônomos (AS) |
| **Métrica**    | Atributos (AS\_PATH, LOCAL\_PREF, MED)   |

#### **Tipos de AS (Autonomous System)**

```yaml
Tipos de AS:
  Transit AS:
    - Fornece trânsito para outros ASs
    - Ex: Operadoras de telecom (Level3, NTT)
    
  Stub AS:
    - Conecta-se a apenas um AS
    - Ex: Empresas, universidades
  
  Multihomed AS:
    - Conecta-se a múltiplos ASs
    - Ex: Grandes empresas
  
  Internet Exchange Point (IXP):
    - Ponto de troca de tráfego
    - Ex: PTT.br, AMS-IX
```

#### **Tipos de Sessões BGP**

```yaml
eBGP (External BGP):
  - Entre diferentes ASs
  - TTL = 1 (padrão)
  
iBGP (Internal BGP):
  - Dentro do mesmo AS
  - Necessita full mesh ou route reflectors
  - Não modifica AS_PATH
```

#### **Máquina de Estados BGP**

```mermaid
stateDiagram-v2
    [*] --> IDLE
    IDLE --> CONNECT: TCP Connection Init
    CONNECT --> OPEN_SENT: TCP Established
    CONNECT --> ACTIVE: Connection Failed
    ACTIVE --> CONNECT: Retry Timer
    OPEN_SENT --> OPEN_CONFIRM: OPEN Received
    OPEN_CONFIRM --> ESTABLISHED: KEEPALIVE Received
    ESTABLISHED --> ESTABLISHED: UPDATE/KEEPALIVE
    ESTABLISHED --> IDLE: Error/Timeout
```

#### **Ameaças BGP**

| Ameaça                | Descrição                 | Impacto                     |
| --------------------- | ------------------------- | --------------------------- |
| **BGP Hijacking**     | Anúncio falso de prefixos | Redirecionamento de tráfego |
| **Route Leak**        | Vazamento de rotas        | Degradação, espionagem      |
| **Session Hijacking** | Sequestro de sessão       | Injeção de rotas            |

#### **Proteções BGP**

```yaml
Proteções Modernas:
  RPKI (Resource Public Key Infrastructure):
    - Validação de origem de prefixos
    - Certificados digitais para IPs
    - ROA (Route Origin Authorization)
  
  BGPsec:
    - Assinatura digital de caminhos
    - RFC 8205 (2016)
  
  Prefix Filtering:
    - IRR (Internet Routing Registry)
    - Controle de AS_PATH
  
  Max Prefix Limit:
    - Limite de prefixos por peer
```

***

### ⚡ **EIGRP (Enhanced Interior Gateway Routing Protocol)**

#### **Fundamentos**

| Característica   | Descrição                               |
| ---------------- | --------------------------------------- |
| **Tipo**         | Vetor Distância Avançado / Híbrido      |
| **Protocolo**    | IP 88                                   |
| **Multicast**    | 224.0.0.10                              |
| **Convergência** | Muito rápida (sub-segundos)             |
| **Vendor**       | Originalmente Cisco (RFC 7868 - aberto) |

#### **Algoritmo DUAL (Diffusing Update Algorithm)**

```mermaid
graph TD
    A[Detecção de Falha] --> B{Rota ainda existe?}
    B -->|Sim| C[Usar Sucessor Atual]
    B -->|Não| D{Existe Sucessor Viável?}
    D -->|Sim| E[Promover Sucessor Viável]
    D -->|Não| F[Iniciar Query]
    F --> G[Aguardar Respostas]
    G --> H[Calcular nova rota]
```

#### **Tipos de Pacotes EIGRP**

| Tipo      | Código | Descrição                 |
| --------- | ------ | ------------------------- |
| Hello     | 1      | Descoberta de vizinhos    |
| Query     | 2      | Solicitação de rota       |
| Reply     | 3      | Resposta a query          |
| Update    | 4      | Propagação de rotas       |
| Request   | 5      | Solicitação de informação |
| SIA Query | 6      | Stay Alive Query          |
| SIA Reply | 7      | Stay Alive Reply          |

#### **Métrica EIGRP**

```python
# Fórmula da métrica (K1=1, K2=0, K3=1, K4=0, K5=0)
Metric = Bandwidth + Delay

# Bandwidth = 10^7 / menor banda no caminho (Kbps)
# Delay = soma dos delays (em dezenas de microssegundos) / 10
```

#### **Valores de Referência**

| Interface       | Bandwidth (Kbps) | Delay (μs) | Métrica |
| --------------- | ---------------- | ---------- | ------- |
| Ethernet        | 10,000           | 1,000      | 20,000  |
| FastEthernet    | 100,000          | 100        | 2,000   |
| GigabitEthernet | 1,000,000        | 10         | 200     |
| T1              | 1,544            | 20,000     | 28,000+ |

***

### 🌲 **OSPF (Open Shortest Path First)**

#### **Fundamentos**

| Característica   | Descrição                                          |
| ---------------- | -------------------------------------------------- |
| **Tipo**         | Link-State                                         |
| **Protocolo**    | IP 89                                              |
| **Multicast**    | 224.0.0.5 (AllSPFRouters), 224.0.0.6 (AllDRouters) |
| **Convergência** | Rápida (segundos)                                  |
| **Algoritmo**    | Dijkstra (SPF)                                     |

#### **Tipos de Áreas OSPF**

```yaml
Área 0 - Backbone:
  - Área central obrigatória
  - Conecta todas as outras áreas

Área Stub:
  - Não recebe LSAs externos (Tipo 5)
  - Rota padrão para externo

Área Totally Stubby:
  - Não recebe LSAs externos ou resumidos
  - Apenas rotas intra-área + padrão

Área NSSA (Not-So-Stubby):
  - Stub com capacidade de importar rotas externas
  - Usa LSA Tipo 7
```

#### **Tipos de Roteadores OSPF**

| Tipo                         | Descrição                          |
| ---------------------------- | ---------------------------------- |
| **Internal Router (IR)**     | Todas interfaces na mesma área     |
| **Area Border Router (ABR)** | Conecta múltiplas áreas            |
| **Backbone Router**          | Interface na Área 0                |
| **ASBR**                     | Conecta OSPF com outros protocolos |

#### **Tipos de LSA**

| Tipo | Nome             | Descrição                    |
| ---- | ---------------- | ---------------------------- |
| 1    | Router LSA       | Estado dos links do roteador |
| 2    | Network LSA      | Gerado pelo DR               |
| 3    | Summary LSA      | Resumo de rede (ABR)         |
| 4    | ASBR Summary LSA | Localização do ASBR          |
| 5    | AS External LSA  | Rotas externas               |
| 7    | NSSA LSA         | Rotas externas em NSSA       |

#### **Eleição de DR/BDR**

```yaml
Regras de Eleição:
  1. Maior prioridade (0-255, padrão=1)
  2. Maior Router ID (desempate)
  3. DR eleito primeiro, depois BDR

Estados:
  - Down: Sem comunicação
  - Init: Hello recebido
  - 2-Way: Bidirecional
  - ExStart: Eleição DR/BDR
  - Exchange: Trocando DD
  - Loading: Trocando LSR/LSU
  - Full: LSDB sincronizado
```

***

### 📊 **Comparativo entre Protocolos**

#### **Tabela Comparativa Geral**

| Característica     | RIP             | EIGRP          | OSPF              | BGP          |
| ------------------ | --------------- | -------------- | ----------------- | ------------ |
| **Tipo**           | Vetor Distância | Híbrido        | Link-State        | Path Vector  |
| **Métrica**        | Saltos          | Banda + Atraso | Custo (banda)     | Atributos    |
| **Convergência**   | Lenta (minutos) | Muito rápida   | Rápida (segundos) | Lenta        |
| **Escalabilidade** | Pequena         | Média          | Alta              | Global       |
| **Consumo CPU**    | Baixo           | Médio          | Alto              | Médio        |
| **Protocolo**      | UDP 520         | IP 88          | IP 89             | TCP 179      |
| **Autenticação**   | MD5 (v2)        | MD5/SHA        | MD5/SHA           | MD5/TCP-AO   |
| **Vendor**         | Multi-vendor    | Cisco (aberto) | Multi-vendor      | Multi-vendor |
| **Uso Típico**     | Redes pequenas  | Redes Cisco    | Corporativo       | Internet     |

#### **Gráfico de Decisão**

```mermaid
graph TD
    A[Qual protocolo usar?] --> B{Tamanho da rede?}
    
    B -->|< 50 roteadores| C[Pequena]
    B -->|50-500 roteadores| D[Média]
    B -->|> 500 roteadores| E[Grande]
    
    C --> F{Recursos limitados?}
    F -->|Sim| G[RIP]
    F -->|Não| H[OSPF ou EIGRP]
    
    D --> I{Ambiente?}
    I -->|Cisco| J[EIGRP]
    I -->|Multi-vendor| K[OSPF]
    
    E --> L[OSPF + Áreas]
    
    M[Internet/WAN] --> N[BGP]
```

***

### 📋 **Tabela de Decisão para Escolha de Protocolo**

| Cenário                              | Protocolo Recomendado  | Justificativa                           |
| ------------------------------------ | ---------------------- | --------------------------------------- |
| Rede muito pequena (< 10 roteadores) | RIP                    | Simplicidade, baixo consumo             |
| Rede Cisco pura                      | EIGRP                  | Convergência rápida, fácil configuração |
| Rede multi-vendor                    | OSPF                   | Padrão aberto, amplo suporte            |
| Rede muito grande (> 500 roteadores) | OSPF + Áreas           | Hierarquia, escalabilidade              |
| Provedor de serviços                 | IS-IS ou OSPF          | Estabilidade, escalabilidade            |
| Internet (entre ASs)                 | BGP                    | Único protocolo EGP                     |
| Redes com IPv6                       | OSPFv3, RIPng, EIGRPv6 | Suporte nativo                          |

***

### 🔐 **Resumo de Segurança por Protocolo**

| Protocolo | Autenticação | Recomendações de Segurança                   |
| --------- | ------------ | -------------------------------------------- |
| **RIPv2** | MD5          | Autenticação obrigatória, passive interfaces |
| **EIGRP** | MD5/SHA      | Key rotation, filtros de rota                |
| **OSPF**  | MD5/SHA      | Autenticação por área, TTL security          |
| **BGP**   | MD5/TCP-AO   | Prefix filtering, RPKI, max-prefix           |

***

### 📚 **Referências e Padrões**

* **RFC 1058** - RIP Version 1
* **RFC 2453** - RIP Version 2
* **RFC 2080** - RIPng for IPv6
* **RFC 4271** - BGP-4
* **RFC 7868** - EIGRP (padronizado)
* **RFC 2328** - OSPF Version 2
* **RFC 5340** - OSPFv3 for IPv6


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://0xmorte.gitbook.io/bibliadopentestbr/conceitos/redes/protocolos-de-roteamento.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
