網路工程師都會用到Ping,它是檢查路由問題的有效辦法。但也常聽工程師抱怨:不可能,怎麼會不通呢?

  這樣的困惑一般發生在自認為路由設置正確的時候。舉幾個筆者遇到的問題,歡迎大家補充。

  最簡單的三種情況:1.太心急。即網線剛插到交換機上就想Ping通網關,忽略了生成樹的收斂時間。當然,較新的交換機都支持快速生成樹,或者有的管理員乾脆把用戶埠(access port)的生成樹協議關掉,問題就解決了。

  2.訪問控制。不管中間跨越了多少跳,只要有節點(包括端節點)對ICMP進行了過濾,Ping不通是正常的。最常見的就是防火牆的行為。

  3.某些路由器埠是不允許用戶Ping的。

  還遇到過這樣的情形,更為隱蔽。

  1.網路因設備間的時延太大,造成ICMPecho報文無法在預設時間(2秒)內收到。時延的原因有若干,比如線路(衛星網時延上下星為540毫秒),路由器處理時延,或路由設計不合理造成迂迴路徑。使用擴展Ping,增加timed out時間,可Ping通的話就屬路由時延太大問題。

  2.引入NAT的場合會造成單向Ping通。NAT可以起到隱蔽內部地址的作用,當由內Ping外時,可以Ping通是因為NAT表的映射關係存在,當由外發起Ping內網主機時,就無從查找邊界路由器的NAT表項了。

  3.多路由負載均衡場合。比如Ping遠端目的主機,成功的reply和timed out交錯出現,結果發現在網關路由器上存在兩條到目的網段的路由,兩條路由權重相等,但經查一條路由存在問題。

  4.IP地址分配不連續。地址規劃出現問題象是在網路中埋了地雷,地址重疊或掩碼劃分不連續都可能在Ping時出現問題。比如一個極端情況,A、B兩臺主機,經過多跳相連,A能Ping通B的網關,而且B的網關設置正確,但A、B就是Ping不通。經查,在B的網卡上還設有第二個地址,並且這個地址與A所在的網段重疊。

  5.指定源地址的擴展Ping.登陸到路由器上,Ping遠程主機,當ICMP echorequest從串列廣域網介面發出去的時候,路由器會指定某個IP地址作為源IP,這個IP地址可能不是此介面的IP或這個介面根本沒有IP地址。而某個下游路由器可能並沒有到這個IP網段的路由,導致不能Ping通。可以採用擴展Ping,指定好源IP地址。

  當主機網關和中間路由的配置認為正確時,出現Ping問題也是很普遍的現象。此時應該忘掉"不可能"幾個字,把Ping的擴展參數和反饋信息、traceroute、路由器debug、以及埠鏡像和Sniffer等工具結合起來進行分析。

  比如,當A、B兩臺主機經過多跳路由器相連時,二者網關設置正確,在A上可以Ping通B,但在B上不能Ping通A.可以通過在交換機做鏡像,並用Sniffer抓包,來找出ICMP報文終止於何處,報文內容是什麼,就可以發現ICMP報文中的源IP地址並非預期的那樣,此時很容易想像出可能是路由器的NAT功能使然,這樣就能夠逐步地發現一些被忽視的問題。而Ping不通時的反饋信息是"destination_net_unreachable"還是"timedout"也是有區別的。

  論壇原文討論:http://bbs.chinaitlab.com/thread-236006-1-1.html

推薦閱讀:

查看原文 >>
相關文章