现在的互联网大多是以B /S 或C /S 机构的应用模式为主的,这样的应用必须在网络内设置一个服务器,信息通过服务器才可以传递。信息或是先集中上传到服务器保存,然后再分别下载(如网站);或是信息按服务器上专有规则(软件)处理后才可在网络上传递流动(如邮件)。
C/S构架是一种典型的两层构架,全称是Client/Server,起客户端包含一个或多个在电脑上运行的程序,而服务器有两种,一种是数据库服务器端,客户通过数据库连接访问服务器端的数据,另一种是Socket服务器端,客户端的程序通过 Socket 与服务器端程序通信。
B/S架构的全称是Browser/Server, Browser 指的是Web浏览器,极少数事物逻辑在前端实现,但主要事物逻辑在服务器端实现。Browser客户端、WebApp服务端和DB端构成所谓的三层架构。B/S架构系统无需特别安装,只要有Web浏览器即可。
在以上方式下,一切都是以服务器为核心,以它的正常运转为前提。像现在很多流行的聊天软件也是在这种模式下为大家服务的。但随着P2P技术的日益流行,大家都意识到点对点的通讯更能体现网络应用的原始意义。特别是在局域网内,更加需要一种廉价、效率更高的软件(不需要依赖于服务器的支持,软件本身就兼具了服务器和客户端的功能)。
P2P(peer-to-peer)也称对等网络技术,是一种网络结构的思想。它与B/S、C/S构架本质的区别是它的整个网络结构中不存在中心服务器(去中心化)。每一个节点Peer的逻辑地位相等,兼具客户端和服务器的双重特性,在下载的同时,要继续上传资源以提供下载服务给其他人。找不到Server,因为每一台都是Server,所以P2P构架就是一种“人人为我,我为人人”的资源共享思想。
P2P的服务器系统能力随着用户数量的增加而增加,人越多速度越快,突破了原始系统中服务器的瓶颈,因为每一个Peer都分担了服务能力,单一Peer故障不会造成系统崩溃。但是这样的共享系统,对硬盘的损伤比较大(因为在写的同时还要读),还有对内存占用比较多,影响整机的速度。
除外,另一点就是P2P技术破坏了传统的网络业务访问模型,传统访问模型中,用户只有部分时间活跃(当其访问服务器的时候),而且用户占用的宽带随其活跃程度而变化,使用的上下行宽带通常是不对等的。而在P2P技术中,用户在访问时段内永远活跃,稳定地占用相等的上下带宽。为此,基础运营商不得不为飞速上升地的网络贷款需求而大规模地扩容。更要命的是此时的带宽无法带来合理的收入。(这也是P2P技术与基础网络运营商之间日益凸显的矛盾——由于无法通过改变结算方式解决带宽需求和业务收入之间的矛盾)
那么为了减轻P2P技术给核心贷款带来的压力,我们采用了一种P2P 流量优化技术——P2P 缓存系统。通过在网络边缘缓存P2P 内容,过滤掉传输重复的 P2P 内容,P2P 缓存系统需要完成捕捉网络流量、P2P 协议分析以及内容缓存等操作,并且还需要为后续的P2P 访问提供代理服务。
P2P缓存原理:Peer A 请求下载片段内容X,下载请求由A所归属的Internet路由转发给P2P缓存设备。由于是初次下载,缓存设备发现该内容片段并没有被缓存过,于是将下载请求转发给互联网上的Peer C, Peer A最终通过访问Peer C获得片段X,而且将X缓存下来。当Peer B再次发起下载X请求时,请求还是先转到缓存设备,发下有 X 了,于是Peer B对X的下载直接由缓存设备提供。
目前一共有三种P2P系统存在,第一种是采用带有中继服务器的这种模式,其拓扑网络图如下:
(一)中继服务器(引导服务器)
中继服务器相当于一个中间人,他存储了各个Client的IP地址和端口号的一张表,引导实现Peer to Peer的通信。不管实现通信的两个 Peer 是在内网还是外网,他们都需要通过在中继服务器查找地址,建立通信,这样就会加重中继服务器的负担,虽然比起C/S、B/S得到服务端,需要直接提供资源的负担要小得多。
(二)不含中继服务器
存在缺陷,因为实现通信的两方必须知道互相的IP地址和端口号。这如果是在同一个内网内,还是可以实现的,然而如果不是在同一内网下,就需要“穿透内网”技术,又叫“NAT穿透”。
为什么需要这个NAT穿透技术呢? 其实它是由于网络地址转换造成的。目前,互联网面临两大问题:IP地址根本不够我们用的;无限的增加IP地址会使路由表不断增长,给存储、查询等带来麻烦。于是就有了网络地址转换技术。一个端路由器可以虚拟出一些临时IP地址,提供给链接到该路由器上的客户端们,这样就可以通过有限个IP,扩展到更多的用户;并且通过局域网内路由器的地址虚拟方式,隐藏了内网上某个客户端的真实IP,提高了网络安全性。
虽然一个路由器虚拟出的连接到不同客户端的IP地址都是不同的,但是世界上千千万万个路由器,可能虚拟出相同的IP地址,所以这些IP地址不能唯一的表示一个真实的客户端。这也是为什么 我们不能轻易的实现跨局域网的端到端的查找,因为我们根本不知道某一个Peer的真实IP地址,也就没法找到它。
除非我们通过穿透内网技术,那么如何实现呢? 端口映射:我们将某个Client想要提供的某个服务和它的路由器的一个端口进行绑定,这样在访问时,只需要知道该路由的IP地址和该服务的端口号就可以了。不必要找到该路由器下面的具体客户端。
(三)折中妥协
同样需要一个中继服务器,只不过在第一次为Client A和ClientB建立连接的时候就去判断,这两个Peer是否在同一内网内。如果是,就不再需要通过中继服务器查询IP地址了,在内网内直接通过唯一的虚拟IP实现端到端访问;如果不是,则之后还是继续通过中继服务器建立连接,但这足以减轻Server负担。
网友评论