Icmp协议
words: 701 views: time: 2minIcmp协议
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信息。
参考: