第7章 網路層協議(2)_ICMP協議
2. ICMP協議
2.1 ICMP報文(Internet Control Message Protocol)的型別
報文型別 |
型別值 |
程式碼 |
描述 |
請求報文 |
8 |
0 |
請求回顯報文 |
響應報文 |
0 |
0 |
回顯應答報文 |
差錯報告報文 |
3 (終點不可到達) |
0 |
網路不可達 |
1 |
主機不可達 |
||
2 |
協議不可達 |
||
3 |
埠不可達 |
||
4 |
需要進行分片但設定了不分片 |
||
13 |
由於路由器過濾,通訊被禁止 |
||
4 |
0 |
源端被關閉 |
|
5 (改變路由) |
0 |
對網路重定向 |
|
1 |
對主機重定向 |
||
11 |
0 |
傳輸期間生存時間(TTL)為0 | |
12 (引數問題) |
0 |
壞的IP首部 |
|
1 |
缺少必要的選項 |
(1)ICMP報文用於在IP主機、路由器之間傳遞控制訊息。如網路通不通、主機是否可到達、路由是否可用等網路本身的訊息。
(2)ICMP差錯報文共5種
①終點不可到達:當路由器或主機沒有到達目標地址的路由時,就丟棄該資料包,給源點發送終點不可到達報文。
②源點抑制:當路由器或主機由於擁塞而丟棄資料包時,就會向源點發送源點抑制報文,使源點知道應降低資料包的傳送速率。
③時間超時:當路由器收到生存時間為零的資料報時,除丟棄該資料報外,還要向源點發送時間超過報文
④引數問題:當路由器或目的主機收到的資料報的首部中有的欄位的值不正確時,就丟棄該資料報,並向源點發送引數問題報文。
⑤改變路由(重定向):路由器把改變路由報文傳送給主機,讓主機知道下次應將資料報傳送給另外的路由器(可通過更好的路由)
2.2 ICMP報文格式
(1)ICMP報文格式
(2)ICMP差錯報文
①ICMP差錯報文中的資料欄位具有同樣的格式,即ICMP資料部分=收到的IP資料報的首部和資料欄位的前8個位元組)。
②提取資料報中資料欄位的前8個位元組是為了得到傳輸層的埠號(對於TCP和UDP)以及傳輸層報文的傳送序號(對於TCP)。這些資訊對源點通知高層協議是有用的。
③整個ICMP差錯報文=ICMP的前8個位元組+ICMP資料部分,作為IP資料報的資料欄位傳送給源點。
2.3 ICMP差錯報告報文:路由重定向
(1)PC1的閘道器設定為R1的f0/0介面地址(192.168.1.1)。當PC1給PC3傳送資料包時,會發送給R1,再經R1轉發給R3。這樣效率不高。
①三層交換機埠預設為二層口,介面配置模式下使用不帶參的switchport命令把一個介面設定為2層模式。如果需要啟用三層功能就需要在此埠輸入no switchport命令。
②在配置R3路由器的f1/0地址前,要執行no swichport命令,才可以進一步配置介面地址。
(2)當出現這種現象時,路由器R1會把第1個數據包轉發給R3,然後給PC1傳送一個ICMP重定向資料包,告訴PC1到達主機192.168.2.2,下一跳為192.168.1.254.這樣PC1增加一條到192.168.2.2的路由,下一跳指向192.168.1.254(注意,是到一個主機,而不是到192.168.2.0/24整個網段的路由)。以後的資料包就直接發到R3的f0/0的介面。
(3)主機和路由器對於重定向報文的不同處理原則
①路由器一般會忽略ICMP重定向報文。
②主機對於重定向報文的處理取決於作業系統。對於Windows作業系統,從閘道器返回的ICMP重定向報文,會在計算機的路由表中新增一條到主機的路由。
③也可以人工新增到一個主機地址的路由:如c:\Windows\system32>route add 10.7.1.35 mask 255.255.255.255 10.7.10.254(注意,子網掩碼是4個255)
2.4 ICMP差錯報告報文:給程式返回錯誤訊息
(1)實驗環境
①VM使用虛擬機器WinXP充當,連線到VMnet1網路。
②R1和R2預設路由互相指定對方。
③然後從WinXP的瀏覽器訪問http://59.46.80.160,這個TCP資料包會在兩個路由器之間往復轉發,直到TTL耗盡。然後路由器返回給WinXP主機ICMP差錯報文資料包,如下圖。
(2)抓包分析
①當WinXP瀏覽http://59.46.80.160時,使用的是TCP協議,源埠和目標埠分別為1058和80。
②從上圖可知R2產生ICMP差錯報文給WinXP。該ICMP報文中包含了傳輸層首部的8個位元組,指明瞭出現差錯的資料包的協議、源埠和目標埠。
2.5 使用ICMP排除網路故障
(1)使用ping命令診斷網路故障
①當ping某個IP時,出現大多數請求超時,只是偶爾會有ICMP響應資料包時,說明網路很不暢通。
②這種請求超時的產生主要原因是網路擁塞,導致傳送一個ICMP請求資料包在一段時間內沒有得到ICMP響應資料包或針對該ICMP請求資料包的差錯報告資料包。
③可以檢查導致網路擁塞的原因,比如惡意軟體大量傳送廣播包占用了網路頻寬。
(2)使用tracert跟蹤資料包路徑
①ping和-i引數跟蹤資料包
②tracert命令的工作原理就是使用上述方法,通過給目標地址傳送TTL逐漸增加的ICMP請求,根據返回的ICMP差錯報文來確定沿途經過了哪些路由器。
(3)使用pathping跟蹤資料包路徑
①pathping是一個基於TCP/IP的命令列工具,該命令不但可以跟蹤資料包從源主機到目標主機所經過的路徑,還可以統計計算機網路延時以及丟包率。其跟蹤資料包路徑的原理和tracert命令一樣。
②圖中的“躍點”指的是路由器,D處表示路由器轉發資料包的丟包率。E處的表示從躍點9到躍點10鏈路上的丟包率。