我想了解当两个主机每个后面的端口限制锥形NAT Build 连接时,udp打孔是如何工作的 .
据我所知,它发生在几个阶段,涉及三个主机 .
主机A和主机B位于端口限制锥NAT之后 .
主机C是可以从主机A和B接收数据包的服务器 .
-
A向C发送数据包 .
-
C从A接收数据包并确定A的外部地址:端口对
-
B向C发送数据包 .
-
C从B接收数据包并确定B的外部地址:端口对
-
C将外部地址:B的端口发送给A
-
C将外部地址:A的端口发送给B.
-
A将packet_1发送到B的外部地址
-
B将packet_2发送到A的外部地址
问题是:
限制锥形NAT后面的A如何接收来自B的数据包,该数据包也位于受限锥形NAT后面?
端口限制锥形NAT不允许数据包,其中源地址:端口对与要发送的目标地址:端口对的数据包不匹配 . 为什么在A和B之间发送的其他数据包到达A和B?
是因为端口限制锥形NAT认为packet_2是来自B的响应吗?
所以packet_1会丢失但是packet_2会到达B.我是对的吗?
先感谢您 .
4 回答
仅供参考,这是一个paper,可以解决您的问题,并提供NAT的详细概述 . pdf版本可用here .
首先,受限锥体意味着如果A与C对话,则B不能使用在A和C之间打孔的孔与A进行通信,假设B在nat后面是 not . 意思是,nat遍历在这种情况下不起作用 .
在这种情况下,它是一种不同的情况,称为发夹条件 . 换句话说,nat背后的B可以从nat后面使用A的翻译地址吗?有些nat正确处理这种情况,有些则没有 .
在您的情况下,即使您的nat正确处理发夹条件,B的数据包也不会因为“受限锥”而被转发 . 所以,结果是一样的 .
他们不会在你的情况下 .
你是对的,请阅读skype works,这就是你要找的
我写了一篇:PyPunchP2P . 看看是否有人可以使用它 .