第六章P2P技术及应用

P2P技术在我们日常生活中非常实用,例如我们常用的QQ、PPLive、BitTorrent就是基于P2P技术研发。下面将本章中的重点内容进行归纳。

文章中的Why表示产生的背景,也就是说为什么会产生该技术,What表示该技术是什么,How表示该技术是如何使用的。以下将用字母表示各问题。

1)P2P技术:
Why:早期非对等结构网络操作系统主要共享的资源是硬件、软件与数据,而随着计算机的发展,PC的硬件配置日益提高,硬件资源已经足够强大,矛盾发生转变。用户希望共享数据、音乐、图像、视频等文件。

What:P2P网络中每一个节点都是一个自治的计算机系统,两台计算机之间采用平等的“端到端”
方式和双向通信方式,共享双方的资源。P2P是基于内容来决定路由,而不是基于位置的路由。

研究P2P主要涉及3方面内容分别是:P2P通信模式、P2P网络、P2P实现技术。

2)P2P模式与C/S模式的比较

从工作原理的角度来比较C/S与P2P两种工作模式

此外两者最大的差别是在应用层,如下图所示:

传统C/S模式的应用层协议主要包括:域名服务(DNS协议)、电子邮件(SMTP协议)、文件传输(FTP协议)、以及Web服务(HTTP协议)。

P2P网络应用层协议主要包括:文件共享类(Napster协议),BitTorrent服务的协议、多媒体传输类Skype服务的协议。

3)P2P网络的分类

Why:用户如何能够很快地找到自己想要的文件。即需要解决三个问题:1.如何存储共享的信息资源2.如何让其他对等节点找到信息资源3.如何保证对等网络系统的可扩展性与性能

How:如下图所示,为解决该问题,研究人员提出了多种P2P网络结构。

3.1)集中式P2P网络

What:集中式P2P网络中存在一个中心的目录服务器,它为所有P2P结点提供搜索和共享文件的服务。

How:当某个用户需要查询资源时,只需要向中心目录服务器发送“资源索引关键字”,根据内容查询路由;中心目录服务器通过遍历资源索引表,就可以给用户放回查询结果。用户根据拥有该资源的节点IP地址与端口号访问该节点,直接获取所需资源。

集中式P2P网络典型的例子是:Napster

3.2)分布式非结构化P2P网络

与集中式P2P网络不同的是,分布式P2P网络中不存在集中的服务器。

How:当一个用户需要查询某一个共享文件时,将进行内容路由,将请求消息通过随机形成的网络拓扑洪泛法发送出去,使得全网节点都能够收到与查询内容相关的路由请求消息。接收到查询消息的节点进行检索,判断是否有需要的文件,如果有则发出查询应答消息。

Gnutella是一种分布式非结构化P2P即Query Flooding协议,Gnutella网络消息报文交互过程如下图所示:

3.3)分布式结构化P2P网络

Why:由于分布式非结构化P2P网络可扩展性差的缺点,提出了该种新型方法。

What:网络中结点拓扑相对稳定和规则,每个节点可以被指定一个逻辑地址,并且将地址与节点位置对应起来。也称为分布式散列表(DHT)网络。

3.4)混合P2P网络

Why:集中式P2P网络结构有利于提高网络资源快速查找能力,但是目录服务器容易受到攻击,因此系统的安全性与性能受到中心服务器节点的影响。

What:将集合式与分布式P2P网络两者结合起来。

混合式P2P网络节点类型分为三类:用户节点、搜索节点、索引节点

四类系统的总体比较:如下图所示:

基于P2P的网络应用:

文件共享类软件:Napster、BitTorrent、

通信类软件:Skype、QQ、MSN Message、Google Talk

多媒体传输类软件:PPLive、AnySee

共享类软件:OceanStore、Tapestry、Pastry

分布式计算类软件:GPU、SETI@home

协同类软件:Groove

搜索引擎类软件:Pandango

最新文章

  1. 根据屏幕的宽度使用不同的css-文件
  2. 达成成就:排名和AC数相同
  3. iOS自动偏移64个像素
  4. Sublime Text 3安装Latex
  5. Entity Framework 基础
  6. git针对Android Studio的使用
  7. laravel5.1框架简介及安装
  8. win7中用 httplistener 出现 503 错误的问题
  9. Spring Cloud Data Flow 中的 ETL
  10. Django--缓存设置
  11. 重读 谢希仁《计算机网络》3 - 网络层和IP协议
  12. ubuntu16.04 安装最新版nodejs
  13. 深入web开发之webserver/servlet容器
  14. Asp.Net对Json字符串的解析和应用
  15. python-super1
  16. C语言读取配置文件
  17. arm指令版本
  18. 更改windows 2003远程桌面端口3389为其他的端口号【转】
  19. java基础问题解答
  20. NSPredicate过滤数组数据

热门文章

  1. 【题解】洛谷P1080 [NOIP2012TG] 国王游戏(贪心+高精度)
  2. redis集群环境搭建的错误
  3. 获取url中?后面传递的参数
  4. redis 安装 配置 及启动
  5. macOS,安装+配置+激活:MySQL8.0 + Navicat Premium12
  6. Easy-UI中datebox的默认显示当前日期的最简单的两种方法
  7. ElasticSearch优化系列四:ES的heap是如何被瓜分掉的
  8. Redis 持久化深入--机制、可靠性及比较
  9. Jquery中select使用
  10. 01-Python简介