OSPF的七種狀態機

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

wKiom1mOo9SyKUduAABYCPZM86Y211.png-wh_50

上圖是RTA首次發送一個Heloo報文。須要主要的是,首次發送hello包的時候不包括鄰居字段,包的長度爲44。

2.RTB發送Hello報文,RTA收到RTB發送的報文以後,狀態爲Init

wKiom1mOo_GxoNC5AABBfaKFyGk024.png-wh_50

3.RTB向RTA發送鄰居列表爲1.1.1.1的Hello報文,Hello報文發送三個週期(也有超過3個週期),RTA在收到RTB發來的報文鄰居列表中發現本身的Router ID,並且匹配6個條件(創建鄰居的6個條件)成功以後,狀態爲2-way,也稱爲鄰居狀態

wKioL1mOpAPDt5xcAACzw_63HrQ592.png-wh_50

4.RTA向RTB發送鄰居列表爲2.2.2.2的hello報文,Hello報文發送三個週期(也有超過3個週期),RTB在收到hello報文鄰居列表中發現本身的Router ID,並且匹配6個條件(創建鄰居的6個條件)成功以後, 狀態置爲2-way,也稱爲鄰居狀態

wKioL1mOpDGSbCJJAACcAeRy3jg873.png-wh_50

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,是否能通訊呢

wKioL1mOpFuRQzWPAAArkAmaJfw299.png-wh_50

wKiom1mOpHDQ7B7-AACd5sUMjvs667.png-wh_50

能夠看出,他們已經創建起了鄰居,創建鄰居的條件仍是那6個條件,他們都能知足,可是他們並不能傳遞路由,由於broadcast支持DR/BDR,P2P不支持DR/BDR。因此,在創建鄰居關係的基礎上,同有或者同無DR/BDR,能夠傳遞路由。


發送第一個DBD報文,來協商主從關係

R1

wKioL1mOpKmDcQWdAABeLH8_gmY975.png-wh_50

R2

wKiom1mOpNSihUMeAABLUzOqIOs969.png-wh_50

wKiom1mOpRuwegktAAAazDwH2BA319.png-wh_50

上圖的意思是:我是主,這不是我發的第一個報文,之後也沒有更多的報文

wKiom1mOpUzSL7K2AAATj3Kv8Vk124.png-wh_50

上圖的意思是:我是從,這不是我發的第一個報文,之後也沒有更多的報文

這樣,DBD交互完成

PS:DBD報文間用序列號進行確認,主發送的序列號遞增,從序列號跟主序列號是同樣的,來進行確認。這是隱式確認。

收到對方發來的第一個DBD報文,就把對方的狀態設成EXSTART。

在EXCHANGE狀態下,就開始發送LSR,來請求LSA(請求本地沒有的)

wKioL1mOpYTBdqM4AAAxp5qDXws318.png-wh_50

接收到LSR的路由器,會返回一個LSU

wKioL1mOpc3Q7TMcAABLsGSwNeo334.png-wh_50

接收到LSU的路由器以後,不只會發送LSU,還會發送一個LSACK確認

wKioL1mOpfLCBPEzAABHGq_8MZU329.png-wh_50

當收到對方發來的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是同樣的話,就會忽略掉。

相關文章
相關標籤/搜索