比特彗星 常见问题的收集与解决

1.7 P2P模式和C/S模式

问:为什么使用bt下载的时候会涉及到开端口的问题?
而其他的下载方式 比如浏览器 网盘 等都不存在这个问题?

答:这其实就涉及到传输模式上的一些区别也就是 P2P模式 和 C/S 模式
我们先讲 C/S 模式

C/S 模式 (Client-Server) 即服务端-客户端 模式
我们平时使用的应用大部是 C/S 模式的

CS结构看起来像这样:


有中心服务器的中央网络系统
图片来自维基百科

在这个结构中有一台中心服务器
用户想要下载文件必须连接这个中心服务器 资源存储在这个中心服务器中

下载速度和服务器的带宽有关
如果服务器的带宽是固定的
那下载的用户越多 每个用户的平均下载速度也就越慢

如果中心服务器失效 那么其他用户也就无法进行下载了

在这个结构里面 一般来说 服务端只提供服务
而客户端只使用服务

而连接一般由客户端发起 服务端接受连接
这些中心服务器几乎都是有公网ip的 (可被直接访问)
所以
不太需要考虑客户端的网络环境

问:所以这就是网盘不开会员下载慢的原因吗?

答:算是一个重要的原因
如果免费用户下载不限速 那将产生巨大的带宽成本
所以对非会员用户下载限速 也算是正常的操作

问:那P2P呢?

答:P2P 是 (peer-to-peer)的缩写 即 对等式网络
bt下载 电骡(eMule)部分游戏联机 等 会使用这种模式

P2P结构看起来像这样:


无中心服务器的对等网络系统
图片来自维基百科

在P2P模式中没有客户端和服务端之分
也可以认为每台设备既是服务端也是客户端

每个设备之间是平等的
可以同时作为资源的请求者和提供者
我们称其为节点
资源通常存储在各个节点上

当一个节点加入P2P网络并共享资源时,它将提供自己拥有的资源
(例如文件、数据、带宽等)给其他节点使用。
其他节点可以通过与拥有资源的节点者直接通信,请求并获取所需的资源

问:所以P2P网络中的节点需要像C/S模式中的中央服务器那样 打开端口
而其他节点来访问?

答:是的

问:端口也不是一定要开吧?我可以去连接其他的节点啊?

答:对,开放端口不是必须的 可以去主动连接其他节点
但是其他节点需要开放端口来接受你的请求

如果其他的节点也没有开放端口
那它们也无法接受你的请求

而如果你的节点开放了端口 就可以接受其他节点的请求
无论对方是否开放端口

问:这么来说两个未开放端口的节点 无法相互连接了?

答:是的 连接关系如下

(公网节点:此处表示开放端口的节点 内网节点:此处表示未开放端口的节点)
》和《 表连接发起方向

公网节点1 》公网节点2 √
公网节点1《 公网节点2 √

内网节点1 》内网节点2 X
内网节点2《 内网节点1 X

公网节点 》内网节点 X
公网节点《 内网节点 √

两公网节点之间可以互相连接
两私网节点不能互相连接
公网节点无法主动连接内网节点
内网节点可以主动连接公网节点

问:这么说来端口不通也可以用bt下载咯?
那开端口有什么好处呢?

答:一般认为 端口是否开放 对上传速度影响较大
对下载速度的影响相对较小

开放端口可以获得更好的上传速度
接受其他节点的连接请求 比 向其他节点发起请求效率更高

问:可是我要上传速度有什么用呢?

答:为BT网络做贡献 确切的说为其他节点做贡献

你的下载速度是别人的上传
而你的上传是别人的下载

如果没有人上传 那么也没有人有下载速度

问:P2P不会像C/S模式 那样产生带宽费用的问题?

答:还是会的,不过这个费用是各个节点分担的
如果是在家中使用bt下载那使用的就是家庭网络的带宽

问:那家庭网络的上传和下载速度不对等
岂不是下载速度也很慢

答:只要节点的数量够多就行
每个节点贡献少量上传速度 总量还是很可观的
这也是bt下载人越多越快的原因