Page 1

資策會80期網路工程師養成班

TCP/IP STACK ICMP 報告

指導老師:戴致禮 老師 學 員:傅桂鈞 同學


ICMP (Internet Control Message Protocol) IP 所提供的服務稱為 Best Effort 型服務。在這當中,封包的遺失、延遲、 無順序顛倒的配信是有道理的。對此 IP 所需有的功能只有使 CheckSum,檢查封 包在傳送中有沒有破損。另外,即使知道 IP 發覺封包有破損時也幫不上忙。因 為不知道封包哪裡破損,所以對傳送端也無法告知有誤,對接收端也無法傳送封 包。結局是 IP 只能丟棄封包。 封包破損時,IP 沒有判定哪裡破損了,因此除了丟棄之外別無他法。同時, 這件事傳送端和接收端都無法得知。但是在某些特定狀況下,即使封包沒有破 損,因為網路的因素而導致無法使封包傳至接收端。這時,因為傳送端及接收端 都已確實知道,所以只要有方法,就有可能告知。這種狀況下,IP 就是利用 ICMP 的協定。 ICMP 和 IP 是相互依存的,IP 傳送有誤會使用 ICMP,而 ICMP 再傳送訊息時 則會使用 IP。換句話說,ICMP 是透過 IP 封包坐封裝後傳送。ICMP 的封裝如以 下(圖 1):

在 ICMP 中定義通知 IP 封包發生錯誤的訊息,和一些資料訊息。告知 IP 封 包中發生了怎樣的錯誤以訊息類型的方式傳達給此 IP 封包的傳送端。在這時 候,該 IP 封包的傳送端欄位會被複製到 ICMP 的接收端欄位。因此;資訊訊息會 傳送給要持有要求訊息的標的節點。


通知 ICMP 的錯誤的訊息裡頭,有無法到達、傳送端抑制、轉址、時間超過、 參數問題等。在資料訊息裡頭,有回覆要求/要求回覆、時間戳記請求和時間戳 記應答、資訊請求和資訊應答、位址遮罩請求和位址遮罩應答。各個訊息依照協 定 TYPE 來識別。

以下為 ICMP 的格式和 Type 表:

TYPE 8 要求封包

TYPE 0 回應封包


Identifier 欄位 作為識別之用,由 Echo Request 來源端裝置的程式所決定,所回應的 Echo Reply 的 Identifier 欄位值, 必須與對應的 Echo Request 的 Identifier 欄位值相同。

Sequence Number 欄位 用來記錄序號,由 Echo Request 來源端裝置的程式所決定,所回應 Echo Reply 的 Sequence Number 欄位值必須與收到的 Echo Request 相同。

Checksum欄位: 檢查 ICMP header 跟 data 的 checksum。

在 ICMP 封包中的 TYPE 為上面表格中 3 (Destination Unreachable)其 CODE 的欄位會帶出 15 種代碼來告訴我們無法送達目的地的原因,下面為其代 碼及意義。 CODE

0

網路無法到達

1

主機無法到達

2

通訊協定無法到達

3

目的埠無法到達

4

需要做分段才能傳送,但是該資料包的 DF(不要分段)卻被設定

5

來源端路徑無法被接受

6

目的端網路不明

7

目的端主機不明

8

來源端主機被隔離

9

與目的端網路的通訊被管理者禁止

10

與目的端主機的通訊被管理者禁止

11

對於所指定的服務其目的端網路無法到達

12

對於所指定的服務其目的端主機無法到達

13

主機無法到達,因為管理者過濾掉該資料包

14

主機無法到達,因為違反該主機的優先權設定

15

主機無法到達,因為他的優先權被停止


ICMP 常見的工具程式: 1.PING

測試本機與目的端主機的連線能力是否正常時。

2.TRACERT 知道本機至目的端主機會經過哪些路由時。 3.PATHPING 可視為上述 2 程式的合體,不但可以知道從本機至目的端主機會經 過哪些路由,還可以測試中間每個點的連線能力是否正常。

在命令提示字元輸入 ping tw.yahoo.com 後擷取到的封包 1.TYPE 8 要求回覆(Echo Request)

2.TYPE 0 回覆要求(Echo Reply)


用 Tracert 指令找出至目的端路由器後擷取到的封包的流程:

1.TRACERT 指令是如何運用 ICMP,來讓我們知道本機至目的端主機會經過 哪些路由? 利用逐次增加 TTL 值的方式!來源端第一個送出去的 ICMP 封包中,其 TTL 值設定為 1,所以當他走到第一個路由器的時候,TTL 減為 0,路由器 就會回傳 TYPE 為 11(Time Exceed)的 ICMP 封包給來源端,因此來源端就 知道的 1 個路由的位置了。第二個被送出去的路由 TTL 值會被設定為 2, 來獲得的 2 個路由的位置。以此類推,用 TTL 值逐次加 1 的方式送出封包, 直到抵達目的端主機為止。

2.使用 tracert 指令到 168.95.94.50


3.先發出存活時間為 1 的封包來得知第一個路由器位置(192.168.1.1)

4.第二次再發 TTL+1(192.168.168.254)

TCP/IP-ICMP  

TCP/IP reports-ICMP

Read more
Read more
Similar to
Popular now
Just for you