我编写了 Windows 应用程序,用于向服务器应用程序发送命令(客户端),该应用程序通过 UDP 返回一些数据。这在本地 LAN 上有效,但当我将服务器软件放在数据中心时,服务器会收到命令,但不会返回任何数据。我必须专门打开路由器中的端口,然后它才会让回复返回。我以为路由器会暂时允许返回通信。有人能帮忙吗?
答案1
当数据包从网络内部发送到某个外部服务器时,NAT 路由器会根据 UDP“连接”创建一个关联(状态),即 的元组(client_ip,client_port,server_ip,server_port)
。只有与此元组匹配的回复才会转发到内部客户端,因为其他传入数据包不存在此类关联。
我必须在路由器上专门打开端口
这句话表明服务器将回复发回固定端口,而不是将回复发回其来源的 IP 和端口。这意味着回复数据包与创建的 NAT 关联不匹配,因此路由器不知道应将它们转发到哪个内部客户端 IP 和端口。