在内部,traceroute 如何通过 IP 地址的主机名发出请求?
我知道 traceroute 命令可以使用主机名或 IP 地址,但是当输入主机名时,该主机名是否用于每个渐进请求,或者 traceroute 是否会对该主机名执行 dns 查找,然后使用 IP 地址进行每个渐进请求?
我正在尝试调试与我们的客户端的连接问题,它似乎是 DNS 问题,但我不确定。
感谢您的时间。
答案1
在内部,traceroute 如何通过 IP 地址的主机名发出请求?
与对主机名发出的所有网络请求一样,该名称将解析为 IP,并且与端点的所有通信都严格通过 IP 进行。实际上不存在“通过主机名进行通信”这种事。
当输入主机名时,该主机名是否用于每个渐进请求,或者 traceroute 是否对该主机名执行 dns 查找,然后使用 ip 地址进行每个渐进请求?
对于 traceroute 中的每个跃点,它会查找PTR
每个 IP 的记录。如果存在,则该记录会打印在 traceroute 的输出中。如果记录PTR
不存在,则打印 IP。
我正在尝试调试与我们的客户端的连接问题,它似乎是 DNS 问题,但我不确定。
如果是这种情况,traceroute 不是一个好的故障排除工具。请尝试dig
或nslookup
。
答案2
第一步是确定问题类型。使用 nslookup 或 dig 测试 DNS。如果测试通过,则不是 DNS 问题,您可以继续使用 tracert。
当您在 Windows 上使用 tracert 时,默认情况下它会尝试对每个跳点执行 rDNS 查找。您可以使用开关更改此行为-d
。
答案3
对 traceroute 命令进行 strace 操作。在 strace 输出中,您会在很早的时候看到对 libresolv 的调用,该调用导致获取 IP 地址。此后,您会看到获取中间跳数,并在跳数处与每个硬件建立网络连接,所有这些都是通过 IP 地址进行的。这表明主机名仅用于初始 DNS 查找:之后的所有操作都通过 IP 地址完成。