UDP 数据包与运行 NAT 的两个并行网关

网络工程 路由 纳特 UDP
2021-07-13 21:20:30

我正在编写一个应用程序,它使用 UDP 数据包将信息发送到 Internet 上的服务器,然后以相同的方式接收数据。它似乎在 NAT 后面工作正常,但我想知道更复杂的情况......

如果客户端在 LAN 上,在外面有多个并行路由,运行 NAT,该怎么办?在这种情况下,我的服务器可以从许多不同的地址/端点接收来自同一客户端的流量,但通信仍然有效吗?或者这是否依赖于路由器软件和原始映射可能会导致断开连接?也许我应该跟踪我从中获取流量的所有地址并将其发送到最活跃的地址?

我假设我的所有数据包中都需要一些标识令牌才能使其正常工作,因为我不能依赖 IP 地址?

2个回答

我假设您正在使用 NAT 将私有源地址转换为公共源地址。每个 WAN 接口将具有不同的公共地址。因此,离开一个 WAN 接口的数据包将与离开另一个 WAN 接口的数据包具有不同的源地址。这是不推荐按数据包负载平衡的原因之一(您应该使用按流负载平衡)。

您的情况根本不适用于 TCP,因为它使用基于源 IP 和目标 IP 以及 TCP 地址的连接,如果您使用 NAT,这些连接将与每个 WAN 接口不同。UDP 不使用连接,因此可以避免该问题,但您需要处理来自应用程序中每个 WAN 接口的不同源 IP 和 UDP 地址。不幸的是,协议、应用程序和编程在这里都是题外话。您可以尝试在Stack Overflow上询问

一般来说,大多数客户端在任何给定时间只会使用一条路线到达目的地,但所使用的路线可能会随着时间的推移而改变。如果一段时间不使用,NAT 和防火墙中的映射也可能会过时。

因此,如果您想与客户保持长期沟通,则需要这样做。

  1. 引入某种标识符,以便您可以区分客户端。
  2. 跟踪客户端最近使用的 IP/端口,以便您可以将消息发送回客户端。
  3. 从客户端向服务器发送 keepalive 以刷新路径上任何防火墙和 NAT 中的映射,并使您的服务器在客户端的当前网络位置上保持更新。