Download presentation
Presentation is loading. Please wait.
1
Internet Control Message Protocol (ICMP)
靜宜大學資工系 蔡奇偉 副教授 2006
2
大綱 簡介 訊息種類 訊息格式 錯誤報告 QUERY
3
簡介 ICMP 是 IP 的搭擋,用來彌補上述不足之處。 IP 協定沒有錯誤回報或改正的機制,譬如:
當路由器必須把找不到路徑的資料包丟棄,要怎麼辦? 封包超過存活時間必須丟棄時要怎麼處理? 若目的端電腦無法在預設的時間內收到所有的資料包分段,而要將之丟棄,之後要如何處理? IP 協定沒有主機與管理詢問的機制,譬如: 一台電腦有時需要知道其他電腦或路由器是否開著? 網路管理者常也需要從一台電腦或路由器獲得一些訊息。 ICMP 是 IP 的搭擋,用來彌補上述不足之處。
4
Figure 9-1 ICMP 在網路層的位置
5
Figure 9-2 雖然 ICMP 本身是網路層的協定,不過其訊息並非直接送到資料連接層,而是先被包裝在 IP 資料包裡,再送到資料連接層(如下圖所示)。若 IP 資料包標頭中的協定欄為 1,即表示該封包是 ICMP 訊息。
6
訊息種類 ICMP 訊息分為兩大類:錯誤報告訊息 (error-reporting message) 及詢問訊息 (query message) 。
7
訊息格式 Type (類別欄):定義訊息之種類。 Code (編碼欄):定義特定訊息產生之原因。
Checksum :以 16 位元為分割單位的整個訊息之檢查合。 若是錯誤訊息,則資料區攜帶的資訊,可用來找出發生錯誤的封包。若是詢問訊息,則資料區攜帶詢問的相關資訊
8
ICMP 訊息 種類 類別碼 訊息 錯誤報告訊息 3 無法到達且的地 4 來源端放慢 11 時間超過 12 參數問題 5 轉址 詢問訊息
8 或 0 回應要求或回應回答 13 或 14 時間印要求及回答 17 或 18 位址遮罩要求及回答 10 或 9 路由器詢問與宣告
9
錯誤回報 ICMP 最主要的任務之一為回報發生的錯誤。ICMP 並不改正錯誤,它只是回報而已。
ICMP 將錯誤訊息送回原發出者,這是因為在資料包中關於路徑的資訊只有來源端與目的端的位址, ICMP 使用來源端的 IP 位址,將錯誤訊息送回原來資料包的發出者。
10
Figure 9-5 ICMP總共有以下五種錯誤訊息: 無法到達目的地 來源放慢 時間超過 參數問題 轉址
11
以下是 ICMP 錯誤訊息的相關重點。 不會針對攜帶 ICMP 錯誤訊息的資料包再產生一個 ICMP 錯誤訊息。 對非第一個分段的資料包,不會產生 ICMP 錯誤訊息。 對使用群播位址的資料包不會產生 ICMP 錯誤訊息。 對於使用特別位址如 或 的資料包不會產生 ICMP 的錯誤訊息。
12
Figure 9-6 錯誤訊息資料欄之內容 所有的錯誤訊息都包括一個資料區,該資料區包含原來資料包的標頭,及原資料包中資料欄的前面8個位元組。原來資料包的標頭是給原送出者了解哪個資料包出現問題,而資料欄前面 8 個位元組的資料提供 UDP 或 TCP 的埠號及 TCP 的序號。這些訊息給原送出端以告知其 TCP 或 UDP 協定錯誤發生的情形,ICMP 所建立的錯誤訊息封包被包在 IP 資料包內 (如下圖所示)。
13
無法到達目的地 當路由器無法傳送某個資料包,或主機無法傳送某個資料包,該資料包即被丟棄。之後這台路由器或主機就送出一個目的地無法到達的訊息給來源主機。下圖展示無法到達目的地訊息的格式,其中的代碼欄說明此資料包被丟掉的原因。
14
代碼 原因 網路無法到達。可能是因為硬體宥題,此類訊息只由路由器產生。 1 主機無法到達。可能是因為硬體問題,此類訊息只由路由器產生。 2 協定無法到達。IP 資料包所攜帶的資料是要給 UDP、TCP 或 OSPF 等上層協定。如果目的主機接收到一個資料包要送給 TCP 協定,但當時沒有在跑 TCP 協定,碰到這樣的情況,就送代碼 2 的訊息。 (這種訊息只會由目的地主機產生) 3 目的埠無法到達。代表資料包的目的應用程式在當時沒有在執行。 4 需要做分段才能傳送,但是該資料包的不需分段欄卻被設定。換言之,資料包送出者設定該資料包不可做分段,但是不做分段卻是無法送出。 5 來源端路徑指定無法辦到。亦即在來源端路徑選項中的某幾個路由器無法經過。 6 目的地網路不明。這與代碼 0 不同。代碼 0 表示路由器知道目的地網路存在,但當時卻無法到達。而代碼 6 代表路由器根本沒有目的網路的相關資料。
15
代碼 原因 7 目的主機不明。與代碼 1 不同,代碼 1 表示路由器知道目的主機的存在,但當時無法送達。代碼 7 表示路由器不知目的主機的存在。 8 來源主機被隔離。 9 與目的地網路的通訊被管理者禁止。 10 與目的主機的通訊被管理者禁止。 11 對於所指定的服務其目的網路無法到達。與代碼 0 不同,在此如果來源端要求可用的服務,路由器就可以傳送這個資料包。 12 對於所指定的服務其目的主機無法到達。與代碼 1 不同,在此如果來源端要求可用的服務,路由器就可以傳送這個資料包。 13 主機無法到達,因為管理者過濾掉該資料包。 14 主機無法到達,因為違反該主機的優先權設定。此錯誤訊息由路由器送出,表示到這個目的地,資料包所要求的優先權不被允許。 15 主機無法到達,因為它的優先權被停止。這種訊息的產生是由於管理者設定一些網路運作的優先權,而被送來的資料包的優先權比這個還小。
16
路由器無法完全偵測到所有妨礙封包傳送的問題。
即使路由器沒有回報無法到達目的地的訊息,這並不意味原先送來的資料包已經完成傳送。譬如,資料包由乙太網路傳送,路由器根本無法知道資料包是否送到 7 目的主機或者是下一個路由器,因為乙太網路沒有提供任何回應的機制。 路由器無法完全偵測到所有妨礙封包傳送的問題。
17
來源端放慢 (Source Quench) IP 協定為一非預接式協定。產生資料包的來源主機、轉送的路由器、及處理資料包的目的主機彼此問沒有溝通,也就是缺少一種流量控制 (flow control) 的方法。IP 本身並沒有內建流量管制的機制,因而在運作上會產生壅塞的問題,來源端無法得知是否路由器或目的主機已經接到太多資料包而無法消化,來源端也不知道是否自己產生資料包的速度,快過於路由器所能傳送或目的主機所能處理。 缺乏流量控制會讓路由器或目的主機產生壅塞現象。路由器使用佇列來儲存等待被傳送的資料包,主機也是使用佇列來儲存等待被處置的資料包。若收到的資料包遠快於它們所能傳送或處理的速度,就會讓佇列滿出來,在這種情況下,路由器或主機沒有其他選擇,只好丟掉若干資料包。
18
ICMP 的來源端放慢訊息是用來作為 IP 流量管制的一種方法,當路由器或主機出現壅塞而丟掉某個資料包時,它們就送出一個來源端放慢的訊息給該資料包的送出者。這個訊息有兩個目的,第一,它告知送出者該資料包已被丟掉。第二,它警告來源端在傳輸的網路上出現壅塞,來源端應該放慢送出的速度。來源端放慢訊息的格式如下圖。
19
發生壅塞的路由器或主機應該對每個被丟棄的資料包,分別送出一個來源端放慢訊息給來源端主機。
沒有機制可以告知來源端壅塞情況是否已改善,而恢復其原來送出的速度,來源端必須繼續降低速度直到不再收到放慢訊息。 壅塞可能是由一對一或是多對一通訊的結果而產生。 以一對一來講,一台高速的主機,其產生資料包的速度可能遠快於路由器或目的主機所能處理,這種情況,來源端放慢訊息就很有用,可以讓這個來源端慢下來。 在多對一通訊的情況下,有很多個來源端產生資料包給路由器或目的主機,這樣,每個來源端送資料包的速度可能不同,有的快有的慢,這種情況來源端放慢訊息可能沒有什麼幫助,因為路由器或主機沒有線索知道哪個來源端要為壅塞負責。有可能被丟掉的資料包是來自於一個較慢的來源端,而不是真正讓壅塞發生的那一個。
20
時間超過 當一台路由器接收到一個存活時間為 0 的資料包時,路由器就丟掉這個資料包並送出一個時間超過的訊息給原來的送出端
如果目的主機在設定的時間內,沒有收到全部的分段,則目的主機就丟掉已收到的分段,並送出一個時間超過的訊息給原來的傳送者。
21
Figure 9-9 時間超過訊息的格式 代碼 0 用來表示資料包是由於存活時間為 0 被路由器丟棄的情況。代碼 1 代表當有一些分段無法在設定時間內到達而被丟棄的情況。
22
參數問題 (Parameter Problem)
一個資料包的標頭部分若有涵義不清的數值,當它在網際網路上旅行時可能會產生嚴重的問題。如果路由器或目的主機發現資料包的任何欄位有涵義不清或數值不見,路由器或目的主機就會丟棄這個問題資料包,並送出一個參數有問題的訊息給原發送者。
23
Figure 9-10 參數有問題的訊息格式 代碼 0 : 代表在標頭中某個欄位出現錯誤或含義不清。這種狀況出現時,上圖中的 Pointer 欄,就會指到出現問題的個位元組。譬如指標為 0,則表示標頭的第一個位元組不是一個有效值。 代碼 1 : 選項的描述不完全,若為代碼 1,指標沒有作用:
24
轉址 (Redirection) 路由器或主機都必須有路徑表以找出下一個路由器的位址。可是為了有效率,主機是不參與動態的路徑更新程序,這是因為在網際網路上的主機要比路由器來得多。如果動態更新主機的路徑表,會產生讓人無法接受的交通量,因此主機通常使用靜態的更新方式。當一台主機開起來時,其路徑表只有幾個條目,通常它只知道一台路由器的 IP 位址,即預設路由器,因為這樣,這一台主機可能將送往另一個網路的資料包送到一台錯誤的路由器。如果是這樣,收到這個資料包的路由器會將此資料包,傳送到正確的路由器。而且為了更新送出主機的路徑表,它會送出一個轉址的訊息給這台主機。 雖然轉址訊息被視為一種錯誤報告訊息,它與其他錯誤訊息不同。路由器並沒有將收到的資料包丟掉,而是將它送到正確的路由器。 此外,轉向訊息由路由器送給在同一區域網路上的一台主機。
25
Figure 9-11 轉址的概念 主機 A 要送一個資料包給主機 B,路由器 R2 為最適合的選擇,但是主機 A 並沒有選路由器 R2,反而把資料包送到 Rl,而 R1 在檢查路徑表後,發現剛才的那個資料包應該到 R2 才對,所以 R1 將封包送到 R2,並且送出一個轉址的訊息給主機 A。主機 A 就可以更新其路徑表。
26
轉址訊息的格式 代碼 0 : 特定網路路徑的轉址。 代碼 1 : 特定主機路徑的轉址。 代碼 2 : 指定服務種類的特定網路路徑轉址。
Figure 9-12 轉址訊息的格式 代碼 0 : 特定網路路徑的轉址。 代碼 1 : 特定主機路徑的轉址。 代碼 2 : 指定服務種類的特定網路路徑轉址。 代碼 3 : 指定服務種類的特定主機路徑轉址。
27
詢問 (Query) 除了錯誤回報外, ICMP 也可以診斷某些網路問題,這是藉由詢問訊息來完成。詢問訊息有下圖所示的四對。這些詢問訊息是由一個節點送出,然後目的節點以特定格式加以回應。
28
回應要求與回答 (Echo Request and Reply)
回應要求 (echo-request) 訊息與回應回答訊息 (echo-reply) 是設計來做診斷用的。網路管理者用這一對訊息來辨識網路問題。回應要求與回應回答一同決定是否兩個系統 (主機或路由器) 可以彼此通訊。 一台電腦或路由器可以送出一回應要求的訊息給另一台電腦或路由器,收到回應要求的電腦或路由器就建立一個回應回答的訊息,並將之送給原送出者。
29
這一對訊息可用來檢查 IP 層是否能夠通訊,因為 ICMP 訊息被封裝在 IP 資料包裡,能夠收到回應要求且送出回應回答,證明送出者與接收者的 IP 協定可以使用 IP 資料包來進行通訊。同時也證明在路徑上的路由器可以接收、處理、及前送 IP 資料包。 主機也可以用回應要求與回應回答來檢查是否可以到達另一台電腦。以使用者看,可藉著執行 ping 指令來達成。現在大部分的系統都有提供 ping 指令,以產生一連串的回應要求或回應回答的訊息,獲得封包傳送的相關統計資訊。
30
Figure 9-14 回應要求訊息與回應回答訊息 回應要求與回應回答搭配使用,可以驗證一個節點是否功能正常,回應要求訊息送給被則試的節點,回應節點必須在回應回答訊息內完全重複回應要求訊息中的選項資料。下圖展示這兩種訊息的格式: 訊息中的辨識碼 (identifier) 及序號,協定並沒有正式定義它們的用途,送出者可以任意使用。譬如,辨識碼可以用來定義一組問題,序號可用來追蹤已送出的要求訊息。通常辨識碼就是送出要求訊息的程序號碼 (process ID) 。
31
時間印要求與回答 (Timestamp Request and Reply)
兩台機器可以用時間印要求與時間印回答這兩個訊息來決定 IP 資料包在兩者間來回旅行所需的時間,也可以用來同步兩者的時間。這兩種訊息的格式展示在下圖。
32
時間印欄位為 32 位元長,每欄代表的時間是以千分之一秒為單位,以國際時間午夜為零時 (注意用 32 位元可以代表數字 0 到 4,294,967,295,但是此處的時間印不會超過 86,400,000 = 24x60x60x I000)。 來源端建立時間印要求訊息,並將送出訊息時的國際標準時間填入出發時間印 (original timestamp) 這個欄位內,其他兩個時間印欄位填入 0。 目的端建立時間印回答訊息,目的端將要求訊息中的出發時間印複製到回答訊息的相同欄位內。目的端將接收到要求訊息時的國際標準時間填入接收時間印 (receive timestamp) 欄內。最後目的端將回答訊息送出時的國際標準時間填入傳送時間印 (transmit timestamp) 欄。
33
去程時間 = 接收時間印 – 出發時間印 回程時間 = 封包到達的時間 – 傳送時間印 來回時間 = 去程時間 + 回程時間
用時間印要求訊息與時間印回答訊息,可以計算單程或來回雙程所需的時間。公式如下: 去程時間 = 接收時間印 – 出發時間印 回程時間 = 封包到達的時間 – 傳送時間印 來回時間 = 去程時間 + 回程時間 要注意的是去程與回程時間,只有在來源端與目的端機器時鐘時間同步的情況下才正確。可是來回時間即使在兩個時鐘不同步的情況下也是正確的。這是因為兩個時鐘的時間在計算來回時間時用了兩次,於是抵銷不同步的時間差。
34
範例 給予以下的資訊: 出發時間印 : 46 毫秒 接收時間印 : 59 毫秒 傳送時間印 : 60 毫秒 封包到達的時間 : 67 毫秒
我們可以計算出來回時間為 20 毫秒: 去程時間 = 59 – 46 = 13 毫秒 回程時間 = 67 – 60 = 7 毫秒 來回時間 = = 20 毫秒
35
範例 時間差 = 接收時間印 – (出發時間印 + 單程時間)
假定單程時間可求出,則時間印要求與時間印回答訊息可以用底下的公式來算出時間差,據此同步雙方機器的時間 : 時間差 = 接收時間印 – (出發時間印 + 單程時間) 範例 假定前一例的去程時間與回程時間相同,則單程時間為來回時間之半,即 20 / 2 = 10 毫秒。因此,時間差為: 59 – ( ) = 3 毫秒
36
位址遮罩要求與回答 (Address Mask Request and Reply)
Figure 9-16 位址遮罩要求與回答 (Address Mask Request and Reply) 為了獲得遮罩,一台主機可送一個位址遮罩要求訊息給 LAN 上的路由器。如果該主機知道路由器的位址,它將要求訊息直接送到路由器,如果不知道路由器的位址,它就廣播這個耍求訊息,路由器在接收到位址遮罩要求訊息後,即回應一個位址遮罩回答訊息,藉以提供遮罩給要求的主機,好讓它去找子網位址。
37
遮單要求訊息與遮罩回答訊息的格式 以要求訊息來講,位址遮罩欄全填 0。當路由器送位址遮罩回答訊息給要求主機時,這個欄位就填入遮罩值。
38
路由器詢問與宣告 (Router Solicitation and Advertisement)
這對詢問訊息可以用來找出在同一區域網路的路由器。首先,主機可以廣播 (或群播) 一個路由器詢問訊息,收到該訊息的所有路由器用路由器宣告訊息,廣播它們的路徑訊息出去。即使沒有電腦來詢問,路由器也可以定期的送出路由器宣告訊息,當一台路由器送出宣告訊息,它不僅告知自己的存在,同時也宣告自己所知網路上所有存在的路由器。
39
Figure 9-17 路由器詢問訊息的格式
40
Figure 9-18 路由器宣告訊息的格式 格式中的存活時間記載訊息的有效的時間,以秒為單位。在宣告訊息中,每個路由器的條目包含至少兩個欄位,分別是路由器位址及位址優先等級。位址優先等級定義該路由器的等級,可以用來選預設的路由器。如果優先等級為 0,該路由器被視為預設路由器。如果優先等級為 ,則該路由器不可以被選為預設路由器。
Similar presentations