ICMP 網際控制協議全攻略 建議收藏
簡介
ICMP協議, Internet Control Message Protocol 網際控制協議,是一個傳輸層協議,其網路層協議為IP協議,在IP數據包頭中,ip包的protocl位為1。
主要用途
ICMP協議用於在IP主機 、 路由器之間傳遞控制消息。控制消息可以檢測網路是否暢通、主機 是否可達、 路由是否可用等網路本身的消息。這些控制消息雖然並不傳輸用戶信息,但是對於用戶數據的傳遞起著重要的作用。
ICMP報文格式
ICMP報頭格式
ICMP報文包含在IP數據報中,IP報頭在ICMP報文的最前面。一個ICMP報文包括IP報頭(至少20位元組)、ICMP報頭(至少八位元組)和ICMP報文(屬於ICMP報文的數據部分)。當IP報頭中的協議欄位值為1時,就說明這是一個ICMP報文。ICMP報頭如下圖所示。
ICMP報文格式
1.ICMP類型
0 響應應答(ECHO-REPLY)
3 不可到達
4 源抑制
5 重定向
8 響應請求(ECHO-REQUEST)
11 超時
12 參數失靈
13 時間戳請求
14 時間戳應答
15 信息請求(*已作廢)
16 信息應答(*已作廢)
17 地址掩碼請求
18 地址掩碼應答
2.ICMP代碼
128返回請求(Echo Request)報文
129返回應答(Echo Reply)報文
130組成員查詢(Group Membership Query)
131組成員報告(Group Membership Report)
132組成員結束(Group Membership Termination)
133路由器請求(Router Solicitation)
134路由器公告(Router Advertisement)
135鄰機請求(Neighbor Solicitation)
136鄰機公告(Neighbor Advertisement)
137 重定向(Redirect)
3.校驗和
不介紹
4.具體內容
雖然說不同的使用方式有不同的內容,但是一般作為檢測網路是否聯通使用的話,一般的內容為08:09:0a:0b:0c:0d:0e:0f:10:11:12:13:14:15:16:17:18:19:1a:1b:1c:1d:1e:1f:20:21:22:23:24:25:26:27:28:29:2a:2b:2c:2d:2e:2f:30:31:32:33:34:35:36:37
當然,不同系統有不同的內容,但是這種方式使用內容沒有實際意義。
ICMP具體應用
1.監測網路是否暢通
例如監測我們的主機到百度的連通性
PING 百度伺服器
可以看的出來,我們使用的命令是ping baidu.com,根據結果顯示,百度的cdn的ip地址是220.181.57.216,同時還可以看到ttl和延遲,ttl值為55說明我們經過了9台路由器。
ping命令的高級用法
ping -c count
Stop after sending (and receiving) count ECHO_RESPONSE packets.
If this option is not specified, ping will operate until inter-
rupted. If this option is specified in conjunction with ping
sweeps, each sweep will consist of count packets.
ping -c 制定次數,代表發送制定次數的icmp包
例如:ping -c 3 baidu.com
-m ttl
Set the IP Time To Live for outgoing packets. If not specified, the kernel uses the value of thenet.inet.ip.ttl MIB variable.
設置ip包頭的ttl生存周期 ttl
例如:ping -m 5 baidu.com
我們發現,由於設置ttl值為5,因此數據包並未達到百度的伺服器,而是在中途由於ttl值減少至0而發生了超時
從抓到的包中也可以看出
-t timeout
Specify a timeout, in seconds, before ping exits regardless of how many packets have been received.
-W waittime
Time in milliseconds to wait for a reply for each packet sent. If a reply arrives later, the packet is not printed as replied, but considered as replied when calculating statistics.
-t 設置超時時間
-w 設置等待時間
-s packetsize
Specify the number of data bytes to be sent. The default is 56, which translates into 64 ICMP data
bytes when combined with the 8 bytes of ICMP header data. This option cannot be used with ping
使用 -s參數設置包的大小,默認為 56
例如 ping -s 1 baidu.com
可以看出,這個ICMP數據段的Data屬性的大小為1
ICMP協議應用2
traceroute命令
traceroute命令用於追蹤數據包在網路上的傳輸時的全部路徑,它默認發送的數據包大小是40位元組。
通過traceroute我們可以知道信息從你的計算機到互聯網另一端的主機是走的什麼路徑。當然每次數據包由某一同樣的出發點(source)到達某一同樣的目的地(destination)走的路徑可能會不一樣,但基本上來說大部分時候所走的路由是相同的。
traceroute通過發送小的數據包到目的設備直到其返回,來測量其需要多長時間。一條路徑上的每個設備traceroute要測3次。輸出結果中包括每次測試的時間(ms)和設備的名稱(如有的話)及其ip地址。
工作原理
首先,traceroute送出一個TTL是1的IP 數據包到目的地,當路徑上的第一個路由器收到這個數據包時,它將TTL減1。此時,TTL變為0,所以該路由器會將此數據包丟掉,並送回一個「ICMP time exceeded」消息(包括發IP包的源地址,IP包的所有內容及路由器的IP地址),tracert 收到這個消息後,便知道這個路由器存在於這個路徑上,接著traceroute 再送出另一個TTL是2 的數據包,發現第2 個路由器...... traceroute 每次將送出的數據包的TTL 加1來發現另一個路由器,這個重複的動作一直持續到某個數據包 抵達目的地。當數據包到達目的地後,該主機則不會送回ICMP time exceeded消息,一旦到達目的地,由於tracert通過UDP數據包向不常見埠(30000以上)發送數據包,因此會收到「ICMP port unreachable」消息,故可判斷到達目的地。
TAG:青峰科技 |