我刚开始研究bittorent协议,有一个问题是关于所有传入连接都使用相同端口的bittorrent客户端。
以下是我的问题示例:
第一次连接:本地对等端侦听1.0.0.1:1并接收来自地址为2.0.0.2:2的远程对等端的连接。正常。启动PWP
第二次连接:本地对等端侦听1.0.0.1:1并接收来自地址为3.0.0.3:2的远程对等端的连接。正常。启动PWP
第三次连接:本地对等端侦听1.0.0.1:1,并接收来自地址为2.0.0.2:2但具有另一个InfoHash的远程对等端的连接
第三次连接是否可能或远程对等方(2.0.0.2:2)必须跟踪其与本地对等方的连接(1.0.0.1:1?
是的,两个对等体可以使用多个连接,同时与不同的InfoHashes共享种子。根据连接通过的传输协议类型,有两种不同的情况。
TCP连接
当一个bittorrent对等体通过TCP共享时,它会打开一个传入端口,该端口会通知跟踪器,并且该端口是启动与该对等体连接的其他对等体用来连接的端口。但是,发起并建立传出连接的对等方对每个传出连接使用不同的端口号
这使得可以通过(IP:PORT<->IP:PORT)-对唯一地识别每个连接。
uTP/UDP连接
当对等方通过uTP/UDP共享时,它会将相同的端口用于传入和传出连接。为了能够区分连接,uTP协议扩展转而使用对每个连接都唯一的connection_id
对传入和传出连接使用相同端口的优点是,它使UDP打孔成为可能。
对等方为每个不同的InfoHash向跟踪器单独发布消息
所有现代客户端对其共享的所有种子重复使用相同的传入端口。