TCP/IP-ICMP

7
資策會80期網路工程師養成班 TCP/IP STACK ICMP 報告 指導老師:戴致禮 老師 員:傅桂鈞 同學

description

TCP/IP reports-ICMP

Transcript of TCP/IP-ICMP

Page 1: TCP/IP-ICMP

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

TCP/IP STACK

ICMP 報告

指導老師:戴致禮 老師

學 員:傅桂鈞 同學

Page 2: TCP/IP-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 的接收端欄位。因此;資訊訊息會

傳送給要持有要求訊息的標的節點。

Page 3: TCP/IP-ICMP

通知 ICMP的錯誤的訊息裡頭,有無法到達、傳送端抑制、轉址、時間超過、

參數問題等。在資料訊息裡頭,有回覆要求/要求回覆、時間戳記請求和時間戳

記應答、資訊請求和資訊應答、位址遮罩請求和位址遮罩應答。各個訊息依照協

定 TYPE 來識別。

以下為 ICMP 的格式和 Type 表:

TYPE 8 要求封包

TYPE 0 回應封包

Page 4: TCP/IP-ICMP

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 主機無法到達,因為他的優先權被停止

Page 5: TCP/IP-ICMP

ICMP 常見的工具程式:

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

2.TRACERT 知道本機至目的端主機會經過哪些路由時。

3.PATHPING可視為上述 2程式的合體,不但可以知道從本機至目的端主機會經

過哪些路由,還可以測試中間每個點的連線能力是否正常。

在命令提示字元輸入 ping tw.yahoo.com 後擷取到的封包

1.TYPE 8 要求回覆(Echo Request)

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

Page 6: TCP/IP-ICMP

用 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

Page 7: TCP/IP-ICMP

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

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