前言
Internet控制报文协议ICMP(Internet Control Message Protocol)是网络层的一个重要协议。ICMP协议用来在网络设备间传递各种差错和控制信息,它对于收集各种网络信息、诊断和排除各种网络故障具有至关重要的作用。使用基于ICMP的应用时,需要对ICMP的工作原理非常熟悉。
icmp重定向
如下图所示,主机A访问服务器A,结果主机A设置的网关确是路由器B(服务器A所对应的路由器A可能是作为备选网关,所以没有先走路由器A),路由器B就会发给主机A一个icmp重定向的数据包,主机收到数据包就会根据重定向找到正确的路由。所以icmp重定向常用于纠正网络访问错误
ICMP数据包格式
整个报文就42字节,需要强调的也就是不同的type+code的具有不同含义,如下图:
这里需要区别的就是
- 网络不可达:路由器没有这个网段的路由,将数据包丢弃,并回复一个网络不可达的数据包
- 主机不可达:有可达路由,主机却不可访问
- 协议不可达:网络可达,主机可达,结果不支持这个协议号,故回应协议不可达
- 端口不可达:网络可达,主机可达,结果主机端口(如HTTP80端口)不可访问,就会回应协议不可达icmp数据包
ping
-a 选择特定源地址
-c 指定发的包个数
-t 设置ttl值
Tracert
这也是icmp一个常见的应用,需要了解的就是tracert的工作原理,以下图为例
首先主机A 使用Tracert 30.0.0.2
1.主机发一个传输层的数据包,且端口号奇大 ,且一次发3个(因为是走udp协议,考虑到可能会丢包,所以设置为3个),且TTL值先为1 到达路由器A,这时TTL减为0,超时,返回一个超时是icmp数据包,这是主机A得到路由器A的地址
2.主级A继续向外发,TTL累加1,所以这次TTL值为2,三个包,假设到达路由器B时,TTL减为0,再次返回一个icmp超时包,这时主级A知道了路由器B的ip地址,如此往复
直至到达主级B时,之前我们说了我们Tracert所发的这个数据包端口号非常大,大到主机B没有办法处理这个数据包,于是回应一个目的端口不可达的icmp数据包,至此,主机A tracert追踪完成。
总结
- Ping使用到的是哪两类ICMP消息?
type 0 code 0 的Echo Reply 消息
type 8 code 0 的Echo Request 消息
- 当网络设备收到TTL值为0的IP报文时,会如何操作?
如果IP数据包在到达目的地之前TTL值已经降为0,则收到IP数据包的网络设备会丢弃该数据包,并向源端发送ICMP消息通知源端TTL超时。
来源:CSDN
作者:shark_辣椒
链接:https://blog.csdn.net/shark_chili3007/article/details/104009742