第六章P2P技术及应用
第六章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
第六章P2P技术及应用的更多相关文章
- 2017.11.2 JavaWeb----第六章 Servlet技术
JavaWeb ------第六章 Servlet技术 (1)在Web应用程序开发中,一般由JSP JavaBean技术和 Servlet技术的结合实现MVC开发模式.在MVC开发模式中将Web程序的 ...
- P2P技术如何将实时视频直播带宽降低75%?
本文内容来自学霸君资深架构师袁荣喜的技术分享. 1.前言 实时视频直播经过去年的千播大战后已经成为互联网应用的标配技术,但直播平台的成本却一直居高不下,各个平台除了挖主播.挖网红以外,其背后高额的带宽 ...
- 精通Web Analytics 2.0 (8) 第六章:使用定性数据解答”为什么“的谜团
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第六章:使用定性数据解答"为什么"的谜团 当我走进一家超市,我不希望员工会认出我或重新为我布置商店. 然而, ...
- KnockoutJS 3.X API 第六章 组件(5) 高级应用组件加载器
无论何时使用组件绑定或自定义元素注入组件,Knockout都将使用一个或多个组件装载器获取该组件的模板和视图模型. 组件加载器的任务是异步提供任何给定组件名称的模板/视图模型对. 本节目录 默认组件加 ...
- [Effective Java]第六章 枚举和注解
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Laxcus大数据管理系统2.0(8)- 第六章 网络通信
第六章 网络通信 Laxcus大数据管理系统网络建立在TCP/IP网络之上,从2.0版本开始,同时支持IPv4和IPv6两种网络地址.网络通信是Laxcus体系里最基础和重要的一环,为了能够利用有限的 ...
- (转)iOS Wow体验 - 第六章 - 交互模型与创新的产品概念(2)
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第六章译文精选的第二部分,其余章节将陆续放出.上一 ...
- (转)iOS Wow体验 - 第六章 - 交互模型与创新的产品概念(1)
本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第六章译文精选,其余章节将陆续放出.上一篇:Wow ...
- [CSAPP笔记][第六章存储器层次结构]
第六章 存储器层次结构 在简单模型中,存储器系统是一个线性的字节数组,CPU能够在一个常数访问每个存储器位置. 虽然是一个行之有效的模型,但没有反应现代系统实际工作方式. 实际上,存储器系统(memo ...
随机推荐
- Css3 实现丝带效果
代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- SpringBoot实战(十一)之与JMS简单通信
什么是JMS? 引用百度百科上的说明: JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之 ...
- ChakraCore ,Net托管编程
前言 有些有着复杂业务逻辑的应用程序,需要为用户提供高度自定化的功能.比如像Word中的宏,当然可以自己设计一套简易的脚本解析引擎,但考虑通用性,成熟度,其实选择一款JS脚本引擎,直接嵌入到应用系统中 ...
- Dubbo实践(四)设计模式
Dubbo框架在初始化和通信过程中使用了多种设计模式,可灵活控制类加载.权限控制等功能. 工厂模式 Provider在export服务时,会调用ServiceConfig的export方法.Servi ...
- 404 Note Found 队-Alpha9
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- Spring+Hibernate+struts2+JPA 注解+跨域//完成手机端点击加载更多 下拉加载更多
一.使用IDEA新建一个maven项目(student) 1.1.0编写pom文件,添加项目所需要的包 <?xml version="1.0" encoding=" ...
- http 协议状态码
1xx 信息类状态码 100 - Continue 初始的请求已经接受,客户应当继续发送请求的其余部分.(HTTP 1.1新) 101 - Switching Protocols 服务器将遵从客户 ...
- Easy-UI中datebox的默认显示当前日期的最简单的两种方法
在中有一个Today按钮就是实现显示当前日期,所以我们在src/jquery.datebox.js文件中可以找到currentText:'Today'.所以我们可以使用'currentText'和'T ...
- Delphi跨平台下的GetTickCount,GetCurrentThreadID
在Windows下只要uses Windows,就有这两个API可调用GetTickCount,GetCurrentThreadID 如果我们需要跨平台使用这两个函数,就不能仅仅Uses Window ...
- vs+qt编程相关
vs+qt编程的那些事 以下以helloqt项目为例 文件构成 Form Files 窗体文件 /*.ui 界面文件 Generated Files 界面生成文件 /ui_helloqt.h 添加带界 ...