ping 過程中發生了什麼?

2021-07-16 06:17:35 字數 3995 閱讀 2006

首先介紹一下ping 指令的基本過程:(這部分摘自網路)

我們以下面乙個網路為例:有a、b、c、d四台機子,一台路由ra,子網掩碼均為255.255.255.0,預設路由為192.168.0.1

1.在同一網段內

在主機a上執行「ping 192.168.0.5」後,都發生了些什麼呢?

(1)首先,ping命令會構建乙個固定格式的icmp請求資料報,//構建icmp的資料報

(2)然後由icmp協議將這個資料報連同位址「192.168.0.5」一起交給ip層協議(和 icmp一樣,實際上是一組後台執行的程序);//icmp+ip位址(目的主機)

(3)ip層協議將以位址「192.168.0.5」作為目的位址,本機ip位址作為源位址,加上一些其他的控制資訊,構建乙個ip資料報,並想辦法得到192.168.0.5的mac位址(實體地址,這是資料鏈路層協議構建資料鏈路層的傳輸單元——幀所必需的),以便交給資料鏈路層構建乙個資料幀。關鍵就在這裡,ip層協議通過機器b的ip位址和自己的子網掩碼,發現它跟自己屬同一網路,就直接在本網路內查詢這台機器的mac,如果以前兩機有過通訊,在a機的arp快取表應該有b機ip與其mac的對映關係,如果沒有,就發乙個arp請求廣播,得到b機的mac, 一併交給資料鏈路層。後者構建乙個資料幀,目的位址是ip層傳過來的實體地址,源位址則是本機的實體地址,還要附加上一些控制資訊,依據乙太網的介質訪問規則,將它們傳送出去。

主機b收到這個資料幀後,先檢查它的目的位址,並和本機的實體地址對比,如符合,則接收;否則丟棄。接收後檢查該資料幀,將ip資料報從幀中提取出來,交給本機的ip層協議。同樣,ip層檢查後,將有用的資訊提取後交給icmp協議,後者處理後,馬上構建乙個icmp應答包,傳送給主機a,其過程和主機a傳送icmp請求包到主機b一模一樣。

總結步驟:

(1) a主機構建乙個icmp格式的資料報;

(2) icmp協議+b主機的ip位址 交給ip協議;

(3) ip層構建乙個資料報(a主機的ip位址+控制資訊+b主機的ip位址),獲得b主機的mac位址,以便構建乙個資料幀;

(ip協議會根據b主機的ip位址和自己的子網掩碼判斷是不是屬於同一層網路。如果是屬於同一層網路的話,就會獲得b主機的mac位址)

(4)  主機b接受到主機a的發過來的資料幀以後,先檢查該幀中包含的b的ip位址,並和本地的實體地址進行比對,如果符合的話,就接受,否則,就拋棄。同樣,需要將該資料幀交由自己的ip層協議,ip層檢查以後,再交由icmp協議,構建乙個icmp的應答包,傳送給主機a。

2.不在同一網段內

在主機a上執行「ping 192.168.1.4」後,開始跟上面一樣,到了怎樣得到mac位址時,ip協議通過計算發現d機與自己不在同一網段內,就直接將交由路由處理,也就是將路由的mac取過來,至於怎樣得到路由的mac,跟上面一樣,先在arp快取表找,找不到就廣播吧。路由得到這個資料幀後,再跟主機d進行聯絡,如果找不到,就向主機a返回乙個超時的資訊。

對ping後返回資訊的分析

1.request timed out

這是大家經常碰到的提示資訊,很多文章中說這是對方機器置了過濾icmp資料報,從上面工作過程來看,這是不完全正確的,至少有下幾種情況。

(2)對方與自己不在同一網段內,通過路由也無法找到對方,但有時對方確實是存在的,當然不存在也是返回超時的資訊。

(3)對方確實存在,但設定了icmp資料報過濾(比如防火牆設定)。

怎樣知道對方是存在,還是不存在呢,可以用帶引數 -a 的ping命令探測對方,如果能得到對方的netbios名稱,則說明對方是存在的,是有防火牆設定。

如果得不到,多半是對方不存在或關機,或不在同一網段內。

(4)錯誤設定ip位址

正常情況下,一台主機應該有乙個網絡卡,乙個ip位址,或多個網絡卡,多個ip位址(這些位址一定要處於不同的ip子網)。但如果一台電腦的「撥號網路介面卡」(相當於一塊軟網絡卡)的tcp/ip設定中,設定了乙個與網絡卡ip位址處於同一子網的ip位址,這樣,在ip層協議看來,這台主機就有兩個不同的介面處於同一網段內。當從這台主機ping其他的機器時,會存在這樣的問題:

a.主機不知道將資料報發到哪個網路介面,因為有兩個網路介面都連線在同一網段。

b.主機不知道用哪個位址作為資料報的源位址。因此,從這台主機去ping其他機器,ip層協議會無法處理,超時後,ping 就會給出乙個「超時無應答」的錯誤資訊提示。但從其他主機ping這台主機時,請求包從特定的網絡卡來,icmp只須簡單地將目的、源位址互換,並更改一些標誌即可,icmp應答包能順利發出,其他主機也就能成功ping通這台機器了。 2.destination host unreachable

(1)對方與自己不在同一網段內,而自己又未設定預設的路由,比如上例中a機中不設定預設的路由,執行ping 192.168.0.1.4就會出現「destination host unreachable」。

(2)網線出了故障

這裡要說明一下「destination host unreachable」和 「time out」的區別,如果所經過的路由器的路由表中具有到達目標的路由,而目標因為其他原因不可到達,這時候會出現「time out」,如果路由表中連到達目標的路由都沒有,那就會出現「destination host unreachable」。

3.bad ip address

這個資訊表示您可能沒有連線到dns伺服器,所以無法解析這個ip位址,也可能是ip位址不存在。

4.source quench received

這個資訊比較特殊,它出現的機率很少。它表示對方或中途的伺服器繁忙無法回應。

5.unknown host——不知名主機

這種出錯資訊的意思是,該遠端主機的名字不能被網域名稱伺服器(dns)轉換成ip位址。故障原因可能是網域名稱伺服器有故障,或者其名字不正確,或者網路管理員的系統與遠端主機之間的通訊線路有故障。

6.no answer——無響應

這種故障說明本地系統有一條通向中心主機的路由,但卻接收不到它發給該中心主機的任何資訊。故障原因可能是下列之一:中心主機沒有工作;本地或中心主機網路配置不正確;本地或中心的路由器沒有工作;通訊線路有故障;中心主機存在路由選擇問題。

7.ping 127.0.0.1:127.0.0.1是本地迴圈位址

如果本位址無法ping通,則表明本地機tcp/ip協議不能正常工作。

8.no rout to host:網絡卡工作不正常。

9.transmit failed,error code:10043網絡卡驅動不正常。

10.unknown host name:dns配置不正確。

總結:我們把出現的狀況列出如下的**:

bad ip address

這個資訊表示您可能沒有連線到dns伺服器,所以無法解析這個ip位址,也可能是ip位址不存在

source quench received

這個資訊表示您可能沒有連線到dns伺服器,所以無法解析這個ip位址,也可能是ip位址不存在。

unknown host

該遠端主機的名字不能被網域名稱伺服器(dns)轉換成ip位址。故障原因可能是網域名稱伺服器有故障,或者其名字不正確,或者網路管理員的系統與遠端主機之間的通訊線路有故障。

no answer

這種故障說明本地系統有一條通向中心主機的路由,但卻接收不到它發給該中心主機的任何資訊。故障原因可能是下列之一:中心主機沒有工作;本地或中心主機網路配置不正確;本地或中心的路由器沒有工作;通訊線路有故障;中心主機存在路由選擇問題。

no rout to host

網絡卡工作不正常

unknown host name

dns配置不正確

下面我們講解一下tcp/ip詳解上的問題:

關於lan和wan的輸出我們不再解釋,兩者的區別主要在於對方主機返回資料幀時間不同,以及廣域網存在資料報的丟失。

介紹幾個比較新鮮的名詞:

ip時間戳:

new Vue 發生了什麼

合併options 初始化生命週期 初始化事件 初始化渲染 觸發beforecreate鉤子 export function initstate vm component else true asrootdata if opts.computed initcomputed vm,opts.compu...

在安裝驅動過程中發生的問題

在安裝驅動的過程中彈出如下的提示 使用spy 發現是odbcconf.exe 用procexp 發現 原來是安裝包在呼叫 rundll32 setupapi,installhinfsection defaultinstall 132 c programfiles estsandbox estboxd...

http enter以後發生了什麼?

自己總結 輸入 按enter發生了什麼?寫在前面的話 http www.google 8080 script jquery.js http協議名稱 www 子網域名稱 google 主網域名稱 8080埠號 script jquery 請求位址 當協議 子網域名稱 主網域名稱 埠號中任意乙個不同的時...