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層協議
(2)IP層協議將以地址“192.168.1.2”作為目的地址,本機IP地址作為源地址,加上一些其他的控制資訊,構建一個IP資料包,並在一個對映表(ARP實現 IP地址轉成Mac地址的協議)中查找出IP地址192.168.1.2所對應的MAC地址(這是資料鏈路層協議構建資料鏈路層的傳輸單元——幀所必需的),一併交給資料鏈路層。
(3)資料鏈路層構建一個數據幀,目的地址是IP層傳過來的MAC地址,源地址則是本機的實體地址,還要附加上一些控制資訊,依據乙太網的介質訪問規則,將它們傳送出去。(4)主機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資料報在這兩個機器之間來回所需的往返時間。