我有一个在我的专用网络上运行的 UDP 服务器。我有一个超出 NAT 的设备,它通过公共(public) IP 将 UDP 数据包发送到我的服务器。我能够接收 UDP 数据包,解析它们,并且可以查看有效负载、源端口和目标端口。现在我需要向该设备发送 ACK 消息,以便捕获 IP 和端口号并向其发送 UDP 数据包。但我无法查看该设备中的任何 UDP 数据包。
我的问题是,由于我的设备超出了 NAT,我获得的 IP 地址和端口号是 NAT 的还是实际设备的?
如何通过 NAT 将 UDP 数据包发送到该设备?
最佳答案
My question is as my Device is beyond NAT the IP address and port number I am getting is NAT's or the actual device's ?
您从数据包中识别出的 IP 和端口是 NAT 为客户端创建的映射。简单来说就是设备所连接的NAT的IP和端口。
How to send the UDP packet to that device through NAT ?
您需要回复服务器从客户端收到的数据包中检测到的 IP 和端口。 更清楚地说,您需要实现UDP Holepunching。
我想您应该首先了解有关连接到在 NAT 下工作的设备的网络问题。各种RFC可用于NAT穿越和UDP打洞。
以下是一些来源:
http://en.wikipedia.org/wiki/Network_address_translation
http://en.wikipedia.org/wiki/UDP_hole_punching
关于java - 如何通过NAT通过公网IP发送UDP数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26840514/