如何通过 NAT 通过公共 IP 发送 UDP 数据包?
Posted
技术标签:
【中文标题】如何通过 NAT 通过公共 IP 发送 UDP 数据包?【英文标题】:How to Send A UDP packet via public IP through NAT? 【发布时间】:2015-01-06 13:30:29 【问题描述】:我有一个 UDP 服务器在我的专用网络上运行。我有一个超出 NAT 的设备,它通过公共 IP 将 UDP 数据包发送到我的服务器。我能够接收 UDP 数据包,解析它们,我可以查看有效负载、src 和 dest 端口。现在我需要向那个设备发送一个 ACK 消息,所以我已经捕获了 ip 和端口号并向它发送一个 UDP 数据包。但我无法查看该设备中的任何 UDP 数据包。
我的问题是因为我的设备超出了 NAT,所以我得到的 IP 地址和端口号是 NAT 还是实际设备的?
如何通过 NAT 将 UDP 数据包发送到该设备?
【问题讨论】:
恕我直言,这里的问题是题外话。它更适合networkengineering.stackexchange.com en.wikipedia.org/wiki/UDP_hole_punching 【参考方案1】:我的问题是因为我的设备超出了 NAT,所以我得到的 IP 地址和端口号是 NAT 还是实际设备的?
您从数据包中识别的 IP 和端口是 NAT 为客户端创建的映射。简单来说就是设备所连接的NAT的IP和端口。
如何通过 NAT 将 UDP 数据包发送到该设备?
您需要回复服务器从客户端收到的数据包中检测到的 IP 和端口。 更清楚的是,您需要实现 UDP Holepunching。
我想您应该首先了解与在 NAT 下工作的设备的连接有关的网络问题。各种 RFC 可用于 NAT Traversal 和 UDP Punching。
这里有一些来源:
http://en.wikipedia.org/wiki/Network_address_translation
http://en.wikipedia.org/wiki/UDP_hole_punching
https://www.rfc-editor.org/rfc/rfc4787
https://www.rfc-editor.org/rfc/rfc5128
【讨论】:
以上是关于如何通过 NAT 通过公共 IP 发送 UDP 数据包?的主要内容,如果未能解决你的问题,请参考以下文章