网络 ICMP协议应用.md

本文最后更新于:2024年5月10日 下午

ICMP协议应用

先回顾一下相关知识,ICMP协议是网际层使用的,但是它封装在了IP数据包的数据部分

ICMP报文格式:前4个字节是统一格式,共三个字段:类型、代码和检验和,后4个字节内容与具体的类型有关,最后是数据字段

image-20230418174505639

ICMP报文分类:

  • 差错报告报文
    • 终点不可达
    • 时间超时
    • 参数问题
    • 改变路由(重定向)
  • 询问报文
    • 回送请求和回答
    • 时间戳请求和回答
image-20230418174544071

询问报文例子

PING——分组网间探测(Packet InterNet Groper)用来测试两台主机之间的连通性,使用了ICMP回送请求和会送回答报文,PING是应用层直接使用网络层ICMP的一个例子,没有通过运输层的TCP或UDP

在cmd窗口中输入ping www.baidu.com,回车就可以看到结果

image-20230418174356254

流程:键入ping www.baidu.com后,PC会一连发出四个ICMP回送请求报文,如果服务器baidu.com正常工作且响应了这个ICMP会送请求报文,那么它就会发送会送回答报文,往返的ICMP报文上有时间戳,可以得出往返时间,最后显示统计结果:发送到哪个IP地址,发送的、接受的、丢失的分组数,往返时间最小最大平均值

注:出现分组丢失时,ping指令并不会给出原因

路由重定向例子

traceroute(在Windows中是tracert):不断发送数据报来检测,找到故障的路由器

  • 由源主机向目的主机发送一连串的IP数据报,数据包中封装的是无法交互的UDP用户数据报。第一个数据包P1生存时间TTL设为1,P1到达第一个路由器R1时接收完后被丢弃,并向源主机发送一个ICMP时间超过差错报告报文
  • 源主机再发送第二个数据包P2,TTL设置为2,同理到第二个路由器R2接收完丢弃,并向源主机发送一个ICMP时间超过差错报告报文
  • ······重复上面的操作,当最后一个数据报到达目的主机,数据包的TTL为1。由于数据包中封装的是无法交付的UDP数据报,因此目的主机向源主机发送ICMP终点不可达差错报告报文
  • 最后源主机就得知了想要的路由信息:从源主机IP出发到目的主机所经过的路由器的IP地址,以及每一所需要的往返时间

注:原则上经过路由器越多时间越长,但是实际上由于互联网的拥塞程度时一直变化的,也有可能出现经过更多路由器反而时间更少


网络 ICMP协议应用.md
https://61hhh-github-io.vercel.app/20200709/26507caa/
作者
LY
发布于
2020年7月9日
许可协议