如何在对称 NAT 下向客户端发送数据包

Posted

技术标签:

【中文标题】如何在对称 NAT 下向客户端发送数据包【英文标题】:How to send packets to a client under Symmetric NAT 【发布时间】:2014-10-04 13:49:55 【问题描述】:

我正在尝试将 UDP 数据包从 对称 nat 中的 客户端 发送到 公共服务器。我能够向服务器发送数据包但是我希望服务器在对称锥形 nat 下向客户端发送数据包。我该如何解决这个问题?请帮帮我。

【问题讨论】:

客户端只能发送到对方的公共 IP/端口,因为这些通常是您可用的唯一可路由 IP。 【参考方案1】:

使服务器将数据包发送到客户端的外部IP +端口,服务器在客户端的第一个数据包到达时检测到该端口。

基本上,路由器允许来自与其连接的设备的任何传出 UDP 流量,并阻止所有传入的 UDP 流量。但是,每当发送 UDP 数据包时,它都会维护一个源和目标 IP+端口表。它允许来自路由器外部设备的回复,前提是路由器必须具有外部设备 IP+端口的条目。

因此,您现在只需在表格中使用此映射即可。 只需让您的服务器从它从客户端接收的数据包中检测客户端的外部 IP+端口,然后让服务器在该外部 IP+端口上将数据包发送回客户端。

这将在路由器的防火墙上打一个洞,即路由器防火墙现在将允许传入的 UDP 数据包,因为它的表中已经包含一个条目。这个过程称为打孔。

您可以在各种发布的 RFC 中了解所有这些 NAT 穿越过程。

【讨论】:

以上是关于如何在对称 NAT 下向客户端发送数据包的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 NAT 通过公共 IP 发送 UDP 数据包?

不使用浏览器发送 HTTP 数据包?

任何人都可以告诉我如何在没有永久连接到 PHP 的情况下向客户端发送通知的方法

如何在不关闭套接字的情况下向主机发送 FIN 标志

如何配置NAT?

对称加密和非对称加密