UDP打孔混乱

时间:2018-08-06 05:00:53

标签: networking udp hole-punching

嗨,我对UDP打孔如何工作以及如何实现它感到有些困惑。根据此维基百科文章: https://en.m.wikipedia.org/wiki/UDP_hole_punching#Flow 想要建立p2p连接的两个客户端都必须与服务器建立UDP会话,以便交换ip和打孔。我很困惑的是,说客户a要与客户b发起p2p对话。客户端b如何知道连接到服务器以便客户端交换ip?这是必需的,否则他们将不知道其他客户端ip。我是否以某种方式误解了这个概念?

1 个答案:

答案 0 :(得分:0)

在正常情况下,对等方没有静态IP地址,并且公共端口也使用瞬态路由规则动态分配,有效期通常为1至3分钟。

无法猜测双对等体的动态端口,甚至没有预定义的转发规则也无法建立到该对等体的立即路由。

与经常转录的文档相反,通过路由器+ Internet服务提供商进行的打孔实际上是通过将UDP数据包发送到公共中介服务器来完成的。

对等方通过重新使用来相互联系,确切地是中介服务器当前看到的公共IP /端口。

介体服务器的路由器必须具有到服务器的转发规则,因此该服务器是公共可达的,并且可以启动公共通信。

如果中介服务器没有静态地址,则需要使用公共DNS服务器来解析服务器的动态地址。

为了捕获本地端口映射并将数据包返回到正确的目标, 所有三个节点都将维护一个唯一的静态节点标识符到传入数据包的当前ip /端口的映射;每个客户端都需要定期将带有客户端标识符的活动消息发送给中介服务器;调解器服务器以一条活动确认消息响应,该消息中包含调解器服务器的当前公共地址/端口。在这里,将考虑路由器的可选端口映射规则,以获取实际的公共端口。

动态调整远程端口使其很难拥有多个独立的通信通道,至少我不知道UDP服务器的派生机制。

如果需要独立的通讯渠道,例如就像在FTP中一样,您有一个命令端口和一个流端口,数据包协议可能会被逻辑端口扩展,传入的数据包可能会根据逻辑端口进行分派。

最后存在安全风险:

1。)任何人在路由路径的任何节点上嗅探,都可能造成通信被劫持;他可以从另一个地址向其他对等方发送活消息,从而继承对等方的通信流。 最小的解决方案是在活动消息中添加身份验证。

2。)当然,任何公共网络中的用户数据都必须加密! 由于UDP数据包传递的不确定性,因此仅可以基于数据包进行加密,例如AES / ECB确实如此,因此应选择较强的强度。