0.8 ICMP

Wireshark Lab: ICMP

 

關於ICMP

Network Layer 由三個主要部分組成IP , Internet routing protocols 和ICMP。 ICMP 主要是用在host與router間網路層的訊息交換,最典型的ICMP用法是error report,例如:當你在使用Telnet、FTP、HTTP時可能會出現”Destination network unreachable”錯誤訊息而router就會發送一個ICMP訊息至host來說明這個錯誤。

ICMP常被認為它是IP的一部分,但在架構上它卻是高於IP的,因為ICMP訊息是被附加在IP datagram中的,也就是說IP裡有被附加的ICMP訊息,如同TCP/UDP segments一樣。與之類似地,當一個host收到一個IP datagram,ICMP會被歸為較高層級的protocol,再把datagram的內容解析為ICMP。

ICMP訊息含有type 、code、header和IP datagram的first 8 byte(ICMP最先產生的地方,也是sender判斷是否有error的地方)。

 

在這個Lab中,我們有幾個關於ICMP協定的方面要探討:

        ‧ICMP messages generating by the Ping program

        ‧ICMP messages generated by the Traceroute program

        ‧the format and contents of an ICMP message

 

步驟一:ICMP and Ping

        讓我們從Ping program來開始ICMP的探討。你可能會想到Ping program是允許每個人確認host端是否連線的簡單的工具。當來源host端的Ping program寄一個封包給目標IP位址,如果主機存在,目標host端的Ping program就會寄一個封包傳回給來源host端做確認。

 

步驟二:ICMP and Traceroute

        Traceroute program可以用來尋找封包從來源端到目的端之間的路徑。

traceroute在windows跟Unix/Linux中以不同方法處理,在Unix/Linux中,來源端用多個不同的個目的端port號碼,寄一連串的UDP封包到目的端;在windows中,來源端寄一連串ICMP封包給目的端。在兩種作業系統中,程式用TTL = 1寄第一個封包,用TTL = 2寄第二個封包,以此類推。記得當封包經過路由器時,路由器會將TTL的值遞減。當一個封包以TTL = 1到達路由器時,路由器會寄出ICMP錯誤資訊給來源端。

 

問題1:你的host IP位址?你的destination IP位址?

解答:

 

host: 140.136.89.131,

destination: 59.106.161.11

 

問題2:為何ICMP packet 沒有source和destination 的port numbers

解答:

因為ICMP的目的是溝通交換在network layer裡host和routers之間的訊息,而不是在application layer processes。且每一個ICMP封包都有"Type" 和 "Code",而結合Type和Code就可識別正在傳遞的訊息,所以網路軟體可以自行解讀所有ICMP訊息,就不需要port去指示ICMP訊息給application layer process。

 

問題3:分析一個host發送的ping request封包,它的ICMP type和code numbers為何? 這個ICMP封包有那些其他資訊? checksum、sequence number 和 identifier fields各有多少bytes

解答:

 

ICMP type: 8

code number: 0

other field: checksum, identifier, sequence number, data

checksum: 2 bytes

sequence number: 2 bytes

identifier fields: 2 bytes

 

問題4:分析corresponding ping reply封包,它的ICMP type和code numbers為何?這個ICMP封包有那些其他資訊?checksum、sequence number 和 identifier fields各有多少bytes

解答:

 

ICMP type: 0

code number: 0

other field: checksum, identifier, sequence number, data

checksum: 2 bytes

sequence number: 2 bytes

identifier fields: 2 bytes

 

問題5:你的host IP位址為何?target destination host的IP位址為何?

解答:

host: 140.136.89.131

destination: 192.0.43.10

 

問題6:如果ICMP在Unix/Linux環境底下發送UDP而不是TCP封包,那麼這個探測封包的IP protocol number還會是01嗎?如果不是,那該為多少?

解答:

不,IP protocol number會變成0x11。

 

問題7:分析你的ICMP echo封包截圖,他和前半部份的ICMP ping query封包是否有不同?如果是,為什麼會這樣?

解答:

沒有不同,echo 封包和ping query封包有一樣的資訊。在傳送端送出封包之後目標端必須返回和傳送端所送出一模一樣的封包

 

 

問題8:分析你的ICMP error 封包截圖,它比ICMP echo封包包含了那些更多的資訊?

解答:

 

error封包跟ping query封包不同,error封包有原始ICMP封包的IP header和前8個 bytes。

 

問題9:分析最後三個host收到的ICMP封包,他們和ICMP error封包有何不同?為什麼不同?

解答:

 

最後三個ICMP封包的message type是0 (如果是TTL expired則message type會是11) ,因為數據是在TTL 超時之前產生的。不同的原因是因為它們在TTL超時之前抵達了目標端.

 

問題10:在tracert的測量範圍內,是否有一個link的延遲明顯長於其他者呢?根據Figure 4的截圖,是否有一個link的延遲明顯長於其他者呢?依據router的命名方式,你可以猜出在這個link的末端兩個routers的位置嗎?

解答:

 

第8個和第9個的link有明顯的不同,這link可能是從台灣連結到美國。