1. 程式人生 > >OSPF的七種狀態機

OSPF的七種狀態機

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的七種狀態機