小樱 发表于 2024/10/27 10:50

比特彗星使用UTP协议进行NAT1 UDP打洞实现原理

比特彗星使用UTP协议进行NAT1 UDP打洞实现原理

比特彗星NAT1打洞主要为以下两个方面
核心改进:添加对DHT协议里的implied_port 参数支持,以增强对透过NAT网络进行uTP传输的支持
核心改进:通过PEX发送peer列表时,对已连接的uTP peer提供其UDP外网端口,而不采用其本地监听端口

AB反向回连
≥ v1.95版本,需要双端为比特彗星,A为公网或者NAT1,B可以是NAT4(对称形)
核心改进:发起uTP连接时,优先使用之前连入过的远程端口(可以实现AB互相打洞,A为公网,B为NAT1的情况,B异常原因断开连接后A可以直接回连到B,而不需要傻傻的等待B后续远程连入到A)

增强版AB反向回连
v2.21 新增的增强版AB反向回连可以实现和utorrent或者其它任意客户端实现反向回连

对于DHT
发送包


回复包


对方peer获得端口号与NAT1端口一致


对于PEX
与另一个peer建立连接后,双方都会把NAT1正确的端口通过PEX传递给对方与其它所有人,实现打洞

比特彗星的打洞和tracker汇报时发送为监听端口,而不是NAT端口,当前版本没有借助tracker去打洞

PT打洞原理
私有种子根据规范,使用BEP55协议,打洞需要等待2分钟左右
UTP直接发起请求连接失败后,则对自身客户端已经建立TCP和UTP传输连接的所有peer发起BEP55协议请求,随后响应可用于打洞的peer

截至目前libtorrent-2.0.10版本,依旧无法进行NAT1打洞

借助其它脚本实现外部方式的打洞也是可以的,但是实现过程比较复杂,不如直接在软件中内置PEX、DHT打洞算法,毕竟讲究的是默认值,不可能人人都会怎么去使用脚本

参考内容
打洞视频演示:https://bbs.itzmx.com/thread-98156-1-1.html
页: [1]
查看完整版本: 比特彗星使用UTP协议进行NAT1 UDP打洞实现原理