我的电脑上有两个操作系统,在其中一个操作系统中,TCP 可以正常找到通往主机的路径,而在另外一个操作系统中,traceroute 中途中断。路由是否可能以某种方式被缓存了?如果是这样,是否可以重置此缓存?观察到 KDE Neon 问题的操作系统是最新版本。
答案1
路线是否可能以某种方式被缓存?如果是这样,是否可以重置此缓存?
不,只有第一的跳跃(即到本地网关的路由)受操作系统的控制,但您无法控制网络外部所采用的路径。
请记住,Windows“tracert.exe”工具始终发送 ICMP 探测(而不是 TCP),而 Linux“traceroute”默认倾向于发送 UDP 探测(也不是 TCP,尽管它是一种选择)——有时这些会纯粹因为目标主机附近的防火墙配置而产生不同的结果;UDP 探测更有可能被悄悄丢弃。
用于traceroute -I
在 Linux 上强制使用 ICMP,并查看它是否对跟踪路由结果有任何影响。(也请尝试mtr
。)
是否可以强制 TCP 寻找到主机的另一条路径?
TCP 对路径或路由1一无所知- 它只是要求 IP 将数据包传送到特定地址,而路由选择完全是 IP 的工作。
然而,IP 路由通常逐跳,即每个网关单独决定将数据包转发到哪个“下一跳”,并且发送主机无法影响整个路径2(因此也不能缓存整个路径)。
回答标题中的问题:不,如果问题发生在您的网络之外,您无法强制 IP 寻找另一条路径 - 您需要联系最后一个可访问网络的运营商才能执行此操作。
影响路由的唯一方法是使用隧道通过其他地方的另一台协作主机 - 换句话说就是 VPN。即使您没有到主机的有效直接路径,VPN 服务器可能仍然有,并允许您作为变通方法访问主机,直到真正的问题得到解决。
1(IPv4 的前身 –TCPv3– 确实同时处理两项任务,但这只持续了很短的一段时间,即 1978 年。到年底,这两项职能分裂。
2(IPv4做过具有“源路由”选项,允许发送主机请求采取特定的转发步骤,同样,IPv6 也具有“路由报头类型 0”,又名 RH0,但由于存在安全风险,两者都已从规范中删除,您将找不到任何网络运营商再识别这些选项。因此,即使您仍然--gateway=
在 Linux traceroute 中看到该选项,或在 Windows tracert 中看到该-j
选项,它们也不再有效。)
答案2
扩展@user1686 答案中的脚注:https://superuser.com/a/1760203/374853
IPv4 确实有“源路由”......
IPv6 SRH(分段路由标头)允许发送者指定数据包应通过的“路径点”(其他 IPv6 地址)列表。然后,您的路线将是由每个路径点之间的路径组成的“路段”。
因此,如果您的网络支持,您可以指示 IP(无论如何是 IPv6)采用特定路由。
我不知道性健康和生殖健康 (SRH) 得到了多少广泛的支持。思科网站上的分段路由建议在私有网络中使用。我想大多数 ISP 都会忽略或丢弃该标头。
更多阅读:
这维基百科文章有点短小精悍,但却能提供很好的电梯宣传。
https://segment-routing.org包含大量有关 IPv6 分段路由细节的信息,包括数据包格式的详细描述。