【问题标题】:Can you respond to a UDP packet from a different server?您可以响应来自不同服务器的 UDP 数据包吗?
【发布时间】:2020-03-08 16:25:55
【问题描述】:

如果服务器 A 收到一个 UDP 数据包,由于 UDP 是无连接的,它是否可以将其转发给服务器 B,并让服务器 B 直接响应最终客户端,而不需要通过服务器 A 返回?

我的直觉是不,除非服务器 A 和服务器 B 具有相同的 IP 地址(可能是任播?)

但是如果客户端被构建为也是一个 UDP 服务器,它在理论上可以工作,因为来自服务器 B 的(逻辑)响应看起来就像一个新请求。但是由于防火墙和 NAT,这在实践中确实行不通,出于同样的原因,很难从防火墙、路由器和 ISP 后面托管游戏服务器。

【问题讨论】:

  • 您可以发送它,但它不会被接收者视为响应,因为它来自与发送请求不同的源地址,即使防火墙和 NAT 允许。
  • 为什么要这样做?你能在服务器附近设置一些(有状态的)盒子来确保数据包被中继到适当的服务器吗?
  • 理想情况下,我应该能够将请求从服务器 A 转发到直接响应最终用户的服务器 B,而不必通过不关心的 A 代理可能较大的响应。不过,即使对于像 UDP 这样的无连接协议,互联网似乎也不是这样工作的。

标签: networking network-programming udp


【解决方案1】:

如果服务器 A 收到一个 UDP 数据包,由于 UDP 是无连接的,它是否可以将其转发给服务器 B,并让服务器 B 直接响应最终客户端,而不需要通过服务器 A 返回?

是的,可以。但是,有一些警告:

  1. 大多数客户端都落后的 NAT 设备。有several types of NAT devicesfull-cone NAT 会很好地接受重定向的数据包,但地址限制的 NAT 将要求数据包从它发送到的同一地址返回(因此,您的任播想法会起作用,因为以及简单地让服务器 B 欺骗服务器 A 的 IP)。 port restrictedsymmetric NAT 也需要相同的源端口(即服务器 B 必须从服务器 A 接收响应的同一端口发送响应)。

  2. 其他类型的网络middleboxes,例如防火墙可能会阻止返回的数据包

  3. 应用程序 - 客户端应用程序会接受来自不同 IP 地址和端口的响应吗?

【讨论】:

  • 有趣,您知道 AWS VPC 是否可以进行这种 IP 欺骗?
  • 我认为使用 cloudflare 频谱,这是一个任播 UDP 反向代理,这可能更广泛地来自“公共”云 - 但需要一个企业帐户,所以我无法测试它。
  • 从未尝试在 AWS 上欺骗 IP,但我觉得它行不通。
猜你喜欢
  • 2012-04-03
  • 2018-10-07
  • 2014-01-09
  • 2017-06-27
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
相关资源
最近更新 更多