ut_holepunch中中继节点如何连接目标节点?端口错误场景分析
libtorrent
ut_holepunch场景的端口匹配问题 在libtorrent的ut_holepunch场景下,我们做如下假设:
- 发起节点的本地端点为
1.2.3.4:6881,映射地址为5.6.7.8:5881。当该节点向tracker宣告时,tracker会保存5.6.7.8:6881——因为6881是节点宣告的端口,但并非其实际对外端口。 - 目标节点的本地端点为
9.10.11.12:6882,映射地址为13.14.15.16:5882。当该节点向tracker宣告时,tracker会保存13.14.15.16:6882——因为6882是节点宣告的端口,但并非其实际对外端口。
BEP-0055中明确:
发起节点向中继节点发送包含目标节点端点(IP地址和端口)的会合消息。如果中继节点已连接到目标节点,且目标节点支持该扩展,中继节点会向发起节点和目标节点各发送一条连接消息,其中包含对方的端点。收到连接消息后,两个节点都会向对方发起uTP连接。
基于此逻辑,发起节点向中继节点发送会合消息时,中继节点必须已连接到目标节点才能触发打洞流程。但如果tracker保存的目标节点端口错误,所有中继节点都无法连接到该目标节点,最终导致ut_holepunch打洞失败。
内容的提问来源于stack exchange,提问作者MOHAMMAD RASIM
相关产品推荐
相关产品推荐

