OSPF的七種狀態機
Router ID:在一個OSPF域內,用於標識每臺路由器的ID。
選舉規則:
1.手工指定(建議)
2.如果沒有手工指定,使用Loopback接口中最大的IP地址作為Router ID
3.如果沒有配置Loopback接口,那麽使用物理接口中最大的IP地址作為Router ID
鏈路狀態信息
鏈路信息包括有:
1.鏈路的類型
2.接口IP地址和掩碼
3,鏈路上所連接的鄰居路由器
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是一樣的話,就會忽略掉。
本文出自 “costin” 博客,請務必保留此出處http://brighttime.blog.51cto.com/12837169/1955740
OSPF的七種狀態機