ICMP
2021年3月15日
TCP/IP功能较为简单,缺少了很多功能,ICMP协议便是其中的一块补充,为IP增添了通知差错信息与控制信息的功能。
报头
类型(8位)| 编码(8位) |
---|
校验和(16位) |
选项数据 |
常见类型与编码
类型 | 编码 | 描述 |
---|---|---|
0 | 0 | Echo Reply |
3 | 0 | 网络不可达 |
3 | 1 | 主机不可达 |
3 | 2 | 协议不可达 |
3 | 3 | 端口不可达 |
5 | 0 | 重定向 |
8 | 0 | Echo Request |
这只是ICMP类型与编码的一部分,具体可以看RFC792,以及其它相关ICMP拓展。
具体应用
ping
ping命令是ICMP应用的典型代表之一,运用type8进行请求,如果目的地可到达则回复type0,否则根据情况返回对应类型编码。
tracert(windows)/ traceroute(Linux)
用于判断转发路径的命令,它的原理是先向目的端发送一个UDP测试报文,TTL值为1,目的端口为一个极其不常用的端口,沿途节点收到后拆包判断自己是不是目的地,不是的话TTL-1=0,向源端返回ICMP超时报文,报文中含有本机IP。源端收到后,再向目的端发送以个UDP报文,这次的TTL值+1=2。重复上述过程,每次TTL值+1,直到到达目的地后停止。
路由重定向
不同的系统对于路由重定向报文有着不同的处理方案,绝大多数往往会直接忽略ICMP重定向报文。因为如果支持重定向,设备将需要维护一个非常庞大的路由表,会极其浪费服务器的性能,而且ICMP重定向存在着安全隐患。