天天看點

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

一、ICMP簡介

IP協定是一種不可靠無連接配接的協定,當資料包經過多個網絡傳輸後,可能出現錯誤、目的主機不響應、包擁塞和包丢失等問題。為了處理這些問題,在IP層引入了另一個協定ICMP(Internet控制資訊協定)。ICMP封包有兩種類型:差錯封包和查詢封包。ICMP封包封裝在IP封包裡傳輸。ICMP封包可以被IP協定、傳輸層協定(TCP或UDP)和使用者程序使用。ICMP與IP一樣,都是不可靠傳輸,ICMP的資訊也可能丢失。為了防止ICMP封包無限制的連續發送,對于ICMP封包在傳輸中發生的問題,将不再發送ICMP差錯封包。

二、ICMP封包格式

ICMP資料包由8位元組的首部和可變長度的資料部分組成。如下圖所示,第一個字段是ICMP的類型,它定義了封包類型。第二個字段是代碼字段,它指明了發送這個特定封包類型的原因。校驗和字段為ICMP資料包提供差錯校驗。對于不同類型的ICMP資料包,首部的最後4個位元組的格式是不同的,具體的格式将在下面讨論。

差錯封包的資料部分攜帶引起差錯的原始資料。查詢封包的資料部分攜帶了基于查詢類型的額外資訊。

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-1 ICMP封包的一般格式

● 類型:8位字段,用于描述特定類型的ICMP封包。 ● 代碼:8位字段,進一步描述某些ICMP封包的具體說明。 ● 校驗和:16位字段,覆寫這個ICMP封包的校驗和。三、ICMP封裝

ICMP封包封裝在IP資料報中,具體的封裝方法如下圖所示:

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-2 ICMP封裝

四、ICMP封包類型

ICMP封包可分為兩大類:差錯封包和查詢封包,如下圖所示:

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-3 ICMP封包類型

差錯封包報告路由器或主機在處理IP資料報時遇到的問題。 查詢封包是成對出現的,它幫助主機或網絡管理者從一個路由器或另一個主機得到特定的資訊。例如,主機使用ICMP回應要求和回應答覆封包發現它們的鄰站。下表列出了每一類ICMP封包。

表4-1 ICMP封包

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

五、ICMP查詢封包 ICMP查詢封包能夠獲得特定主機或路由器的資訊,能夠對某些網絡問題進行診斷。ICMP查詢封包包括4對不同類型的封包,分别為回應要求和應答封包、時間戳請求和應答封包、位址掩碼請求和應答封包以及路由器詢問和通告封包,如下圖所示。

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-4 查詢封包

1.回應要求和應答

回應要求封包和回應答覆封包用來确定了兩個節點(主機或路由器)之間是否能夠正常通信。使用者可以使用這對封包來發現網絡問題。 主機或路由器可以發送回應要求封包給另一個主機或路由器。收到回應要求封包的主機或路由器産生回應答覆封包,并将其傳回給原來的發送端。 回應要求和回應答覆封包可用來确定是否在IP這級能夠通信。因為ICMP封包被封裝在IP資料報中,發送回應要求的主機在收到回應答覆封包時,就證明了在發送端和接收端之間能夠使用IP資料報進行通信。另外,這還證明了鍊路中的路由器能夠接收、處理和轉發資料報。 回應要求和回應答覆封包還可以用于檢查另一個主機是否可達。使用者可以調用資料包網際網路搜尋器(ping)指令做到這一點。現在,大多數系統都提供ping指令,它可以産生一連串的回應要求或回應答覆封包。 回應要求和回應答覆封包也可以用來驗證某個節點是否正常工作。可以向被測試的節點發送回應要求封包,該封包的資料字段包含一段資訊,如果這段資訊被測試的節點在回應答覆封包中完全一樣地重複,則說明該節點工作正常;否則說明該節點出了問題。下圖給出了回應要求和回應答覆封包的格式。類型值為8表示回應要求封包,類型值為0表示回應答覆封包。辨別符和序号字段在協定中沒有正式定義,可以由發送端任意使用。

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-5 ICMP回應要求和應答封包

2.時間戳請求和應答

兩個機器(主機或路由器)可使用時間戳請求和時間戳應答封包來确定IP資料報在這兩個機器之間傳輸所需要的時間,也可以用作兩個機器時鐘的同步。這兩個封包的格式如下圖所示。其中,類型值為13表示時間戳請求封包,類型值為14表示時間戳應答封包。

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-6 時間戳請求和應答封包

在封包格式中3個時間戳字段的長度都是32位。每一個字段都儲存一個整數,代表從通用時間(格林尼治标準時間)的午夜起測量出的時間,以毫秒為機關。 源節點在時間戳請求封包的原始時間戳字段填入它的時鐘所顯示的通用時間。其它兩個時間戳字段都填入零。 收到時間戳請求封包後,終點将生成時間戳應答封包。終點把請求封包中的原始時間戳字段值複制到應答封包的同一個字段中。然後在接收時間戳字段中填入收到這個請求封包時其時鐘所顯示的通用時間。最後,終點在應答封包将要發送時在發送時間戳字段中填入其時鐘所顯示的通用時間。 時間戳請求和時間戳應答封包可以用來計算資料報從源點到終點所需的時間,還可以用于計算資料報再傳回到源點所需的時間。3.位址掩碼請求和應答 要得到掩碼,主機應該向區域網路上的路由器發送位址掩碼請求封包。若主機知道路由器的位址,它就把請求直接發送給該路由器。若主機不知道路由器的位址,則它就廣播位址掩碼請求封包。路由器收到位址掩碼請求封包後,用位址掩碼應答封包進行響應,向主機提供所需的掩碼。 位址掩碼請求和位址掩碼應答封包的格式如下圖所示。其中,類型值為17表示位址掩碼請求封包,類型值為18表示位址掩碼應答封包。在請求封包中,位址掩碼字段填入全0。當路由器把位址掩碼應答發回給主機時,這個字段就包含真正的掩碼。

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-7 位址掩碼請求和應答封包

無盤工作站在啟動時是需要位址掩碼的,它會使用RARP協定查找完整的IP位址,在收到IP位址以後,無盤工作站就可使用位址掩碼請求封包找出位址掩碼,進而确定IP位址的哪一部分定義了子網号,哪一部分定義了主機号。4.路由器詢問和通告 主機若想把資料發送給另一個網絡上的主機,就需要知道連接配接到該網絡上的路由器的位址。此外,這個主機還需要知道這些路由器是否正常工作。路由器詢問封包和路由器通告封包可以完成這項工作。主機可把路由器詢問封包進行廣播(或多點傳播)。收到詢問封包的一個或幾個路由器就使用路由器通告封包廣播其路由選擇資訊。甚至在沒有主機詢問時,路由器也可周期性地發送路由器通告封包。路由器發送出通告封包時,它不僅通告了自己的存在,而且也通告了它所知道的所有在這個網絡上的路由器。下圖給出了路由器詢問封包的格式。

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-8 路由器詢問封包

下圖給出了路由器通告封包的格式。生存期字段表示這個封包在多長時間内是有效的。在通告封包中每一個路由器的項目有兩個字段:路由器位址和位址優先級。位址優先級定義了路由器的等級。優先級用來選擇某個路由器作為預設路由器。若位址優先級為零,則這個路由器就被認為是預設路由器。若位址優先級是0x80000000,則這個路由器永遠不能被選為預設路由器。

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-9 路由器通告封包

六、ICMP差錯封包

ICMP差錯封包用來報告差錯。雖然現代的技術已經制造出很可靠的傳輸媒體,但差錯仍然存在,因而必須進行處理。正如在實驗三中所讨論的,IP是個不可靠的協定。這就表示IP不考慮差錯校驗和差錯控制。ICMP就是為了補償這個缺點而設計的。然而ICMP不能糾正差錯,它隻是報告差錯,差錯糾正留給高層協定去做。ICMP使用源IP位址把差錯封包發送給資料報的源點(發出者)。 一共有5種差錯封包:目的端不可達、源點抑制、逾時、參數問題以及改變路由,如下圖所示。

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-10 差錯封包

差錯封包的資料字段包括原始資料報(引起差錯的封包)的首部和原始資料報資料部分的前8個位元組。包括原始資料報首部的目的是為了向差錯封包的原始信源給出關于資料報本身的資訊。包括資料的前8個位元組是因為這前8個位元組提供了關于端口号(UDP和TCP)和序号(TCP)的資訊。根據這些資訊,源點可以把差錯情況通知給上層協定。1.目的端不可達

當路由器不能夠為資料報找到路由或主機,就丢棄這個資料報,然後向發出這個資料報的源主機發送目的端不可達封包。下圖給出了目的端不可達封包的格式。這種類型的代碼字段指明了丢棄該資料報的原因。

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-11 目的端不可達封包

2.源點抑制 IP協定是無連接配接協定,是以通信缺乏流量控制。ICMP源點抑制封包就是為了給IP增加一種流量控制而設計的。當路由器或主機因擁塞而丢棄資料報時,它就向資料報的發送端發送源點抑制封包。第一,它通知發送端,資料報已被丢棄。第二,它警告發送端,在路徑中的某處出現了擁塞,因而源端必須放慢發送過程。源點抑制封包的格式如下圖所示:

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-12 源點抑制封包

3.逾時 逾時封包是在以下兩種情況下産生的: ● 資料報的生存時間字段值被減為0時,路由器丢棄這個資料報,并向發送端發送逾時封包。 ● 當組成封包的所有分段未能在某一時限内到達目的主機時,也要産生逾時封包。當第一個分段到達時,目的主機就啟動計時器。當計時器的時限到了,目的主機就将所有分段丢棄,并向發送端發送逾時封包。逾時封包格式如下圖所示:

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-13 逾時封包

4.參數問題 當資料報在Internet上傳送時,如果路由器或目的主機發現資料報首部中出現了二義性問題,或在資料報的某個字段中缺少某個值,它就丢棄這個資料報,并向發送端發送參數問題封包。下圖給出了參數問題封包格式。代碼字段指明了丢棄資料報的原因。

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-14 參數問題封包

● 代碼為0時表示在首部的某個字段中有差錯或二義性。指針字段值指向有問題的位元組。 ● 代碼為1時表示缺少所需的選項部分。這種情況下不使用指針。5.重定向 為了提高效率,主機不參與路由選擇更新過程,是以,主機可能會把某資料報發送給一個錯誤的路由器。這時,收到這個資料報的路由器會把資料轉發給正确的路由器,同時向主機發送重定向封包,告訴主機正确路由器的位址。下圖給出了重定向封包的格式。

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

圖4-15 改變路由封包

七、ICMP校驗和 ICMP的校驗和的計算覆寫了整個ICMP封包(首部和資料)。1.校驗和的計算 發送端按以下步驟使用反碼算術運算計算校驗和: (1)把校驗和字段置為零。 (2)把封包按照16位長度分段,使用反碼算術運算計算所有分段之和。 (3)把得到的和求反碼,得到校驗和。 (4)把校驗和存儲在校驗和字段中。2.校驗和的測試 接收端按以下步驟使用反碼算術運算來測試校驗和的正确性: (1)把封包按照16位長度分段,使用反碼算術運算計算所有分段之和。 (2)把得到的和求反碼。 (3)若結果是全0,則接受這個封包;否則就拒絕這個封包。

【實驗步驟】

練習1 運作Ping指令

各主機打開工具區的"拓撲驗證工具",選擇相應的網絡結構,配置網卡後,進行拓撲驗證,如果通過拓撲驗證,關閉工具繼續進行實驗,如果沒有通過,請檢查網絡連接配接。

本練習将主機A、B、C、D、E、F作為一組進行實驗。 實驗開始前主機B首先執行指令"staticroute_config"啟動靜态路由。

1.主機B、E、F啟動協定分析器,打開捕獲視窗進行資料捕獲并設定過濾條件(提取 ICMP協定)。

2.主機A ping 主機E(172.16.0.2)。 主機C ping 主機F(172.16.0.3)。3.主機B、E、F停止捕獲資料,察看捕獲到的資料,并回答以下問題: ● 捕獲的封包對應的"類型"和"代碼"字段分别是什麼? ● 分析封包中的哪些字段保證了回應要求封包和回應答覆封包的一一對應?

練習2 ICMP查詢封包

本練習将主機A、B、C、D、E、F作為一組進行實驗。

1.主機A啟動協定編輯器,編輯一個ICMP時間戳請求資料幀發送給主機C(172.16.1.3)。

MAC層: 目的MAC位址:C的MAC位址。 源MAC位址:A的MAC位址。 協定類型或資料長度:0800。 IP層: 總長度:包含IP層和ICMP層長度。 高層協定類型:1。 校驗和:在其它字段填充完畢後計算并填充。 源IP位址:A的IP位址。 目的IP位址:C的IP位址。 ICMP層: 類型:13。 代碼字段:0。 校驗和:在ICMP層其它字段填充完畢後,計算并填充。 其它字段使用預設值。2.主機C啟動協定分析器進行資料捕獲,并設定過濾條件(提取ICMP協定)。3.主機A發送已編輯好的資料幀。4.主機C停止捕獲資料。察看主機C捕獲到的資料,并填寫下表:

表4-2 實驗結果

icmp協定_電腦網絡知識:Internet控制封包協定(ICMP)的學習

【思考問題】

1.能否根據時間戳計算出目前的時間?2.使用時間戳得到的時間比從系統得到的時間有什麼好處?

練習3 ICMP差錯封包

本練習将主機A、B、C、D、E、F作為一組進行實驗。1.目的端不可達 (1)主機A、B、C、D、E、F啟動協定分析器捕獲資料,并設定過濾條件(提取ICMP)。 (2)主機A、C、D、E、F ping 172.16.2.10(不存在的IP位址)。 (3)主機A、B、C、D、E、F停止捕獲資料。察看捕獲到的資料,并回答以下問題: ● 捕獲到的是哪一種目的端不可達封包?2.逾時

(1)主機A、C、D分别啟動協定編輯器,編寫一個發送給主機F(172.16.0.3)的ICMP資料幀。其中:

MAC層: 目的MAC位址:主機B的MAC位址(172.16.1.1接口的MAC)。 源MAC位址:本機的MAC位址。 協定類型或資料長度:0800。 IP層: 總長度:包含IP層和ICMP層長度。 生存時間(TTL):0。 高層協定類型:1。 校驗和:在其它字段填充完畢後,計算并填充。 源IP位址:本機的IP位址。 目的IP位址:F的IP位址。 ICMP層: 類型:8。 代碼字段:0。 校驗和:在ICMP其它字段填充完畢後,計算并填充。 其它字段使用預設值。

(2)主機E、F分别啟動協定編輯器,編寫一個發送給主機D(172.16.1.4)的ICMP資料幀。其中:

MAC層: 目的MAC位址:主機B的MAC位址(172.16.0.1接口的MAC)。 源MAC位址:本機的MAC位址。 協定類型或資料長度:0800。 IP層: 總長度:包含IP層和ICMP層長度。 TTL:0。 高層協定類型:1。 校驗和:在其它字段填充完畢後,計算并填充。 源IP位址:本機的IP位址。 目的IP位址:D的IP位址。 ICMP層: 類型:8。 代碼字段:0。 校驗和:在ICMP其它字段填充完畢後,計算并填充。 其它字段使用預設值。

(3)主機B啟動協定分析器,網卡b1(172.16.1.1)、網卡b2(172.16.0.1)分别捕獲資料,并設定過濾條件(提取ICMP協定)。

(4)主機A、C、D、E、F各自發送已編輯好的資料幀。

(5)主機B停止捕獲資料,察看并分析捕獲到的資料。

(6)主機B在指令行方式下輸入recover_config指令,停止靜态路由服務。

【思考問題】

1.為什麼要設定TTL字段?2.為什麼要限制由失效的ICMP差錯封包再産生一個ICMP封包?

3.什麼樣的ICMP封包是由路由器發送出的?什麼樣的ICMP封包是由目的主機發送出的?

4.主機A向主機B發送資料報,主機B從未收到該資料報,而主機A也從未收到出問題的通知。試給出可能發生情況的兩種不同解釋。

繼續閱讀