UDP、防火墙和 nats

UDP, firewalls, and nats

我正在调试一些使用 UDP 通信的代码。 我的 CLIENT 在 NAT 和防火墙后面。 我的服务器是一台 AWS 机器,我在上面打开了上述 UDP 端口。 但是,此协议的一部分涉及服务器回答我的客户端。我预计它不起作用(NAT 和防火墙)。令我惊讶的是,我的客户端正在从服务器接收数据包!

这怎么可能?我的意思是,TCP(基于 UDP)有一个连接的概念,所以我猜想 NAT 和路由器可以关联一个传入的 UDP 数据包作为对出口连接的回复。但是这对纯 UDP 协议如何(以及为什么)有效?我的 NAT/Firewall 会让随机 UDP 进入我的客户端机器吗?

How is this possible?

这就是 NAT 的工作原理。您写道服务器正在应答您的客户端。这意味着客户发起了对话。使用 UDP 而不是 TCP 并不重要。 NAT 设备仍然创建适当的映射以让答案通过。否则所有 UDP 都会在 NAT 之后被破坏。

I mean, TCP (over UDP) has a concept of a connection, so I guess that the NATs and routers can associate an incomming UDP packet as a reply to an egress connection. But how (and why) does this work for a pure UDP protocol?

UDP 不是面向连接的这一事实无关紧要。当然,TCP 有会话的概念,但两者都有端口号,而这正是 NAT 所需要的。

Would my NAT/Firewall let in random UDP into my client machine?

不是"some random UDP"。它是来自客户端发送内容的相同 IP 和端口号的 UDP 段。