Le Adiacenze.
Introduzione
OSPF crea adiacenze tra routers vicini allo scopo di scambiarsi informazioni
di routing. OSPF comunica solo tramite adiacenze. Un router cerchera' di
stabilire una adiacenza con un suo neighbor quando:
la rete sottostante e' Point-to-Point
e' stato stabilito un Virtual Link con il neighbor
il neighbor e' il Router Designato per quella rete
il neighbor e' il Router Designato di Backup per quella rete
il router stesso e' il Router Designato per quella rete
il router stesso e' il Router Designato di Backup per quella rete.
Una adiacenza viene creata e mantenuta attiva utilizzando il Protocollo
Hello.
Il Protocollo Hello.
Questo protocollo assicura una comunicazione bidirezionale con il vicino
(cio' avviene quando un router vede se stesso annunciato nel pacchetto
Hello del neighbor). Su reti multi-accesso esso viene usato per scoprire
dinamicamente i neghbors ed eleggere il Router Designato ed il Router Designato
di Backup per quella rete.
Il Protocollo Hello opera in maniera differente in base al tipo di
rete. Su reti broadcast i pacchetti vengono inviati in broadcast, cosa
che permette di scoprire dinamicamente i propri neighbors. Su reti non
broadcast i pacchetti Hello vengono
inviati uno alla volta ai singoli neighbors. Questo ovviamente puo' essere
fatto solo se la lista dei neighbors era gia' stata preconfigurata nel
router stesso.
In generale quando l'interfaccia di un router su una rete diventa operativa,
vengono dapprima scoperti gli eventuali vicini (se su reti multi-accesso),
si cerca di stabilire con essi una comunicazione bidirezionale (2-Way)
e se necessario si tenta di stabilire una o piu' adiacenze (dopo ovviamente
aver eletto un Router Designato od un Router Designato di Backup).
Il Router Designato.
Due sono le principali funzioni di un Router Designato:
- generare Network Links Advertisements della rete di cui e' Router Designato.
Esso e' l'unico router della rete abilitato a farlo. Questi annunci contengono
la lista dei routers correntemente connessi alla rete (da notare che questi
annunci vengono inviati in tutta l'area cui appartiene la rete e non oltre).
- essere adiacente a tutti gli altri routers connessi alla rete. Considerato
il fatto che i database topologici di ogni singolo router vengono sincronizzati
attraverso le adiacenze, si puo' ben intuire l'importanza del Router Designato.
Considerando il fatto che il Router Designato e' l'end-point di molte
adiacenze, si e' cercato di ridurre il traffico sulla rete facendo si che
i pacchetti di Update si un Link State
vengano inviati all' indirizzo AllSPFRouters, anziche' inviarne tanti quante
sono le adiacenze.
Il Router Designato di Backup.
Questo concetto di Router Designato di Backup e' nato per far si che
il passaggio ad un nuovo Router Designato (nel caso in cui quest'ultimo
sia venuto meno al suo compito) sia meno pesante e piu' veloce. Anche il
Router Designato di Backup e' adiacente a tutti gli altri routers della
rete. Quando un Router Designato viene a mancare, si deve eleggere un nuovo
Router Designato si devono distruggere delle vecchie adiacenze e crearne
delle nuove, per poi sincronizzare i database. Cio' richiede tempo e genera
traffico. L'esistenza di un Router Designato di Backup evita che cio' accada,
essendo esso stesso gia' adiacente a tutti gli altri routers. Il Router
Designato di Backup non genera Network Links
Advertisements. Potrebbe farlo, velocizzando ancor piu' la transizione
a Router Designato, ma cio' a discapito della taglia del database topologico.
Algoritmo di elezione
del Router Designato e del Router Designato di Backup.
Vediamo ora come vengono eletti il RD ed il RDB. Chiamiamo router X
il router che sta effettuando il calcolo. Viene dapprima analizzata la
lista dei neghbors (scoperti dinamicamente dal Protocollo Hello) il cui
stato e' maggiore od uguale a 2-Way (ovvero quei neighbors con cui e' stata
stabilita la comunicazione bidirezionale) e vengono scartati tutti quei
routers con priorita' 0 (ovvero quei routers che annunciano la propria
ineligibilita' a Router Designato). Vengono quindi effettuati i seguenti
passi:
- viene segnato l' ID del Router Designato e del Router Designato di
Backup correnti.
- viene eletto il nuovo Router Designato di Backup tra tutti quelli che
si dichiarano Router Designato di Backup. Solo quei routers che non hanno
dichiarato se stessi come Router Designato possono essere eletti Router
Designato di Backup. Il router con priorita' piu' alta sara' il nuovo Router
Designato di Backup. Se nessun router dichiara di essere Router Designato
di Backup vengono presi in considerazione tutti i routers che non hanno
gia' dichiarato se stessi come Router Designati.
- viene eletto il nuovo Router Designato tra tutti quelli che eleggono
se stessi come Router Designato, scegliendo quello a priorita' piu' alta.
Se nessuno si e' dichiarato Router Designato viene automaticamente eletto
Router Designato l'appena eletto Router Designato di Backup.
- se il router X e' il nuovo RD o e' il nuovo RDB o non e' piu' il RD
o non e' piu' il RDB si ripetono i passi 2 e 3 e si passa al 5. Questo
assicura che nessun router dichiari se stesso sia RD che RDB.
- viene settato in modo appropriato lo stato dell' interfaccia del router.
Se X e' il nuovo Router Designato allora lo stato sara' DR, se X e' il
nuovo Router Designato di Backup allora lo stato sara' Backup, altrimenti
lo stato sara' DR Other.
- se la rete connessa non e' una rete broadcast e X e' il nuovo Router
Designato o il nuovo Router Designato di Backup esso deve iniziare ad inviare
pacchetti Hello ad intervalli regolari a quei routers con priorita' 0,
invocando l'evento Start per ognuno di essi. Questo evita che questi routers
evitino di evocare l'evento NeighborChange quando non e' necessario.
- se l'identita' del Router Designato o del Router Designato di Backup
e' cambiata viene invocato l'evento AdjOk? su tutti i vicini con stato
maggiore od uguale a 2-Way onde stabilire nuove adiacenze se necessario.
Questo algoritmo assicura che nessun router diventi Router Designato
di Backup finche' l'attuale Router Designato di Backup non accetti di essere
il nuovo Router Designato.
La sincronizzazione del
database topologico.
OSPF richiede che solo i routers adiacenti debbano rimanere sincronizzati
sul database topologico che descrive l'area cui appartengono. E' una scelta
questa che porta ad una notevole riduzione del traffico sulla rete. Il
processo di sincronizzazione del database parte non appena si cerca di
stabilire una adiacenza. Durante questo processo viene stabilita una relazione
Master/Slave tra i due routers. Ogni pacchetto inviato ha un proprio Sequence
Number concordato all'inizio della procedura. Il Master invia pacchetti
di Descrizione del Database (Database Description
Packet, contenente una lista di Link State Advertisements) allo Slave
che risponde con un pacchetto dello stesso tipo contentente una lista di
Link State Advertisements riguardanti
il proprio database e con lo stesso Sequence Number onde inviare anche
un Acnowledge al Master. Durante questo scambio, ogni router prende nota
degli advertisements piu' recenti (rispetto ai propri) dell'altro router.
Questi advertisements verranno poi richiesti uno ad uno appena finito il
processo di scambio dei Database Description
Packets. Questi aggiornamenti verranno richiesti tramite Link State
Request cui si risponde con pacchetti di Link
State Update. Concluso l'intero processo di sincronizzazione, l'adiacenza
viene considerata pienamente funzionante e mantenuta attiva tramite l'invio
ad intervalli regolari di pacchetti Hello contenenti o meno informazioni.
L'algoritmo di elezione del Router Designato e del Router Designato di
Backup, il processo di sincronizzazione del database e lo stesso invio
dei pacchetti Hello, avvengono avvengono
su particolari transizioni dell'interfaccia del router su di una particolare
rete e degli eventuali neighbors. Descriveremo ora gli stati piu' importanti
in cui transitano le interfacce ed neighbor di un dato router.
La struttura dati dell' Interfaccia.
Ad ogni interfaccia di un router e' associata una struttura dati contenente
(tra le altre) queste informazioni:
- Type
- Il tipo di rete su cui e' connessa l'interfaccia.
- State
- lo stato in cui puo' venire a trovarsi l'interfaccia.
- IP Address
- l' IP dell'interfaccia su quella rete.
- IP Mask
- la netmask della rete associata a quell'interfaccia.
- Area ID
- l' ID dell'area cui appartiene l' interfaccia.
- Router Priority
- priorita' del router sulla rete cui e' connessa l'interfaccia.
- Wait Timer
- questo timer scatta una sola volta ed annuncia che e' finito il tempo
di attesa di pacchetti Hello ed annuncia
anche l'inizio dello algoritmo di elezione del Router Designato.
- List of Neighboring Routers
- la lista dei neighbors, creata dinamicamente se su reti multi-accesso;
preconfigurata sulle altre.
- Designated Router
- contiene sia l'IP che l'ID del Router Designato su quella rete.
- Backup Designated Router
- contiene l'IP e l'ID del Router Designato di Backup per quella rete.
- Cost
- il costo per inviare pacchetti su quell'interfaccia. Usato dali algoritmi
di routing di OSPF.
- Authentication Key
- la chiave di autenticazione usata per autenticare ogni singolo pacchetto
inviato su quella interfaccia.
Gli stati piu' importanti in cui puo' transitare una interfaccia sono:
- Down
- stato iniziale. Nessun pacchetto e' inviato o ricevuto; i timers sono
disabilitati; nessuna adiacenza e' presente.
- Waiting
- vi si arriva quando viene ricevuto l'evento InterfaceUP. Viene resettato
il Wait Timer e ci si pone in attesa di pacchetti
Hello.
- Point-to-Point
- : vi si arriva direttamente dallo stato Down ed indica che la rete
su cui e' connessa l'interfaccia e' di tipo point-to-point per cui si passa
subito a cercare di stabilire un'adiacenza.
- DR Other
- indica che ci si trova su una rete multi-accesso e che il Router Designato
per quella rete e' un altro. Ci si puo' arrivare dopo aver eseguito l'algoritmo
di elezione del Router Designato (dopo cioe' che nello stato Waiting si
e' ricevuti un evento WaitTimer o BackupSeen). Si cerca di stabilire una
adiacenza con il Router Designato e con l'eventuale Router Designato di
Backup.
- Backup
- indica che ci si trova su una rete multi-accesso e che il router stesso
e' il Backup router per quella rete. Si stabiliscono adiacenze con tutti
gli altri routers della rete.
- DR
- indica che ci si trova su una rete multi-accesso e che il router stesso
e' il Router Designato per quella rete. Si stabiliscono adiacenze con tutti
gli altri routers della rete, dopodiche' si generano Network Link State
Advertisements per quella rete.
Evento importante che causa il ricalcolo del Router Designato e del
Router Designato di Backup. Esso viene generato quando:
- e' stata stabilita una comunicazione bidirezionale con un neighbor
- non c'e' piu' comunicazione bidirezionale con un neighbor
- uno dei vicini con cui era stata stabilita una comunicazione bidirezionale
annuncia di essere il nuovo Router Designato od il nuovo Router Designato
di Backup
- uno dei vicini con cui era stata stabilita una comunicazione bidirezionale
annuncia di non essere piu' il Router Designato od il Router Designato
di Backup
- la Router Priority di un neighbor e' cambiata.
La struttura dati del Neighbor.
Descriviamo ora la struttura dati associata ad un neighbor di un dato
router. Essa contiene (tra gli altri) questi campi:
- State
- lo stato in cui puo' venire a trovarsi un neighbor.
- Inactivity Timer
- lo scatto di questo timer indica che il neighbor non ha inviato pacchetti
Hello da RouterDeadInterval secondi e quindi viene considerato morto. Viene
generato un evento NeighborChange.
- Master/Slave
- usato durante il Database Exchange Process ed indica lo stato di Master
o Slave assunto durante tale processo.
- DD Sequence Number
- un numero a 32 bit che identifica un Database
Description Packet.
- Neighbor ID
- l' ID del neighbor.
- Neighbor Priority
- la Router Priority del vicino.
- Neighbor IP Address
- l' IP address del neighbor.
- Options
- serie di bit che indica le capabilities del neighbor.
- Neighbor's DR
- l'identita' del Router Designato dal punto di vista del neighbor.
- Neighbor's BDR
- l' identita' del Router Designato di Backup dal punto di vista del
neighbor.
- Link State Retrasmission List
- la lista dei Link State Advertisements inviati ed in attesa di acknowledge.
- Database Summary List
- la lista dei Link State Advertisements
che descrivono il database topologico del router e che devono essere inviati
al neighbor.
- Link State Request List
- la lista dei Link State Advertisements
che devo essere richiesti al neighbor onde aggiornare il proprio database
.
Gli stati piu' importanti in cui puo' transitare un neighbor:
- Down
- lo stato iniziale della conversazione con un neighbor.
- Attempt
- si passa in questo stato solo su reti non broadcast. Indica che e'
stato invocato l'evento Start al vicino e si e' in attesa di pacchetti
Hello da esso. In pratica e' un attempt di stabilire una comunicazione
con il neighbor.
- 2-Way
- indica che e' stata stabilita una comunicazione 2-way col neighbor.
Puo' essere stabilita una adiacenza se necessario. Il neighbor e' eligibile
a Router Designato o Router Designato di Backup se la sua Router Priority
non e' 0.
- ExStar
- si arriva in questo stato quando da Init viene ricevuto un evento
2-Way che commuta lo stato in 2-Way e si deve stabilire una adiacenza.
E' il primo stato per la costruzione della stessa ed e' in questo stato
che si negozia il DD Sequence Number e si stabilisce la relazione Master/Slave.
- ExChange
- ci si arriva da ExStart con l'evento NegotiationDone che indica che
e' stata stabilita la relazione Master/Slave e si e' stabilito il DD Sequence
Number iniziale. Durante questo stato avviene la prima parte del Database
Exchange Process e ci si scambiano Database
Description Packet.
- Loading
- si arriva in questo stato da ExChange con l'evento di Exchange Done
indicante che e' finito lo scambio di pacchetti di descrizione del database.
Se vi sono richieste di pacchetti per aggiornamento da fare si entra in
questo stato.
- Full
- e' l'ultimo stato dell'adiacenza. Indica che l'adiacenza e' pienamente
funzionale.