1、引言
網絡ping不通是網絡中出現頻率最高的故障之一,同時也是最讓人抓狂的故障,誰沒遇到過?今天就和你細説下ping不通的原因,看看能不能和你遇到的情況對上號。技術交流:
- 移動端IM開發入門文章:
《新手入門一篇就夠:從零開發移動端IM》
開源IM框架源碼:https://github.com/JackJiang2011/MobileIMSDK(備用地址點此)
(本文已同步發佈於:http://www.52im.net/thread-4857-1-1.html)
3、ping命令技術原理
瞭解ping命令原因,我們來通過一個實例來了解。假定主機A的IP地址是 192.168.1.1 ,主機B的IP地址是 192.168.1.2 ,都在同一子網內,則當你在主機A上運行“Ping 192.168.1.2”後,都發生了些什麼呢?首先:Ping命令會構建一個固定格式的ICMP請求數據包,然後由ICMP協議將這個數據包連同地址“192.168.1.2”一起交給IP層協議(和ICMP一樣,實際上是一組後台運行的進程)。IP層協議將以地址“192.168.1.2”作為目的地址,本機IP地址作為源地址,加上一些其他的控制信息,構建一個IP數據包。並在一個映射表中查找出IP地址192.168.1.2所對應的物理地址(也叫MAC地址,這是數據鏈路層協議構建數據鏈路層的傳輸單元幀所必需的),一併交給數據鏈路層。後者構建一個數據幀,目的地址是IP層傳過來的物理地址,源地址則是本機的物理地址,還要附加上一些控制信息,依據以太網的介質訪問規則,將它們傳送出去。
主機B收到這個數據幀後,先檢查它的目的地址,並和本機的物理地址對比,如符合則接收,否則丟棄。接收後檢查該數據幀,將IP數據包從幀中提取出來,交給本機的IP層協議。同樣:IP層檢查後,將有用的信息提取後交給ICMP協議,後者處理後,馬上構建一個ICMP應答包,發送給主機A,其過程和主機A發送ICMP請求包到主機B一模一樣。直接説:就是利用網絡上機器IP地址的唯一性,給目標IP地址發送一個數據包,再要求對方返回一個同樣大小的數據包來確定兩台網絡機器是否連接相通,時延是多少。上面的過程就是ping命令的原理:主機A收到了主機B的一個應答包,説明兩台主機之間的去、回通路均正常,但也並不是所有網絡都是正常的,下面我們來看ping不通的原因。
4、同網段ping不通的原因概述
ping命令不通,主要有兩種情況:
1)同網段內的ip地址ping不通;
2)不同網段的ip地址ping不通。
各個情況不一樣,我們首先來看同網段ping不通的兩種情況。
5、同網段ping不通的情況1:“無法訪問目標主機”目的ip和源ip是同一網段的,ping的結果是“無法訪問目標主機”,屬於ping的請求沒有發出。我們來看下,ping同網段不存的ip地址:
ping的請求發出後,返回顯示“無法訪問目標主機"。
什麼原因呢?説明此時ping的需求並沒有成功發出。
這時要檢查:
1)對方是否開機?ip是否存在?
2)有跨交換機vlan的話,檢查對應的中間trunk鏈路是否導通?
3)走直連路由是否正確?是否應該走默認路由,而走了直連路由;
4)子網掩碼是否錯誤;
5)默認網關是否填寫正確。
6、同網段ping不通的情況2:“超時(time out)”
目的ip和源ip是同一網段的,ping的結果是“超時或者time out” ,屬於ping的請求已經成功發出了,但目標主機沒有回覆。ping的請求發出後,返回顯示“超時":
什麼原因呢?這種情況是ping已經成功發出了,到達了主機,但是沒有得到響應。
要檢查:
1)檢查下防火牆,防火牆禁止了對ping的迴應;
2)子網掩碼的設置錯誤,導致不在同一個網段;
3)設備硬件故障,導致設備沒有對應的mac地址,無法生成路由表,而走默認路由;
4)ip衝突,或ip地址與直聯路由不在同一個網段;
5)網關沒有設置好。
7、 跨網段ping不通的原因概述
不同網段ping不通,通常的表現有“無法訪問目標主機”、“time out”,但具體分析起來其實可能的原因是比較多的,我們還是一起來看下跨網段常見的原因吧。
8、 跨網段ping不通的情況1:“無法訪問目標主機”
跨網段出現無法訪問目標主機,説明請求沒有成功發出,獲取不了目的ip地址與mac地址。
可能出現的原因是:
1)目的ip地址不存在;
2)檢查路由表是否有缺省的路由;
3)檢查arp表是否有網關的mac地址;
4)有網關設置錯誤;
5)走了默認路由。
9、 跨網段ping不通的情況2:“time out”
若顯示 time out,表示 ping 的 request 消息已經發出,目的ip的網關已經獲取到目的ip的mac地址,但是目的主機沒有回覆,或源主機無法收到。這些應該檢查回程路由和節點回程路由。
可能的原因有:
1)檢查下防火牆,是否攔截了ping的請求消息;
2)檢查經過節點的路由是否正確,或者是否有回程路由;
3)回程路由的硬件網卡出口和ping的request的入口網卡不是同一個;
4)交換機vlan對應的接口全部down了,導致vlan狀態down,vlan的對應路由沒有生成。
10、本文小結
當我們網絡ping不通時,首先要看ping顯示的結果是”無法訪問目標主機“還是”超時“,再看是同網段,還是不同網段,採取相應的分析方法。
另外在分析與解決網絡故障時,我們要熟練的瞭解ping、arp、tracert、route這幾個命令的用法,可以快速的定位ping不通的原因。
尤其是這arp、tracert、route這三個命令的用法,解決故障非常方便。
11、參考資料
[1] 史上最通俗的集線器、交換機、路由器功能原理入門
[2] 通俗講解,有了IP地址,為何還要用MAC地址?
[3] 外行也能讀懂的網絡硬件設備功能原理速成
[4] 每天都在用的Ping命令,它到底是什麼?
[5] 能Ping通,TCP就一定能連接和通信嗎?
[6] 什麼是公網IP和內網IP?NAT轉換又是什麼鬼?
[7] 假如你來設計網絡,會怎麼做?
[8] 你真的瞭解127.0.0.1和0.0.0.0的區別?
[9] 一文搞懂localhost和127.0.0.1
[10] 深入操作系統,徹底搞懂127.0.0.1本機網絡通信
[11] 冰山之下,一次網絡請求背後的技術秘密
[12] 得物自研移動端弱網診斷工具的技術實踐分享
(本文已同步發佈於:http://www.52im.net/thread-4857-1-1.html)