TCP IP 詳解7 Ping指令

2021-09-06 11:43:16 字數 4242 閱讀 7775

首先介紹一下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時間戳:

TCP IP 詳解7 Ping指令

首先介紹一下ping 指令的基本過程 這部分摘自網路 我們以下面乙個網路為例 有a b c d四台機子,一台路由ra,子網掩碼均為255.255.255.0,預設路由為192.168.0.1 1.在同一網段內 在主機a上執行 ping 192.168.0.5 後,都發生了些什麼呢?1 首先,ping...

TCP IP詳解卷一 7Ping程式

1 ping程式中,客服傳送icmp回顯請求給主機,測試主機是否可達。ping還給我們提供了檢測ip記錄路由和時間戳選項的機會。識別符號是程序id,序號是傳送數。3 ping程式通過在icmp報文資料中存放傳送請求的時間值來計算往返時間。4 我們可以在ping程式設定 r選項,以提供記錄路由功能。它...

ping指令詳解

icmp協議是 internet control message ptotocol 網際網路控制訊息協議 的縮寫。它是tcp ip協議族的乙個子協議,用於在ip 主機 路由器之間傳遞控制訊息。ping packet internet groper 網際網路包探索器,用於測試網路連線量的程式。ping...