我听说,在某些公司网络上,来自同一用户的出站流量可以在不同的“发件人”IP 之间跳跃。这会破坏双向 UDP 吗?还是网络只对 TCP 这样做?
如果它确实破坏了双向 UDP,那么除了依赖 TCP 之外,双向 UDP 应用程序还有其他常见的处理方法吗?
答案1
来自同一用户的数据包可以在不同的“发件人”IP 之间跳转。这会破坏双向 UDP 吗,还是网络只对 TCP 这样做?
是的,当您使用带有公共地址池的 NAT 时确实会发生这种情况,但它不会中断,因为执行 NAT 的系统会保留一个将事物映射到正确位置的转换表。
由于 UDP 是无连接的,因此这些转换表条目会在一段时间后过期。其中“一段时间”是在防火墙本地定义的。如果在一定时间后没有发送或接收任何内容,转换就会中断。
如果您确实有一个跨防火墙的 UDP 应用程序,您通常需要提供一个选项来发送定期保持活动消息,以便您的 NAT 转换保持活动状态。理想情况下,此值是可调的。
答案2
只要 UDP 上使用的协议设计合理,就不会出现问题。如果一个端点的 IP 地址发生变化,则一旦该端点发送第一个数据报,另一端就应该将其目标 IP 更新为新的 IP。
这只是在 UDP 上创建自己的“连接”并错误地认为另一端的 IP 地址是固定的协议的问题。只要它们在每个 UDP 数据报中使用合理的连接标识符,并在另一端的 IP 地址发生变化时更新它,就不会出现问题。
当然,TCP 确实保证其连接可以通过源端口、源 IP、目标端口和目标 IP 的四元组唯一且持久地标识。每个处理 TCP 的设备都设计为不会破坏这一假设。但是,如果您想通过 UDP 实现连接,则必须创建自己的连接标识符。您不能使用源端口、源 IP、目标端口和目标 IP 的四元组,因为处理 UDP 的设备没有义务不破坏这一假设。
至少,如果你希望你的“连接”保持稳定,你就不能这样做。如果你不介意你的“连接”中断并必须重新建立,那么就不用担心。
有三种可能性:
UDP 上的协议层不需要支持 IP 地址更改,在这种情况下这并不重要。
UDP 上的协议确实需要支持 IP 地址更改,因此也支持它,在这种情况下没有问题。
UDP 上的协议层确实需要支持 IP 地址更改,但是却不支持,在这种情况下,协议就会损坏并且应该进行修复。
答案3
地址“跳跃”的唯一方式是流量从不同的 NAT 网关/防火墙重定向。在大多数情况下,这可能是某种故障的结果。
然而,所有这些中最重要的部分是,当通过 NAT 网关从内部(私有)IP 发起 UDP(或 TCP)会话时,返回流量将返回到该网关的外部地址,并将转发回发起主机。这为给定的会话维护了地址的一致映射。如果来自给定会话的流量转移到不同的外部地址,则此会话将中断。