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