程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 透析ICMP協議(1):協議原理

透析ICMP協議(1):協議原理

編輯:關於VC++

ICMP簡介:

對於熟悉網絡的人來說, ICMP是再熟悉不過了. 它同IP協議一樣工作在ISO模型的網絡層, 它的全稱是: Internet Control Message Protocal. 其在網絡中的主要作用是:

- 主機探測

- 路由維護

- 路由選擇

- 流量控制

對於主機探測來說有很多方法,主機某些服務的BANNER,一些使用的應用程序,或者使用工具來檢測主機,如NMAP,在WEB上有www.netcraft.com來簡單的估測主機。下面所講的是使用ICMP協議來探測主機,主要也是可以了解ICMP這個協議,這裡最主要的也是將這個ICMP協議,

首先我來講一下主機探測用到的ICMP報文:(我沒有一一講全部報文,詳細請參見RFC792協議)

1. 回送或回送響應

我們使用一個ICMPECHO數據包來探測主機地址是否存活(當然在主機沒有被配置為過濾ICMP形式),通過簡單的發送一個ICMPECHO(Type 8)數據包到目標主機,如果ICMPECHOReply(ICMPtype0)數據包接受到,說明主機是存活狀態。  如果沒有就可以初步判斷主機沒有在線或者使用了某些過濾設備過濾了ICMP的REPLY。這種機制就是我們通常所用的ping命令來檢測目標主機是否可以ping到.

回送消息的源地址是回送響應消息的目的地址。若要形成一個回送響應消息,應該將源和目的地址交換,將類型代碼更改為0,重新計算機校驗碼。

下面是這個報文的格式:

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+-

類型:

8代表回送消息;

0代表回送響應消息。

代碼:0

校驗碼:

16位數據(從ICMP類型開始)的反碼和再取反而得。為計算校驗碼,校驗碼域應該為零。這些零在 以後會被校驗碼取代。

標識符:如果代碼=0,幫助匹配回送和回送響應的代碼可以為0。

序列碼:如果代碼=0,幫助匹配回送和回送響應的序列碼可以為0。

說明:

回送消息中接收到的消息應該在回送響應消息中返回。標識符和序列碼由回送發送者使用幫助匹配

回送請求的響應。代碼: 從主機或網關接收0

2. 超時報文

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

類型:11

代碼:

0 = 傳送超時;

1 = 分段級裝超時。

校驗碼:

16位數據(從ICMP類型開始)的反碼和再取反而得。為計算校驗碼,校驗碼域應該為零。

這些零在以後會被校驗碼取代。

Internet包頭+64位源數據報數據:

Internet包頭加上源數據的頭64位而得。此數據用於主機匹配信息到相應的進程。

如果高層協議使用端口號,應該假設其在源數據的頭64個字節之中。

說明:

如果網關在處理數據報時發現生存周期域為零,此數據報必須拋棄。網關同時必須通過超

時信息通知源主機。如果主機在組裝分段的數據報時因為丟失段未能在規定時間內組裝數據,

此數據報必須拋棄。網關發送超時信息。

如果段零不可用則不用發送超時信息。

代碼0由網關發送,代碼1由主機發送。

3. 目標主機不可達報文

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internet Header + 64 bits of Original Data Datagram |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

類型:3

代碼:

0 = 網絡不可達;

1 = 主機不可達;

2 = 協議不可用;

3 = 端口不可達;

4 = 需要段和DF設置;

5 = 源路由失敗;

校驗碼:

16位數據(從ICMP類型開始)的反碼和再取反而得。為計算校驗碼,校驗碼域應該為零。

這些零在以後會被校驗碼取代。

Internet包頭+源數據報:

Internet包頭加上源數據的頭64位而得。此數據用於主機匹配信息到相應的進程。

如果高層協議使用端口號,應該假設其在源數據的頭64個字節之中。

說明:

相應於網關的路由表,如果在目的域中指定的網絡不可達,如網絡距離為無限遠,網關會向發送

源數據的主機發送目的不可達消息。而且,在一些網絡中,網關有能力決定目的主機是否可達。

如果目的地不可達,它將向發送源數據的主機發送不可達信息。

在目的主機,如果IP模塊因為指定的協議模塊和進程端口不可用而不能提交數據報,目的主機將

向發送源數據的主機發送不可達信息。

另外一種情況是當數據報必須被分段傳送,而“不可分段”位打開,在這種情況下,網關必須拋棄

此數據報,並向向發送源數據的主機發送不可達信息。

代碼0,1,4和5由網關發送,而代碼2和3由主機發送。

聯系方式: [email protected]

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved