[CCNA圖文筆記]-18-OSPF協(xié)議詳解

0×1.鏈路狀態(tài)路由協(xié)議概述
鏈路狀態(tài)路由協(xié)議使用Dijkstra算法,也稱SPF(Shortest Path First,最短路徑優(yōu)先)算法。常見的鏈路狀態(tài)路由協(xié)議有:OSPFv2、OSPFv3等。這篇文章主要針對OSPFv2,OSPFv3是面向IPv6的且不兼容IPv4,暫不介紹。
a.工作過程
1)每臺路由器學(xué)習(xí)激活的直接相連的網(wǎng)絡(luò)。2)每臺路由器和直接相連的路由器互交,發(fā)送Hello報(bào)文,建立鄰居關(guān)系。3)每臺路由器構(gòu)建包含直接相連的鏈路狀態(tài)的LSA(Link-State Advertisement,鏈路狀態(tài)通告)。鏈路狀態(tài)通告(LSA)中記錄了所有相關(guān)的路由器,包括鄰路由器的標(biāo)識、鏈路類型、帶寬等。4)每臺路由器泛洪鏈路狀態(tài)通告(LSA)給所有的鄰路由器,并且自己也在本地儲存鄰路由發(fā)過來的LSA,然后再將收到的LSA泛洪給自己的所有鄰居,直到在同一區(qū)域中的所有路由器收到了所有的LSA。每臺路由器在本地?cái)?shù)據(jù)庫中保存所有收到的LSA副本,這個(gè)數(shù)據(jù)庫被稱作"鏈路狀態(tài)數(shù)據(jù)庫(LSDB,Link-State Database)"5)每臺路由器基于本地的"鏈路狀態(tài)數(shù)據(jù)庫(LSDB)"執(zhí)行"最短路徑優(yōu)先(SPF)"算法,并以本路由器為根,生成一個(gè)SPF樹,基于這個(gè)SPF樹計(jì)算去往每個(gè)網(wǎng)絡(luò)的最短路徑,也就得到了最終的路由表。
下圖(圖1)演示了鏈路狀態(tài)路由協(xié)議路由表的生成過程:


Cisco-CCNA-OSPF-1
Cisco-CCNA-OSPF-1

b.優(yōu)缺點(diǎn)
優(yōu)點(diǎn):運(yùn)行鏈路狀態(tài)路由協(xié)議的路由器通過LSA的交換,最后獨(dú)立的計(jì)算出到每個(gè)網(wǎng)絡(luò)的最短路徑,相對距離矢量路由具有更強(qiáng)的全局觀;收到鄰居的LSA后立即泛洪,并且本路由再執(zhí)行SPF算法,比距離矢量路由有更高的收斂速度(EIGRP除外,EIGRP是高級距離矢量路由協(xié)議有更快的收斂速度);當(dāng)檢測到拓?fù)浒l(fā)生變化時(shí)立即發(fā)送更新;多區(qū)域設(shè)計(jì),可以將一些問題限制在較小的區(qū)域中。
缺點(diǎn):內(nèi)存需求高,需要更強(qiáng)的CPU的支持,在網(wǎng)絡(luò)初始化時(shí),大量鏈路狀態(tài)包泛洪,會影響網(wǎng)絡(luò)的可用帶寬。
0×2.OSPF概述和基本配置
OSPF(Open Shortest Path First,開放最短路徑優(yōu)先)是一個(gè)被各廠商設(shè)備廣泛支持的鏈路狀態(tài)路由協(xié)議。
a.特性
OSPF執(zhí)行IETF標(biāo)準(zhǔn),IETF標(biāo)準(zhǔn)被不同廠商的設(shè)備所支持;執(zhí)行SPF算法,不會產(chǎn)生環(huán)路;支持VLSM和CIDR;可以用于大型網(wǎng)絡(luò);層次型設(shè)計(jì),易擴(kuò)展;區(qū)域化設(shè)計(jì),減小路由更新給設(shè)備帶來的負(fù)擔(dān);快速收斂,使用觸發(fā)式更新;支持針對區(qū)域和鏈路的驗(yàn)證。執(zhí)行OSPF的路由默認(rèn)每隔30分鐘會泛洪一次鏈路狀態(tài)通告(LSA),稱為鏈路狀態(tài)刷新(并非周期性更新);當(dāng)一條LSA被接收并被儲存到鏈路狀態(tài)數(shù)據(jù)庫中后,路由器會給這條記錄增加一個(gè)老化時(shí)間標(biāo)識,默認(rèn)是一小時(shí),所以為了防止一些正常的LSA被清除,始發(fā)這條LSA的路由會每隔30分鐘泛洪一次這條LSA的一個(gè)新拷貝。
b.術(shù)語
鏈路(Link):當(dāng)一個(gè)接口加入OSPF進(jìn)程,就被當(dāng)做是OSPF的一條鏈路。
鏈路狀態(tài)(Link-State):包括接口的IP、子網(wǎng)、網(wǎng)絡(luò)類型、鏈路花費(fèi)、鏈路上的鄰居等。
路由器ID(Router ID,簡稱RID):RID是一個(gè)用來標(biāo)識路由器的IP地址,可以在OSPF路由進(jìn)程中手工指定;如果沒有指定,路由器默認(rèn)選擇回環(huán)接口中最高的IP作為RID;如果沒有回環(huán)地址,路由器使用所有激活的物理接口中最高的IP作為RID。
鄰居(Neighbor):兩臺或多臺路由連接在一個(gè)公共的網(wǎng)絡(luò)上;比如兩臺路由通過串行線路相連,或多臺路由通過以太網(wǎng)相連。
鄰接(Adjacency):鄰接是兩臺路由器之間的關(guān)系,OSPF只與建立了鄰接關(guān)系的鄰居共享路由信息。
區(qū)域(Area):OSPF通過劃分區(qū)域來實(shí)現(xiàn)分層設(shè)計(jì),跨越兩個(gè)或兩個(gè)以上區(qū)域的路由被稱作ABR(Area Border Router,區(qū)域邊界路由)。所有的區(qū)域都和"Area 0"相連,"Area 0"被稱作骨干區(qū)域,骨干區(qū)域路由器具有整個(gè)自制系統(tǒng)中所有路由條目,LSA的擴(kuò)散僅限制在區(qū)域內(nèi),通過劃分多個(gè)區(qū)域可以減小LSA擴(kuò)散過程中對硬件的負(fù)擔(dān)。
指定路由器(Designated Router,簡稱RD):當(dāng)OSPF鏈路被連接到多路訪問的網(wǎng)絡(luò)中時(shí),需要選擇一臺指定路由器(DR),每臺路由器都把拓?fù)渥兓l(fā)給DR和BDR,然后由DR通知該多路訪問網(wǎng)絡(luò)中的其他路由器。
備用的指定路由器(Backup Designated Router,簡稱BDR):當(dāng)DR發(fā)生故障的時(shí)候,BDR轉(zhuǎn)變成DR,接替DR工作。
花費(fèi)(Cost):OSPF中使用的唯一度量值,使用鏈路的帶寬計(jì)算得來。
c.包格式
OSPF和EIGRP一樣,也被設(shè)計(jì)成一個(gè)網(wǎng)絡(luò)層協(xié)議,協(xié)議號89,包格式如下圖(圖2):


Cisco-CCNA-OSPF-2
Cisco-CCNA-OSPF-2
包格式解釋如下:
數(shù)據(jù)鏈路層頭部:OSPF使用的組播IP地址是224.0.0.5(非DR和BDR路由使用的地址)和224.0.0.6(DR和BDR使用的組播地址),這兩個(gè)組播地址對應(yīng)的MAC地址分別為:"01-00-5E-00-00-05"和"01-00-5E-00-00-06"。包頭部:協(xié)議號是89,源IP是發(fā)送路由的IP,目的IP是組播IP地址224.0.0.5或224.0.0.6。OSPF頭部:包括路由ID和所在的區(qū)域號、包的類型代碼(5種類型的包代碼)。OSPF包對應(yīng)的數(shù)據(jù):不同包具有不同的內(nèi)容。
d.包類型
1)Hello包
Hello報(bào)文用來建立和維護(hù)OSPF路由器間的鄰接關(guān)系,它的主要作用是:發(fā)現(xiàn)OSPF鄰居,建立和維護(hù)鄰接關(guān)系;在多路訪問中選擇DR和BDR。OSPF泛洪鏈路狀態(tài)通告給其他路由前需要先建立鄰接關(guān)系,通過在OSPF協(xié)議的接口上發(fā)送Hello報(bào)文判斷是否有其他OSPF路由器運(yùn)行在相同的鏈路上。
雙方要建立鄰接關(guān)系,Hello報(bào)文中的區(qū)域號、Hello間隔和dead間隔、驗(yàn)證(如果有)以及區(qū)域類型都要一致。在廣播(如以太網(wǎng))和點(diǎn)對點(diǎn)鏈路(如串行線路)中,Hello間隔默認(rèn)是10秒;dead時(shí)間默認(rèn)是Hello間隔的4倍(40秒);非廣播多路訪問(NBMA),比如幀中繼網(wǎng)絡(luò)中默認(rèn)Hello間隔是30秒。

可以通過下面的命令修改默認(rèn)的Hello時(shí)間和dead時(shí)間:
1

/修改串行線路s0/0的Hello間隔為5秒,死亡間隔為20秒。/

2

Router(config)#
int
s 0/0

3

Router(config-if)#
ip
ospf
hello-interval
5

4

Router(config-if)#
ip
ospf
dead-interval
20

5

Router(config-if)#
end

2)DBD(Database Description,數(shù)據(jù)庫狀態(tài)描述包)
DBD包是發(fā)送端對自己鏈路狀態(tài)數(shù)據(jù)庫的一個(gè)簡短描述,接收路由器根據(jù)接收到的DBD包對比自己的鏈路狀態(tài)數(shù)據(jù)庫,檢測發(fā)送端和接收端的鏈路狀態(tài)數(shù)據(jù)庫是否同步。
3)LSR(Link-State Request,鏈路狀態(tài)請求包)
接收端可以發(fā)送LSA來請求接收到的DBD中的某些詳細(xì)信息。
4)LSU(Link-State Update,鏈路狀態(tài)更新包)
LSU用來更新OSPF路由信息,回復(fù)LSR請求。
5)LSAck(Link-State Acknowledgement,鏈路狀態(tài)確認(rèn))
當(dāng)收到一個(gè)LSU,路由器發(fā)送LSAck確認(rèn)。
e.鄰居關(guān)系的建立過程
OSPF中鄰居建立過程演示圖(圖3)如下:


Cisco-CCNA-OSPF-3
Cisco-CCNA-OSPF-3

Down:OSPF初始狀態(tài),還沒有開始交換信息。Init:交換信息初期,表示已經(jīng)收到了鄰居的Hello報(bào)文,但是報(bào)文中沒有列出本路由的RID,也就是說對方還沒有收到本路由發(fā)出的Hello報(bào)文。Two-Way:雙向階段,雙方都收到了對方發(fā)送的Hello報(bào)文,建立了鄰居關(guān)系。在多路訪問的網(wǎng)絡(luò)中,兩個(gè)接口狀態(tài)是DROther的路由器之間將停留在此狀態(tài),其他情況將繼續(xù)轉(zhuǎn)入高級狀態(tài)。在此狀態(tài)下的路由器是不能共享路由信息的,想共享路由信息,必須建立鄰接關(guān)系。(注意鄰居關(guān)系和鄰接關(guān)系的區(qū)別)Exstart:準(zhǔn)備開始交換階段,雙方通過Hello報(bào)文決定主從關(guān)系,最高RID的路由將成為主路由,最先發(fā)起交換。主從關(guān)系確立后進(jìn)入下一個(gè)階段。Exchange:開始交換階段,路由器將本地的"路由狀態(tài)數(shù)據(jù)庫(LSDB)"用"數(shù)據(jù)庫描述(DBD)"報(bào)文來描述,然后發(fā)給鄰路由。如果這個(gè)階段中的路由收到不在其數(shù)據(jù)庫中的有關(guān)鏈路的信息,那么在下一個(gè)階段中將請求對方發(fā)送該路由條目的完整信息。Loading:加載階段,路由器通過發(fā)送"鏈路狀態(tài)請求(LSR)",來向鄰居請求一些路由條目的詳細(xì)信息。鄰居則會使用"鏈路狀態(tài)更新包(LSU)"來回復(fù)LSR請求,收到鄰居發(fā)回的LSU后,再發(fā)送LSAck向發(fā)送LSU的路由進(jìn)行確認(rèn)。FULL:完全鄰接狀態(tài),Loading結(jié)束后,路由器之間就變成了"Full adjacency"。
f.基本配置實(shí)例
使用OSPF配置下面的拓?fù)?,三臺c3640路由使用以太網(wǎng)接口連接在一臺二層非網(wǎng)管交換機(jī)上(GNS3中自帶的那個(gè)"Ethernet switch",非IOU中的二層可網(wǎng)管交換機(jī)),設(shè)備間連線和IP如下圖(圖4)所示:


Cisco-CCNA-OSPF-4
Cisco-CCNA-OSPF-4
R1配置:
01

R1(config)#
int
s 0/0

02

R1(config-if)#
ip
add
12.1.1.1 255.255.255.0

03

R1(config-if)#
no
shut

04

R1(config-if)#
int
lo
0

05

R1(config-if)#
ip
add
1.1.1.1 255.255.255.0

06

R1(config-if)#
no
shut

07

R1(config-if)#
int
fa 1/0

08

R1(config-if)#
ip
add
123.1.1.1 255.255.255.0

09

R1(config-if)#
no
shut

10

/啟用OSPF進(jìn)程,進(jìn)程號1只具有本地意義/

11

R1(config-if)#router
ospf
1

12

R1(config-router)#
net
123.1.1.0 0.0.0.255
area
0

13

R1(config-router)#
net
1.1.1.0 0.0.0.255
area
0

14

R1(config-router)#
net
12.1.1.0 0.0.0.255
area
0

15

R1(config-router)#
end

16

17

/*

18

"router ospf 1"
中的OSPF進(jìn)程號1,只具有本地意義,每個(gè)路由可以不同,

19

"net 123.1.1.0 0.0.0.255 area 0"
OSPF網(wǎng)絡(luò)的宣告使用反掩碼形式,

20

"area 0"
是OSPF區(qū)域號,同一個(gè)區(qū)域中的路由器區(qū)域號要保持一致,

21

  • CCNA中只涉及區(qū)域0,也就是骨干區(qū)域的配置。

22

  • 如果要將路由器上所有接口都宣告進(jìn)OSPF進(jìn)程,可以使用下面的命令:

23

"net 0.0.0.0 255.255.255.255 area 0"

24

*/

R2配置:
01

R2(config)#
int
s 0/1

02

R2(config-if)#
ip
add
12.1.1.2 255.255.255.0

03

R2(config-if)#
no
shut

04

R2(config-if)#
int
lo
0

05

R2(config-if)#
ip
add
2.2.2.2 255.255.255.0

06

R2(config-if)#
no
shut

07

R2(config-if)#
int
fa 1/0

08

R2(config-if)#
ip
add
123.1.1.2 255.255.255.0

09

R2(config-if)#
no
shut

10

R2(config-if)#router
ospf
2

11

R2(config-router)#
net
0.0.0.0 255.255.255.255
area
0

12

R2(config-router)#
end

13

14

/*
"net 0.0.0.0 255.255.255.255 area 0"
將R2上的所有接口都發(fā)布進(jìn)OSPF進(jìn)程*/

R3配置:
01

R3(config)#
int
fa 1/0

02

R3(config-if)#
ip
add
123.1.1.3 255.255.255.0

03

R3(config-if)#
no
shut

04

R3(config-if)#
int
lo
0

05

R3(config-if)#
ip
add
3.3.3.3 255.255.255.0

06

R3(config-if)#
no
shut

07

R3(config-if)#
int
lo
1

08

R3(config-if)#
ip
add
33.3.3.3 255.255.255.0

09

R3(config-if)#
no
shut

10

R3(config-if)#router
ospf
3

11

R3(config-router)#
net
123.1.1.0 0.0.0.255
area
0

12

R3(config-router)#
net
3.3.3.0 0.0.0.255
area
0

13

R3(config-router)#
end

14

15

/R3并沒有將Lo1接口宣告進(jìn)OSPF進(jìn)程/

16

17

/*

18

  • 對于OSPF的宣告還有幾種可以使用的不規(guī)范格式:

19

20

"net 123.1.1.1 0.0.0.0 area 0"

21

  • 指定僅有一個(gè)IP(123.1.1.1)宣告進(jìn)OSPF進(jìn)程。

22

23

"net 123.1.1.0 255.255.255.0 area 0"
,

24

  • 這條命令和
    "net 123.1.1.0 0.0.0.255 area 0"
    效果相同。

25

26

"net 0.0.0.0 0.0.0.0 area 0"
,

27

  • 這條命令和
    "net 0.0.0.0 255.255.255.255 area 0"
    效果相同。

28

29

  • 上面幾種格式都能被正確識別,但是最好使用規(guī)范格式。

30

*/

OSPF路由表:
01

/*

02

  • R1路由表,顯示如下:

03

  • R1學(xué)習(xí)到了R2和R3上面的回環(huán)接口的IP地址,

04

  • 因?yàn)镽3的Lo1并沒有宣告進(jìn)OSPF進(jìn)程,所以沒有33.3.3.3這個(gè)地址。

05

"O"
表示是從OSPF學(xué)習(xí)到的路由條目。

06

*/

07

R1#
show
ip
route

08

09

1.0.0.0/24 is subnetted, 1 subnets

10

C 1.1.1.0 is directly connected, Loopback0

11

2.0.0.0/32 is subnetted, 1 subnets

12

O 2.2.2.2 [110/2] via 123.1.1.2, 00:15:04, FastEthernet1/0

13

3.0.0.0/32 is subnetted, 1 subnets

14

O 3.3.3.3 [110/2] via 123.1.1.3, 00:15:04, FastEthernet1/0

15

123.0.0.0/24 is subnetted, 1 subnets

16

C 123.1.1.0 is directly connected, FastEthernet1/0

17

12.0.0.0/24 is subnetted, 1 subnets

18

C 12.1.1.0 is directly connected, Serial0/0

在OSPF中所有的回環(huán)接口都被自動宣告成32位的主機(jī)路由"/32",如果想顯示回環(huán)接口的實(shí)際子網(wǎng)掩碼,可以使用下面的命令調(diào)整:
1

/在R1、R2、R3宣告進(jìn)OSPF的回環(huán)接口上執(zhí)行下面的命令/

2

R1(config)#
int
lo
0

3

R1(config-if)#
ip
ospf
network
point-to-point

執(zhí)行完成后,再次查看路由表就會發(fā)現(xiàn)所有回環(huán)接口的子網(wǎng)掩碼都變成了實(shí)際的子網(wǎng)掩碼。
OSPF鄰居表:
01

R1#
show
ip
ospf
neighbor

02

03

Neighbor ID Pri State Dead Time Address Interface

04

2.2.2.2 0 FULL/ - 00:00:37 12.1.1.2 Serial0/0

05

2.2.2.2 1 FULL/BDR 00:00:37 123.1.1.2 FastEthernet1/0

06

33.3.3.3 1 FULL/DROTHER 00:00:31 123.1.1.3 FastEthernet1/0

07

R1#

08

09

/*

10

  • Neighbor ID:鄰居的RID,通過上面的輸出可以看到R2的RID是2.2.2.2

11

  • R3的RID是33.3.3.3,R1和R2通過不同的接口(以太網(wǎng)和串行線路),

12

  • 建立了兩次鄰居關(guān)系。

13

14

  • Pir:OSPF鄰居接口的優(yōu)先級,接口優(yōu)先級用于DR和BDR的選舉,

15

  • 以太網(wǎng)接口接口的默認(rèn)優(yōu)先級是1,串行線路不需要選舉DR和BDR所以優(yōu)先級是0,

16

  • 0代表不參與選舉。

17

18

  • State:鄰居路由器的狀態(tài),F(xiàn)ULL代表已經(jīng)建立鄰接關(guān)系,

19

  • 斜杠
    "/"
    后面是選舉的DR或BDR標(biāo)識,因?yàn)榇芯€路不需要選舉,所以是
    "-"
    ,

20

"FULL/BDR"
表示R2是BDR,R3是DROTHER,除了DR和BDR的其余路由器都是DROTHER。

21

  • 所以R1自己就是DR了。稍后會介紹DR和BDR的選舉過程。

22

23

  • Dead time:默認(rèn)的死亡時(shí)間是hello時(shí)間的4倍,即40秒。

24

  • 死亡時(shí)間是一個(gè)倒計(jì)時(shí),計(jì)時(shí)器為0時(shí),該鄰居被刪除。

25

26

  • Address:鄰居直連接口的IP地址。

27

28

  • Interface:本路由的外出接口。

29

*/

OSPF拓?fù)浔恚?br> 01

R1#
show
ip
ospf
database

02

03

OSPF Router with ID (1.1.1.1) (Process ID 1)

04

05

Router Link States (Area 0)

06

07

Link ID ADV Router Age Seq# Checksum Link count

08

1.1.1.1 1.1.1.1 1087 0x80000006 0x0096BA 4

09

2.2.2.2 2.2.2.2 486 0x80000004 0x001832 4

10

33.3.3.3 33.3.3.3 953 0x80000004 0x00358D 2

11

12

Net Link States (Area 0)

13

14

Link ID ADV Router Age Seq# Checksum

15

123.1.1.1 1.1.1.1 292 0x80000003 0x00304B

16

17

/在同一個(gè)區(qū)域中的所有路由器的OSPF拓?fù)浔矶际窍嗤?/em>/

g.Router ID選舉規(guī)則
Router ID簡稱RID,用來唯一標(biāo)示OSPF網(wǎng)絡(luò)中的每一臺路由器。如果兩條OSPF路由器的RID一樣,彼此間無法建立鄰接關(guān)系。RID是以IP地址的形式出現(xiàn)的,按照下面的順序來選舉RID:
1)Router-id 配置命令最優(yōu)先
首先在R3上查看一下默認(rèn)選舉出來的RID:
1

R3#
show
ip
protocols

2

Routing Protocol is
"ospf 3"

3

/默認(rèn)選出來的RID是lo1接口的IP/

4

Router ID 33.3.3.3

在R3上手工配置Router ID:
01

R3(config)#router
ospf
3

02

/將RID配置成8.8.8.8/

03

R3(config-router)#
router-id
8.8.8.8

04

05

/路由器提示需要重啟OSPF進(jìn)程來使更改生效/

06

Reload or use
"clear ip ospf process"
command, for this to take effect

07

08

R3(config-router)#
end

09

/重啟OSPF進(jìn)程/

10

R3#clear
ip
ospf
process

11

Reset ALL OSPF processes? [
no
]: y /輸入y回車/

12

13

/再次查看協(xié)議,發(fā)現(xiàn)RID更改成了8.8.8.8/

14

R3#
show
ip
protocols

15

...

16

Router ID 8.8.8.8

17

...

從上面手動配置RID來看,RID可以是一個(gè)并不存在的IP地址,RID僅僅作為路由的標(biāo)識,不用于尋址。
2)如果沒有手動指定RID,路由器默認(rèn)使用最大已激活的回環(huán)接口IP作為RID。(注意,這個(gè)最大并不是接口號最大,而是IP地址最大,比如33.3.3.3大于3.3.3.3)
現(xiàn)在取消R3手動配置的RID,并且關(guān)閉Lo1接口,這個(gè)時(shí)候最大的已激活回環(huán)接口IP應(yīng)該是lo0的3.3.3.3,重啟OSPF進(jìn)程看看結(jié)果是否和預(yù)測的一樣:
01

R3(config)#router
ospf
3

02

/刪除手動RID配置/

03

R3(config-router)#
no
router-id

04

Reload or use
"clear ip ospf process"
command, for this to take effect

05

R3(config-router)#
int
lo
1

06

/關(guān)閉Lo1,它將處于非激活狀態(tài)/

07

R3(config-if)#
shutdown

08

R3(config-if)#
end

09

R3#clear
ip
ospf
process

10

Reset ALL OSPF processes? [
no
]: y

11

12

/再次查看協(xié)議,RID果然變成了3.3.3.3/

13

R3#
show
ip
protocols

14

...

15

Router ID 3.3.3.3

16

...

3)如果路由器沒有手動指定RID,也沒有激活的回環(huán)接口,路由器默認(rèn)選擇最大激活的物理接口的IP地址作為RID。(接口的IP最大,而不是接口號最大)
下面關(guān)閉R3的lo0接口,再次重啟OSPF進(jìn)程,看看RID的變化情況:
01

R3(config)#
int
lo
0

02

R3(config-if)#
shut

03

R3(config-if)#
end

04

R3#clear
ip
ospf
process

05

Reset ALL OSPF processes? [
no
]: y

06

07

/查看協(xié)議/

08

R3#
show
ip
protocols

09

Routing Protocol is
"ospf 3"

10

...

11

Router ID 3.3.3.3

12

13

/看到這里大家可能覺得奇怪,為什么還是回環(huán)接口的地址作為RID,回環(huán)地址明明已經(jīng)全部關(guān)閉了,這是一個(gè)小bug,需要手動配置RID然后再刪除手動配置的方法來讓物理接口成為RID/

14

15

R3#
conf
t

16

R3(config)#router
ospf
3

17

/首先手動配置一個(gè)RID/

18

R3(config-router)#
router-id
5.5.5.5

19

Reload or use
"clear ip ospf process"
command, for this to take effect

20

R3(config-router)#
end

21

/重啟OSPF進(jìn)程/

22

R3#clear
ip
ospf
process

23

Reset ALL OSPF processes? [
no
]: y

24

R3#
conf
t

25

R3(config)#router
ospf
3

26

/接著清除這個(gè)手動配置的RID/

27

R3(config-router)#
no
router-id

28

Reload or use
"clear ip ospf process"
command, for this to take effect

29

R3(config-router)#
end

30

/再次重啟OSPF進(jìn)程/

31

R3#clear
ip
ospf
process

32

Reset ALL OSPF processes? [
no
]: y

33

34

/這時(shí)候再次查看協(xié)議,現(xiàn)在RID變成了最大激活的物理接口IP地址了/

35

R3#
show
ip
protocols

36

Routing Protocol is
"ospf 3"

37

...

38

Router ID 123.1.1.3

h.DR和BDR選舉規(guī)則
首先用下面的圖(圖5)來說明一下為什么多路訪問的以太網(wǎng)中需要選舉DR和BDR,選舉它們有什么好處:


Cisco-CCNA-OSPF-5
Cisco-CCNA-OSPF-5

在上圖的多路訪問的網(wǎng)絡(luò)中,如果沒有選舉DR和BDR,為了交互路由信息,每臺路由器都需要和其他路由建立鄰接關(guān)系,就會有10個(gè)鄰接關(guān)系,如果其中一臺路由離開,要和所有的路由斷開鄰接關(guān)系,新的路由加入,也需要和所有路由建立鄰接關(guān)系,這樣會影響收斂效率。
如果選舉了DR和BDR,那么所有DROther路由器只需要和DR以及BDR建立鄰接關(guān)系即可,DROther之間的關(guān)系停留在Two-Way狀態(tài),如果網(wǎng)絡(luò)上有路由條目更新,DROther向組播地址224.0.0.6發(fā)出,224.0.0.6是DR和BDR的組播地址,DR接收到這個(gè)更新后,再用224.0.0.5組播地址向其他的DROhter發(fā)送LSA。這樣不僅加快的網(wǎng)絡(luò)收斂速度,也節(jié)約了網(wǎng)絡(luò)帶寬的占用。
在多路訪問網(wǎng)絡(luò)中需要選舉DR和BDR,比如廣播型多路訪問的網(wǎng)絡(luò)以太網(wǎng)、令牌環(huán)網(wǎng)、FDDI;非廣播型多路訪問的網(wǎng)絡(luò)幀中繼、X.25、SMDS。點(diǎn)對點(diǎn)或點(diǎn)對多點(diǎn)網(wǎng)絡(luò)不需要選舉,如PPP或HDLC封裝的點(diǎn)對點(diǎn)線路。
DR和BDR選舉規(guī)則:
1)OSPF路由器選擇網(wǎng)絡(luò)中接口優(yōu)先級最高的路由器為DR,接口優(yōu)先級次高的路由器為BDR,以太網(wǎng)接口默認(rèn)的優(yōu)先級都為1。2)如果優(yōu)先級相同,將使用RID最高的為DR,次高的為BDR。
按照上面的選舉規(guī)則,查看R3的鄰居表:
1

/發(fā)現(xiàn)R3的鄰居表的顯示中,并沒有像DR和BDR選舉規(guī)則中描述的那樣,反而R1是DR/

2

R3#
show
ip
ospf
neighbor

3

4

Neighbor ID Pri State Dead Time Address Interface

5

1.1.1.1 1 FULL/DR 00:00:30 123.1.1.1 FastEthernet1/0

6

2.2.2.2 1 FULL/BDR 00:00:34 123.1.1.2 FastEthernet1/0

這是因?yàn)?,DR和BDR的選舉在設(shè)計(jì)的時(shí)候考慮到網(wǎng)絡(luò)的穩(wěn)定性,并沒有使用搶占機(jī)制。假設(shè)此時(shí)R1、R2、R3同時(shí)啟動,因?yàn)閮?yōu)先級都為1,所以按照路由的RID,應(yīng)該R3成為DR,R2成為BDR,R1是DROther,但是前面的配置中,R3的OSPF進(jìn)程重新啟動過,相當(dāng)于DR離開,此時(shí)身為BDR的R2升級成為DR,而身為DROther的R1升級成為BDR,如果此時(shí)R2也重啟了進(jìn)程,那么身為BDR的R1升級成為DR,身為DROther的R3升級成為BDR,R2變成了DROther,而R3此時(shí)如果重啟OSPF,R2將從DROther升級成為BDR,就出現(xiàn)了現(xiàn)在顯示的這個(gè)樣子。其實(shí)就是一個(gè)頂替機(jī)制,DR離開BDR頂替DR,DROther再頂替BDR的位置。
可以通過下面的命令讓R3永遠(yuǎn)是DR:
01

/將R1和R2的以太網(wǎng)的優(yōu)先級調(diào)成0/

02

R1(config)#
int
fa 1/0

03

R1(config-if)#
ip
ospf
priority
0

04

R1(config-if)#
end

05

06

R2(config)#
int
fa 1/0

07

R2(config-if)#
ip
ospf
priority
0

08

R2(config-if)#
end

09

10

/查看R2的鄰居表,現(xiàn)在R1和R2都停留在了2WAY狀態(tài),R3是DR/

11

R2#
show
ip
ospf
neighbor

12

13

Neighbor ID Pri State Dead Time Address Interface

14

1.1.1.1 0 2WAY/DROTHER 00:00:33 123.1.1.1 FastEthernet1/0

15

123.1.1.3 1 FULL/DR 00:00:36 123.1.1.3 FastEthernet1/0

16

1.1.1.1 0 FULL/ - 00:00:37 12.1.1.1 Serial0/1

17

18

/查看R3的拓?fù)浔?發(fā)現(xiàn)R1和R2都是DROther/

19

R3#
show
ip
ospf
neighbor

20

21

Neighbor ID Pri State Dead Time Address Interface

22

1.1.1.1 0 FULL/DROTHER 00:00:34 123.1.1.1 FastEthernet1/0

23

2.2.2.2 0 FULL/DROTHER 00:00:36 123.1.1.2 FastEthernet1/0

這個(gè)時(shí)候如果R3出現(xiàn)了故障Down掉了,R1和R2將不能通過以太網(wǎng)正常的交換OSPF信息。另外必須強(qiáng)調(diào)一點(diǎn),DR和BDR的選舉是基于接口的,比如一臺路由器的某個(gè)接口可能在那個(gè)網(wǎng)段是DR,但另外一個(gè)接口在另外一個(gè)網(wǎng)段卻是BDR或者DROther,這都是有可能的。
i.度量值計(jì)算方法
OSPF中使用的度量值是"花費(fèi)(Cost)",默認(rèn)OSPF使用100Mb/s作為參考帶寬,使用100Mb/s除以實(shí)際鏈路帶寬,得出的值取整(對于小于0的結(jié)果,取1),就是那條鏈路上OSPF的度量值,即"花費(fèi)"。
比如串行線路的帶寬是1.544M,快速以太網(wǎng)的帶寬是100M,計(jì)算他們的"花費(fèi)":
串行線路的花費(fèi)=100M/1.544≈64 (取整,且不四舍五入)快速以太網(wǎng)線路花費(fèi)=100M/100M=1
繼續(xù)上面(圖4)的實(shí)驗(yàn),將R1和R2的快速以太網(wǎng)接口的優(yōu)先級再次調(diào)整成1,并且開啟R3的lo0接口,然后我們查看R1的OSPF路由條目驗(yàn)證這一點(diǎn):
01

/僅顯示OSPF條目/

02

R1#
show
ip
route
ospf

03

2.0.0.0/24 is subnetted, 1 subnets

04

O 2.2.2.0 [110/2] via 123.1.1.2, 00:03:40, FastEthernet1/0

05

3.0.0.0/24 is subnetted, 1 subnets

06

O 3.3.3.0 [110/2] via 123.1.1.3, 00:03:40, FastEthernet1/0

07

R1#

08

/*

09


  • "[110/2]"
    中110是OSPF的默認(rèn)管理距離,2是花費(fèi),

10

  • 去往
    "2.2.2.0/24"
    的花費(fèi)是2,就是快速以太網(wǎng)的花費(fèi)加上回環(huán)接口的花費(fèi),

11

  • 因?yàn)榛丨h(huán)接口的帶寬非常高,用100M除會小于0,所以取1。

12

*/

關(guān)閉R1的快速以太網(wǎng)接口,再次查看R1路由表:
01

R1(config)#
int
fa 1/0

02

R1(config-if)#
shut

03

R1(config-if)#
end

04

05

/*

06

"2.2.2.0 [110/65] via 12.1.1.2"
因?yàn)閿?shù)據(jù)都要經(jīng)過串行線路,此時(shí)的花費(fèi)變成了65,

07

"3.3.3.0 [110/66]"
這個(gè)66是串行線路花費(fèi)64加上以太網(wǎng)花費(fèi)1,再加上回環(huán)地址花費(fèi)1。

08

*/

09

R1#
show
ip
route
ospf

10

2.0.0.0/24 is subnetted, 1 subnets

11

O 2.2.2.0 [110/65] via 12.1.1.2, 00:00:05, Serial0/0

12

3.0.0.0/24 is subnetted, 1 subnets

13

O 3.3.3.0 [110/66] via 12.1.1.2, 00:00:05, Serial0/0

14

123.0.0.0/24 is subnetted, 1 subnets

15

O 123.1.1.0 [110/65] via 12.1.1.2, 00:00:05, Serial0/0

可以通過下面的方法修改計(jì)算花費(fèi)的參考帶寬:
1

R1(config)#router
ospf
1

2

R1(config-router)#
auto-cost
reference-bandwidth
10000

3

% OSPF: Reference bandwidth is changed.

4

Please ensure reference bandwidth is consistent across all routers.

5

R1(config-router)#
end

6

/*

7

  • 將參考帶寬改成10000M,

8

  • 路由器提示我們,在所有的路由上都執(zhí)行這條命令,讓它們擁有相同的參考帶寬。

9

*/

將所有路由的參考帶寬全部設(shè)置成10000M后,再次查看R1路由表:
1

R1#
show
ip
route
ospf

2

2.0.0.0/24 is subnetted, 1 subnets

3

O 2.2.2.0 [110/6477] via 12.1.1.2, 00:00:33, Serial0/0

4

3.0.0.0/24 is subnetted, 1 subnets

5

O 3.3.3.0 [110/6577] via 12.1.1.2, 00:00:33, Serial0/0

6

123.0.0.0/24 is subnetted, 1 subnets

7

O 123.1.1.0 [110/6576] via 12.1.1.2, 00:00:33, Serial0/0

這里拿去往3.3.3.0/24網(wǎng)絡(luò)的6577舉例計(jì)算花費(fèi):
R1和R2相連的串行鏈路花費(fèi)=10000M/1.544M≈6476(取整且不四舍五入)R2去往R3中間是快速以太網(wǎng)線路,花費(fèi)=10000M/100M=100R3上的Lo1接口的花費(fèi)=10000M/8000M≈1(取整且不四舍五入)
所以結(jié)果就是這三條線路花費(fèi)的總和,即6577。
可以通過下面的命令查看某接口的OSPF信息:
01

R1#
show
ip
ospf
interface
s 0/0

02

Serial0/0 is up, line protocol is up

03

Internet Address 12.1.1.1/24, Area 0

04

Process ID 1, Router ID 1.1.1.1, Network Type POINT_TO_POINT, Cost: 64

05

Transmit Delay is 1 sec, State POINT_TO_POINT,

06

Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5

07

oob-resync timeout 40

08

Hello due in 00:00:05

09

Supports Link-local Signaling (LLS)

10

Index 3/3, flood queue length 0

11

Next 0x0(0)/0x0(0)

12

Last flood scan length is 1,
maximum
is 1

13

Last flood scan time is 0 msec,
maximum
is 4 msec

14

Neighbor Count is 1, Adjacent neighbor count is 1

15

Adjacent with neighbor 2.2.2.2

16

Suppress hello for 0 neighbor(s)

0×3.OSPF高級配置
a.驗(yàn)證實(shí)例
OSPF鏈路的驗(yàn)證分為兩種,一種明文驗(yàn)證,一種MD5驗(yàn)證,默認(rèn)OSPF鏈路沒有使用驗(yàn)證,在沒有使用任何驗(yàn)證前,通過下面的命令來查看一下R1的OSPF分組的接收情況:
01

R1#debug
ip
ospf
packet

02

03

*Mar 1 03:44:54.507: OSPF: rcv. v:2
t
:1 l:48 rid:2.2.2.2

04

aid:0.0.0.0 chk:E694 aut:0 auk: from Serial0/0

05

06

/*

07

  • 本例截取了從R2上發(fā)過來OSPF報(bào)文如上,各字段的解釋如下:

08

09

"v:2"
表示OSPFv2版本。

10

"t:1"
表示Type,即類型,類型1是Hello報(bào)文。

11

"l:48"
長度Length是48。

12

"rid:2.2.2.2"
發(fā)送整個(gè)報(bào)文的路由器的RID。

13

"aid:0.0.0.0"
表示所在區(qū)域是0(
area
0)。

14

"chk:E694"
表示驗(yàn)證和。

15

"aut:0"
表示驗(yàn)證,0表示空驗(yàn)證,1表示明文驗(yàn)證,2表示MD5驗(yàn)證。

16

"auk:"
驗(yàn)證相關(guān)的內(nèi)容,因?yàn)闆]有使用驗(yàn)證,所以沒有值。

17

"from Serial0/0"
表示從s0/0接口接收到的OSPF分組。

18

*/

下面首先介紹OSPF明文驗(yàn)證配置,首先再次打開前面的試驗(yàn)(圖4)中關(guān)閉的R1的fa1/0接口,然后在R1、R2、R3上配置驗(yàn)證;
明文驗(yàn)證的配置步驟是:
1)在所有參與OSPF進(jìn)程的接口上配置使用明文密碼。2)在OSPF進(jìn)程中聲明使用明文驗(yàn)證。
01

/在每個(gè)參與OSPF進(jìn)程的接口上配置明文密碼/

02

R1(config)#
int
fa 1/0

03

/*fa1/0接口驗(yàn)證密碼
"ccna1234"
*/

04

R1(config-if)#
ip
ospf
authentication

key
ccna1234

05

R1(config-if)#
int
s 0/0

06

/*s0/0接口驗(yàn)證密碼
"ccna"
*/

07

R1(config-if)#
ip
ospf
authentication

key
ccna

08

/在OSPF進(jìn)程中開啟區(qū)域0的明文驗(yàn)證/

09

R1(config-if)#router
ospf
1

10

R1(config-router)#
area
0
authentication

11

R1(config-router)#
end

12

13

/在R2上也開啟明文驗(yàn)證,鏈路兩端配置的密碼必須相同/

14

R2(config)#
int
fa 1/0

15

R2(config-if)#
ip
ospf
authentication

key
ccna1234

16

R2(config-if)#
int
s 0/1

17

R2(config-if)#
ip
ospf
authentication

key
ccna

18

R2(config-if)#router
ospf
2

19

R2(config-router)#
area
0
authentication

20

R2(config-router)#
end

21

22

/在R3上面開啟明文驗(yàn)證/

23

R3(config)#
int
fa 1/0

24

/前面的度量值實(shí)驗(yàn)中關(guān)閉了這個(gè)端口,現(xiàn)在重新打開它/

25

R3(config-if)#
no
shut

26

R3(config-if)#
ip
ospf
authentication

key
ccna1234

27

R3(config-if)#router
ospf
3

28

R3(config-router)#
area
0
authentication

29

R3(config-router)#
end

30

31

/*

32

  • 上面R1和R2的串行線路配置的密碼都是
    "ccna"
    ,和多路訪問的以太網(wǎng)接口的密碼不一樣,

33

  • 這是允許的,只要兩端的密碼相同即可。

34

*/

再次打開"debug ip ospf packet"查看:
1

R1#debug
ip
ospf
packet

2

3

*Mar 1 04:13:24.546: OSPF: rcv. v:2
t
:1 l:48 rid:2.2.2.2

4

aid:0.0.0.0 chk:E693 aut:1 auk: from Serial0/0

5

6

/可以看到
"aut:1"
,說明開啟了明文驗(yàn)證
/

試著取消R1 fa1/0的明文驗(yàn)證,然后使用下面的命令查看路由器輸出:
01

/取消R1的fa1/0明文驗(yàn)證/

02

R1(config)#
int
fa 1/0

03

R1(config-if)#
no
ip
ospf
authentication

key

04

R1(config-if)#
end

05

R1#

06

07

/查看鄰接關(guān)系輸出/

08

R1#debug
ip
ospf
adj

09

OSPF adjacency events debugging is on

10

11

*Mar 1 04:17:24.578: OSPF: Rcv pkt from 123.1.1.2, FastEthernet1/0 : Mismatch Authentication Key - Clear Text

12

R1#u all

13

/*看到了驗(yàn)證不匹配的提示
"Mismatch Authentication Key"
*/

不需要將R1的fa1/0接口驗(yàn)證恢復(fù),接著下面的實(shí)驗(yàn),配置MD5驗(yàn)證(點(diǎn)對點(diǎn)線路兩端必須配置相同的密碼):
01

/R1配置MD5驗(yàn)證/

02

R1(config)#
int
s 0/0

03

/刪除剛才配置的明文驗(yàn)證/

04

R1(config-if)#
no
ip
ospf
authentication

key

05

/配置MD5驗(yàn)證/

06

R1(config-if)#
ip
ospf
message-digest

key
1 md5 ccna123

07

/fa1/0接口在上面的試驗(yàn)中已經(jīng)刪除了原來的明文驗(yàn)證/

08

R1(config-if)#
int
fa 1/0

09

R1(config-if)#
ip
ospf
message-digest

key
1 md5 ccna123456

10

R1(config-if)#router
ospf
1

11

/取消區(qū)域的明文驗(yàn)證/

12

R1(config-router)#
no
area
0
authentication

13

/使用MD5驗(yàn)證/

14

R1(config-router)#
area
0
authentication
message-digest

15

R1(config-router)#
end

16

17

/R2配置MD5驗(yàn)證/

18

R2(config)#
int
fa 1/0

19

R2(config-if)#
no
ip
ospf
authentication

key

20

R2(config-if)#
ip
ospf
message-digest

key
1 md5 ccna123456

21

R2(config-if)#
int
s 0/1

22

R2(config-if)#
no
ip
ospf
authentication

key

23

R2(config-if)#
ip
ospf
message-digest

key
1 md5 ccna123

24

R2(config-if)#router
ospf
2

25

/可以直接覆蓋明文驗(yàn)證/

26

R2(config-router)#
area
0
authentication
message-digest

27

R2(config-router)#
end

28

29

/R3配置MD5驗(yàn)證/

30

R3(config)#
int
fa 1/0

31

R3(config-if)#
no
ip
ospf
authentication

key

32

R3(config-if)#
ip
ospf
message-digest

key
1 md5 ccna123456

33

R3(config-if)#router
ospf
3

34

R3(config-router)#
area
0
authentication
message-digest

35

R3(config-router)#
end

配置完成后,查看debug輸出:
1

R1#debug
ip
ospf
packet

2

OSPF packet debugging is on

3

R1#

4

*Mar 1 04:32:14.582: OSPF: rcv. v:2
t
:1 l:48 rid:2.2.2.2

5

aid:0.0.0.0 chk:0 aut:2 keyid:1 seq:0x3C7F02E8 from Serial0/0

6

7

/可以看到
"aut:2 keyid:1 seq:0x3C7F02E8"
,驗(yàn)證類型是MD5,keyid是1
/

此時(shí)拓?fù)渲械乃新酚啥伎梢越粨QOSPF信息,并且是MD5驗(yàn)證模式;繼續(xù)下面的實(shí)驗(yàn),配置默認(rèn)路由。
b.默認(rèn)路由實(shí)例
在R1上新建一個(gè)回環(huán)接口lo1,IP設(shè)置成11.11.11.11,因?yàn)镽1并沒有將所有接口都發(fā)布到OSPF進(jìn)程中,所以lo1不會被其他路由器學(xué)習(xí)到,下面將這個(gè)新增加的接口設(shè)置成R1的默認(rèn)路由出口,并且宣告給其他路由:
01

R1(config)#
int
lo
1

02

R1(config-if)#
ip
add
11.11.11.11 255.255.255.0

03

R1(config-if)#
no
shut

04

R1(config-if)#
exit

05

/創(chuàng)建默認(rèn)路由指向lo1接口/

06

R1(config)#
ip
route
0.0.0.0 0.0.0.0 lo1

07

R1(config)#router
ospf
1

08

/發(fā)布默認(rèn)路由/

09

R1(config-router)#
default-information
originate

10

R1(config-router)#
end

11

12

/查看R2的路由表,可以看到多出一條
"O
E2"
的默認(rèn)路由*/

13

R2#
show
ip
route

14

15

O*E2 0.0.0.0/0 [110/1] via 123.1.1.1, 00:01:02, FastEthernet1/0

"O*E2"中O表示從OSPF學(xué)習(xí)到的路由,E2表示該路由是OSPF外部類型2的路由,OSPF使用E1和E2標(biāo)記外部路由,E1表示除計(jì)算外部來的花費(fèi)外,還要計(jì)算OSPF內(nèi)部花費(fèi),而E2則只計(jì)算外部花費(fèi),不計(jì)算OSPF域內(nèi)花費(fèi),這就是這條默認(rèn)路由的花費(fèi)為1的原因。如果此時(shí)關(guān)閉R1的lo1接口,其他路由上這條默認(rèn)路由將消失,可以使用下面的命令讓R1始終對外發(fā)布默認(rèn)路由:
1

R1(config)#router
ospf
1

2

R1(config-router)#
default-information
originate
always

3

R1(config-router)#
end

使用這條命令配置之后R1關(guān)閉lo1接口,其他路由上還是會存在這條默認(rèn)路由。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容