运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

网络 – NAT转换不在网络内部工作(发夹条件)

运维开发网 https://www.qedev.com 2020-06-15 13:24 出处:网络 作者:运维开发网整理
我正在写一个P2P应用程序.对等体定期ping主服务器以更新其当前的IP /端口,因此当对等体想要到达另一个时,它可以向服务器询问该信息.现在,对等体使用UPnP配置NAT(用于经典家庭设置)可从外部访问. 所以一切正常,除非对等方的客户端试图到达另一个(或同一个)对等方的服务器,并且两者都在同一个NAT之后.由于在这种情况下客户端试图从NAT后面到达其自己的“外部”(公共)IP地址,因此NAT不
我正在写一个P2P应用程序.对等体定期ping主服务器以更新其当前的IP /端口,因此当对等体想要到达另一个时,它可以向服务器询问该信息.现在,对等体使用UPnP配置NAT(用于经典家庭设置)可从外部访问.

所以一切正常,除非对等方的客户端试图到达另一个(或同一个)对等方的服务器,并且两者都在同一个NAT之后.由于在这种情况下客户端试图从NAT后面到达其自己的“外部”(公共)IP地址,因此NAT不执行端口转发并且无法路由IP数据包.

现在我想到两个解决方案:

>使用UPnP查询NAT以查看端口转发到的本地IP

>在主服务器上存储对等体的内部IP

你能想到其他解决方案吗?主流P2P应用程序实施哪些策略来解决这个问题?

Since in that case the client is trying to reach its own “external”

(public) IP address from behind the NAT, the NAT doesn’t do the port

forwarding and is unable to route the IP packet.

这被称为发夹状况.并非所有路由器/ NAT都能正确解决此问题解决方案是:

a)检查您的路由器/ NAT是否可以配置为启用“发夹”.如果您控制部署中的所有路由器/ NAT,则此解决方案有效.

b)购买另一个允许此操作的路由器/节点.就像a)一样,如果您控制部署中的所有路由器/ NAT,它都可以工作.

c)如果您可以从UPnP获取端口信息,这也是一个解决方案,但并非所有路由器/ NAT都知道或支持UPnP.它不包括大型部署中的所有情况.

d)使用多播来“发现”局域网上的其他节点,甚至与它们通信是这个问题的常见解决方案.您需要就IP地址达成一致并让对等方听取它.

e)在服务器上存储私有IP地址也是一种解决方案,但它需要比解决方案d更多的服务器存储容量.还要处理超时(即数据有效期到期).

f)在对等体之间使用类似TURN的通信(即,节点之间的通信通过中央服务器).这种解决方案非常坚固,但在带宽消耗方面并不是最有效的.

希望这可以帮助.

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消