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:

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:

  1. 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).
  2. 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:

  1. viene segnato l' ID del Router Designato e del Router Designato di Backup correnti.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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:

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.

[prev] [index] [next]