基础-ICMP协议

一、网际控制报文协议ICMP

  • 主要功能:确认IP包是否成功到达目的地址,报告发送过程中IP包被废弃的原因和改善网络设置等。
  • 目的:为更有效地转发IP数据报和提高交付成功的机会。
  • 封装在IP数据报中,但不属于高层协议。

二、ICMP报文

  • 查询报文类型
    • 0 - 回送应答(Echo Reply)
    • 8 - 回送请求(Echo Request)
  • 差错报文类型
    • 3 - 目标不可达(Destination Unreachable)
      • 网络不可达 - 0
      • 主机不可达 - 1
      • 协议不可达 - 2
      • 端口不可达 - 3
      • 需要进行分片但设置了不分片 - 4
    • 4 - 原点抑制(Source Quench)
      • 目的:缓和网络拥堵
      • 当路由器向低速线路发送数据时,其发送队列的缓存变为零而无法发送出去时,可以向IP包的源地址发送一个ICMP原点抑制消息。
      • 收到消息的主机借此了解在整个线路的某一处发生了拥堵的情况,从而增大IP包的传输间隔,减少网络拥堵的情况。
      • 由于这种ICMP可能会引起不公平的网络通信,一般不使用。
    • 5 - 重定向或改变路由(Redirect)
      • 如果路由器发现发送端主机使用了【不是最优】的路径发送数据,会返回一个ICMP重定向消息给这个主机。
      • 消息中包含最合适的路由信息和源数据。主要发生在路由器持有更好的路由信息的情况下。路由器会通过这样的ICMP消息告知发送端,让它下次发送给另一个路由器。
    • 11 - 超时(Time Exceeded)
      • IP包中有一个字段TTL(Time To Live,生存周期),其值随着每经过一次路由器就会减1,直到减到0时,该IP包会被丢弃。
      • 主要目的:在路由控制遇到问题发生循环状况时,避免IP包无休止地在网络上转发。
      • 有时可用TTL控制包的到达范围,例如设置一个较小的TTL值。

三、ping命令

  • 测试两台主机之间的连通性
  • 原理:通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 应答报文。
  • Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率
  • 利用回送消息。
  • 回送消息:用于进行通信的主机或路由器之间,判断发送的数据包是否已经成功到达对端的一种消息。
ICMP回送请求和回送应答报文

四、traceroute命令

充分利用ICMP差错报文类型的应用,在UNIX、MacOS中是traceroute,在Windows中对等的命令叫tracert。

  • 用来跟踪一个分组从源点到终点的路径
  • 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。
  • 源主机获知到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间

(1)作用一:设置特殊TTL,追踪去往目的地时沿途经过的路由器

  • 原理:利用IP包的生存期限从1开始按照顺序递增的同时发送UDP包,强制接收ICMP超时消息。
  • 拿到所有的路由器IP。有的路由器根本不会返回ICMP,所以对于有的公网地址,是看不到中间经过的路由的。

(2)发送方如何知道发出的UDP包是否到达了目的主机?

traceroute发送UDP包时,会填入一个不可能的端口号值作为UDP目标端口号(大于3000)。当目的主机,收到UDP包后,会返回ICMP差错报文消息,但这个差错报文消息的类型【端口不可达】。
所以,当差错报文类型是端口不可达时,说明发送方发送的UDP包到达了目的主机。

(3)作用二:故意设置不分片,确定路径的MTU

  • 有时候并不知道路由器的MTU(Maximum Transmission Unit,最大传输单元)大小,以太网数据链路上的MTU通常是1500字节,但是非以太网的MTU值就不一样了,需要知道MTU大小,从而控制发送的包的大小。
  • 工作原理:首先在发送端主机发送IP数据报时,将IP包首部的分片禁止标志位设置为1。根据这个标志位,途中的路由器不会对大数据包进行分片,而是将包丢弃。随后,通过一个ICMP的不可达消息将数据链路上MTU的值一起发送给主机,不可达消息的类型为【需要进行分片但设置了不分片位】。
  • 发送主机端每次收到ICMP差错报文时就减少包的大小,以此来定位一个合适的MTU值,以便达到目标主机。

你可能感兴趣的:(基础-ICMP协议)