1. 程式人生 > >ICMP報文和ping命令

ICMP報文和ping命令

一、ping 的原理

   ping程式是用來探測主機到主機之間是否可通訊,如果不能ping到某臺主機,表明不能和這臺主機建立連線。ping使用的是ICMP協議,它傳送icmp回送請求訊息給目的主機。ICMP協議規定:目的主機必須返回ICMP回送應答訊息給源主機。如果源主機在一定時間內收到應答,則認為主機可達。

二、Ping工作過程——    假定主機A的IP地址是192.168.1.1,主機B的IP地址是192.168.1.2,都在同一子網內,則當你在主機A上執行“Ping 192.168.1.2”後,都發生了些什麼呢?(1)Ping命令會構建一個固定格式的ICMP請求資料包,然後由ICMP協議將這個資料包連同地址“192.168.1.2”一起交給IP層協議

 ping能夠計算往返時間RTT,它在報文的資料部分插入傳送時間。

(2)IP層協議將以地址“192.168.1.2”作為目的地址,本機IP地址作為源地址,加上一些其他的控制資訊,構建一個IP資料包,並在一個對映表ARP實現  IP地址轉成Mac地址的協議)中查找出IP地址192.168.1.2所對應的MAC地址這是資料鏈路層協議構建資料鏈路層的傳輸單元——幀所必需的),一併交給資料鏈路層

(3)資料鏈路層構建一個數據幀,目的地址是IP層傳過來的MAC地址,源地址則是本機的實體地址,還要附加上一些控制資訊,依據乙太網的介質訪問規則,將它們傳送出去。(4)主機B收到這個資料幀後,先檢查它的目的地址,並和本機的實體地址對比

,如符合,則接收;否則丟棄。接收後檢查該資料幀,將IP資料包從幀中提取出來,交給本機的IP層協議。同樣,IP層檢查後,將有用的資訊提取後交給ICMP協議,後者處理後,馬上構建一個ICMP應答包,傳送給主機A,其過程和主機A傳送ICMP請求包到主機B一模一樣。

即先由IP地址,在網路層傳輸,然後再根據mac地址由資料鏈路層傳送到目的主機

三、ICMP協議:

   ICMP協議通過IP協議傳送的,IP協議是一種無連線的,不可靠的資料包協議。在Unix/Linux,序列號從0開始計數,依次遞增。而Windows ping程式的ICMP序列號是沒有規律。

ICMP協議在實際傳輸中資料包:20位元組IP首部 + 8位元組ICMP首部+ 1472位元組<資料大小>38位元組

ICMP首部一般格式:

型別(8位)

程式碼(8位)

檢驗和(16位)

首部的其餘部分(32位  不同型別ICMP特有)

資料部分(差錯報文:初始IP資料報一部分 包括IP首部和資料報前8位元組。查詢報文:基於查詢的額外資訊

2、ICMP(網路控制報文協議)分為:差錯報告報文和查詢報文

(1)差錯報告報文:

ICMP不能糾錯,只能檢查錯誤,發現錯誤報告給最初的資料來源。其資料部分包含兩部分:初始IP首部和資料報前8位元組(TCP或udp 前8位元組包含源埠和目的埠)

1)終點不可達:型別=3,程式碼0~15,首部,由路由器或者目的主機檢查後傳送差錯報告給初始源資料。即時沒有終點不可達差錯報文也不能代表資料報交付成功。

2)源點抑制:型別=4,缺乏流量控制和擁塞控制。當路由器或主機丟棄資料報時,向源資料埠傳送源點抑制差錯報文。該報文兩個作用:第一通知源點資料報已經丟棄,二通知源點慢點發資料。

A.路由器或主機每丟棄一個數據報就要向源點發送一個報告;b.這裡源點無從得知什麼時候擁塞解除,只能一直減速慢發資料,當沒有收到ICMP差錯報文開始認為擁塞解除;c.一對一時源點抑制能夠對擁塞產生良好效果,但多對一時不一定,因為多個數據源,路由器丟棄的資料報不一定是傳送快的那個,有可能是傳送慢的,路由器不知道哪個資料來源產生擁塞。

3)超時:型別=11,解決多個路由表中出現環路現象。每個資料報通過一個路由器生存時間就-1,當生存時間為0時,就向源點發送一個超時差錯報告報文。如果報文的一個分片超時也傳送差錯報告報文。

4)引數問題:型別=12,引數具有二義性,路由器或主機都可差錯報告

5)改變路由:5,資料來源主機剛開始時,只保留一張很小的路由表,可能這上面的資訊並不是最優路徑,如果後續更新路徑後要傳送報告給資料來源。

6)注意不產生ICMP資料報:a.對於已攜帶ICMP差錯報文的資料報,B.對於分片的資料報,如果不是第一片C.具有多播地址的資料報 D.具有特殊地址的(127.0.0.0)資料報

(2)查詢報文

1)回送請求與回答:型別8或0

回送請求與回答可以判定兩個主機之間是否可達,通常可以通過ping命令來實現

2)時間戳請求與回答:

確定IP資料報在這兩個機器之間來回所需的往返時間。