第 10 章 ARP 與 ICMP.

Slides:



Advertisements
Similar presentations
晏宏斌工程师 2014 年 9 月 “ 宽带网络校校通 ” 校园网建设要点和基础维护方法. – 中小学校园网络建设要点 – 常见网络故障处理基本方法 目 录目 录.
Advertisements

第 10-1 章 IP路由(選徑協定簡介) IP 路由、Network Layer Addressing
LED CUBE 預期規劃.
第 8 章 IP 基礎與定址.
DP DHCP原理 ISSUE 1.0.
数据转发过程.
NetGuru 創新 網路通訊實驗教學解決方案 PART I TCP/IP通訊協定深入剖析/以NetGuru實作
校園網路管理實電務 電子計算機中心 謝進利.
無線寬頻分享器設定範例 銜接硬體線路 推斷無線基地台的IP 設定無線基地台 相關觀念解釋.
實驗8 ICMP協定分析 實驗目的 明瞭ICMP(Internet Control Message Protocol;網際網路控制訊息協定)的工作原理 解析ICMP協定下封包資料傳送的格式。
第2章 網路模型運作、ICMP與ARP協定.
TCP協定 (傳輸層).
第六章 差错与控制报文 (ICMP).
第 6 章 通訊協定 UDP.
第一篇 Unix/Linux 操作介面 第 1 章 Unix/Linux 系統概論 第 2 章 開始使用 Unix/Linux
JDK 安裝教學 (for Win7) Soochow University
Chapter 09 ARP 與 ICMP.
Internet Protocol (IP)
32 bit destination IP address
第二章 Linux基本指令與工具操作 LINUX 按圖施工手冊.
Wireless and Mobile Multimedia Networks
ARP, RARP & ICMP.
HiNet 光世代非固定制 用戶端IPv6設定方式說明
在NS-2上模擬多個FTP連線,觀察頻寬的變化
第 6 章 通訊協定 TCP.
第 2 章 TCP / IP 簡介.
SQL Stored Procedure SQL 預存程序.
Echo Server/Client Speaker:Fang.
TCP/IP介紹 講師:陳育良 2018/12/28.
App Inventor2呼叫PHP存取MySQL
校園網路使用及故障排除 南投區網中心與NCNU TWAREN GigaPOPs 合辦之資訊安全研討會議
第七讲 网际协议IP.
檔案與磁碟的基本介紹.
系統設定 IE8相容性檢視
FTP檔案上傳下載 實務與運用.
IP, Port, Router and Port forward
Chap3 Linked List 鏈結串列.
第十三章 TCP/IP 與 Internet 網路連結技術
網路安全技術 OSI七層 學生:A 郭瀝婷 指導教授:梁明章.
Topic Introduction—RMI
Firewall-pfsense Mars Su
Partial-Reliable TCP Protocol over Sensor Networks
第 19 章 XML記憶體執行模式.
台灣首府大學 休閒資訊管理學系 何日新老師 講授
網路工具運用 講師:鍾詩蘋.
Definition of Trace Function
第 10 章 IP 路由.
挑戰C++程式語言 ──第8章 進一步談字元與字串
實驗目的: 明瞭ARP(Address Resolution Protocol;位址解析協定)的工作原理 解析ARP協定下封包資料傳送的格式
指導老師:溫翔安 組員:溫允中4970E011 李雅俐4970E025 蕭積遠4970E026 陳欣暉4970E086
SOCKET( ).
探測工具:NetCat.
MicroSim pspice.
Video 影像 (VideoPlayer 影像播放器、Camcorder 錄影機) 靜宜大學資管系 楊子青
流程控制:Switch-Case 94學年度第一學期‧資訊教育 東海大學物理系.
MiRanda Java Interface v1.0的使用方法
編輯網頁可用那些應用程式? 記事本 Word FrontPage Dreamweaver.
基本指令.
IP Layer Basics, Firewall, VPN, and NAT
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
Wireshark Lab: ICMP Computer Networking: A Topdown
Cloud Operating System - Unit 03: 雲端平台建構實驗
網路安全管理個人報告 封包偽裝攻擊 A 魏兆言 2007/11/30.
ARP攻擊 A 吳峻誠.
網際網路原理 網際網路源起與發展歷史 1968 ARPANET 1973 TCP/IP協定 1976 乙太網路,促成LAN的發展 … DNS
網路安全技術期末報告 ICMP協定 學生 : A 黃昱儒.
IP Layer Basics & Firewall
NFC (近場通訊, Near Field Communication) 靜宜大學資管系 楊子青
Department of Computer Information Science, NCTU
第 4 章 网络层.
Presentation transcript:

第 10 章 ARP 與 ICMP

本章提要 10-1 ARP 簡介 10-2 ARP 封包格式 10-3 ARP 工具程式 10-4 ICMP 簡介

前言 在 TCP/IP 協定組合中, 屬於網路層的協定有 IP、ARP 與 ICMP 等 3 種。其中最主要的當然是 IP, 至於 ARP 與 ICMP 一般皆視為輔助 IP 的協定。 本章將依序介紹 ARP 與 ICMP 這 2 個協定, 以及相關的應用。

10-1 ARP 簡介 讀者還記得第 4 章介紹的 MAC 位址嗎?讓我們複習一下鏈結層與網路層位址的特性: 網路層在傳遞封包時, 必須利用網路層位址 (例如:IP 位址) 來識別目的裝置。

ARP 簡介 從上述特性我們可以得到以下推論:當網路層封包要封裝為鏈結層封包之前,必須先取得目的裝置的 MAC 位址。以 IP 為例, 便是將取得 MAC 位址的工作交由 ARP (Address Resolution Protocol, 位址解析協定)來執行。

ARP 簡介 若以 OSI 模型來說明 ARP 的功能, 便是利用網路層位址, 來取得對應的鏈結層位址。換言之, 如果網路層使用 IP, 鏈結層使用乙太網路, 當我們知道某項裝置的 IP 位址時, 便可利用 ARP 來取得對應的乙太網路 MAC 位址。 由於 MAC 位址是區域網路內傳送封包所需的識別資訊, 因此, 在傳送 IP 封包之前, 必然會使用 ARP 這個協定。

10-1-1 ARP 運作方式 以 IP 而言, 網路上每部裝置的 IP 與 MAC 位址的對應關係, 並未集中記錄在某個資料庫, 因此, 當 ARP 欲取得某裝置的 MAC 位址時, 必須直接向該裝置詢問。 ARP 運作的方式相當簡單, 整個過程是由 ARP 要求 (ARP Request) 與 ARP答覆 (ARP Reply) 兩種封包所組成。

ARP 運作方式 為了方便說明, 我們假設有 A、B 兩部電腦。A 電腦已經知道 B 電腦的 IP 位址, 現在要傳送 IP 封包給 B 電腦, 因此必須先利用 ARP 取得 B 電腦的 MAC 位址。

ARP 要求 A 電腦廣播 ARP 要求封包給區域網路上所有的電腦。

ARP 要求 ARP 要求封包在鏈結層是屬於廣播封包 (亦即乙太網路廣播封包), 因此區域網路上的每一部電腦都會處理此一封包。A 電腦所送出的 ARP 要求封包除了記錄所要解析的 IP 位址 (亦即 B 電腦的 IP 位址) 外, 也會包含 A 電腦本身的 IP 位址與 MAC 位址。

ARP 答覆 區域網路內的所有電腦都會收到 ARP 要求封包, 並與本身的 IP 位址比對, 判斷自己是否為要求解析的對象。以上例而言, B 電腦為 ARP 要求的解析對象, 因此只有 B 電腦會送出回應的 ARP 答覆封包。 由於 B 電腦可從 ARP 要求封包中得知 A 電腦的 IP 位址與 MAC 位址, 因此 ARP 答覆封包不必再使用廣播的方式, 而是直接在乙太網路封包中, 指定 A 電腦的 MAC 位址為目的位址。

ARP 答覆 ARP 答覆封包中最重要的內容當然就是 B 電腦的 MAC 位址。A 電腦收到此 ARP 答覆封包後, 即完成 MAC 位址解析的工作。

ARP 的解析範圍 由於 ARP 在解析過程中, ARP 要求封包為乙太網路廣播封包, 而路由器會阻擋乙太網路廣播封包, 使該封包無法跨越到其它網路。因此 ARP 僅能解析同一網路內的 MAC 位址, 無法解析其他網路的 MAC 位址。

10-1-2 ARP 與 IP 路由 由於 ARP 只能解析同一網路內的 MAC 位址, 因此, 在整個 IP 路由過程中, 會出現多次的 ARP 位址解析。例如:A 電腦要傳送 IP 封包給 B 電腦時, 若途中必須經過兩部路由器, 則總共須進行 3 次 ARP 名稱解析的動作。

ARP 與 IP 路由

10-1-3 ARP 快取 由於 ARP 要求為鏈結層的廣播封包, 如果經常出現, 勢必造成區域網路的沉重負擔。為了避免此項問題, 在實作 ARP 時, 通常會加入 ARP 快取的設計。 快取的英文為『Cache』, 意思是將常用 (或是預期將用到) 的資料暫存在讀寫效率較佳的儲存區域, 以加速存取的過程。ARP 快取可將網路裝置的 IP/MAC位址記錄在在本機電腦上 (通常是儲存在記憶體中)。

ARP 快取 系統每次要解析 MAC 位址前, 便先在 ARP 快取中查看是否有符合的紀錄。若 ARP 快取中有符合的紀錄, 便直接使用;若 ARP 快取中找不到符合的紀錄, 才需要發出 ARP 要求的廣播封包。如此, 不僅加快位址解析的過程, 也可避免過多的 ARP 要求廣播封包。 ARP 快取所包含的紀錄, 依產生的方式, 可分為動態與靜態等兩種紀錄。

動態紀錄 當 ARP 完成每筆 IP/MAC 位址的解析後, 便會將結果儲存在 ARP 快取中,供後續使用, 以避免重覆向同一對象要求位址解析。這些由 ARP 自動產生的紀錄即為動態紀錄。 以先前 A、B 電腦為例, 當 A 電腦經由 ARP 要求和 ARP 答覆取得 B 電腦的 MAC 位址後, 便將 B 電腦的 IP 位址與 MAC 位址儲存在 A 電腦的 ARP 快取中。

動態紀錄 ARP 快取的動態紀錄雖然可提高位址解析的效能, 但也可能產生問題。以先前 A、B 電腦為例, 當 A 電腦的 ARP 快取中有 B 電腦 MAC 位址的紀錄時, 若B 電腦故障、關機或更換網路卡, A 電腦因為無從得知, 仍然會依據 ARP 快取中的紀錄將封包傳送出去。這些封包傳送出去後不會有任何裝置加以處理, 就好像是丟到黑洞一樣有去無回, 此種現象稱為『網路黑洞』。

動態紀錄 為了避免此種情形發生, ARP 快取中的動態紀錄必須有一定的壽命時間, 超過時限的紀錄便會被刪除。

靜態紀錄 當使用者已知某裝置的 IP/MAC 位址的對應關係後, 可經由手動的方式將之加入 ARP 快取中, 此即為靜態紀錄。

10-2 ARP 封包格式 ARP 封包主要是記錄 IP 與 MAC 位址的相關資訊, 其包含的欄位如下:

ARP 封包格式

ARP 封包格式 Hardware Type Protocol Type Hardware Address Length Protocol Address Length Operation Sender Hardware Address Sender Protocol Address

ARP 封包格式 Target Hardware Address Target Protocol Address ARP 封包的長度

Hardware Type 長度為 2 Bytes, 指定硬體類型, 亦即資料連結層所用的技術。以乙太網路為例, Hardware Type 欄位值應為 1。下表列出一些常見的 Hardware Type 欄位值:

Protocol Type 長度為 2 Bytes, 指定網路層所使用的協定, 一般即是 IP, 其欄位值為 2048, 若以 16 進位表示則為 0x0800。

Hardware Address Length 長度為 1 Byte, 指定 MAC 位址的長度。以乙太網路為例, 其 MAC 位址長度為 6 Bytes, 因此 Hardware Address Length 欄位值為 6。此欄位值也決定了後續Sender Hardware Address 與 Target Hardware Address 的長度。

Protocol Address Length 長度為 1 Byte, 網路層協定所用的位址長度。若 Protocol Type 為 2048 (IP),由於 IP 位址長度為 4 Bytes, 因此 Protocol Address Length 欄位值為 4。 此欄位值也決定了後續 Sender Protocol Address 與 Target Protocol Address 的長度。

Operation 長度為 2 Bytes, 指定 ARP 封包的類型, 最常見的即是 request 與 reply 兩種類型:

Sender Hardware Address ARP 封包來源端的 MAC 位址, 以乙太網路為例, 即為 6 Bytes 的 MAC 位址。

Sender Protocol Address ARP 封包來源端的所用協定的位址, 以 IP 為例, 即為 4 Bytes 的 IP 位址。

Target Hardware Address ARP 封包目的端的 MAC 位址, 以乙太網路為例, 即為 6 Bytes 的 MAC 位址。若是 ARP request 封包, 因為還不知道目的端的 MAC 位址, 因此 TargetHardware Address 欄位址為 000000000000。

Target Protocol Address ARP 封包目的端所用協定的位址, 以 IP 為例, 即為 4 Bytes 的 IP 位址。

ARP 封包的長度 ARP 封包的長度並不固定, 因為不同的網路層與鏈結層, 所使用的位址長度都不同。若以網路層使用 IP、鏈結層使用乙太網路為例, 則 ARP 封包的長度應該為 28 Bytes。 在眾多協定的封包當中, ARP 封包的結構算是比較簡單, 因此我們只擷取一個 ARP 要求封包, 用來驗證上述的文字說明:

ARP 封包的長度

10-3 ARP 工具程式 大部份作業系統都會提供 ARP 工具程式。以下將介紹 2 種 ARP 工具程式:Windows 98/XP 的 ARP.EXE 與 Linux 的 ARPWATCH 。

10-3-1 ARP Windows 98/XP 提供了 ARP.EXE 這個工具程式, 方便使用者檢視與編輯ARP 快取的內容。ARP.EXE 主要提供 3 項功能, 說明如下。

ARP 檢視 ARP 快取中的紀錄 刪除紀錄 新增紀錄

檢視 ARP 快取中的紀錄 您可以利用 ARP.EXE 檢視 ARP 快取中目前的紀錄。語法如下: 請參考以下範例:

檢視 ARP 快取中的紀錄 Internet Address 欄位代表解析對象的 IP 位址, Physical Address 欄位為解析所得的 MAC 位址, Type 欄位則是代表此紀錄產生的方式。若是動態紀錄, Type欄位值為 dynamic;若是靜態紀錄, Type 欄位值為 static。

刪除紀錄 刪除 ARP 快取紀錄的語法如下: 請參考以下範例:

刪除紀錄

新增紀錄 在 ARP 快取中新增一筆靜態紀錄的語法如下: 請參考以下範例:

新增紀錄

10-3-2 ARPWATCH Linux 的 ARPWATCH 可監聽與記錄區域網路中的 ARP 封包, 並透過電子郵件將結果報告給管理員, 或直接將結果顯示在螢幕上。

經由電子郵件 執行 arpwatch 後, 若偵測到新的 ARP 記錄, 即透過電子郵件來報告。以下為電子郵件的內容:

直接顯示在螢幕 若要直接在螢幕上顯示結果, 請執行: 若偵測到新的 ARP 記錄, 則螢幕上會顯示如下的內容:

10-4 ICMP 簡介 IP 在傳送封包時, 只是單純的將 IP 封包送出即完成任務。在傳送過程中若發生問題, 則是由上層的協定來負責確認、重送等工作。 但是, 在 IP 路由的過程中若發生問題, 例如:路由器找不到合適的路徑, 或無法將 IP 封包傳送出去, 則勢必需要某種機制, 將此狀況通知 IP 封包的來源端。

ICMP 簡介 這時候便會用到 ICMP (Internet Control Message Protocol) 這個協定。 ICMP 屬於在網路層運作的協定, 一般視為是 IP 的輔助協定, 常用來『報告錯誤』。換言之, 在 IP 路由的過程中, 若主機或路由器發現任何異常, 便可利用 ICMP 來傳送相關的資訊。

ICMP 簡介 不過, 請讀者特別注意, ICMP 只負責報告問題, 至於要如何解決問題則不是 ICMP 的管轄範圍。

10-4-1 ICMP 封包的封裝方式 ICMP 封包實際上是以 IP 封包的形式在網路上傳送。因此, ICMP 封包的外層必須以如下方式來包裝:

ICMP 封包的封裝方式 由於 ICMP 封包封裝在 IP 封包中, 因此, 可經由 IP 路由的機制, 傳送到遠端的網路裝置。不過, 請讀者注意, 雖然 ICMP 封包是包裝在 IP 封包的 Payload 部份, 但不要將它視為是 TCP 之類的傳輸層協定。

10-4-2 ICMP 封包的欄位格式 ICMP 封包可分為以下兩部份: 每個 ICMP 封包都會有 ICMP 表頭, 其中包含了 3 個固定長度的欄位:Type、Code 與 Checksum。至於 ICMP 資料的部份, 則會隨著 ICMP 封包的類型而異。

ICMP 封包的欄位格式 Type (類型) Code (代碼) Checksum (錯誤檢查碼) ICMP 資料

Type (類型) 長度為 1 Byte。本欄位定義了 ICMP 封包的類型, 每一種類型會有不同的功能。後文會針對數種常見的類型, 詳細說明其功能。

Type (類型)

Code (代碼) 長度為 1 Byte。每種 ICMP 封包類型可再根據 Code 欄位細分為各種不同的用途。例如:Destination Unreachable 類型的 ICMP 封包便利用 Code 欄位值來區分無法傳遞 IP 封包的各種情況。不過, 大部份 ICMP 封包類型 (Type) 只定義了一種 Code 欄位值。

Checksum (錯誤檢查碼) 長度為 2 Bytes, 記錄了 ICMP 封包的錯誤檢查碼。

ICMP 資料 ICMP 資料會隨著 Type 欄位值, 定義不同的欄位。接下來在介紹各類型的ICMP 封包時, 會說明對應的 ICMP 資料。

10-5 各類型的 ICMP 封包 10-5-1 回應要求與回應答覆 10-5-2 無法送達目的 10-5-3 降低來源端傳送速度 10-5-4 重新導向 10-5-5 傳送逾時

10-5-1 回應要求與回應答覆 回應要求與回應答覆 (Echo Request / Echo Reply) 可說是最常見的 ICMP 封包類型, 可用來排解網路問題, 包括 IP 路由的設定、網路連線等等。 回應要求與回應答覆必須以配對的方式來運作:

回應要求與回應答覆 A 主動發出回應要求封包給 B。 B 收到回應要求後, 被動發出回應答覆封包給 A。 由於 ICMP 封包都是包裝成 IP 封包的形式來傳送, 因此, 若能完成上述步驟,A 便能確認以下事項:

回應要求與回應答覆 B 裝置存在, 且運作正常。 A 、B 之間的網路連線狀況正常。 A、B 之間的 IP 路由正常。 回應要求與回應答覆的 ICMP 表頭為:

回應要求與回應答覆 回應要求與回應答覆的 ICMP 資料包含了 Identifier、Sequence Number、Optional Data 等 3 個欄位:

回應要求與回應答覆 Identifier Sequence Number Optional Data

Identifier 長度為 2 Bytes, 作為識別之用。Identifier 欄位由 Echo Request 來源端裝置的程式(例如:上例 A 電腦的 PING 程式) 所決定。以 Windows XP 的 PING 工具程式為例, 所發出 Echo Request 的 Identifier 值皆固定為 512;Linux 版本的 PING 工具程式則沒有固定值, 但同一次執行時所發出的 Echo Request 具有相同的 Identifier 值。

Identifier 當接收端 (例如:上例 B 電腦) 收到 Echo Request 後, 所回應 Echo Reply 的 Identifier 欄位值必須與收到的 Echo Request 相同。

Sequence Number 長度為 2 Bytes, 用來記錄序號。Sequence Number 欄位由 Echo Request 來源端裝置的程式所決定。以 Windows XP 的 PING 工具程式為例, 每次發出 Echo Request 的 Sequence Number 值會遞增 256。例如:第一次發出 Echo Request 的 Sequence Number 若為 1, 第二次發出 Echo Request 的 Sequence Number 便為257, 第三次發出 Echo Request 的 Sequence Number 便為 513, 依此類推。

Sequence Number 當裝置收到 Echo Request 後, 所發出的 Echo Reply 的 Sequence Number 欄位值必須與收到的 Echo Request 相同。 由於 Echo Request 與 Echo Reply 有配對的關係, Identifier 與 Sequence Number 兩個欄位合起來可識別特定配對的 Echo Request 與 Echo Reply 。

Optional Data 本欄位由 Echo Request 來源端裝置的程式所決定, 可記錄一些選擇性的資料。 當裝置收到 Echo Request 後, 所發出的 Echo Reply 的 Optional Data 欄位值必須與收到的 Echo Request 相同。 來源端收到 Echo Reply 後, 會讀取 Optional Data 欄位, 確認此為配對的 Echo Reply 。

10-5-2 無法送達目的 無法送達目的 (Destination Unreachable) 也是常見的 ICMP 封包類型。在路由過程中若出現下列問題, 路由器或目的裝置便會發出此類型的 ICMP 封包, 通知IP 封包的來源端。 路由器無法將 IP 封包傳送出去。例如:在路由表中找不到合適的路徑, 或是連線中斷而無法將封包從合適的路徑傳出。

無法送達目的 目的裝置無法處理收到的 IP 封包。例如:目的裝置無法處理 IP 封包內所裝載的傳輸層協定。 無法送達目的的 ICMP 表頭為:

無法送達目的 Code 欄位值可從 0 至 12, 以下僅舉例說明 3 個較常見的值: 0, Network Unreachable:路由器收到 IP 封包後, 在路由表中若找不到合適的路徑, 便會發出 Network unreachable 的訊息給 IP 封包的來源端裝置。

無法送達目的 1, Host unreachable:路由器收到 IP 封包後, 若目的位址與路由器在同一個 IP網路上, 但路由器無法將 IP 封包傳送給目的裝置 (目的裝置未回應路由器的ARP Request), 便會發出 Host unreachable 的訊息給 IP 封包的來源端裝置。

無法送達目的 2, Protocol unreachable:當 IP 封包送達目的裝置後, 若目的裝置無法處理 IP 封包表頭中 Protocol 欄位所指定的協定, 便會發出 Protocol unreachable 的訊息給 IP 封包的來源端裝置。 無法送達目的的 ICMP 資料欄位有 Unused 和 IP 表頭與 Payload 兩個欄位:

無法送達目的

10-5-2 無法送達目的 Unused IP 表頭與 Payload

Unused 長度為 4 Bytes。本欄位未定義用途, 欄位內容必須為 0。

IP 表頭與 Payload 當路由器或目的裝置要發出無法送達目的的封包時, 會將問題封包的 IP 表頭(長度不定) , 以及 IP Payload 的前 8 Bytes 寫入本欄位。 IP 封包來源端 (也就是發出問題封包的電腦) 收到無法送達目的封包後, 可根據本欄位的資訊, 得知是哪一個 IP 封包有問題, 並據此決定因應的措施。

10-5-3 降低來源端傳送速度 當路由器因為來往的 IP 封包太多, 以致於來不及處理時, 便會發出降低來源端傳送速度 (Source Quench) 的 ICMP 封包給 IP 封包的來源端裝置。 在正式文件中並未規定路由器發出降低來源端傳送速度的條件。在實作時, 廠商通常是以路由器的 CPU 或緩衝區的負荷作為衡量標準, 例如:路由器的緩衝區使用量到達 85% 時, 便發出降低來源端傳送速度封包。

降低來源端傳送速度 降低來源端傳輸速度的 ICMP 表頭為:

降低來源端傳送速度 降低來源端傳輸速度的 ICMP 資料包含了 Unused 和 IP 表頭與 Payload 等2 個欄位: 這兩個欄位的內容與長度與無法送達目的相同。

10-5-4 重新導向 當路由器發現主機所選的路徑並非最佳路徑時, 會送出 ICMP 重新導向(Redirect) 封包, 通知主機較佳的路徑。以下圖為例:

重新導向 當 A 要傳送 IP 封包給 B 時, 假設最佳路徑是經由 R1 路由器傳送至 B。可是由於某種因素 (不當的設定或網路連線的變動), A 將 IP 封包送至 R2 路由器, 而 R2路由器從本身的路由表發現, A 至 B 的最佳路徑應經由 R1 路由器, 則 R2 會發出重新導向的 ICMP 封包給 A。

重新導向 但是 R2 只負責告知 A 電腦可能的問題, 至於 A 電腦要如何應變, 則非 ICMP的管轄範圍。 重新導向封包的表頭為:

重新導向 Code 欄位值可從 0 至 3, 以下僅說明較常見的值: 1, Host:路由器收到 IP 封包後, 若在路由表中找到更合適的路徑, 便會發出此訊息給 IP 封包的來源端裝置。 3, TOS and Host:路由器收到 IP 封包後, 若在路由表中找到更符合 IP 封包要求的 TOS 路徑, 便會發出本訊息給 IP 封包的來源端裝置。

重新導向 Redirect 的 ICMP 資料包含了 Router IP Address 和 IP 表頭與 Payload 等 2個欄位:

Router IP Address 長度為 4 Bytes, 用來通知主機較佳的路由器。以先前的例子而言, 當 R2 路由器傳送 Redirect 封包給 A 主機時, 本欄位便填入 R1 路由器的 IP 位址。

IP 表頭與 Payload 將 IP 封包的 IP 表頭, 以及 IP Payload 的前 8 Bytes 寫入本欄位, 提供來源端IP 封包額外的資訊。

10-5-5 傳送逾時 我們在第 8 章曾經說明 IP 表頭記錄了封包的存活時間, 其主要功能是為了防止 IP 封包在不當的路由架構中永無止境地傳送。當路由器收到存活時間為 1 的IP 封包時, 會將此 IP 封包丟棄, 然後送出傳送逾時 (Time Exceeded) 的 ICMP 封包給 IP 封包的來源裝置。 此外, 當 IP 封包在傳送過程中發生切割時, 必須在目的裝置重組切割後的 IP封包。

傳送逾時 重組的過程中若在指定的時間內未收到全部切割後的 IP 封包, 目的裝置也會發出傳送逾時的 ICMP 封包給 IP 封包的來源裝置。

傳送逾時 Code 欄位值可為 0 或 1, 請參考以下說明: 0, TTL count exceeded:當路由器收到 TTL 值為 1 的 IP 封包時, 便會發出此訊息給 IP 封包的來源端裝置。 1, Fragment reassembly time exceeded:IP 封包目的裝置重組 IP Fragment 時,若在指定的時間內未收到全部的 IP Fragment, 便會發出本訊息給 IP 封包的來源端裝置。

傳送逾時 傳送逾時的 ICMP 資料包含了 Unused 與 IP 表頭與 Payload 等 2 個欄位:

傳送逾時 Unused IP 表頭與 Payload

Unused 長度為 4 Bytes。本欄位未定義用途, 欄位內容必須為 0。

IP 表頭與 Payload 當路由器或目的裝置要發出傳送逾時的封包時, 會將問題封包的 IP 表頭, 以及 IP Payload 的前 8 Bytes 寫入本欄位, 提供 IP 封包來源端額外的資訊。

10-6 ICMP 工具程式 大部份作業系統都會提供一些 ICMP 工具程式, 方便使用者測試網路連線狀況。以下便以 Windows 作業系統為例, 介紹數種常見的 ICMP 工具程式。

10-6-1 PING PING 工具程式可用來發出 ICMP 回應要求封包。網管人員可利用 PING 工具程式, 發出回應要求給特定的主機或路由器, 以診斷網路的問題。

PING 利用 PING 來診斷網路問題 PING 的語法與參數 PING 範例

利用 PING 來診斷網路問題 當您發現網路連線異常時, 可參考下列步驟, 利用 PING 工具程式, 由近而遠逐步鎖定問題所在。 127.0.0.1 是所謂的 Loopback 位址 (請參考第 8 章)。目的位址為 127.0.0.1 的封包不會送到網路上, 而是送至本機的 Loopback 驅動程式。此一動作主要是用來測試本機的 TCP/IP 協定是否正常運作。

利用 PING 來診斷網路問題 ping 本機 IP 位址 若步驟 1 中本機 TCP/IP 設定正確, 接下來可試試看網路裝置是否正常。若網路裝置有問題 (例如:舊型網路卡的 IRQ 設定有誤), 則不會回應。 ping 對外連線的路由器 也就是 PING『預設閘道』 (在 Windows 98 稱為『通訊閘』) 的 IP 位址。若成功, 代表內部網路與對外連線的路由器正常。

利用 PING 來診斷網路問題 ping 網際網路上電腦的 IP 位址 您可以隨便找一台網際網路上的電腦, PING 它的 IP 位址。如果有回應, 代表IP 設定全部正常。 ping 網際網路上電腦的網址 您可以隨便找一台網際網路上的電腦, PING 它的網址, 例如:www.hinet.net. (Hinet 的 WWW 伺服器)。如果有回應, 代表 DNS 設定無誤。

PING 的語法與參數 PING 的語法如下: PING 的參數相當多, 以下僅說明較常用的參數:

PING 範例 若要讓 PING 執行 DNS 反向查詢:

PING 範例 利用 -w 參數, 可以延長等待回應答覆的時間。此外, 也可以結合多個參數一起使用, 例如以下的例子同時用 -n 參數設定只發出 2 個回應要求封包:

PING 範例

10-6-2 TRACERT TRACERT (Trace Route) 工具程式可找出本機電腦至目的 IP 位址所經過的路由器。

TRACERT 原理

TRACERT 原理 首先假設如下的網路環境: 若從 A 主機執行 TRACERT, 並將目的地設為 B 主機, 則 TRACERT 會利用以下步驟, 找出沿途所經過的路由器: 發出回應要求封包, 該封包的目的地設為 B, 存活時間設為 1。為了方便說明,我們將所有封包都加以命名, 此封包命名為『回應要求 1』。

TRACERT 原理 R1 路由器收到『回應要求 1』後, 因為存活時間為 1, 因此會丟棄此封包, 然後發出『傳送逾時 1』給 A。 A 收到『傳送逾時 1』之後, 便可得知到 R1 為路由過程中的第一部路由器。接著, A 再發出『回應要求 2』, 目的地設為 B, 存活時間設為 2。

TRACERT 原理 『回應要求 2』會先送到 R1, 然後再轉送至 R2。到達 R2 時, 『回應要求 2』的存活時間為 1, 因此, R2 會丟棄此封包, 然後傳送『傳送逾時 2』給 A。 A 收到『傳送逾時 2』之後, 便可得知到 R2 為路由過程中的第二部路由器。接著, A 再發出『回應要求 3』, 目的地設為 B, 存活時間設為 3。

TRACERT 原理 『回應要求 3』會經由 R1、R2 然後轉送至 B。B 收到此封包後便會回應『回應答覆 1』給 A。7. A 收到『回應答覆 1』之後便大功告成。

TRACERT 原理

TRACERT 原理 以上的工作原理說明係以微軟的 Windows 9x/2000/XP/2003 為範例。若是Unix、Linux 作業系統的 traceroute, 則不使用 ICMP 封包, 而是用 UDP 封包配合特定的連接埠。由於第 12 章才會介紹 UDP 的特性, 因此在本章不予說明。有興趣研究的讀者不妨瀏覽 http://www.develcon.com/kb/i014.htm 網頁。

TRACERT 的語法與參數 TRACERT 的語法如下: 以下為 TRACERT 常用的參數:

TRACERT 範例 以下我們不使用任何參數, 利用 TRACERT 找出至目的主機沿途所經的路由器。

TRACERT 範例

TRACERT 範例 TRACERT 的結果顯示了以下資訊: 由近到遠, 顯示沿途所經的每部路由器。以上範例顯示, 從來源端主機至 168.95.192.1 主機必須經過 8 部路由器。\ 顯示每部路由器回應的時間。由於TRACERT 會傳送 3 個回應要求封包給每部路由器, 因此會有 3 個回應時間。

10-7 擷取 ICMP 封包 接下來我們將利用 NetAnalyzer , 在執行 PING 與 TRACERT 時, 擷取過程中所有的封包。

擷取 ICMP 封包 10-7-1 P I N G 10-7-2 T R A C E R T Windows XP SP2 預設會擋下 Echo request 類型的 ICMP 封包

10-7-1 PING 首先我們在 192.168.0.40 這部主機上開始擷取封包, 然後執行 PING 工具程式,目的主機為 192.168.0.140。在 NetAnalyzer 中利用設定過濾器功能, 只擷取 ICMP的封包。 以下依序說明檢視前兩對 Echo Request / Echo Reply 封包的情形。

PING

PING Type = 8、Code = 0, 代表此為 Echo Request 封包。 錯誤檢查碼。 Windows 2000 的 PING 工具程式, Identifier 欄位皆為 512。 每個 Echo Request 封包的 Sequence Number 都不一樣, 每次遞增 256。 32 Bytes 的 Optional Data 欄位。

PING

PING Type = 0、Code = 0, 代表此為 Echo Reply 封包。 錯誤檢查碼。 Echo Reply 的 Identifier 欄位必須與配對的 Echo Request 相同, 所以也是 512。 Echo Reply 的 Sequence Number 欄位必須與配對的 Echo Request 相同, 所以也是0x9800。 Echo Reply 的 Optional Data 欄位必須與配對的 Echo Request 相同。

PING

PING

10-7-2 TRACERT 我們仍舊在 192.168.0.40 這部主機上擷取封包, 然後執行 TRACERT 工具程式, 目的主機為 www.hinet.net (IP 位址為 168.95.1.88):

TRACERT

TRACERT 由以上結果可以得知: 封包從 192.168.0.40 出發到達 168.95.1.88, 總共經過 10 部路由器(編號 1~10為路由器, 編號 11 為目的主機) 第 7 部路由器收到 Echo Request 封包後, 在 TRACERT 的等待期限內沒有回應, 因此以 * 代表回應時間。

TRACERT tracert 對每個節點發出 3 個 Echo Request 封包, 每個節點應該回覆 3 個封包,總計有 11 個節點(10部路由器+目的主機)發出封包, 所以總共應擷取到 66個封包。但是因為第 7 部路由器沒有回覆, 少了 3 個封包, 所以擷取的封包總數為 63 個。 我們將檢視第 1 個 Echo Request 與第 1 個 Time Exceeded 封包, 以及最後 1 個Echo Request 與 Echo Reply 封包。

TRACERT

TRACERT

TRACERT 此封包是由第 1 部路由器發出, 因此 Source Address 記錄的是該路由器的 IP 位址。 這是我們執行 TRACERT 的主機 IP 位址。 ICMP 的 Type 欄位顯示此為 Time Exceeded 封包。 路由器會將收到的封包的 TTL 值減 1, 若所得的結果為 0, 便回覆此 Time Exceeded 封包。

TRACERT

TRACERT

TRACERT 在 TRACERT 的過程中, Echo Request 封包的 TTL 值漸增, 一直增加到可傳至目的主機, 此時目的主機便會傳回正常的 Echo Reply 封包。