traceroute 如何将 TTL 字段添加到 UDP 标头?

网络工程 跟踪路由 ttl
2022-02-16 02:27:28

如果 UDP 数据包的标头是固定的 8 字节大小,它如何不包含 TTL 字段,traceroute 如何放置该字段?

3个回答

UDP 数据报在 IP 数据包中携带。IP 数据包标头将具有该字段:IPv4 的 TTL 或 IPv6 的跳数。

UDP 数据报不会在未封装的情况下通过网络传输(UDP 标头中也没有 IP 地址),它们仅在主机内部相关。UDP数据报会从IP中解封出来,直接传递给UDP进程,所以从IP到UDP真的只有一跳。

UDP确实没有TTL概念。

TTL 字段位于 IPv4 数据包标头内。UDP 本身没有这样的计数器。

数据包通过的每个路由器都会减少 TTL。路由器只对数据包头进行操作,而不对传输层头进行操作。

traceroute 等命令和应用程序利用了正常的 IP 行为。他们使用 IPv4(IPv6 中的跳数)中的 TTL 字段,将其替换为 1,而不是默认值 32、64 等。

第一个路由器将其减一,TTL 值为零,从而丢弃数据包并将 ICMP TTL Exceeded 返回给您的主机,这导致第一个路由器的 IP 地址泄露。

然后 traceroute 设置 TTL=2, TTL=3,... 以此类推。

并非所有 traceroute 的实现都使用 UDP。实际上有些默认为ICMP。但是无论是 UDP、ICMP 还是 TCP 被用作传输(在没有限制性防火墙的情况下),结果大部分时间都是一样的。

重要的部分是发送的 IP 数据包头中的 TTL,以及回复中的源 IP 地址。