从0实现 BT 下载 :3 P2P 网络

经过前面2篇,已经实现:1,种子解析 2,Tracker 服务器的访问 3,得到 peers 用户ip 端口。

P2P 网络:peer to peer  ,去中心化网络,用户和用户之间建立连接,下载和 C/S 软件不同,多人下载不会抢 server 速度,下载人越多速度越快。

内网穿透:一般来说普通的用户,不管是光纤介绍还是手机4G,现在分配到的ip 地址都是一个 内网IP 10.x.x.x, 非公网 IP,但是我记得10年前,还是用 电话线 ADSL 上网的时代,登录到路由器上查看 wlan ip 是公网ip ,这个时候只需要配置一个 DMZ 主机,就可以将 路由器下面的 NAT IP 全部暴露到 公网 IP 上。

在 电脑上装个 IIS 6.0 ,把 wlan ip 的给其它的好友,就可以访问自己电脑上发布的网站,但是重新拨号 公网 IP 会变,那个时候又有 3322动态域名。

说的有点远了,简单介绍 NAT , 普通用户通过 路由器上面,会分配一个内网ip 如 192.168.1.123 ,但是用来上网是根本没问题的,访问 www.baidu.com www.google.com 因为他们都有公网IP。反过来,因为现在你没有了外网IP,你电脑上装个 IIS 别人是访问不了的。

NAT 分为4种:

Full cone NAT
即著名的一对一(one-to-one)NAT一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外发送。任意外部主机都能通过给eAddr:port2发包到达iAddr:port1

Address-Restricted cone NAT
限制地址,即只接收曾经发送到对端的IP地址来的数据包。一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外发送。任意外部主机(hostAddr:any)都能通过给eAddr:port2发包到达iAddr:port1的前提是:iAddr:port1之前发送过包到hostAddr:any. "any"也就是说端口不受限制

Port-Restricted cone NAT
类似受限制锥形NAT(Restricted cone NAT),但是还有端口限制。
一旦一个内部地址(iAddr:port1)映射到外部地址(eAddr:port2),所有发自iAddr:port1的包都经由eAddr:port2向外发送。一个外部主机(hostAddr:port3)能够发包到达iAddr:port1的前提是:iAddr:port1之前发送过包到hostAddr:port3.

Symmetric NAT(对称NAT)
每一个来自相同内部IP与port的请求到一个特定目的地的IP地址和端口,映射到一个独特的外部来源的IP地址和端口。
同一个内部主机发出一个信息包到不同的目的端,不同的映射使用
外部主机收到了一封包从一个内部主机可以送一封包回来

 

协议参考:http://www.bittorrent.org/beps/bep_0003.html

待实现功能:

本地建立 tcp 服务,端口就是上面 http 请求时的端口

使用异步 IO 连接每个 peer ,实现 peer 协议。

2021-05-24 21:26

因为我突然有很重要的事,先不更新了,后面在看时间更新。

 

posted @ 2021-05-24 08:42  宁次  阅读(379)  评论(0编辑  收藏  举报