一個網路問題的解決

來源:互聯網
上載者:User

網路環境:

前提:所有涉及的機器都允許ping通過,手頭只有中的機器。
問題描述:在PC上ping 10.11.12.13,無法聯通,但是在路由器上卻能ping通10.11.12.13。
排查過程:
1.    確定路由器的ip_forward為1。
結論:路由器可以路由。
2.    確定路由器上配置正確的路由和NAT,以及清空路由器iptables的filter表。
結論:可以暫時忽略路由器故障。
3.    在2之後重新在PC上ping 10.11.12.13,仍然不通。
結論:大體上是PC的問題。
4.    在PC上刪除除了到伺服器10.11.12.13之外的任何路由,確認僅有一條到外網的路由。
目的:去掉儘可能多的幹擾因素。
5.    在PC上ping路由器,同時在PC以及路由器上抓取icmp包,能ping通且PC上抓包成功,路由器上沒有抓到任何包(tcpdump時要加上-e -vv參數,顯示以太頭)。
結論:a.路由生效了;
          b.可能是ip衝突,但是不排除路由器網路通訊協定棧故障。
6.    分析步驟6中tcpdump的結果中的以太頭以及執行arp命令,得到目的地址的mac為A,然後在路由器上執行ip link show或者ifconfig得到相關ip地址的mac地址為B,A和B不等。
結論:資料包送往了錯誤的目的地。
7.    清除PC上的arp緩衝,然後再次執行ping 192.168.1.1,同時在PC和路由器上抓取arp包,發現送出一個arp request,同一區域網路內回複了兩條arp reply。
結論:區域網路內一定有ip衝突,定位一個問題,但是不排出是否還有其它問題導致網路不通。
8.    清除PC的arp緩衝,然後用arp命令強行配置arp緩衝而不是讓PC自動學習:arp -s “192.168.1.1” B(步驟6中的B),之後重新ping 192.168.1.1,這次則通了,ping 10.11.12.13,也通了。
結論:導致網路不通的問題確實是由於ip衝突進而arp學習錯誤導致。
補充說明:由於我們無法確定和路由器衝突的主機的位置以及用途,因此不能拔掉衝突主機,又因為我們不知道詳細網路ip配置情況,如果修改了路由器的ip則可能引入新的ip衝突,因此不能修改路由器的ip,故只能強制設定arp映射,這隻是為了定位問題,實際中應該避免強制配置arp映射,幾乎任何OS核心的TCP/IP協議棧的實現中,都會實現arp過程,包括學習,緩衝,失效等事件。
註解:用traceroute命令可以查看資料通路情況,但是在某一跳列印一排”*”並不能說明鏈路不通,而可能是中間路由器屏蔽了ttl死亡的icmp回應或者回應逾時導致,因此traceroute如果失敗,一定要採取別的排錯方案。現將traceroute的原理列為下:
    本質上在linux中,traceroute是由UDP實現的,目的連接埠採用一個很大的連接埠。Traceroute的執行過程其實是一系列ttl死亡的過程,首先源主機發送一個ttl為1的udp包,然後到達去往目的地址的第一跳之後,轉寄之前,遞減ttl之後發現ttl為0了,因此回應一個ttl已死的icmp報告,源主機接收後視為第一跳,列印之,接下來發送ttl為n++(n>1)的udp資料包…traceroute有一個等待時間參數-w waittime,並且每一個ttl重複次數參數-q nqueries,一般預設每個ttl嘗試發送3個udp包,每次等待waittime時間,等一次不回應icmp則列印一個”*”, nqueries次都不回應者則將ttl+1繼續,因此如果一路上所有的路由器都屏蔽了ttl已死的回應或者發送udp資料包和中間路由器發送ttl已死回應的間隔大於waittime(這是可能的,很多路由器將回應這種icmp資料包視為額外的行為,因此將之安排在優先順序比較低的核心線程中執行,回複逾時是經常的事)的話,那麼源主機將完全列印”* * * …”,但是最終鏈路還是通的,資料到達目的地時會回應一個“連接埠不可達”訊息,如果想嘗試一下上述論述,請執行:traceroute W -w M -q N,W儘可能遠,不易達,M儘可能小,N隨意,結果幾乎是很多行的”*”,每行N個,如果去往W的網路異常順利,則也有可能出現不是全*的行,總之,traceroute只是能給出一個大致的路線,並不是唯此一條,甚至同一次執行traceroute中,ttl為n+1時所走的路由和ttl為n時所走的路由都有可能不同。在windows中tracert發送的是一個icmp request的資料包,收到icmp reply時停止,並不是通過udp實現的,但是ttl死亡機制和linux一致。
    因此,網路排錯的步驟中使用的命令一般為:traceroute/tracert,netstat,ping,iptables,route,ifconfig ,ip,arp,tcpdump。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.