Network ICMP 协议与Ping 、 Traceroute

  1. icmp 分为 查询报文与有差错控制报文
  2. ping 使用查询报文,traceroute 使用差错报文
  3. 查询报文有 ICMP ECHO REQUEST 与 ICMP ECHO REPLY,查询的类型为8,应答的报文为0
  4. 差错报文:
    • 终点不可达
      • 网络不可达 (没找到地方)
      • 主机不可达 (找到地方没找到人)
      • 协议不可达 (找到地方,找到人,语言不通)
      • 端口不可达 (找到地方,找到人,要说的事情对不上)
      • 分片错误 (因为过程中策略限制,无法送达)
    • 源站抑制 (告诉发送方减小发送的数量)
    • 时间超时 (超过网络包的生存时间)
    • 路由重定向(告诉发送方下次走另外一条路线)

Traceroute 的第一个作用就是故意设置特殊的 TTL,来追踪去往目的地时沿途经过的路由器。Traceroute 的参数指向某个目的 IP 地址,它会发送一个 UDP 的数据包。将 TTL 设置成 1,也就是说一旦遇到一个路由器或者一个关卡,就表示它“牺牲”了。如果中间的路由器不止一个,当然碰到第一个就“牺牲”。于是,返回一个 ICMP 包,也就是网络差错包,类型是时间超时

Traceroute 还有一个作用是故意设置不分片,从而确定路径的 MTU。要做的工作首先是发送分组,并设置“不分片”标志。发送的第一个分组的长度正好与出口 MTU 相等。

报文类型类型代码描述
目的不可达3当数据包无法到达目的地时发送,例如网络不可达、主机不可达、协议不可达、端口不可达等
超时11当数据包的 TTL(生存时间)字段降为 0 时发送,或分片重组超时
参数问题12当 IP 数据包中的参数有问题时发送,例如 IP 头部中的某些字段值无效
重定向5当路由器发现一个更有效的路由时发送,建议发送方使用更短的路径
回显请求8用于测试目的主机的可达性和响应时间,发送方发送回显请求
回显应答0对回显请求的响应,确认目的主机的可达性
时间戳请求13用于请求目的主机的时间戳信息,以便同步网络设备的时钟
时间戳应答14对时间戳请求的响应,包含目的主机的时间戳信息
信息请求15请求目的主机的特定信息
信息应答16对信息请求的响应
路由器通告(IPv6)9用于 IPv6,由路由器发送给邻近节点,提供网络配置信息
路由器请求(IPv6)10用于 IPv6,由节点发送给路由器,请求网络配置信息
邻居通告(IPv6)135用于 IPv6,通告节点的可达性
邻居请求(IPv6)133用于 IPv6,请求邻居节点的信息
重定向消息(IPv6)134用于 IPv6,类似于 IPv4 的重定向报文,但用于 IPv6 环境