互联网控制消息协议

维基百科,自由的百科全书
跳转至: 导航搜索

網路控制消息協定英文Internet Control Message ProtocolICMP)是网路协议族的核心协议之一。它用于TCP/IP網絡中發送控制消息,提供可能發生在通信環境中的各種問題反饋,通過這些信息,令管理者可以對所發生的問題作出診斷,然後採取適當的措施解決。

ICMP [1]依靠IP來完成它的任務,它是IP的主要部分。它與傳輸協議,如TCPUDP顯著不同:它一般不用於在兩點間傳輸數據。它通常不由網絡程序直接使用,除了pingtraceroute這兩個特別的例子。 IPv4中的ICMP被称作ICMPv4,IPv6中的ICMP则被称作ICMPv6

技術細節[编辑]

ICMP是在RFC 792中定义的互联网协议族之一。通常用于返回的错误信息或是分析路由。ICMP错误消息总是包括了源数据并返回给发送者。 ICMP错误消息的例子之一是TTL值过期。每个路由器在转发数据报的时候都会把ip包头中的TTL值减一。如果TTL值为0,“TTL在传输中过期”的消息将会回报给源地址。 每個ICMP消息都是直接封裝在一個IP數據包中的,因此,和UDP一樣,ICMP是不可靠的。

雖然ICMP是包含在IP數據包中的,但是對ICMP消息通常會特殊處理,會和一般IP數據包的處理不同,而不是作為IP的一個子協議來處理。在很多時候,需要去查看ICMP消息的內容,然後發送適當的錯誤消息到那個原來產生IP數據包的程序,即那個導致ICMP訊息被傳送的IP數據包。

很多常用的工具是基於ICMP消息的。traceroute是通過發送包含有特殊的TTL的包,然後接收ICMP超時消息和目標不可達消息來實現的。ping則是用ICMP的"Echo request"(类别代码:8)和"Echo reply"(类别代码:0)消息來實現的。

ICMP部分的結構[编辑]

報頭[编辑]

ICMP報頭從IP報頭的第160位開始(除非使用了IP報頭的可選部分)。

Bits 160-167 168-175 176-183 184-191
160 Type Code 校驗碼(checksum)
192 ID 序號(sequence)
  • Type - ICMP的類型;
  • Code - 進一步劃分ICMP的類型;例如,ICMP的目標不可達類型可以把這個位設為1至15等來表示不同的意思。
  • Checksum - 這個字段包含有從ICMP報頭和數據部分計算得來的,用於檢查錯誤的數據,其中此校验码字段的值視為0。
  • ID - 這個字段包含了ID值,在ECHO REPLY類型的消息中要返回這個字段。
  • Sequence - 這個字段包含一個序號,同樣要在ECHO REPLY類型的消息中要返回這個字段。

填充數據[编辑]

填充的數據緊接在ICMP報頭的後面(以8位為一組):

  • Linux的"ping"工具填充的ICMP除了8個8位元組的報頭以外,還另外填充數據使得總大小為64字節。
  • Windows的"ping.exe"填充的ICMP除了8個8位元組的報頭以外,還另外填充數據使得總大小為40字節

可能的消息列表(不是全部)[编辑]

Type Code Description
0 - Echo Reply 0 echo响应 (被程序ping使用)
1 and 2 保留
3 - 目的地不可到達 0 目标网络不可达
1 目标主机不可达
2 目标协议不可达
3 目标端口不可达
4 要求分段并设置DF flag标志
5 源路由失败
6 未知的目标网络
7 未知的目标主机
8 源主机隔离
9 禁止访问的网络
10 禁止访问的主机
11 Network unreachable for TOS
12 Host unreachable for TOS
13 网络流量被禁止
4 - Source Quench 0 Source quench(congestion control)
5 - Redirect Message 0 重定向网络
1 重定向主机
2 Redirect Datagram for the TOS & network
3 Redirect Datagram for the TOS & host
6 Alternate Host Address
7 保留
8 - Echo Request 0 Echo请求
9 - Router Advertisement 0 路由建议
10 - Router Solicitation 0 Router discovery/selection/solicitation
11 - Time Exceeded 0 TTL在传输中过期
1 Fragment reassembly time exceeded
12 - 错误的IP头 0 Pointer indicates the error
1 丢失选项
2 不支持的长度
13 - Timestamp 0 时间戳
14 - Timestamp Reply 0 时间戳响应
15 - Information Request 0 Information Request
16 - Information Reply 0 Information Reply
17 - Address Mask Request 0 Address Mask Request
18 - Address Mask Reply 0 Address Mask Reply
19 因安全原因保留
20 through 29 Reserved for robustness experiment
30 - Traceroute 0 信息请求
31 数据报转换出错
32 手机网络重定向
33 Where-Are-You(originally meant for IPv6
34 Here-I-Am(originally meant for IPv6)
35 Mobile Registration Request
36 Mobile Registration Reply
37 Domain Name Request
38 Domain Name Reply
39 SKIP Algorithm Discovery Protocol, Simple Key-Management for Internet Protocol
40 Photuris, Security failures
41 ICMP for experimental mobility protocols such as Seamoby [RFC4065]
42 through 255 保留

參考[编辑]

  1. ^ RFC 792 INTERNET CONTROL MESSAGE PROTOCOL; DARPA INTERNET PROGRAM; PROTOCOL SPECIFICATION; Introduction. J. Postel (Internet RFC/STD/FYI/BCP Archives). 1981-09-01 [2008-05-16]. 

外部鏈接[编辑]