Router ID:在一個OSPF域內,用於標識每臺路由器的ID。算法
選舉規則:網絡
1.手工指定(建議)ide
2.若是沒有手工指定,使用Loopback接口中最大的IP地址做爲Router IDoop
3.若是沒有配置Loopback接口,那麼使用物理接口中最大的IP地址做爲Router ID學習
鏈路狀態信息spa
鏈路信息包括有:3d
1.鏈路的類型blog
2.接口IP地址和掩碼接口
3,鏈路上所鏈接的鄰居路由器ip
4.鏈路的帶寬(開銷)
Hello報文:
做用:發現創建並維護鄰居關係
OSPF內的路由器在交換鏈路狀態信息時,首先須要創建一個鄰居關係,這個關係是經過Hello報文實現的。鄰居關係創建以後,Hello報文週期性的發送以實現鄰居保持的功能,若是在必定的時間內沒有收到Hello報文,則會中斷鄰居關係。
OSPF鄰居創建的過程
狀態含義:
Down:沒有啓用OSPF的狀態;鄰居失效後變爲該狀態
Init:初始化狀態,第一次收到對端發來的hello包(包含對端route-id)時,將對端的狀態設置爲init
2-way:鄰居狀態,相互間週期發送hello的狀態(雙方創建會話)
Exstart:交換信息的初始化狀態
發送DBD(包含本地的LSA的摘要信息)報文,選舉主從路由器(利用HELLO報文中的ID和優先權來進行選舉,不容許搶佔,DR沒了,DBDR才能上)
Exchange:交換信息的狀態
該狀態下,相互間發送DBD,告知對端本地全部的LSA的目錄;同時,能夠發送 LSR,LSU,LSACK來學習對端的LSA
Loading:加載狀態(沒有學習完的狀態)
發送LSR,LSU,LSACK,專門學習對端的LSA的詳細信息
Full:鄰接狀態(學習完的狀態)
彼此的LSDB同步,即全部的LSA相同
成爲鄰居的6個條件:
1.RID不一樣
2.特殊區域的flag字段相同
3..子網掩碼相同
4.驗證相同
5.區域號相同
6.hello/dead相同
鄰居創建以下:
1.RTA和RTB的Router ID分別爲1.1.1.1和2.2.2.2。RTA啓動OSPF後,RTA會發送第一個Hello報文(以組播的方式發送,目的地址爲224.0.0.5),此時狀態爲Down,RTB收到RTA的Hello報文後,狀態置爲init
上圖是RTA首次發送一個Heloo報文。須要主要的是,首次發送hello包的時候不包括鄰居字段,包的長度爲44。
2.RTB發送Hello報文,RTA收到RTB發送的報文以後,狀態爲Init
3.RTB向RTA發送鄰居列表爲1.1.1.1的Hello報文,Hello報文發送三個週期(也有超過3個週期),RTA在收到RTB發來的報文鄰居列表中發現本身的Router ID,並且匹配6個條件(創建鄰居的6個條件)成功以後,狀態爲2-way,也稱爲鄰居狀態
4.RTA向RTB發送鄰居列表爲2.2.2.2的hello報文,Hello報文發送三個週期(也有超過3個週期),RTB在收到hello報文鄰居列表中發現本身的Router ID,並且匹配6個條件(創建鄰居的6個條件)成功以後, 狀態置爲2-way,也稱爲鄰居狀態
OSPF有多種類型的網絡(p2p,broadcast,NBMA,P2MP)
首先說一下什麼是MA網絡:
MA網絡就是 Multiaccess 多路訪問網絡,它分爲兩種: 一是Broadcast 廣播,二是Nonbroadcast Multiacccess(NBMA)非廣播的多路訪問網絡,MA網絡在OSPF中須要選出DR和BDR,來減少LSA的泛濫。
broadcast(廣播)
兩臺或者兩臺以上的路由器經過共享介質互聯
支持廣播,組播
Hello Interval時間爲10s ,Dead Interval時間爲40s,選舉DR/BDR
NBMA(非廣播多路訪問):
Hello Interval時間爲30s ,Dead Interval時間爲120s
在NBMA網絡內,由於NBMA默認不支持廣播和組播,因此沒法發送Hello包,鄰居也就沒法接受到信息,因此,在這個網絡內,須要手工指定鄰居,指定鄰居以後才能支持DR/BDR。
P2P(點到點):
僅有2臺路由器相連
支持廣播和組播
Hello Interval時間爲10s ,Dead Interval時間爲40s,不選舉DR/BDR就能夠直接達到full狀態
P2MP(點到多點):
Hello Interval時間爲30s ,Dead Interval時間爲120s
支持廣播和組播
在P2P網絡中,不選舉DR/BDR,能夠直接達到full狀態
一個路由器的接口類型改成broadcast,另外一個接口改成P2P,是否能通訊呢
能夠看出,他們已經創建起了鄰居,創建鄰居的條件仍是那6個條件,他們都能知足,可是他們並不能傳遞路由,由於broadcast支持DR/BDR,P2P不支持DR/BDR。因此,在創建鄰居關係的基礎上,同有或者同無DR/BDR,能夠傳遞路由。
發送第一個DBD報文,來協商主從關係
R1
R2
上圖的意思是:我是主,這不是我發的第一個報文,之後也沒有更多的報文
上圖的意思是:我是從,這不是我發的第一個報文,之後也沒有更多的報文
這樣,DBD交互完成
PS:DBD報文間用序列號進行確認,主發送的序列號遞增,從序列號跟主序列號是同樣的,來進行確認。這是隱式確認。
收到對方發來的第一個DBD報文,就把對方的狀態設成EXSTART。
在EXCHANGE狀態下,就開始發送LSR,來請求LSA(請求本地沒有的)
接收到LSR的路由器,會返回一個LSU
接收到LSU的路由器以後,不只會發送LSU,還會發送一個LSACK確認
當收到對方發來的LSU,而且更新了LSU後,若是學完了,直接進入full狀態,若是沒有學習完,則進入loading狀態。
PS:判斷OSPF有沒有路由,就看他有沒有LSA
1.Link-state Request 鏈路狀態請求包 LSR 可靠
2.Link-state Update 鏈路狀態更新包 LSU 可靠
3.Link-state Acknowledment 鏈路狀態確認包 LSACK
如何去處理一個接收到的LSA?
若是沒有,就把它放入LSDB當中,同時用LSACK確認,而且須要LSA的泛洪;經過SPF算法,去計算最優路由。
若是有,並且優於本身的LSA,就把他放入本身的LSDB,同時用LSACK確認,而且須要LSA的泛洪;經過SPF算法,去計算最優路由。
若是次於本身的LSA,OSPF就會把本身的LSA發送給對方,讓對方去學習
若是他們接收到的LSA是同樣的話,就會忽略掉。