Richiami sui grafi diretti pesati G (N,A) {N} nodi {A} archi tra nodi rappresentati come coppie di nodi (i,j) Ad ogni (i,j) € A è associato un peso d i,j Considereremo solo grafi connessi: per ogni i,,j € N esiste un cammino da i a j Cammino da “i “ a “j”: percorso senza nodi ripetuti Percorso: {n1,n2,.....,nk}, dove ni € N e (ni, ni+1) € A L'algoritmo di routing calcolerà per ogni coppia di nodi un cammino di lunghezza minima pari alla somma dei pesi d i,j L'algoritmo per il calcolo dei cammini minimi può essere eseguito in modo distribuito tra i router della rete e ha complessità polinomiale funzione del numero dei nodi della rete 1 Database topologico È rappresentato da un grafo diretto Vertici: router oppure reti Arco: tra due router: esiste una connessione punto-punto tra i due router tra router e rete: se il router ha una interfaccia sulla rete Vertici di transito: archi entranti e uscenti Reti multiaccesso (e.g. Ethernet): reti con 2+ router Reti stub: reti con un solo router Reti non broadcast: e.g. reti punto-punto Interfaccia: connessione fisica di un router con una rete (e.g. porta seriale, porta ethernet,..) Neighbor: 2 router che hanno una interfaccia su una rete comune 2 Rete punto - punto From interfaccia R1 Ia 4 R1 (origine) 4 4 Ib R2 Ib 6 R1 R2 To R1 R2 4 Ia Ib 4 R2 6 6 Grafo diretto 6 Ia SPF tree di R1 I router sono collegati in modalità diretta punto-punto (e.g. un collegamento seriale) Le porte/interfacce dei router sono indentificate tramite Ix Il peso associato alla rete è diverso a seconda del verso di percorrenza (potrebbe anche essere simmetrico) L'interfaccia viene rappresentata come rete stub a cui è connesso il solo router a cui appartiene 3 Rete multi accesso 4 R1 R1 R2 To N1 R3 R4 4 R1 (origine) R3 R1 R2 R3 R4 N1 R2 R3 R4 N1 0 0 0 0 4 4 4 4 Grafo diretto N1 R2 From R4 SPF tree di R1 I router sono attestati ad una stessa LAN Il peso associato alla rete è lo stesso per tutti i router La rete è connessa con un arco di costo zero a tutti i router (ogni coppia di router può comunicare direttamente sulla rete) 4 Rete Stub ( rete multiaccesso con 1 router) From R1 4 R1 To N1 4 N1 4 R1 (origine) Grafo diretto N1 SPF tree di R1 Rete STUB (non è possibile attraversarla) – un solo arco La rete è una foglia dello SPF Differenti reti STUB: reti multiaccesso con 1 router, interfaccia di rete punto - punto, interfaccia di loopback di un router 5 Esempio completo R1 1 N5 1 R2 N6 N3 N1 1 N4 3 R3 R5 N5 6 Ib 4 Ia 3 R4 2 N2 2 N6 1 R1 (origine) N1 0 0 3 R2 R3 4 4 N4 N5 N6 R4 Ib R5 2 6 Ia N5 N6 N2 SPF tree di R1 TO R1 R2 R3 R4 R5 N1 N2 N3 N4 N5 N6 N7 Ia Ib FROM R1 R2 R3 R4 R5 N1 N2 N4 0 0 6 0 0 4 0 0 0 1 1 1 2 2 3 3 6 4 Grafo diretto N1, N2 e N4 sono reti interne al dominio OSPF N3, N5 e N6 sono reti esterne ( la gestione delle reti esterne in OSPF sarà illustrata nel seguito) 6 Esempio completo N1, N2, N4 sono reti multiaccesso Ia, Ib sono reti STUB N3, N5, N6 sono reti esterne; i router R2 e R5 “apprendono” queste reti da un altro protocollo (e.g. RIP); queste network sono viste come originate da un dominio esterno anche se potrebbero essere di un protocollo di routing diverso nella stessa rete; nel caso più generale possono essere reti di altri domini (e.g. Connettività Internet – BGP-4) “iniettate” nell'OSPF. I router inseriscono questi reti nella propria tabella di routing assieme alle reti interne. Vedremo che le reti esterne possono essere “iniettate” nell'OSPF in 2 modi differenti In OSPF se una rete può essere raggiunta con più percorsi di costo uguale, il traffico userà in uguale misura tali percorsi 7 OSPF routing gerarchico Un AS può essere suddiviso in più aree allo scopo di: Ridurre la complessità della topologia (la topologia di ogni area non è nota alle altre aree) Ridurre il traffico di controllo Proteggere la rete da problemi/instabilità di routing (isolamento delle aree) Regole da seguire: Esiste un'area speciale chiamata backbone a cui tutte le altre aree devono essere connesse 8 OSPF routing gerarchico N14 N14 N9 N15 R14 R9 N3 N2 R3 R2 R15 R10 R14 R7 R11 N1 R1 N5 R5 N11 R4 N6 N13 R13 N12 R12 R6 N4 N10 N7 R8 N8 Tutti i router hanno lo stesso DB topologico che contiene un numero di vertici pari alla somma dei router (R) e delle reti (N) Matrice sparsa di dimensione (R+N) x (R+N) 9 OSPF routing gerarchico FROM TO R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 N1 N2 N3 N4 N5 N6 N7 N8 N9 N10 N11 N12 N13 N14 N15 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 N1 N2 N3 N4 N5 N6 N7 N8 N9 N10 N11 N12 N13 N14 N15 X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Grafo diretto 10 OSPF routing gerarchico Area 1 IR Area 4 ABR IR Area 2 IR ABR Area 0 IR IR IR ABR ABR Area 3 IR I router ABR (Area Border) hanno delle interfacce in due aree diverse, IR (Internal Router) hanno tutte le interfacce in un'area I router di backbone sono quelli che hanno almeno una interfaccia nell'area 0 11 OSPF routing gerarchico Area 1 R14 R9 R14 R3 R2 Area 2 R15 R10 R7 Area 0 R1 Area 4 R11 R13 R5 R4 R12 R6 Area 3 R8 Le topologie delle singole aree sono invisibili all'esterno dell'area I router ABR conoscono la topologia delle aree direttamente connesse e la topologia del backbone 12 OSPF routing gerarchico Area 2 N15 N10 R15 R10 R4 N1,N2,N3,N5,N6,N7,N8,N9, N11,N12,N13,N14,N15 N4 Con riferimento all'area 2 tutte le reti esterne sono viste dai router interni come connesse all'ABR (R4) La dimensione della matrice, se la dimensione dell'area è trascurabile rispetto all'intera rete, é N x ( Rarea + Narea ) Vedremo che in realtà i router di un'area devono concoscere anche gli ASBR TO R4 R10 R15 N1 N2 N3 N4 N5 N6 N7 N8 N9 N10 N11 N12 N13 N14 N15 FROM R4 R10 R15 N4 N10 N15 X X X X X X X X X X X X X X X X X X X X X Grafo diretto 13 Summarization delle rotte inter-area Meccanismo previsto da OSPF per ridurre il numero di annunci (meno traffico di controllo in rete, meno carico elaborativo sui router) Consente di inviare un unico annuncio (consolidato) di destinazioni multiple (route) Il router deputato al compito di consolidare gli annunci è l'ABR L'ABR invia un annuncio consolidato verso il backbone Il backbone distribuisce gli annunci già consolidati verso le altre aree Prerequisito per poter effettuare la summarization è che le reti di un'area OSPF siano contigue 14 Summarization delle rotte inter-area Area 0 Backbone Area 2 80.17.0.0 255.255.248.0 R7 80.17.1.0 255.255.255.0 80.17.4.0 R14 255.255.255.0 R11 R13 80.17.2.0 255.255.255.0 Network 01000000 00010001 00000001 00000000 Reti: 80.17.1.0 01000000 00010001 00000010 00000000 Reti: 80.17.2.0 01000000 00010001 00000100 00000000 Reti: 80.17.4.0 01000000 00010001 00000000 00000000 11111111 11111111 11111000 00000000 Reti: 80.17.0.0 – 80.17.7.0 80.17.0.0/21 15 Summarization delle rotte inter-area Area 3 Area 0 Backbone Area 2 80.17.0.0 255.255.224.0 80.17.4-7.0 ABR 80.17.4.0 255.255.252.0 Network 01000000 00010001 00000001 00000000 mask R7 80.17.1.0 255.255.255.0 80.17.16.0 R14 255.255.240.0 R11 R13 80.17.2.0 255.255.254.0 Reti: 80.17.1.0 /24 01000000 00010001 00000010 00000000 Reti: 80.17.2.0 - 80.17.3.0 01000000 00010001 00010000 00000000 Reti: 80.17.16.0 - 80.17.31.0 01000000 00010001 00000000 00000000 11111111 11111111 11100000 00000000 Reti: 80.17.0.0 - 80.17.31.0/24 Inconsistenza di routing per le reti 80.17.4.0, ...., 80.17.7.0/24 perchè sono annunciate da due aree; il problema è causato dall'assegnazione non consecutiva delle reti nell'area 2. In questo caso la summarization non va usata. 16 OSPF descrizione dei tipi di pacchetti I messaggi scambiati tra i router sono classificati nelle seguenti tipologie: 1. HELLO: per scoprire e controllare lo stato (alive ?) dei router vicini 2. Database Description (DD): usati nel processo di creazione delle adiacenze 3. Link State Request (LSR): usati nel processo di creazione delle adiacenze 4. Link State Update usati per scambiare gli “annunci” in modo reliable . Sono i pacchetti che trasportano informazioni relative alla raggiungibilità di specifiche destinazioni un hop più avanti rispetto al router che ha originato l'annuncio. Le unità informative contenuti all'interno dei pacchetti LSU, sono chiamati Link State Advertisment (LSA) e vanno a popolare il database OSPF 5. Link State Upadate ACK: riscontrano la ricezione dei LSA 17 OSPF descrizione dei tipi di pacchetti Hello Viene inviato periodicamente (in multicast) dal router su tutte le sue interfacce; in questo modo il router avvisa i suoi vicini della sua presenza e dei vicini (neighbors) precedentemente appresi Tra alcuni vicini (tra i quali è stata già accertata la comunicazione bidirezionale) si stabiliranno delle relazioni più forti “adiacenze”); in particolare, i router agli estremi di una rete punto-punto diventeranno sempre adiacenti, mentre nelle reti multiaccesso ogni router diventa adiacente solo con un router particolare (che fa da centro stella per tutti i router della rete e verso l'esterno) chiamato Designated Router e il suo back-up caldo (BDR) il protocollo OSPF prevede che i DB siano sincronizzati tra i router adiacenti 18 Processamento dei pacchetti OSPF – Hello Invio dei pacchetti Hello: contiene: la lista di tutti i router da cui si è già ricevuto un pacchetto hello e l’identificativo proposto per il DR e il BRD (0.0.0.0 in caso di mancanza di indicazioni) la priorità del router (utilizzata nella scelta del DR e del BDR) i valori di HelloInterval e RouterDeadInterval rispettivamente l’intervallo tra due invii successivi di un pacchetto Hello e il tempo entro cui il neighbor deve ascoltare un Hello prima di dichiarare morto il router (questi due valori devono essere identici per tutti i router sulla stessa area OSPF) network mask ` Indirizzo IP di destinazione: sulle reti punto-punto e reti multicast viene inviato all’indirizzo multicast AllSPFRouters (224.0.0.5) Indirizzo IP sorgente: indirizzo IP dell’interfaccia del router Frequenza di invio: ogni HelloInterval secondi • Utilizzo: discovery e mantenimento dei neighbor • A chi viene inviato: su tutte le interfacce del router 19 Creazione delle adiacenze bo h g i e n Router r R R interfaccia R R Per ogni porta di connessione esterna del router (interfaccia) il router gestisce: una macchina a stati dell’interfaccia una macchina a stati per ogni neighbor La macchina a stati dell’interfaccia è responsabile della gestione degli eventi di interfaccia e dell’elezione del DR della rete La macchina a stati dei neighbor gestisce il processo di creazione delle adiacenze 20 Struttura dati per gestire i neighbor Tra due router ospf presenti su una stessa rete viene instaurata una “conversazione”; se tra una coppia di router esiste più di una rete in comune, verrà istanziata una conversazione per ognuna di essa. La struttura dati identifica una particolare istanza di conversazione tra due router e il suo stato in merito alla creazione dell’adiacenza tra due router (che può essere vista come lo stadio più alto di evoluzione di neighborood tra due router, non sempre raggiunto). Di seguito sono descritti i campi della struttura dati: Stato Inactivity timer: istanziato pari al RouterDeadInterval, se scaduto indica che non sono stati ricevuti hello dal neighbor master/slave: ruolo durante la fase di scambio del database tramite pacchetti Database Description DD sequence number: identificativo dell’ultimo pacchetto DD inviato ultimo pacchetto DD ricevuto: utilizzato per individuare pacchetti duplicati Neighbor id: identificativo del neighbor, appreso dal pacchetto hello ricevuto neighbor priority: utilizzata per il calcolo del DR, BDR neighbor’s DR e BDR: quali sono il DR e il BDR a detta del neighbor Link state retransmission list: elenco dei LSA inviati per i quali non è stato ricevuto un ACK dal router adiacente e che quindi vanno ritrasmessi Database Summary List: lista completa dei LSA che compongono il DB del router e che andranno trasmessi nel momento in cui si crea l’adiacenza Link state request list: il router crea questa lista man mano che riceve i pacchetti DD dal router adiacente; successivamente la invia tramite i pacchetti Link State Request e cancella gli item della lista quando riceve i relativi pacchetti Link State Updade 21 Struttura dati per gestire una interfaccia Type : punto-punto, broadcast,.. Stato: stato funzionale IP address: questo indirizzo viene usato come IP sorgente di tutti i pacchetti di controllo che escono dall'interfaccia Area_ID: area OSPF Hello Interval: parametro che definisce l'intervallo in secondi tra due pacchetti Hello (inserito nei pacchetti Hello trasmessi) RouterDeadInterval: parametro che definisce il tempo massimo che trascorre tra 2 hello dopo il quale un neighbor viene considerato non più disponibile ( = n* HelloInterval) - (inserito nei pacchetti Hello trasmessi) InfTranDelay: stima del tempo di propagazione di un messaggio sull'interfaccia (viene sommato all'age dell'LSA quando il messaggio viene inoltrato) Router Priority: valore usato nell'elezione del DR/BDR 22 Struttura dati per gestire una interfaccia Hello Timer: timer che scade ogni Hello Interval secondi e causa l'invio di un pacchetto Hello Wait Timer: timer che provoca l'uscita dallo stato di waiting e la selezione del DR Lista dei neighbors: è la lista di tutti i neighbor (appresi tramite pacchetti Hello) presenti sulla rete a cui l'interfaccia è connessa Designated router: identificato da Router ID e interfaccia IP del router sulla rete Backup Designated router: identificato da Router ID e interfaccia IP del router sulla rete Costo: metrica dell'interfaccia (output) RxmtInterval: intervallo per la ritrasmissione di LSA AuType/Authentication Key: è possibile prevedere la mutua autenticazione tra i router che partecipano al processo OSPF 23 Neighbor states: cambiamenti determinati dai pacchetti Hello Down start Attempt AdjOK? é un evento generato dal processo di gestione dell'interfaccia a seguito di un cambiamento del DR/BDR (è descritto nell'ambito del processo di elezione del DR/BDR HelloReceived init AdjOK? 2-wayReceived ExStart AdjOK? HelloReceived 1-wayReceived 2-Way AdjOK? Attempt: stato utilizzato solo per reti NBMA (non broadcast multiaccess) Init: il router ha ricevuto un pacchetto Hello dal neighbor ma lui stesso non è inlcuso nella lista dei router neighbors (la comunicazione non è ancora bidirezionale) 2-Way/ExStart: è stata stabilita la comunicazione bidirezionale; l’evento 2wayReceived indica che il router ha visto se stesso nella lista dei neighbor del pacchetto Hello ricevuto; l’evento 1-wayReceieved (pacchetto Hello che non contiene se stesso nella lista dei router) riporta allo stato init. Il router sceglie se passare in 2-Way o ExStart a seconda se debba o meno provare a istanziare un’adiacenza con l’altro router (sulle reti punto-punto e multiaccesso è sempre necessario). Lo stato 2-Way non prevede ulteriori evoluzioni. 24 Neighbor states: come decide un router se creare o meno un'adiacenza Reti Punto-Punto: crea sempre l'adiacenza Reti broadcast: le adiacenze si creano solo verso i DR /BDR Quando viene innescato il processo decisionale: • quando la comunicazione diventa bidirezionale (evento 2-wayReceived) • tutte le volte che cambia il DR/BDR (evento scatenato dal processo di gestione dell'interfaccia) Condizioni che scatenano il processo di creazione di un'adiacenza su una rete broadcast : • il router stesso è un DR o un BDR • il neighbor è un DR o un BDR 25 Macchina a stati dell’interfaccia down InterfaceUP Waiting: il router (monitarando i pacchetti Hello) sta cercando di scoprire l’identità di DR/BDR InterfaceUP Waiting P-to-P Wait timer Neighbor change Backup Neighbor DRother ? point-to-point: una volta in questo stato il router è pronto a creare le adiacenze con il neighbor; l’interfaccia inizia quindi ad inviare pacchetti Hello con un intervalli definito da HelloInterval Neighbor change change DR Eventi: wait timer: trascorso il tempo max previsto per l’elezione di DR/BDR Neighbor change: vedi dopo... 26 Macchina a stati dell’interfaccia down InterfaceUP InterfaceUP Waiting P-to-P Wait timer Neighbor change Backup Neighbor DRother ? Neighbor change change DR Stato Evento Nuovo stato Azione Down InterfaceUP P-to-P / Waiting / DROther Inizia l’invio di pacchetto Hello ogni HelloInterval secondi; se l’interfaccia è p-top passa in questo stato; altrimenti se l’interfaccia è configurata come non elegibile passa direttamente nello stato DROthter 27 altrimenti passa in waiting Macchina a stati dell’interfaccia down InterfaceUP InterfaceUP Waiting P-to-P Wait timer Neighbor change Backup Neighbor DRother ? Neighbor change change DR DR other: il router non è né DR né BDR; in questo caso dovrà creare adiacenze verso il DR e il BDR eletti Back up: router eletto come back up designated roueter; dovrà pertanto creare adiacenze con tutti i router della rete multiaccesso. In caso di fail del DR dovrà prendere il suo posto. DR: il router è stato eletto come Designated Router della LAN. Il router dovrà creare adiacenze con tutti i router della rete e generare LSA per tutta la rete multiaccesso Eventi: Neighbor change: è cambiato l’insieme dei router con cui c’è una comunicazione bidirezionale (vedi macchina a stati neighbor) oppure si è aggiunto/eliminato un router che si dichiara DR/BDR oppure è cambiata la priorità di uno di questi router. Questo 28 evento causa il ricalcolo del DR/BDR della rete multiaccesso Macchina a stati dell’interfaccia down InterfaceUP InterfaceUP Waiting P-to-P Wait timer Neighbor change Backup Neighbor DRother ? Neighbor change change DR Stato Evento Nuovo stato Azione Waiting wait timer DR/backup/DRotrher Esegue il calcolo di DR/BDR e cambia stato di conseguenza Backup / DR / DR Other Neighbor change DR/backup/ DRother Esegue il calcolo di DR/BDR e cambia stato di conseguenza 29 Esempio di comunicazione tra processi interfaccia e neighbor Processo di Processodidi Processo gestione gestione gestione neighbor neighbor neighbor Processo di gestione interfaccia init DR/DRother. Evento “Neighbor change” 2-way Esegue elezione DR/BDR Evento “AdjOK?” Cambia stato DR/DRother. Exstart 30 Processo di elezione del DR Stato neighbor 2-way Exstart o superiori Evento Nuovo stato Azione AdjOK? Exstart / 2-way Verifica se con il neighbor deve essere creata un'adiacenza; se si, passa nello stato Exstart, altrimenti resta nello stato 2-way AdjOK? 2-way o nessun cambiamento di stato Verifica se l'adiacenza esistente deve essere mantenuta; se si resta nello stato attuale, altrimenti distrugge l'adiacenza, cancella gli LSA e i DB summary list di questa adiacenza e passa nello stato 2-way Il processo di calcolo del DR/BDR triggera il processo di costruzione delle adiacenze con l'evento AdjOK? , tramite il quale chiede di verificare se le adiacenze attuali devono essere mantenute oppure no e se nuove adiacenze devono essere create. 31 Neighbor states: cambiamenti determinati da DB exchange Exstart NegotiationDone Exchange ExChangeDone Loading Full LoadingDone Exstart: primo stadio del processo di creazione delle adiacenze; in questa fase viene negoziato chi è il master e il numero di sequenza iniziale dei pacchetti Database Description Exchange: stato nel quale viene sincronizzato il DB OSPF tramite l'invio di pacchetti DD Loading: il router ha scoperto dai pacchetti DD che esistono degli LSA più recenti di quelli contenuti nel suo DB e ha chiesto quindi di riceverli esplicitamente tramite pacchetti Link State Request Full: adiacenza completata 32 Passaggio dallo stato exstart a exchange 10.0.0.3 10.0.0.1 R1 R3 P =1 .1 P =1 .3 Lo stato del neighbor è Exstart – bisogna negoziare chi è Master/slave e il numero di sequenza iniziale dei pacchetti DD Numero di sequenza Bit che indica inizio di una nuova sequenza More bit: indica che si hanno altri DD da inviare Bit Master/Slave: indica il proprio stato DD ( Seq = x, I, M , Master) DD ( Seq = y, I, M , Master) DD ( Seq = y, M , Slave) DD ( Seq = y+1, M , Master) R1 accetta R3 come master (router id più alto) e adotta il numero di sequenza di R3; lo stato del neighbor passa a Exchange 33 Passaggio dallo stato exchange a loading 10.0.0.3 10.0.0.1 R1 P =1 slave .1 master R3 P =1 .3 DD ( Seq = y+1, M , Master) DD ( Seq = y+1, M , Slave) DD ( Seq = y+n, Master) DD ( Seq = y+n, Slave) Il master trasmette tutto il suo database LSA in pacchetti DD; lo slave risponde con pacchetti DD che hanno lo stesso numero di sequenza (ACK) e contengono gli LSA dello Slave. Nota che i pacchetti DD contengono solo le intestazioni degli LSA non gli LSA stessi. Se il master completa la trasmissione degli LSA prima dello slave, continuerà ad inviare pacchetti DD fino a che lo slave non ha completato anch'esso l'invio dei suoi LSA 34 Passaggio dallo stato loading a full 10.0.0.3 10.0.0.1 R1 P =1 slave master .1 R3 P =1 .3 LSR LSU LSU-ACK LSR LSU LSU-ACK Infine i due peer si scambiano gli LSA che risultano più aggiornati o nuovi rispetti a quelli contenuti nel proprio DB. Prima il master aggiorna i propri LSA, successivamente lo slave aggiorna i propri LSA 35 Funzionalità DR/BDR (1/2) DR R BDR R R R I router della LAN sincronizzano il loro DB con il DR e in caso di fault con il BDR La comunicazione verso il resto della rete è demandata al DR (riducendo così il traffico OSPF sulla rete) e gli altri router si affidano agli aggiornamenti (LSA) che riceveranno da esso N.B. Tutti i pacchetti OSPF (ad eccezione di quelli Hello che sono usati per scoprire i vicini) sono scambiati tra router adiacenti, quindi attraversano un solo hop IP prima di essere processati. 36 Funzionalità DR/BDR (2/2) DR R BDR R R R Se un router che non è il DR deve inviare un update: Invia LSA a AllDRouter (224.0.0.6) Il DR propaga l'informazione a tutt gli altri router: Invia LSA a AllSPFrouter (224.0.0.5) I router inviano le conferme al DR: Invia LSU_ACK a AllDRouter Se DR non riceve ACK da un router re-invia LSA in modo unicast DR e BDR hanno le stesse info sui neighbor per cui se BDR può prendere il posto del DR in modo semplice. 37 Processo di elezione del DR Chiamiamo X il router che effettua il calcolo X crea una lista (L) con tutti i neighbor che sono nello stato almeno 2-way e che sono elegibili a DR (scarta quelli con priorità uguale a zero) più se stesso (se considerato elegibile) L_DR = sottoinsieme di L, tutti i Router che hanno dichiarato se stessi DR (nei pacchetti Hello) L_BDR = sottoinsieme di L, tutti i Router che hanno dichiarato se stessi BDR ma non DR (nei pacchetti Hello) L_noDR = sottoinsieme di L, tutti i router che non hanno dichiarato se stessi né DR né BDR 38 Processo di elezione del DR Step 1 Step 2 Step 3 Memorizza valore attuale DR e BDR (I_DR, I_BDR) Calcolo BDR: prendi da L_BDR il router con la priorità più alta, in caso di parità quello con il router id più alto. Se L_BDR è vuota prendi L_noDR ed effettua lo stesso processo di scelta Calcolo DR: prendi da L_DR il router con la priorità più alta, in caso di parità quello con il router id più alto. Se L_DR è vuota scegli come DR il BDR appena eletto 39 Processo di elezione del DR Step 4 Se X è il nuovo eletto DR/BDR oppure non è più il DR/BDR esegui novamente i passi 2 e 3 e poi vai al 5. Step 5 Cambia stato all'interfaccia in accordo ai risultati ottenuti (DR, BDR, DRother) Step 6 Se interfaccia NBA...... Step 7 Se è cambiato il DR o il BDR invoca l'evento AdjOK? su tutti i neighbor nello stato da 2-way in su 40 Esempio di elezione di DR/BDR 10.0.0.2 10.0.0.1 R1 P =1 .1 R2 10.0.0.3 R3 P =1 .2 P =1 .3 192.168.1.0 mask 255.255.255.0 Hello packet inviati a 224.0.0.5 Router id= 10.0.0.1 Area = 0.0.0.0 Hello Int = 10 DeadInt = 40 Option = ... Priority = 1 DR = 0.0.0.0 BDR = 0.0.0.0 Neighbor = { } Router id= 10.0.0.2 Area = 0.0.0.0 Hello Int = 10 DeadInt = 40 Option = ... Priority = 1 DR = 0.0.0.0 BDR = 0.0.0.0 Neighbor = { } Router id= 10.0.0.3 Area = 0.0.0.0 Hello Int = 10 DeadInt = 40 Option = ... Priority = 1 DR = 0.0.0.0 BDR = 0.0.0.0 Neighbor = { } Router id= 10.0.0.1 Area = 0.0.0.0 Hello Int = 10 DeadInt = 40 Option = ... Priority = 1 DR = 0.0.0.0 BDR = 0.0.0.0 Neighbor = {10.0.0.2, 10.0.0.3 } Router id= 10.0.0.2 Area = 0.0.0.0 Hello Int = 10 DeadInt = 40 Option = ... Priority = 1 DR = 0.0.0.0 BDR = 0.0.0.0 Neighbor = { 10.0.0.1, 10.0.0.3} Router id= 10.0.0.3 Area = 0.0.0.0 Hello Int = 10 DeadInt = 40 Option = ... Priority = 1 DR = 0.0.0.0 BDR = 0.0.0.0 Neighbor = {10.0.0.1, 10.0.0.2 } 41 A questo punto lo stato dei neighbor passa a 2-way (comunicazione bidirezionale) Esempio di elezione di DR/BDR 10.0.0.2 10.0.0.1 R1 P =1 .1 R2 10.0.0.3 P =1 .2 R3 P =1 .3 192.168.1.0 mask 255.255.255.0 Il processo di gestione delle interfacce incomincia il calcolo del DR/BDR Step 1: I_DR=I_BDR = 0.0.0.0 L_DR = {}. L_BDR = {}. L_noDR = {10.0.0.1,10.0.0.2, 10.0.0.3} Step 1: I_DR=I_BDR = 0.0.0.0 L_DR = {}. L_BDR = {}. L_noDR = {10.0.0.1,10.0.0.2, 10.0.0.3} Step 1: I_DR=I_BDR = 0.0.0.0 L_DR = {}. L_BDR = {}. L_noDR = {10.0.0.1,10.0.0.2, 10.0.0.3} Step 2: L_BDR = {} => BDR = max L_noDR = 10.0.0.3 Step 2: L_BDR = {} => BDR = max L_noDR = 10.0.0.3 Step 2: L_BDR = {} => BDR = max L_noDR = 10.0.0.3 Step 3: L_DR = {} => DR = BDR=10.0.0.3 Step 3: L_DR = {} => DR = BDR=10.0.0.3 Step 3: L_DR = {} => DR = BDR=10.0.0.3 Step 4: Step 5: stato Intf = Drother Step 6: .. Step 7: invoca AdjOK ? Step 4: Step 5: stato Intf = Drother Step 6: .. Step 7: invoca AdjOK ? Step 4: R3 è eletto DR Step 2: L_DR ={10.0.0.3}, L_BDR = {}, L_noDR = {10.0.0.1.10.0.0.2} BDR = max L_noDR = {10.0.02} Step 3: DR = max L_DR = {10.0.0.3} Step 5: stato Intf = DR Step 6: .. Step 7: invoca AdjOK ? 42 Esempio di elezione di DR/BDR 10.0.0.2 10.0.0.1 R1 P =1 .1 R2 10.0.0.3 P =1 .2 R3 P =1 .3 192.168.1.0 mask 255.255.255.0 Hello packet inviati a 224.0.0.5 Router id= 10.0.0.1 Area = 0.0.0.0 Hello Int = 10 DeadInt = 40 Option = ... Priority = 1 DR = 10.0.0.3 BDR =1 0.0.0.3 Neighbor = {10.0.0.2, 10.0.0.3 } Router id= 10.0.0.2 Area = 0.0.0.0 Hello Int = 10 DeadInt = 40 Option = ... Priority = 1 DR = 10.0.0.3 BDR = 10.0.0.3 Neighbor = { 10.0.0.1, 10.0.0.3} Router id= 10.0.0.3 Area = 0.0.0.0 Hello Int = 10 DeadInt = 40 Option = ... Priority = 1 DR = 10.0.0.3 BDR = 10.0.0.2 Neighbor = {10.0.0.1, 10.0.0.2 } A questo punto il router genera un evento NeighborChange (si è aggiunto un router che si dichiara DR) che causa il ricalcolo del DR/BDR 43 Esempio di elezione di DR/BDR 10.0.0.2 10.0.0.1 R1 P =1 .1 R2 10.0.0.3 P =1 .2 R3 P =1 .3 192.168.1.0 mask 255.255.255.0 Il processo di gestione delle interfacce incomincia il calcolo del DR/BDR Step 1: I_DR=I_BDR = 10.0.0.3 L_DR = {10.0.0.3}. L_BDR = {}. L_noDR = {10.0.0.1,10.0.0.2} Step 1: I_DR=I_BDR =10.0.0.3 L_DR = {10.0.0.3}. L_BDR = {}. L_noDR = {10.0.0.1,10.0.0.2} Step 1: I_DR=10.0.0.3 I_BDR = 10.0.0.2 L_DR = {10.0.0.3}. L_BDR = {}. L_noDR = {10.0.0.1,10.0.0.2} Step 2: L_BDR = {} => BDR = max L_noDR = 10.0.0.2 Step 2: L_BDR = {} => BDR = max L_noDR = 10.0.0.2 Step 2: L_BDR = {} => BDR = max L_noDR = 10.0.0.2 Step 3: L_DR = {10.0.0.3} => DR = 10.0.0.3 Step 3: L_DR = {10.0.0.3} => DR = 10.0.0.3 Step 3: DR =max L_DR =10.0.0.3 Step 4: R3 è eletto DR Step 4: Step 5: stato Intf = Drother Step 6: .. Step 7: invoca AdjOK ? Step 4: R2 elettoBDR Step 2: L_DR = {10.0.0.3}, L_BDR = {10.0.0.2} BDR = max L_BDR = {10.0.0.2} Step 2: L_DR ={10.0.0.3}, L_BDR = {}, L_noDR = {10.0.0.1.10.0.0.2} BDR = max L_noDR = {10.0.02} Step 3: DR = max L_DR = {10.0.0.3} Step3: DR = max L_DR = 10.0.0.3 Step 5: stato Intf = Backup Step 6: .. Step 7: invoca AdjOK ? Step 5: stato Intf = DR Step 6: .. Step 7: invoca AdjOK ? 44 Esempio di elezione di DR/BDR 10.0.0.2 10.0.0.1 R1 P =1 .1 R2 10.0.0.3 P =1 .2 R3 P =1 .3 192.168.1.0 mask 255.255.255.0 Hello packet inviati a 224.0.0.5 Router id= 10.0.0.1 Area = 0.0.0.0 Hello Int = 10 DeadInt = 40 Option = ... Priority = 1 DR = 10.0.0.3 BDR =1 0.0.0.2 Neighbor = {10.0.0.2, 10.0.0.3 } Router id= 10.0.0.2 Area = 0.0.0.0 Hello Int = 10 DeadInt = 40 Option = ... Priority = 1 DR = 10.0.0.3 BDR = 10.0.0.2 Neighbor = { 10.0.0.1, 10.0.0.3} Router id= 10.0.0.3 Area = 0.0.0.0 Hello Int = 10 DeadInt = 40 Option = ... Priority = 1 DR = 10.0.0.3 BDR = 10.0.0.2 Neighbor = {10.0.0.1, 10.0.0.2 } A questo punto il router genera un evento NeighborChange (si è aggiunto un router che si dichiara BDR) che causa il ricalcolo del DR/BDR, che porterà però allo stesso risultato. 45
© Copyright 2024 ExpyDoc