有关UDP NAT Traversal的大部分信息涉及中间服务器将公共端点传递给两个客户端。如果为客户端预先配置了公共端点,是否可以快捷方式?
NAT后面的两个客户端是否可以开始向对方的公共IP发送UDP流量:端口是否打孔?除了传播公共端点之外,其他任何内容都是必需的吗?
答案 0 :(得分:3)
我不能说权威(或提供消息来源),而是根据我在过去一个月中使用STUN和TURN协议收集的内容:
NAT有很多种方式来分配端口(见下文)。完整锥形NAT是一对一映射,因此一旦NAT映射端口,任何外部主机都可以使用相同的映射将数据包发送到专用主机。但是,例如,如果NAT类型是对称的,则到不同外部IP的数据包将具有不同的端口映射。
对于某些NAT类型(例如全锥),可以使用STUN服务器来确定NAT端口映射。这个STUN服务器是你提到的中间服务器的一个流行的例子。一些限制性更强的NAT类型(例如,对称)使得无法使用STUN服务器,并且不可能直接进行对等连接。这是因为STUN服务器假定NAT端口映射不依赖于外部IP,但对称NAT为不同的外部IP分配不同的端口映射。
具体的地址转换(路由器如何映射端口号)算法取决于具体的路由器(我的推测)。有些路由器使用随机端口分配,这使得客户端不可能事先在没有中间公共服务器的情况下进行连接以进行此确定(STUN)。
通常,不,不可能删除中间服务器。除非您对NAT的工作方式有一些内部了解(这可能取决于路由器的具体型号),否则必须使用中间服务器。