Icmp协议

words: 701    views:    time: 2min

Icmp协议

ICMP(Internet Control Message Protocol)互联网控制报文协议,和IP协议一样属于网络层。最常见的用途就是用来测试网络节点的可达性,源主机封装一个Icmp消息,发往目的主机,目的主机根据情况选择回复或者不回复,源主机依据回复判断网络通不通,如果途径的路由节点发现目的主机不可达,可能会在Icmp的回复中带上具体的原因,这些错误原因有助于故障诊断和排除。

除了判断网络不通,Icmp也能通过重定向消息,反馈源主机一些信息,比如更优的网络路径,或者消息发太快了,源主机可以选择进行处理或者不处理。

报文格式

  • Type占1字节,报文主要可以分为两类:查询报文差错报文,查询报文用于获取有关网络或目标主机的特定信息,差错报文主要用于报告网络错误;
  • Code占1字节,提供有关报文类型更详细的信息;
Type Code 描述
查询报文 0 0 Echo Reply
差错报文 3 0 Network Unreachable
差错报文 3 1 Host Unreachable
差错报文 3 2 Protocol Unreachable
差错报文 3 3 Port Unreachable
差错报文 3 4 Fragmentation Needed and DF Set 需要分片,但设置了不分片标志
差错报文 3 5 Source Route Failed
差错报文 4 0 Source Quench 源抑制
差错报文 5 0 Redirect for the Network
差错报文 5 1 Redirect for the Host
差错报文 5 2 Redirect for the Type of Service and Network
差错报文 5 3 Redirect for the Type of Service and Host
查询报文 8 0 Echo Request
差错报文 11 0 Time to live Exceeded in Transit 传输超时
差错报文 11 1 Fragment Reassembly Time Exceeded 分片重组超时
差错报文 12 0 Parameter Problem
查询报文 13 0 Timestamp Request
查询报文 14 0 Timestamp Reply
查询报文 15 0 Information Request
查询报文 16 0 Information Reply

Ping与Tcp发消息区别

Ping的作用是用来判断目标机器是否可达,它是一个应用层命令,依赖的网络层的ICMP协议,而ICMP也是利用IP协议进行消息传输的

如果与TCP发消息对比可以如下图所示

所以ICMP在传输的过程中,从外部看来就是一个IP数据包,只有解析了IP报头,取出里面的数据,才能获取ICMP的报头信息。在ICMP报文中也可能存放着请求报文报头信息,比如A给C发消息经过B,结果B发现C不可达,于是就给A回了一个ICMP消息,这个消息的IP报头中放的就是B和A的IP信息,而ICMP消息中放的就是A和C的IP信息。


参考: