tft每日頭條

 > 科技

 > icmp為什麼是網絡層協議

icmp為什麼是網絡層協議

科技 更新时间:2024-12-01 18:32:51

一、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控制報文協議)1

圖4-1 ICMP報文的一般格式

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

ICMP報文封裝在IP數據報中,具體的封裝方法如下圖所示:

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)2

圖4-2 ICMP封裝

四、ICMP報文類型

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

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)3

圖4-3 ICMP報文類型

差錯報文報告路由器或主機在處理IP數據報時遇到的問題。 查詢報文是成對出現的,它幫助主機或網絡管理員從一個路由器或另一個主機得到特定的信息。例如,主機使用ICMP回顯請求和回顯應答報文發現它們的鄰站。下表列出了每一類ICMP報文。

表4-1 ICMP報文

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)4

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

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)5

圖4-4 查詢報文

1.回顯請求和應答

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

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)6

圖4-5 ICMP回顯請求和應答報文

2.時間戳請求和應答

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

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)7

圖4-6 時間戳請求和應答報文

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

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)8

圖4-7 地址掩碼請求和應答報文

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

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)9

圖4-8 路由器詢問報文

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

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)10

圖4-9 路由器通告報文

六、ICMP差錯報文

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

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)11

圖4-10 差錯報文

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

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

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)12

圖4-11 目的端不可達報文

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

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)13

圖4-12 源點抑制報文

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

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)14

圖4-13 超時報文

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

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)15

圖4-14 參數問題報文

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

icmp為什麼是網絡層協議(電腦網絡知識Internet控制報文協議)16

圖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控制報文協議)17

【思考問題】

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也從未收到出問題的通知。試給出可能發生情況的兩種不同解釋。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved