OSPF e come funziona la discovery dei vicini.
SPF utilizza il proprio protocollo come EIGRP e non utilizza un protocollo di trasporto come TCP o UDP. Se guardi il pacchetto IP in WireShark puoi vedere che OSPF ha l’ ID di protocollo 89 per tutti i suoi pacchetti.
R2#debug ip ospf packet
OSPF packet debugging is on
OSPF: rcv. v:2 t:1 l:48 rid:1.1.1.1
aid:0.0.0.0 chk:4D40 aut:0 auk: from FastEthernet0/0
Se usiamo debug ip pacchetto ospf possiamo guardare il pacchetto OSPF sul nostro router. Diamo un’occhiata ai diversi campi che abbiamo:
- V: 2 sta per OSPF versione 2. Se stai usando IPv6 avrai la versione 3.
- T: 1 sta per OSPF packet number 1 che è un hello packet. Tra poco vi mostrerò i diversi pacchetti.
- L: 48 è la lunghezza del pacchetto in byte. Questo pacchetto Hello sembra essere di 48 byte.
- RID 1.1.1.1 è l’ID del router.
- AID è l’ID dell’area in decimale puntato. È possibile scrivere l’area in decimale (area 0) o decimale puntato (area 0.0.0.0).
- CHK 4D40 è il checksum di questo pacchetto OSPF in modo da poter verificare se il pacchetto è danneggiato o meno.
- AUT: 0 è il tipo di autenticazione. Hai 3 possibilità :
- 0 = nessuna autenticazione
- 1 = testo in chiaro
- 2 = MD5
- AUK: Se abiliti l’autenticazione vedrai alcune informazioni qui.
Continuiamo esaminando i diversi tipi di pacchetti OSPF:
Te li sto lanciando addosso; ecco tutti i tipi di pacchetti OSPF che abbiamo. Nel mio debug ip ospf packet alla pagina precedente potevi vedere T: 1 che sta per tipo di pacchetto 1. Qui vedi che corrisponde a un pacchetto hello OSPF. Qual è il ruolo di ogni pacchetto OSPF?
- Ciao: scoperta dei vicini, costruisci le adiacenze dei vicini e gestiscili.
- DBD: questo pacchetto viene utilizzato per verificare se l’LSDB tra 2 router è lo stesso. Il DBD è un riassunto dell’LSDB .
- LSR: richiede record di stato del collegamento specifici da un vicino OSPF.
- LSU: invia i record dello stato del collegamento specifici richiesti. Questo pacchetto è come una busta con più LSA al suo interno.
- LSAck: OSPF è un protocollo affidabile quindi abbiamo un pacchetto per riconoscere gli altri.
OSPF deve attraversare 7 stati per diventare vicini … eccoli qui:
- Giù : nessun vicino OSPF rilevato in questo momento.
- Init: Hello packet ricevuto.
- Bidirezionale: ID router proprio trovato nel pacchetto hello ricevuto.
- Exstart: ruoli di master e slave determinati.
- Scambio: vengono inviati i pacchetti di descrizione del database (DBD).
- Caricamento: scambio di pacchetti LSR (Link state request) e LSU (Link state update).
- Completo: i router OSPF ora hanno un’adiacenza.
Diamo uno sguardo dettagliato a questo processo! Puoi anche vederlo in questa acquisizione di pacchetti:
OSPF Neighbor Adjacency – Network Type Broadcast
Questa è la topologia che sto usando. R1 e R2 sono collegati utilizzando un unico collegamento e vedremo come R1 apprende la rete 2.2.2.0 / 24.
Non appena configuro OSPF su R1 inizierà a inviare pacchetti di ciao. R1 non ha idea di altri router OSPF in questo momento, quindi è nello stato inattivo . Il pacchetto hello verrà inviato all’indirizzo multicast 224.0.0.5.
R2 riceve il pacchetto hello e inserirà una voce per R1 nella tabella dei vicini OSPF. Ora siamo nello stato di inizializzazione.
R2 deve rispondere a R1 con un hello packet. Questo pacchetto non viene inviato utilizzando multicast ma con unicast e nel campo adiacente includerà tutti i vicini OSPF di R2. R1 vedrà il proprio nome nel campo vicino in questo pacchetto di saluto.
R1 riceverà questo pacchetto di benvenuto e vedrà il proprio ID router. Ora siamo nello stato a doppio senso .
Devo fare una pausa qui. Se il collegamento che stiamo utilizzando è una rete ad accesso multiplo, OSPF deve scegliere un DR (Designated Router) e BDR (Backup Designated Router) . Questo deve accadere prima di poter continuare con il resto del processo. In un’altra lezione ti insegnerò DR / BDR… per ora tieni solo il pensiero che l’elezione DR / BDR avvenga subito dopo lo stato a due vie ok?
La nostra prossima tappa è lo stato exstart . I nostri router sono pronti per sincronizzare il loro LSDB. A questo punto dobbiamo selezionare un ruolo master e slave . Il router con l’ID router più alto diventerà il master. R2 ha l’ID router più alto e diventerà il master.
Nello stato di scambio i nostri router inviano un DBD con un riepilogo dell’LSDB. In questo modo i router possono scoprire quali reti non conoscono.
Quando i nostri router ricevono il DBD dall’altra parte, faranno un paio di cose:
- Invia un riconoscimento utilizzando il pacchetto LSAck.
- Confronta le informazioni nel DBD con le informazioni che già possiede:
- Se il vicino ha informazioni nuove o più recenti, invierà un pacchetto LSR (Link State Request) per richiedere queste informazioni
- Quando i router iniziano a inviare un LSR (Link State Request) siamo nello stato di caricamento .
- L’altro router risponderà con un LSU (Link State Update) con le informazioni richieste.
Quando R1 ha richiesto informazioni su 2.2.2.0 / 24, ha utilizzato un LSR. R2 invierà l’LSU con le informazioni. R1 invierà un riconoscimento utilizzando un pacchetto LSAck per terminare. Ora siamo nello stato completo. Entrambi i router hanno un LSDB sincronizzato e siamo pronti per il routing!
Ti chiedi che aspetto abbia su un vero router? Fare un debug ip ospf adj è più veloce che disegnare tutte quelle immagini in Microsoft Visio:
R2#debug ip ospf adj
OSPF adjacency events debugging is on
R2#clear ip ospf process
Reset ALL OSPF processes? [no]: yes
Lascia che ti mostri il debug:
R2#
OSPF: Interface Loopback0 going Down
OSPF: 2.2.2.2 address 2.2.2.2 on Loopback0 is dead, state DOWN
OSPF: Interface FastEthernet0/0 going Down
OSPF: 2.2.2.2 address 192.168.12.2 on FastEthernet0/0 is dead, state DOWN
OSPF: Neighbor change Event on interface FastEthernet0/0
OSPF: DR/BDR election on FastEthernet0/0
OSPF: Elect BDR 0.0.0.0
OSPF: Elect DR 1.1.1.1
OSPF: Elect BDR 0.0.0.0
OSPF: Elect DR 1.1.1.1
DR: 1.1.1.1 (Id) BDR: none
OSPF: 1.1.1.1 address 192.168.12.1 on FastEthernet0/0 is dead, state DOWN
%OSPF-5-ADJCHG: Process 1, Nbr 1.1.1.1 on FastEthernet0/0 from FULL to DOWN, Neighbor Down: Interface down or detached
OSPF: Neighbor change Event on interface FastEthernet0/0
OSPF: DR/BDR election on FastEthernet0/0
OSPF: Elect BDR 0.0.0.0
OSPF: Elect DR 0.0.0.0
DR: none BDR: none
OSPF: Remember old DR 1.1.1.1 (id)
OSPF: Interface Loopback0 going Up
OSPF: Interface FastEthernet0/0 going Up
OSPF: 2 Way Communication to 1.1.1.1 on FastEthernet0/0, state 2WAY
OSPF: Backup seen Event before WAIT timer on FastEthernet0/0
OSPF: DR/BDR election on FastEthernet0/0
OSPF: Elect BDR 2.2.2.2
OSPF: Elect DR 1.1.1.1
OSPF: Elect BDR 2.2.2.2
OSPF: Elect DR 1.1.1.1
DR: 1.1.1.1 (Id) BDR: 2.2.2.2 (Id)
OSPF: Send DBD to 1.1.1.1 on FastEthernet0/0 seq 0x1E09 opt 0x52 flag 0x7 len 32
OSPF: Rcv DBD from 1.1.1.1 on FastEthernet0/0 seq 0x886 opt 0x52 flag 0x7 len 32 mtu 1500 state EXSTART
OSPF: First DBD and we are not SLAVE
OSPF: Rcv DBD from 1.1.1.1 on FastEthernet0/0 seq 0x1E09 opt 0x52 flag 0x2 len 72 mtu 1500 state EXSTART
OSPF: NBR Negotiation Done. We are the MASTER
OSPF: Send DBD to 1.1.1.1 on FastEthernet0/0 seq 0x1E0A opt 0x52 flag 0x1 len 32
OSPF: Rcv DBD from 1.1.1.1 on FastEthernet0/0 seq 0x1E0A opt 0x52 flag 0x0 len 32 mtu 1500 state EXCHANGE
OSPF: Exchange Done with 1.1.1.1 on FastEthernet0/0
OSPF: Send LS REQ to 1.1.1.1 length 24 LSA count 2
OSPF: Rcv LS UPD from 1.1.1.1 on FastEthernet0/0 length 108 LSA count 2
OSPF: Synchronized with 1.1.1.1 on FastEthernet0/0, state FULL
%OSPF-5-ADJCHG: Process 1, Nbr 1.1.1.1 on FastEthernet0/0 from LOADING to FULL, Loading Done
Ho evidenziato alcuni campi: puoi vedere la comunicazione a 2 vie, la lotta per il potere per determinare chi sarà il master o lo slave, lo scambio del riepilogo LSDB utilizzando un altro pacchetto DBD e infine un LSQ e LSU.