600 likes | 663 Views
第九章对等网络. 对等网络. 概述 非结构化对等网络 结构化对等网络. 主要内容. 对等网络. 概述 非结构化对等网络 结构化对等网络. 主要内容. 1. 概述. 对等网络,也称为 P2P 网络( Peer-to Peer ),主要有两个原因导致 P2P 网络的引入 传统客户 / 服务器模式的不足 网络边缘闲置资源利用的需求. 引入背景. 资源定义为网络节点的计算、存储等能力. 瓶颈问题:服务器的带宽、存储、计算等资源受限,容易成为网络瓶颈 单点失效问题:服务器是整个网络的中心,失效将会导致服务无法访问.
E N D
对等网络 • 概述 • 非结构化对等网络 • 结构化对等网络 主要内容
对等网络 • 概述 • 非结构化对等网络 • 结构化对等网络 主要内容
1. 概述 • 对等网络,也称为P2P网络(Peer-to Peer),主要有两个原因导致P2P网络的引入 • 传统客户/服务器模式的不足 • 网络边缘闲置资源利用的需求 引入背景 资源定义为网络节点的计算、存储等能力 • 瓶颈问题:服务器的带宽、存储、计算等资源受限,容易成为网络瓶颈 • 单点失效问题:服务器是整个网络的中心,失效将会导致服务无法访问 随着计算技术的发展,位于Internet边缘的接入设备(也就是网络的最终用户)拥有越来越强的计算、存储等能力,传统的网络结构无法有效地利用这些资源
1. 概述 P2P网络结构 P2P网络中的节点也叫做对等节点(Peer) • 完全分布式的网络结构 • 将服务器的功能分布到各个网络中的各个节点,充分利用这些节点的计算、存储、带宽等资源 • 无中心服务器,网络中的节点既是客户端又是服务器
Internet P2P网络(overlay Network) 1. 概述 • P2P的定义 • P2P通信模式中各方都具有相同的能力,其中任何一方都可以发起一个通信会话。在P2P通信过程中,每个通信节点同时具有服务器和客户端的功能。 • P2P网络中的节点间采用P2P通信模式,它是构筑在现有网络基础设施上的一个分布式的重叠网络(Overlay Network) P2P的定义
1. 概述 • P2P网络是一个应用层网络,一般由网络边缘节点构成 • 资源分布在各个节点中,而不是集中在一个服务器上进行管理 • 节点之间可直接建立连接,交互共享资源 • 网络的扩展性好,但节点可随意加入退出,因而动态性强 P2P网络特征
物理网络拓扑 P2P逻辑拓扑 1. 概述 • 网络拓扑:节点的组织方式,例如物理网络有星型拓扑、网状拓扑等,而对于P2P网络来说是拓扑是一个逻辑上概念,和具体的物理连接无关 • 定位(Locating):找到资源的存放位置 • 路由(Routing):将消息发送到目的节点 P2P网络需要解决的问题 P2P网络的最终目标是要实现资源共享,这些资源包括计算、存储等,其中内容存储、流媒体应用是P2P目前最主要的应用
1. 概述 • 内容索引 • 在P2P网络中,内容一般使用内容索引来表示 • 内容索引包括key和value两部分,其中key是内容的关键字,value是存放内容的实际位置,因此内容索引也表示为<key, value>对 • 内容索引<夜宴, http://video.com.cn/movie.avi>表示movie可以从http://video.com.cn/movie.avi处获得 • P2P网络中实现内容共享的步骤 • 索引发布:告诉别人拥有或者知道的内容信息 • 内容定位:查找到内容所在的位置,即根据key,找到value • 内容下载:从value处下载内容 内容共享
1. 概述 • 非结构化P2P • 网络拓扑是任意的 • 内容的存储位置与网络拓扑无关 • 结构化P2P • 网络拓扑结构是有规律的 • 每个节点都随机生成一个标识(ID) • 内容的存储位置与网络拓扑相关 • 内容的存储位置与节点标识之间存在着映射关系 P2P网络分类
对等网络 • 概述 • 非结构化对等网络 • 结构化对等网络 主要内容
2. 非结构化对等网络 Gnutella • 完全分布式的P2P网络 • 不存在任何中心节点,peer通过网络泛洪查找key所对应的value • Peer之间直接建立连接下载内容 • 基于目录服务器的P2P网络 • 所有peer将索引发布到目录服务器上 • Peer通过目录服务器来查找key所对应的value • Peer之间直接建立连接下载内容 • 层次P2P网络 • Peer根据能力的不同,例如是否拥有足够强的计算存储能力,是否拥有公网IP,分为超级节点和一般节点 • 超级节点之间构成完全分布式的P2P网络 • 超级节点和其所连接的一般节点构成基于目录服务器的P2P网络,其中超级节点具有目录服务器的功能 分类 Napster BitTorrent KazaA Skype
2. 非结构化对等网络 • BitTorrent (BT)是一个用于文件共享的P2P通信协议,最初在2001年4月提出,第一个实现在2001年7月发表 • 有许多兼容BT协议的客户端软件,例如BitComet、KTorrent等 • BT协议的基本原理是初始发布者将文件划分为数据块分散到各个接收端,各个接收端可以从其它接收端下载自己想要的数据块,而不仅仅是初始发布者,因此减少了任何给定数据源的负担和开销,并且提供了一定的冗余度 P2P网络实例—BitTorrent
2. 非结构化对等网络 • BitTorrent元素 • BT客户端为实现BT协议的任何程序,任何客户端都能够在网络上准备、请求和传输任何类型文件 • Peer为运行BT客户端程序的主机,为了共享一个文件,peer将文件看作相同大小的数据块,通常为64kB到1MB,并且使用hash算法每个数据块计算校验和,然后将这些信息包含在一个torrent文件中。提供完整文件的peer被称为seeder,而提供初始文件拷贝的peer称为初始seeder • torrent文件的后缀为.torrent,具体信息依赖于BT协议的版本,该文件包含了一个“announce”分区,指定Tracker的URL,和一个“info”分区,包含了文件的名字、长度、数据块使用的长度,以及每个数据块的校验和,完整的Torrent文件通常发布在web网站上,并且向Tracker注册 • Tracker是协助文件散发的主机,Tracker维护了一个当前参与文件下载的peer列表,以及每个peer所拥有的文件数据块信息 P2P网络实例—BitTorrent 发布Torrent文件的web站点相当于目录服务器,从这个角度来说BT是基于目录服务器的非结构化P2P网络
2. 非结构化对等网络 • BitTorrent文件下载 • Peer访问web获取感兴趣的Torrent文件,并且用BT客户端打开 • BT客户端连接到Torrent文件中指定的Tracker,从Tracker处获取正在传输Torrent文件中所指定数据块的peer列表,客户端连接到这些peer来获取不同的数据块 • 相互连接来共享一个文件的peer组称为swarm,如果swarm中只包含初始seeder,那么客户端直接连接到该seeder,并且请求数据块。随着peer加入swarm,它们之间开始交换数据块,而不是直接从seeder下载 • 数据交换的效率依赖于客户端发送数据的策略。客户端使用Tit for Tat策略,即趋向于往自己发送数据的peer发送数据。为了避免出现两个没有交换过数据块的peer之间出现死锁,引入“optimistic unlocking”机制,即客户端保留一部分可用带宽向随机选择的peer发送数据 P2P网络实例—BitTorrent
2. 非结构化对等网络 • BiTorrent文件下载实例 P2P网络实例—BitTorrent 说明:不同颜色的块代表不同的文件块。在初始seeder将文件块发送到其它peer以后,peer之间交换各自所没有的文件块,从而获取整个文件拷贝。因此初始seeder只需发送一份文件的拷贝 Seeder
2. 非结构化对等网络 • 非结构化P2P的内容下载采用完全在节点之间进行,不需要任何中心节点 • 但是内容定位(也称为索引查询)或者采用泛洪,或者采用目录服务器的方式,缺乏有效的、可扩展的索引查询机制,不能满足大规模网络的需求 总结 结构化P2P网络: 在内容和内容的存储位置之间建立某种关系
对等网络 • 概述 • 非结构化对等网络 • 结构化对等网络 主要内容
3. 结构化对等网络 • Chord • Pastry • CAN • Tapestry 几种结构化P2P 基于分布式Hash表 (DHT: Distributed Hash Table ) 分布式Hash表: 直接根据查询内容的关键字定位其索引的存放节点,索引为<Key, Value>对
3. 结构化对等网络 • 单向散列函数也称为Hash函数 • 根据给定的一段任意长的消息计算出一个固定长度的比特串,通常称为消息摘要(MD:Message Digest) • Hash函数有以下特性: • 给定 M,易于计算出 消息摘要MD(M) • 只给出 MD(M),几乎无法找出 M • 无法找到两条具有同样相同摘要的不同消息 • 常用Hash函数 • MD5:消息任意长度,消息摘要128比特 • SHA-1:消息任意长度,消息摘要160比特 DHT原理—Hash函数
3. 结构化对等网络 • Hash函数应用于P2P的特性 • 唯一性:不同的输入明文,对应着不同的输出摘要 • 将节点IP地址的摘要作为节点ID,保证了节点ID在P2P环境下的唯一性 SHA-1(“202.38.64.1”) =24b92cb1d2b81a47472a93d06af3d85a42e463ea SHA-1(“202.38.64.2”) =e1d9b25dee874b0c51db4c4ba7c9ae2b766fbf27 DHT原理—Hash函数
3. 结构化对等网络 • 将内容索引抽象为<K, V>对 • K是内容关键字的Hash摘要 • K = Hash(key) • V是存放内容的实际位置,例如节点IP地址等 • 所有的<K, V>对组成一张大的Hash表,因此该表存储了所有内容的信息 • 每个节点都随机生成一个标识(ID),把Hash表分割成许多小块,按特定规则(即K和节点ID之间的映射关系)分布到网络中去,节点按这个规则在应用层上形成一个结构化的重叠网络 • 给定查询内容的K值,可以根据K和节点ID之间的映射关系在重叠网络上找到相应的V值,从而获得存储文件的节点IP地址 DHT原理—过程
3. 结构化对等网络 k v DHT原理—过程 内容索引 内容 提取 K=Hash(key) 内容关键字key 内容存储位置等信息 value 内容索引 Hash表 电影、movie K=hash(电影, movie) V = http://video.com.cn/ movie.avi 电影 movie http://video.com.cn/ movie.avi
K V K V K V K V K V 3. 结构化对等网络 DHT原理—过程 k v 规则? N1 N32 Chord、CAN、Tapestry、Pastry N8 N48 N16 b. 分布式Hash表 a. Hash表 在许多情况下,节点ID为节点IP地址的Hash摘要
K V K V K V K V K V K V K V K V K V K V K V 3. 结构化对等网络 DHT原理—索引发布和内容定位 (K1,V1) C K1=Hash(xyz.mp3) V1=128.1.2.3 插入(K1,V1) 查询(K1) A 128.1.2.3 xyz.mp3 B
3. 结构化对等网络 • 网络拓扑 • 拓扑结构由节点ID和其存放的<K, V>对中的K之间的映射关系决定 • 拓扑动态变化,需要处理节点加入/退出/失效的情况 • 定位(Locating) • 节点ID和其存放的<K, V>对中的K存在着映射关系,因此可以由K获得存放该<K, V>对的节点ID • 路由(Routing) • 在重叠网上根据节点ID进行路由,将查询消息最终发送到目的节点。每个节点需要到其邻近节点的路由信息,包括节点ID、IP等 DHT原理—过程总结 在重叠网上节点始终由节点ID标识,并且根据ID进行路由
3. 结构化对等网络 • UC Berkeley和MIT共同提出 • 采用环形拓扑(Chord环) • 应用程序接口 • Insert(K, V) • 将<K, V>对存在放到节点ID为Successor(K)上 • Lookup(K) • 根据K查询相应的V • Update(K, new_V) • 根据K更新相应的V • Join(NID) • 节点加入 • Leave() • 节点主动退出 Chord—概述
3. 结构化对等网络 • Hash算法SHA-1 • Hash节点IP地址->m位节点ID(表示为NID) • Hash内容关键字->m位K(表示为KID) • 节点按ID从小到大顺序排列在一个逻辑环上 • <K, V>存储在后继节点上 • Successor(K):从K开始顺时针方向距离K最近的节点 Chord—Hash表分布规则 N1 K=hash(key)=54 ID=hash(IP)=14 N8 N56 N51 N14 N48 N21 N42 N38 N32 m=6
3. 结构化对等网络 • 每个节点仅维护其后继节点ID、IP地址等信息 • 查询消息通过后继节点指针在圆环上传递 • 直到查询消息中包含的K落在某节点ID和它的后继节点ID之间 • 速度太慢 O(N),N为网络中节点数 Chord—简单查询过程 Lookup(K54) K54 N1 N8 N56 N56 N51 N14 N48 N21 N42 N38 N32 m=6
3. 结构化对等网络 • 指针表 Chord—扩展查询过程 指针表 N8+1 N14 N8+2 N14 N56 N8+4 N14 N8+8 N21 N8+16 N32 N8+32 N42 节点S的第i个指针successor[n+2(i-1)], 1≤i≤m
3. 结构化对等网络 指针表 Lookup(K54) Chord—扩展查询过程 N8+1 N14 N8+2 N14 K54 N8+4 N14 N56 N8+8 N21 N8+16 N32 N8+32 N42 指针表 N42+1 N48 N42+2 N48 N42+4 N48 N42+8 N51 N42+16 N1 N42+32 N14 • 指针表中有O (log N)个节点 • 查询经过O (log N)跳
3. 结构化对等网络 • 网络波动:Churn • Churn由节点的加入、退出或者失效所引起 • 每个节点都周期性地运行探测协议来检测新加入节点或退出/失效节点,从而更新自己的指针表和指向后继节点的指针 Chord—网络波动
3. 结构化对等网络 • 节点加入 • 新节点N事先知道某个或者某些节点,并且通过这些节点初始化自己的指针表,也就是说,新节点N将要求已知的系统中某节点为它查找指针表中的各个表项 • 在其它节点运行探测协议后,新节点N将被反映到相关节点的指针表和后继节点指针中 • 新节点N的第一个后继节点将其维护的小于N节点的ID的所有K交给该节点维护 Chord—网络波动
3. 结构化对等网络 • 节点退出/失效 • 当Chord中某个节点M退出/失效时,所有在指针表中包含该节点的节点将相应指针指向大于M节点ID的第一个有效节点即节点M的后继节点 • 为了保证节点M的退出/失效不影响系统中正在进行的查询过程,每个Chord节点都维护一张包括r个最近后继节点的后继列表。如果某个节点注意到它的后继节点失效了,它就用其后继列表中第一个正常节点替换失效节点 Chord—网络波动
3. 结构化对等网络 • O(logN)逻辑跳数,但是每一逻辑跳可能跨越多个自治域,甚至是多个国家的网络 • 重叠网络与物理网络脱节 • 实际的寻路时延较大 Chord—拓扑失配
3. 结构化对等网络 • Microsoft研究院和Rice大学共同提出 • 考虑网络的本地性,解决物理网络和逻辑网络的拓扑失配的问题 • 基于应用层定义的邻近性度量,例如IP路由跳数、地理距离、往返延时等 • 节点ID分布采用环形结构 Pastry—概述
N0002 N3200 N0201 K3122 K0220 N3033 N0322 N3001 N2222 N1113 N2120 K1201 K2120 N2001 K1320 3. 结构化对等网络 2m-1 0 Pastry—Hash表分布规则 • Hash算法SHA-1 • Hash节点IP地址->m位节点ID(表示为NID) • Hash内容关键字->m位K(表示为KID) • NID和KID是以2b为基的数,共有m/b个数位 • b是一个配置参数,一般为4 • 节点按ID从小到大顺序排列在一个逻辑环上 • <K, V>存储在NID与KID数值最接近的节点上 m=8 b=2
3. 结构化对等网络 • 路由表R • 路由表包括 log2b N (m/b)行,每行包括2b -1个表项 • 路由表第n行与节点ID的前n个数位相同,但是第n+1个数位不同,也称为n数位前缀相同 • 路由表中的每项包含节点ID,IP地址等 • 根据邻近性度量选择距离本节点近的节点 • 邻居节点集M • 邻居节点集包含|M|个在邻近性度量上最接近于本节点的节点,|M|为2b或者2X2b • 邻居节点集通常不用于路由查询消息,而是用来维护本地性 • 叶子节点集L • 叶子节点集包含|L|个节点ID最接近本节点的节点,其中|L|/2个节点的ID大于本节点,|L|/2个ID小于本节点,|L|为2b或者2X2b Pastry—节点维护状态表
3. 结构化对等网络 b=2,因此节点ID的 基数为4 (16 bits) m=16 b=2 Node ID 10233102 节点ID最接近 本节点的节点 Leaf set < SMALLER LARGER > 10233033 10233021 10233120 10233122 10233001 10233000 10233230 10233232 Routing Table 02212102 1 22301203 31203203 第m列表项的 下一数位为m 0 11301233 12230203 13021022 10031203 10132102 2 10323302 10200230 10211302 10222302 3 当前节点的第n个数位 m/b行 10230322 10231000 10232121 3 10233001 1 10233232 第n行的前n个数 位与本节点相同 [ 相同前缀 下一数位 其它 ] 0 10233120 2 依据邻近性度量最 接近本节点的节点 Neighborhood set 每行2b-1个表项 没有合适节点 的表项为空 13021022 10200230 11301233 31301233 02212102 22301203 31203203 33213321
3. 结构化对等网络 • 当一个K为D的查询消息到达节点A • 节点A首先看D是否在当前节点的叶子节点集中,如果是,则查询消息直接被转发到目的节点,也就是叶子节点集中节点ID与D数值最接近的那个节点(有可能就是当前节点),否则进行下一步 • 在路由表中查找与D具有更长相同前缀的表项(至少比本节点多一个数位),如果该表项不为空,则将查询消息直接转发到该节点,否则进行下一步 • 例如路由D= 0629的查询消息 • 5324 →0748 →0605 →0620 →0629 • 将消息转发到具有相同前缀,但是节点ID在数值上更接近D的节点。除非查询消息已经到达目的节点,否则该节点一定位于叶子节点集中。 • 例如路由D=0629的查询消息 • 5324 →0748 →0605 →0609→0620 →0629 Pastry—查询过程 路由查询消息的逻辑跳数: O(log2b N)
lookup(K2120) 3. 结构化对等网络 Routing table m=8 • 节点路由表R中的每项与本节点具有相同的n数位长度前缀,但是下一个数位不同 • 例如,对于节点N0201: N-: N1???, N2???, N3??? N0: N00??, N01??, N03?? N02: N021?, N022?, N023? N020: N0200, N0202, N0203 • 当有多个节点时,根据邻近性度量选择最近的节点 • 维持了较好的本地性 Pastry—概述 2m-1 0 b=2 N0002 N0122 N3200 N0201 N0212 N0221 N3033 N0233 N0322 N3001 N2222 N1113 N2120 K2120 N2001
X 0629 A 5324 Join消息 B 0748 C 0605 Z 0620 3. 结构化对等网络 • 初始化状态表 • 新节点开始时知道一个根据邻近性度量接近自己的节点A • 节点A可以通过自动定位机制获得,或者由系统管理员通过其它手段获得 • 新节点通过运行SHA-1算法计算自己的IP地址(或者public key)的摘要得到节点ID为X • 节点X向节点A发送K为X的join消息,A通过Pastry路由将该消息发送到节点ID在数值上最接近X的节点Z • 接收到join消息的节点,包括A、Z,以及A到Z路径上所有的节点将发送它们的状态表给X,X检查这些信息,并且可能从其它的节点请求状态,然后节点根据下面的过程初始化状态表: • 由于A与X在邻近性度量上接近,所以使用A的邻居节点集来初始化X的邻居节点集 • 由于Z的节点ID与X最相近,因此使用Z的叶子节点集来初始化X的叶子节点集 • 通常情况下,假设X与A没有相同的前缀,此时X将join消息经过的第i个节点的路由表的第i行作为自己路由表的第i行 • Join消息经过的第i个节点与X的前i个数位相同 • X将A0作为X0,B1作为X1,C2作为X2…. • 向其它相关节点通告自己的到来 • 新节点向邻居节点集、叶子节点集和路由表中的每个节点发送自己的状态,以更新这些节点的状态表 Pastry—节点加入
X知道 A (A与 X邻近) A 5324 路由消息到节点ID在数值上最接近X的节点 Join消息 B 0748 Z的叶子节点集 A0— ???? B1— 0??? C2— 06?? Z4— 062? C 0605 A邻居节点集 Z 0620 3. 结构化对等网络 Pastry—节点加入 节点加入 X 0629 0629状态表
3. 结构化对等网络 • 叶子节点集L中的节点失效:联系L中失效节点一边具有最大索引的存活节点(即节点ID最小或者最大的存活节点),并且请求该节点的叶子节点集 • 除非|L|/2个节点同时失效,否恢复过程始终是有效的 • 失效检测:和叶子节点集中的节点周期性交互存活消息 • 路由表R中的节点失效:如果失效节点对应的表项为Rdl (第l行第d列) ,则联系同一行中的Ril, id所指向的存活节点并且获取该节点的Rdl表项,如果l行中没有存活节点,则从下一行选择一个节点 • 失效检测:和路由表中的节点联系(例如发送查询消息)如果无反应则检测到节点失效 • 邻居节点表M中的节点失效:向M中的其它节点请求邻居节点表,检查每个新发现节点的距离(根据邻近性度量),然后更新自己的邻居节点表 • 失效检测:和邻居节点表中的每个节点周期性的联系,以确认节点存活 Pastry—节点退出/失效
b=2,因此节点ID的 基数为4 (16 bits) m=16 b=2 Node ID 10233102 Routing Table 02212102 1 22301203 31203203 第m列表项的 下一数位为m 0 11301233 12230203 13021022 10031203 10132102 2 10323302 10200230 10211302 10222302 3 当前节点的第n个数位 m/b行 10230322 10231000 10232121 3 10233001 1 10233232 第n行的前n个数 位与本节点相同 [ 相同前缀 下一数位 其它 ] 0 10233120 2 每行2b-1个表项 没有合适节点 的表项为空 Node ID 12230203 Routing Table 03212100 1 22211203 31201111 10230203 11203233 2 12031203 12132300 2 12320002 12200230 12211302 12222302 3 m/b行 0 12231000 12232121 12233000 2 0 3 每行2b-1个表项
X 0629 A 5324 Join消息 Z的叶子节点集 B 0748 A0— ???? B1— 0??? C2— 06?? Z4— 062? A邻居节点集 C 0605 Z 0620 3. 结构化对等网络 • 根据邻近性度量为消息选择一条好的路由 • 邻近性度量包括IP路由跳数、地理距离、往返延时等 • 应用层为每个节点提供了根据邻近性度量确定到其它节点距离的功能,例如traceroute等 • 新节点加入过程保持了本地性 • 首先:A必定与X相接近 • A路由表中第0行表项A0与A相接近,而A与X接近,因此A0可作为X0 • 由于节点路由表中的下一行节点的可选择集合指数递减,因此B1中的节点到B的距离要比A到B的距离大得多(B在A0中),因此B1可作为X1,依此类推,C2可作为X2 • X向路由表和邻居节点集中的每个节点请求状态,并且使用更近的节点来更新自己的状态 • 由于邻居节点集根据邻近性度量而不是节点ID前缀来维护节点信息,因此在这个过程中发挥重要作用 • 实践中Pastry保持了良好的本地性 • 伸展度(Stretch)大约为2~3 • 伸展度(Stretch):逻辑网络的路由延时/IP网络的单播路由延时 Pastry—路由本地性
3. 结构化对等网络 • 逻辑网络路由跳数O(log2b N) • 路由表开销log2b N *(2b -1) • 路由本地性:状态表(路由表、邻居节点集、叶子节点集)中的表项选择在邻近性度量上与本节点相近的节点 • 稳健性:只有在|L|/2个叶子节点完全失效时才会路由失败 Pastry—总结
3. 结构化对等网络 • DHT层次体系结构 • DHT接口API • OpenDHT • Indirect Internet Infrastructure (i3) 基于DHT的P2P应用
3. 结构化对等网络 • DHT层次体系结构 基于DHT的P2P应用
3. 结构化对等网络 • DHT Applications • File sharing [CFS, PAST, …] • Event notification [Scribe] • Naming systems [ChordDNS, …] • Query and indexing [Kademlia, …] • Communication primitives [I3, …] • …... 基于DHT的P2P应用