ping命令執行過程詳解
機器A ping 機器B
同一網段
-
ping通知系統建立一個固定格式的ICMP請求數據包
-
ICMP協議打包這個數據包和機器B的IP地址轉交給IP協議層(一組后台運行的進程,與ICMP類似)
-
IP層協議將以機器B的IP地址為目的地址,本機IP地址為源地址,加上一些其他的控制信息,構建一個IP數據包
-
獲取機器B的MAC地址
-
IP層協議通過機器B的IP地址和自己的子網掩碼,發現它跟自己屬同一網絡,就直接在本網絡查找這台機器的MAC
-
若兩台機器之前有過通信,在機器A的ARP緩存表應該有B機IP與其MAC的映射關系
-
若沒有,則發送ARP請求廣播,得到機器B的MAC地址,一並交給數據鏈路層
-
-
數據鏈路層構建一個數據幀,目的地址是IP層傳過來的MAC地址,源地址是本機的MAC地址,再附加一些控制信息,依據以太網的介質訪問規則,將他們傳送出去
-
機器B收到這個數據幀后,先檢查目的地址,和本機MAC地址對比
-
符合,接收。接收后檢查該數據幀,將IP數據包從幀中提取出來,交給本機的IP協議層協議。IP層檢查后,將有用的信息提取交給ICMP協議,后者處理后,馬上構建一個ICMP應答包,發送給主機A,其過程和主機A發送ICMP請求包到主機B類似(這時候主機B已經知道了主機A的MAC地址,不需再發ARP請求)
-
不符合,丟棄
-
-
不同網段
-
ping通知系統建立一個固定格式的ICMP請求數據包
-
ICMP協議打包這個數據包和機器B的IP地址轉交給IP協議層(一組后台運行的進程,與ICMP類似)
-
IP層協議將以機器B的IP地址為目的地址,本機IP地址為源地址,加上一些其他的控制信息,構建一個IP數據包
-
獲取主機B的MAC地址
- IP協議通過計算發現主機B與自己不在同一網段內,就直接交給路由處理,就是將路由的MAC取過來,至於怎么得到路由的MAC地址,和之前一樣,先在ARP緩存表中尋找,找不到可以利用廣播。路由得到這個數據幀之后,再跟主機B聯系,若找不到,就向主機A返回一個超時信息。
對ping后返回信息的分析
-
Request timed out
-
對方已關機,或者網絡上沒有這個地址
-
對方與自己不在同一網段內,通過路由也無法到達
-
對方存在,不過設置了ICMP數據包過濾(比如防火牆設置)
-
錯誤設置IP地址
正常情況下,一台主機一張網卡,一個IP地址或多個網卡,多個IP地址。但如果一台電腦的“撥號網絡適配器”(相當於一塊軟網卡)的TCO/IP設置中,設置了一個與網卡IP地址處於同一子網的IP地址,這樣,在IP層協議看來,這台主機就有兩個不同的接口處於同一網段內。當從這台主機ping其他機器時,會存在這樣的問題:
** 主機不知道將數據包發到哪個網絡接口,因為有兩個網絡接口都連接在同一網段。
** 主機不知道用哪個地址作為數據包的源地址。因此,從這台主機去ping其他機器,IP層協議會無法處理,超時后,ping就會給出一個“超時無應答”的錯誤信息提示。但從其他主機ping這台主機時,請求包從特定網卡來,ICMP只須簡單的將目的、源地址互換,並更改一些標志即可,ICMP應答包能順利發出,其他主機就能成功ping通這台主機了。 -
-
Destination host Unreachable
-
自己未設定默認路由,對方跟自己不在同已網段
-
網線有問題
備注:
Request timed out 與 Destination host Unreachable 的區別
所經過的路由器的路由表具有到達目標的路由,而目標因為原因不可到達,這時出現前者。如果路由表中連到達目標的路由都沒有,就會出現后者。 -
-
Bad ip address
- 沒有連接到DNS服務器,無法解析IP,也可能是IP不存在
-
Source quench received
- 對方或中途服務器繁忙而無法應答
-
Unkonw host
- 遠程主機的名字不能被域名服務器轉換成IP地址,故障原因可能是DNS服務器有故障,或者名字不正確,或者網絡管理員的系統與遠程主機之間的通信線路故障。
-
No answer
- 無響應。說明本地系統有一條通向中心主機的路由,但卻接收不到它發給該中心主機的人呢和信息。故障原因可能是:中心主機沒有工作;本地或中心主機網絡配置不正確;本地或中心的路由器沒有工作;通信線路有故障;中心主機存在路由選擇問題。
-
Ping 127.0.0.1
- 如果ping不通,則表明本地址TCP/IP協議不能正常工作
-
no rout to host
- 網卡工作不正常
-
transmit failed。error code
- 10043網卡驅動不正常
-
unknown host name
- DNS配置不正確