史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   網路軟硬體架設技術文件 (http://forum.slime.com.tw/f133.html)
-   -   鄰居哪去了? (http://forum.slime.com.tw/thread77952.html)

psac 2003-10-22 04:23 PM

鄰居哪去了?
 
鄰居哪去了?

赫赫,文章講的不是Windows的網路芳鄰,而是OSPF路由傳輸協定中鄰居關係的建立問題。對OSPF瞭解的朋友應該知道,兩個相連的執行OSPF的路由器間在交換路由信息之前,兩台路由器必須先建立起OSPF的鄰居/鄰接關係,但有時候這種鄰居關係就是建立不起來,問題是出在哪裡呢?

案例一
一個客戶前段時間打電話給我,說他們的網路出了點問題。客戶的網路是個省網,整網都採用OSPF路由傳輸協定,客戶所在的點是一個市級節點,下聯各個縣級節點,最近下屬縣級節點2600上又增加了一個節點1760,通過乙太網口連接起來,在26上ping對端1760的直連接頭是通的,但ping不通1760上的區域網路口,用戶反覆檢查了OSPF的配置也沒發現什麼不對的地方。

首先撥號上到縣級節點的26上,然後再telnet到1760上檢視,在1760上用show ip ospf nei發現顯示結果是空的,說明鄰居關係根本就沒建立起來,再看了一下OSPF的配置也是對的,用show ip ospf int看兩個乙太網口也都正確地加入到了OSPF工作中,那問題出在哪裡呢?

在1760上開啟debug,debug ip ospf event,然後觀察結果:

01:02:57: OSPF: Rcv hello from 192.168.0.2 area 0 from Ethernet0 10.1.1.2
01:02:57: OSPF: Mismatched hello parameters from 10.1.1.2
01:02:57: OSPF: Dead R 40 C 40, Hello R 10 C 10 Mask R 255.255.255.252 C 255.255.255.248

可以看到出錯原因為ospf hello資料包的參數不匹配,下面一句給出了出錯原因,其中的R代表對端的hello參數,C代表本機的hello參數,可以看到hello及dead interval的參數兩端都是一致的,但mask值就不一樣了,本機的為255.255.255.248,而對端的卻為255.255.255.252。

原來用戶在做規劃時雖然要求兩邊位址都用/30的掩碼,但以前一直用的/29的掩碼,後來新增節點後也忘記改了。

雖然近端網址為10.1.1.1,遠端位址為10.1.1.2,都落在了/30及/29的範圍內,但OSPF傳輸協定規定,在乙太網這樣的broadcast環境中,兩端的掩碼必須保持一致,而在點對點的網路連接中則沒有這樣的要求。

找到問題原因後,將近端網址的掩碼改為/30,幾秒鐘後再show ip ospf n,可以看到鄰居關係已正確建立,路由信息也正確地傳播了過來:

Neighbor ID Pri State Dead Time Address Interface
192.168.0.1 1 FULL/BDR 00:00:39 10.1.1.1 Ethernet0

案例二
一個省網工程,中心用的75,採用ATM OC3 155M接頭,下面的分支節點都用畫格中繼接上來。ATM線路剛拉通後,我的一個同事到用戶現場進行配置,打了一個電話給我,說遠端路由學不到,電話上扯了一會後扯不清,就趕到現場看實際情況。

到現場後大概看了看配置和線路,沒什麼大問題,接下來看OSPF的鄰居關係:

Head_7507#sh ip ospf nei

Neighbor ID Pri State Dead Time Address Interface
192.168.0.2 1 EXSTART/- 00:00:34 172.16.0.2 ATM1/0

怎麼回事呢?因為問題已經解決,事後我在試驗環境裡模擬了一下故障現場,現假設RouterA是中心的75路由器,在RouterA上開啟debug:

RouterA#debug ip ospf adj
OSPF adjacency events debugging is on

00:21:38: OSPF: Rcv DBD from 192.168.0.2 on Serial0 seq 0x335 opt 0x42 flag 0x7 len 32 mtu 1300 state INIT
00:21:38: OSPF: 2 Way Communication to 192.168.0.2 on Serial0, state 2WAY
00:21:38: OSPF: Send DBD to 192.168.0.2 on Serial0 seq 0x1391 opt 0x42 flag 0x7 len 32
00:21:38: OSPF: First DBD and we are not SLAVE
00:21:43: OSPF: Rcv DBD from 192.168.0.2 on Serial0 seq 0x335 opt 0x42 flag 0x7 len 32 mtu 1300 state EXSTART
00:21:43: OSPF: First DBD and we are not SLAVE
00:21:43: OSPF: Retransmitting DBD to 192.168.0.2 on Serial0
00:21:43: OSPF: Up DBD Retransmit cnt to 1 for 192.168.0.2 on Serial0
00:21:43: OSPF: Send DBD to 192.168.0.2 on Serial0 seq 0x1391 opt 0x42 flag 0x7 len 32
00:21:48: OSPF: Rcv DBD from 192.168.0.2 on Serial0 seq 0x335 opt 0x42 flag 0x7 len 32 mtu 1300 state EXSTART

可以看到RouterA在不斷的重發DBD包,但一直維持在EXSTART狀態,不進行到下一步LOADING狀態。

telnet到對端RouterB上,看OSPF鄰居關係:

RouterB#sh ip ospf ne

Neighbor ID Pri State Dead Time Address Interface
192.168.0.1 1 EXSTART/- 00:00:37 172.16.0.1 Serial1

一樣的OSPF鄰居狀態,在RouterB上開啟debug:

RouterB#debug ip ospf adj

00:24:28: OSPF: Retransmitting DBD to 192.168.0.1 on Serial1
00:24:28: OSPF: Up DBD Retransmit cnt to 6 for 192.168.0.1 on Serial1
00:24:28: OSPF: Send DBD to 192.168.0.1 on Serial1 seq 0x467 opt 0x42 flag 0x7 len 32
00:24:28: OSPF: Rcv DBD from 192.168.0.1 on Serial1 seq 0x4C2 opt 0x42 flag 0x7 len 32 mtu 1500 state EXSTART
00:24:28: OSPF: Nbr 192.168.0.1 has larger interface MTU
00:24:33: OSPF: Retransmitting DBD to 192.168.0.1 on Serial1
00:24:33: OSPF: Up DBD Retransmit cnt to 7 for 192.168.0.1 on Serial1

可以看到RouterB上同樣也有DBD重發的現象,但可以注意到RouterB上多了一條提示信息:
OSPF: Nbr 192.168.0.1 has larger interface MTU

好,現在再看看RouterA的S0口的MTU信息:

RouterA#sh ip int s0
Serial0 is up, line protocol is up
Internet address is 172.16.0.1/24
Broadcast address is 255.255.255.255
Address determined by non-volatile memory
MTU is 1500 bytes

RouterB的S1口的MTU信息:
RouterB#sh ip int s1
Serial1 is up, line protocol is up
Internet address is 172.16.0.2/24
Broadcast address is 255.255.255.255
Address determined by non-volatile memory
MTU is 1300 bytes

結論出來了,RouterA串列阜的MTU值大於RouterB串列阜的MTU值,造成兩機的OSPF鄰居關係不能正確建立。

而在75上,看ATM口的信息:

Head_7507#show interface atm 1/0
ATM1/0 is up, line protocol is up
Hardware is cxBus ATM
MTU 4470 bytes, sub MTU 4470, BW 155520 Kbit, DLY 80 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ATM, loopback not set
Keepalive not supported
Encapsulation(s): AAL5, PVC mode
256 TX buffers, 256 RX buffers,

可以看到ATM口的MTU值為4470字元,而分支節點路由器串列阜的MTU值預設為1500字元,解決辦法有兩個,一個是將ATM口的MTU值改為1500,另一個辦法是在兩端設備接頭上增加如下指令:

interface atm1/0
ip ospf mtu-ignore

(註:此指令在12.1.3 版本後才予支持)

另:本文中所用到的IP位址為保密起見,都是修改後的IP位址,和實際情況有差別。
作者Alien


所有時間均為台北時間。現在的時間是 04:06 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1