Press "Enter" to skip to content

简单说说P2P

基于快播案子,特意把P2P技术简单整理一番,防止老年痴呆。

  1. P2P和传统网络模式的区别

传统网络模式一般被称为C/S模式(Client/Server,客户端/服务器)。这种模式的核心集中于性能强大的服务器,服务器一端,不仅存放有大量的数据资源,更要安装有多种服务软件,拥有多样化的数据处理能力,在集中处理数据的同时可以对互联网上其他计算机提供服务,包括但不限于发送或接收数据等。客户端PC通过网络连接访问服务器,运行网络应用程序,不断地同服务器交换各种数据并获取服务器的处理结果,从而实现特定的功能。典型的即如网页访问以及各种互联网账户的登录。

传统的C/S模式特点的集中,一应资源向服务器端集中,P2P的特点则是分散,网络中每一个节点都没有服务器/客户端这样的高低贵贱之区别,而是具有相同的责任与能力并协同完成某种工作。因此,P2P网络也被称为对等网络,对应的英文是peer to peer。对等网络中,节点之间通过直接互连共享信息资源、处理器资源、存储资源甚至高速缓存资源等,每一个节点既可以提供服务,也可以请求服务,同时扮演着C/S模式中服务器和客户端两种角色。

  1. P2P原理浅析

一般的分类里,P2P网络主要分为分散式和混合式两类。

分散式P2P,从样貌到表情都比较纯正,整个网络里就没有一个服务器身份的节点,所有节点可以彼此连接,构成一个分散式的网络。启动网络时,节点之间通过对等网络协议的客户端软件搜索网络中存在的对等节点,无需通过服务器既可以直接建立连接,从而实现信息资源、运算能力等的共享。

混合式P2P,不那么纯正的地方在于网络中拥有作为服务器的节点,然而作为一种P2P网络,其中的服务器与C/S网络中的服务器也存在着极大的差别,即这里的服务器不做C/S模式中那样信息存储和数据运算的活儿,仅用于辅助对等节点之间建立连接,连接成功后即撒手不管,一应通信处理皆有相互连接的对等节点之间直接完成。

互联网是由无数个局域网网域组成的,每一个局域网中又有着若干台计算机——我们自己使用的电脑也是位于某个特定的局域网之内——有限的IP地址并不可能分配到每一台上网的计算机上。事实上,每一个局域网中,真正需要实现与外网直接相连的节点计算机是不多的,也就是说,每一个局域网只有少数主机需要拥有的互联网唯一的IP地址,其余主机使用的内网地址在局域网内部唯一,但在整个互联网范围内来看,很多都是重复的。简单的举个例子,每一个家用路由器DHCP服务所预设的内网地址池,基本都是192.168.X.X形式。

IP地址是互联网上最基本的身份标识,那么,在每一台内网电脑IP地址都可能存在重复,也就是通过彼此之间最基本的身份信息无法分辨出彼此的情况下,如何实现P2P那种单位计算机之间的直接连接和通信?

首先来看下位于局域网中的计算机是如何实现连接互联网的。内网主机发送的数据包,就像寄出去的一封信,收件人是目标计算机(通常是某个服务器)的IP地址和端口号,寄件人一栏则写着自己的IP地址(当然是内网地址,重复使用的那种)和端口号。内网地址不能在广域网中传播,实现数据包的外发,需要经过NAT,即网络地址转化。NAT通过建立一个独特的session,分配一个独特的端口号,对应起某个内网某主机向外网某IP地址的通信,将该主机发送的数据包中的内网地址转化成局域网的外网地址,再将数据包向外发送(相当于把信件寄件人改成了某小区、某街道)。这样,数据包发送方的IP地址就被局域网外网IP地址所取代,外发数据包中目标IP地址主机所发回的数据,NAT会根据其数据包中相应标识的端口号判断应该转到内网哪台主机。而陌生IP地址,也就是内网主机没有主动联系的外网IP地址发来的数据包,则会被NAT丢弃。这样,内网不具有互联网唯一IP地址的主机即实现了与互联网上的主机(通常是服务器)的通信。

如上,通过网络地址转化,内网主机得以与外界通信,但其真实的IP地址也因此蒙上了一层面纱。于是,P2P连接的问题就转化成了刺破这层面纱,让跨局域网的两台互不认识对方的真实IP的主机实现直接相连并通讯。

由于不知道对方计算机的IP地址,让内网主机自己ping对方内网主机是行不通的,可行的办法就是找中介。

中介通常是一台服务器,内网1的主机A与该服务器通信,则该服务器可以获得主机A经内网1转换后的外网地址,同理主机B。主机A、B此时均可以与服务器进行通信,可以从服务器那里获取对方的外网地址,然主机A直接主动发送给主机B的数据包将会被内网2的NAT丢弃(此时,内网1的NAT将不会再拦截从主机B的外网IP地址发来的数据包)。这时,就需要服务器“告诉”主机B,让主机B主动向主机A发送数据包,这样,通过主机B的主动请求,内网2的NAT也将不会再对主机A的IP地址进行拦截。内网1、2的NAT上都有了A、B两台主机外网IP地址的“洞”,两台主机互发数据包将不会再收到拦截,直接通信由此得以建立。在此过程中,服务器主要工作就是“提示”主机B与主机A进行联系,A、B相连后,服务器主要任务也得以完成。

这里服务器的功能,也就是一般P2P软件所需要起的作用。

|2|1


2 Comments

  1. Mukeddes Mukeddes 2016年2月29日

    又懂点东西了,手动点赞点赞!!!博主来复旦记得找我哦,求签名照一张O(∩_∩)O

    • 杨也 杨也 2016年5月20日

      哈哈~一定~

杨也进行回复 取消回复

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据