ICMP:Internet控制报文协议
2019-05-13 本文已影响0人
食梦狸猫
ICMP是IP层的一个组成部分,用于传递差错报文和一些其他需要注意的信息。
![](https://img.haomeiwen.com/i2671109/532e089addf3dff0.png)
ICMP报文的格式
![](https://img.haomeiwen.com/i2671109/b3aeef54e9f72adb.png)
不会产生ICMP差错报文的情况:
- ICMP差错报文
- 目的地址是广播地址或者多播地址的IP数据报
- 作为链路层广播的数据报
- 不是IP分片的第一片
- 源地址不是单个主机的数据报。
这是为了防止ICMP差错报文对广播分组响应带来的广播风暴
ICMP地址掩码请求与回答
ICMP地址掩码请求用于无盘系统在引导过程中获取自己的子网掩码。
![](https://img.haomeiwen.com/i2671109/1da6634f8b817791.png)
标识符和序列号字段由发送端任意选择设定,这些值在应答中被返回。这样发送端就可以把应答和请求匹配了。
系统广播ICMP请求报文,应答是单播。通常,除非系统是地址掩码的授权代理,否则不能发送地址掩码应答。
如果向本机IP地址和换回地址发送地址掩码请求,得到的地址掩码对应的都是环回地址,也就是ff000000
ICMP时间戳请求与应答
ICMP时间戳请求允许系统向另一个系统查询当前时间,这提供了毫秒级的分辨率。
![](https://img.haomeiwen.com/i2671109/37172aa22e27e671.png)
请求端在发送ICMP请求时发起时间戳,然后发送报文,应答端在收到报文时填写接受时间戳,在发送应答时填写传送时间戳。
ICMP端口不可达错误
端口不可达报文是ICMP目的不可达报文中的一种。在UDP的规则中,如果收到一份UDP数据报而目的端口和其正在使用的进程不相符的话,UDP立即返回一个ICMP不可达报文。
ICMP报文的处理
![](https://img.haomeiwen.com/i2671109/c0f3b94b871657c0.png)
如果ICMP报文的处理方法是内核,那就由系统内核来处理收到的ICMP请求报文。如果处理方法是用户进程,那么需要报文传送给在内核中登记了的用户进程,如果不存在这样的用户进程,那么ICMP报文就会被丢弃。如果处理方法是一串字符,那么对应的就是unix差错。