您好,登錄后才能下訂單哦!
ICMP報文
ICMP報文封裝在IP數據報中,ICMP報文可分為兩大類:差錯報告報文和查詢報文。
ICMP報文首部的一般格式如圖1.11所示。
圖1.11 ICMP報文首部的一般格式
1.2.1 查詢報文
查詢報文有多種類型,比較常見的是類型(Type)8和類型(Type)0,它們是成對出現的。類型8表示回送請求(Echo),類型0表示回送應答(Echo Reply)。在《組建與維護企業網絡》課程中已經介紹過,這里不再贅述。
1.2.2 差錯報告報文
ICMP的主要責任之一就是報告差錯,當路由器或目的主機在處理IP數據報遇到問題時,就把差錯報文發送給數據報的源點。
差錯報告報文共有五種類型。
? 類型3 終點不可達
? 類型4 源點抑制
? 類型5 改變路由
? 類型11 超時
? 類型12 參數問題
本節將介紹三種類型:終點不可達、源點抑制和超時報文類型。
1.終點不可達報文
當中間路由器不能給數據報找到路由或目的主機不能交付數據報時,中間路由器或目的主機就丟棄這個數據報,然后向發出這個數據報的源點發送終點不可達報文。
終點不可達報文的首部格式如圖1.12所示。
圖1.12 ICMP終點不可達報文的首部格式
其中代碼字段指明了丟棄數據報的原因,一共有16種。下面將列舉并演示其中的兩種原因。
? 代碼1:Host unreachable(主機不可達)。
? 代碼3:Port unreachable(端口不可達)。
首先演示第1種原因,思路為:在Web主機上ping一臺未知網絡中的主機,然后通過Sniffer抓包分析返回的ICMP報文。
在Web主機上啟用Sniffer抓包,然后ping 1.1.1.1,在CMD窗口中運行的命令及結果為:
C:\> ping 1.1.1.1
Reply from 192.168.1.254: Destination host unreachable.
……
這是路由器返回的差錯報告:目的主機不可達,因為路由器找不到1.1.1.1的路由。
Sniffer抓包后的解碼如圖1.13所示。
可以看到,源IP:192.168.1.254(路由器)向目的IP:192.168.1.1(Web主機)返回了差錯報告報文,類型(Type)為3,代碼(Code)為1:Host unreachable(主機不可達)。
圖1.13 ICMP終點不可達報文演示(1)
接著演示第2種原因,思路為:在PC2主機上使用hping向Web主機的一個未開放的UDP端口發送1個UDP報文。因為該UDP端口未開放,那么Web主機將不能交付該UDP報文,就會返回ICMP差錯報告報文,可以在Web主機上通過Sniffer抓包分析返回的ICMP報文。
首先在Web主機上啟用Sniffer抓包,然后在PC2主機上使用hping向Web主機的UDP端口80(未開放)發送一個UDP報文,命令為:
[root@kkg sbin]# hping 192.168.1.1 -2 -p 80 -c 1
在Web主機上Sniffer抓包后的解碼如圖1.14所示。
圖1.14 ICMP終點不可達報文演示(2)
可以看到,源IP:192.168.1.1(Web主機)向目的IP:192.168.2.1(PC2主機)返回了差錯報告報文,類型(Type)為3,代碼(Code)為3:Port unreachable(端口不可達)。
2.源點抑制報文
在IP協議中沒有流量控制機制,這可能會導致在中間路由器或目的主機中產生擁塞現象。路由器或主機中的隊列長度(緩存)是有限的,如果數據報的接收速率比它們被轉發(對路由器而言)或處理(對主機而言)的速率快得多,隊列就會溢出。在這種情況下,路由器或主機只能把某些數據報丟棄。
為了給IP協議增加一種流量控制機制,ICMP的源點抑制報文被設計出來。當路由器或主機因為擁塞而丟棄數據報時,它就向數據報的發送端發送源點抑制報文,通知發送端必須放慢發送速率。要注意的是,對每一個因為擁塞而丟棄的數據報,路由器或主機都應當發送源點抑制報文。
源點抑制報文的首部格式如圖1.15所示。
圖1.15 ICMP源點抑制報文的首部格式
3.超時報文
超時報文的產生有兩種情況。
? 中間路由器收到數據報后發現其TTL字段的值為1或0。
? 目的主機在規定時間內沒有收到所有的分片。
當發生以上情況時,中間路由器或目的主機就丟棄這個數據報,然后向發出這個數據報的源點發送超時報文。
超時報文的首部格式如圖1.16所示。
圖1.16 ICMP超時報文的首部格式
其中代碼0只由路由器使用,代碼1只由目的主機使用。
下面將演示超時報文產生的兩種情況。
先演示第一種情況,思路為:在PC2主機上使用hping向Web主機發送一個TTL為1的ICMP報文,并偽造源IP為192.168.0.1(PC1主機),這樣在PC1主機上通過Sniffer可以捕獲到返回的超時報文。
首先在PC1主機上啟用Sniffer抓包,然后在PC2主機上使用hping向Web主機發送1個TTL為1的ICMP報文,并偽造源IP為192.168.0.1,命令為:
[root@kkg sbin]# hping 192.168.1.1 -1 -t 1 -c 1 –a 192.168.0.1
在PC1主機上Sniffer抓包后的解碼如圖1.17所示。
圖1.17 ICMP超時報文演示(1)
可以看到,源IP:192.168.2.254(路由器)向目的IP:192.168.0.1(PC1主機)返回了超時報文,類型(Type)為11,代碼(Code)為0。
接著演示第2種情況,思路為:在PC2主機上使用hping向Web主機只發送一個IP分片,經過一小段時間后,由于沒有收到后續的分片,Web主機將返回超時報文。
首先在Web主機上啟用Sniffer抓包,然后在PC2主機上使用hping向Web主機發送一個IP分片,命令為:
[root@kkg sbin]# hping 192.168.1.1 -1 -x -d 1000 -N 100 -c 1
等待60秒后,在Web主機上Sniffer抓包后的解碼如圖1.18所示。
圖1.18 ICMP超時報文演示(2)
可以看到,源IP:192.168.1.1(Web主機)向目的IP:192.168.2.1(PC2主機)返回了超時報文,類型(Type)為11,代碼(Code)為1。
意 啦 | 這里講的超時報文要與使用ping命令時產生的超時區分開來。例如,Windows 2003的ping命令在發出Echo請求后,如果在2秒(默認)內沒有收到Echo應答,就會顯示超時(Request timed out)。 |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。