單區域OSPF
命令:
R1(config)#router ospf 1 //啓動OSPF進程
R1(config-router)#router-id 1.1.1.1 //配置路由器ID
R1(config-router)#network 172.16.1.0 0.0.0.255 area 0 //通告直連網絡
R1(config-router)#network 172.16.1.0 255.255.255.0 area 0 //通告直連網絡
說明:網絡地址的後面即可以跟通配符掩碼,在高版本IOS中也可以跟網絡掩碼,IOS會自動轉換成通配符掩碼。
R1(config-router)#router-id 1.1.1.1
R1(config-router)#network 172.16.1.0 0.0.0.255 area 0
R1(config-router)#network 172.16.12.0 0.0.0.255 area 0
R2(config)#router ospf 1
R2(config-router)#router-id 2.2.2.2
R2(config-router)#network 172.16.2.0 0.0.0.255 area 0
R2(config-router)#network 172.16.12.0 0.0.0.255 area 0
R2(config-router)#network 172.16.23.0 0.0.0.255 area 0
R3(config)#router ospf 1
R3(config-router)#router-id 3.3.3.3
R3(config-router)#network 172.16.3.0 0.0.0.255 area 0
R3(config-router)#network 172.16.23.0 0.0.0.255 area 0
R3(config-router)#network 172.16.34.0 0.0.0.255 area 0
R4(config)#router ospf 1
R4(config-router)#router-id 4.4.4.4
R4(config-router)#network 172.16.4.0 0.0.0.255 area 0
R4(config-router)#network 172.16.34.0 0.0.0.255 area 0
說明:
1.OSPF路由進程ID的範圍在1-65535之間,而且只有本地含義,不同路由器的路由進程ID可以不同。如果要想啓
動OSPF路由進程,至少確保有一個接口是up的。同一臺路由器上可以啓動多個OSPF進程,但會消耗更多的CPU
和內存等資源。
2.區域ID是0-4294967295的數,也可以是IP地址的格式A.B.C.D。當網絡區域爲0或0.0.0.0時稱爲主幹區域。
3.Router ID選擇遵循如下順序:
1>最優先的是在OSPF進程中使用“router-id”指定了RID;
2>如果沒有在OSPF進程中指定RID,則選擇IP地址最大的環回接口的IP地址爲RID;
3>如果沒有環回接口,則選擇活動的IP地址最大的物理接口的IP地址爲RID。
①如果使用“secondary”配置IP地址時,該地址不起作用,即不參與RID競選;
②使用“router-id”後,應使用命令“clear ip ospf process”重置ospf進程,新配置的RID才能生效;
③2、3步只有在下次重啓路由器時纔會生效,即後來加入大的IP地址也不能選舉爲RID直到路由器重啓。
4.Router ID重新選舉規則:
1>使用“router-id”和“clear ip ospf process”命令;
2>重啓路由器(不一定)。
實驗調試
R1#show ip route ospf 1 //查看OSPF路由表
以上輸出結果表明在同一個區域內,通過OSPF路由協議學習到的路由條目用代碼“O”表示。
OSPF度量值cost計算公式 = 所有鏈路入接口的cost之和;
接口cost計算公式 = 108/帶寬(bps)取整;環回接口的cost值爲1。
說明:
1.環回接口所在網絡的OSPF路由條目的掩碼長度都是32位,這是環回接口的特性,儘管通告了24位,解決的辦法
是在環回接口下修改網絡類型爲“Point-to-Point”這樣收到的路由條目的掩碼長度和通告的就能一致:
R1(config-if)#ip ospf network point-to-point //設置網絡類型爲點到點網絡
OSPF定義了6種網絡類型,分別爲:點對點、廣播多路訪問(BMA)、非廣播多路訪問(NBMA)、點對多點、環回接
口、虛擬鏈路(Virtual Links)。
2.路由條目“172.16.4.4/32”的度量值爲“193”,到路由器R1經過的入接口包括:R4的loopback0、R3的
S0/0、R2的S0/1及R1的S0/0,所以計算如下:1+108/1544000+108/1544000+108/1544000=193。也可以直接通過
命令“ip ospf cost”配置接口的cost值,並且它是優先計算的cost值的,命令如下:
R1(config-if)#ip ospf cost 64 //設置接口cost爲64
R1#show ip protocols //查看啓用的路由協議
R1#show ip ospf 1 //可查看OSPF進程ID、RID、OSPF區域信息以及上次計算SPF算法的時間
R1#show ip ospf interface //查看運行OSPF接口的信息
R1#show ip ospf neighbor //查看OSPF鄰居表的基本信息
OSPF鄰居關係不能建立的常見原因:
1.Hello間隔和Dead間隔不同;
1>同一鏈路上的Hello間隔和Dead間隔必須相同才能建立鄰居關係;
2>默認時,Dead間隔是Hello間隔的4倍。可以在接口下通過如下命令調整:
R1(config-if)#ip ospf hello-intrval 10 //設置Hello包發送間隔爲10s
R1(config-if)#ip ospf dead-interval 40 //設置Dead時間爲40s
2.區域ID不一樣;
3.特殊區域(如stub、nssa等)區域類型不匹配;
4.認證類型或密碼不一致;
5.路由器ID相同;
6.Hello包被ACL拒絕;
7.鏈路上的MTU不匹配;
8.接口下OSPF網絡類型不匹配。
R1#show ip ospf database //查看OSPF鏈路狀態數據庫的信息
命令:
R1(config-router)#auto-cost reference-bandwidth 1000 //修改OSPF計算度量值的參考帶寬,單位MB/s
R1(config-router)#auto-cost reference-bandwidth 1000
R2(config)#router ospf 1
R2(config-router)#auto-cost reference-bandwidth 1000
R3(config)#router ospf 1
R3(config-router)#auto-cost reference-bandwidth 1000
R4(config)#router ospf 1
R4(config-router)#auto-cost reference-bandwidth 1000
說明:“auto-cost reference-bandwidth”命令是修改計算OSPF度量值參考帶寬的。如果以太口帶寬爲千兆,而採用默認的百兆參考帶寬,計算出來的cost是0.1,這顯然是不太合理的。修改參考帶寬要在路由器內所有的OSPF路由器上配置,目的是確保參考標準是相同的。
另外,當執行命令“auto-cost reference-bandwidth”時,系統也會提示如下信息:
實驗調試
R4#show ip ospf neighbor //分別在路由器R4和R1上執行該命令
以上輸出表明在該廣播多路訪問網絡中,路由器R4是DR,路由器R3是BDR,路由器R1和路由器R2是DROTHER。
說明:
1.DR和BDR有自己的組播地址224.0.0.6;
2.DR和BDR的選舉是以各網絡爲基礎的,也就是說DR和BDR選舉是路由器的接口特性,而不是整個路由器的特性;
3.DR選舉是非搶佔的,除非人爲地重新選舉。
4.DR選舉的原則:
①首要因素是時間,最先啓動的路由器會啓動一個Waite Timer計時器(Cisco規定是40s),在計時器超時前如
果沒有新的OSPF路由器啓動,它就被選舉爲DR,如果有新的路由器啓動那麼它們將按照②、③進行選舉;
②如果同時啓動,或者重新選舉,則看接口優先級(範圍爲0-255),優先級最高的被選舉成DR,默認情況下,
多路訪問網絡的接口優先級爲1,點到點網絡接口優先級爲0,如果接口優先級被設置爲0,那麼該接口將不
參與DR選舉,修改接口優先級命令是“ip ospf priority”:
R1(config-if)#ip ospf priority 150 //修改端口優先級爲150
③如果同時啓動,而優先級相同,則最後看RID,RID最高的被選舉成DR。
5.重新選舉DR/BDR的方法:
①重啓路由器(不一定);
②“clear ip ospf process”(不一定)。
R4#show ip ospf int f0/0 //分別在路由器R4和R1上執行該命令
從上面的路由器R1和路由器R4的輸出得知,鄰居關係和鄰接關係是不能混爲一談的,鄰居關係是指達到2-Way狀態的兩臺路由器,而鄰接關係是指達到FULL狀態的兩臺路由器。
OSPF區域認證
命令
區域簡單口令認證:
R1(config-router)#area 0 authentication //區域0啓用簡單口令認證
R1(config-if)#ip ospf authentication-key cisco //配置認證密碼
區域MD5認證:
R1(config-router)#area 0 authentication message-digest //區域0啓用MD5認證
R1(config-if)#ip ospf message-digest-key 1 md5 cisco //配置認證Key ID及密匙
區域簡單口令認證
R1(config)#router ospf 1
R1(config-router)#area 0 authentication
R1(config)#int s0/0
R1(config-if)#ip ospf authentication-key cisco
R2(config)#router ospf 1
R2(config-router)#area 0 authentication
R2(config)#int s0/0
R2(config-if)#ip ospf authentication-key cisco
實驗調試
R1#show ip ospf
以上輸出表明區域0採用了簡單口令認證。
R1#show ip ospf int s0/0
以上輸出最後一行信息表明該接口啓用了簡單口令認證。
R1#debug ip ospf packet
以上輸出表明接收到認證類型爲1的Hello數據包。
認證:
1.如果R1區域0沒有啓用認證,而R2區域0啓用簡單口令認證,則R2會出現下面的信息:
R2#debug ip ospf events
2.如果R1和R2的區域0都啓用簡單口令認證,但R2接口下沒有配置密碼或密碼錯誤,則R2會出現下面的信息:
R2#debug ip ospf events
區域MD5認證
R1(config)#router ospf 1
R1(config-router)#area 0 authentication message-digest
R1(config)#int s0/0
R1(config-if)#ip ospf message-digest-key cisco
R2(config)#router ospf 1
R2(config-router)#area 0 authentication message-digest
R2(config)#int s0/0
R2(config-if)#ip ospf message-digest-key cisco
實驗調試
R1#show ip ospf
以上輸出最後兩行信息表明該接口啓用了MD5認證,而且使用密鑰ID爲1進行認證。
R1#debug ip ospf packet
以上輸出表明接收到認證類型爲2,Key ID爲1,序列號爲0x3C7ECCC1的Hello數據包。
認證
1.如果R1的區域0啓用MD5認證,而R2的區域0啓用簡單口令認證,則R2會出現下面的信息:
R2#debug ip ospf events
2.如果R1和R2的區域0都啓用MD5認證,但R2的接口下沒配置Key ID和密碼或錯誤密碼,則R2會出現下面的信息:
R2#debug ip ospf events
OSPF接口認證
命令
接口簡單口令認證:
R1(config-if)#ip ospf authentication //接口啓用簡單口令認證
R1(config-if)#ip ospf authentication-key cisco //配置認證密碼
接口MD5認證:
R1(config-if)#ip ospf authentication message-digest //接口啓用MD5認證
R1(config-if)#ip ospf message-digest-key 1 md5 cisco //配置認證Key ID及密匙
接口簡單口令認證
R1(config)#int s0/0
R1(config-if)#ip ospf authentication
R1(config-if)#ip ospf authentication-key cisco
R2(config)#int s0/0
R2(config-if)#ip ospf authentication
R2(config-if)#ip ospf authentication-key cisco
實驗調試
R1#show ip ospf int s0/0
以上輸出最後一行信息表明該接口啓用了簡單口令認證。
R1#debug ip ospf packet
認證:
1.如果R1的s0/0沒有啓用認證,而R2的s0/0啓用簡單口令認證,則R2會出現下面的信息:
2.如果R1和R2的s0/0都啓用簡單口令認證,但R2的s0/0沒有配置密碼或密碼錯誤,則R2會出現下面的信息:
R2#debug ip ospf events
R1(config)#int s0/0
R1(config-if)#ip ospf authentication message-digest
R1(config-if)#ip ospf message-digest-key cisco
R2(config)#int s0/0
R2(config-if)#ip ospf authentication message-digest
R2(config-if)#ip ospf message-digest-key cisco
實驗調試
R1#show ip ospf int s0/0
以上輸出最後兩行信息表明該接口啓用了MD5認證,而且使用密鑰ID爲1進行認證。
R1#debug ip ospf packet
以上輸出表明接收到認證類型爲2,Key ID爲1,序列號爲0x3C7EC76D的Hello數據包。
認證
1.如果R1的s0/0啓用MD5認證,而R2的s0/0啓用簡單口令認證,則R2會出現下面的信息:
R2#debug ip ospf events
2.如果R1和R2的s0/0都啓用MD5認證,但R2的s0/0沒配置Key ID和密碼或錯誤密碼,則R2會出現下面的信息:
R2#debug ip ospf events
默認路由再發布(本地:靜態默認路由 S*;其它:通告缺省默認外部路由 O*E2)
命令:
R1(config)#ip route 0.0.0.0 0.0.0.0 loopback 1 //添加靜態默認路由
R1(config)#router ospf 1
R1(config-router)#default-information originate //再發布默認路由
說明:“default-information originate”命令後面可以加可選的“always”參數,如果不使用該參數,路由器上必須存在一條默認路由,否則該命令不產生任何效果。如果使用該參數,無論路由器上是否存在默認路由,路由器都會向OSPF區域內注入一條默認路由。
實驗調試
R4#show ip route
以上R4路由表的輸出表明,通過命令“default-information originate”確實可以向OSPF區域注入“O*E2”的默認路由。同樣,R2、R3的路由表中也包含一條“O*E2”的默認路由。
R4#show ip ospf database
通過查看R4的拓撲結構數據庫可以看到,確實從外面注入了一條類型5的LSA。