ICMP协议

你。 提交于 2020-01-17 02:20:09
前言

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追踪完成。
在这里插入图片描述

总结

  1. Ping使用到的是哪两类ICMP消息?

type 0 code 0 的Echo Reply 消息
type 8 code 0 的Echo Request 消息

  1. 当网络设备收到TTL值为0的IP报文时,会如何操作?

如果IP数据包在到达目的地之前TTL值已经降为0,则收到IP数据包的网络设备会丢弃该数据包,并向源端发送ICMP消息通知源端TTL超时。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!