当前位置: 首页 > news >正文

计算机网络 第二章:应用层(三)

2.4 DNS:因特网的目录服务

        因特网上的主机可以使用多种方式进行标识主机的一种标识方法是用它的主机名(hostname),如 www.facebook.com、www.google.com等。然而,主机名几乎没有提供(即使有也很少)关于主机在因特网中位置的信息。况且,因为主机名可能由不定长的字母数字组成,路由器难以处理。因此,主机也可以使用所谓的 IP地址(IP address)进行标识

         一个 IP 地址由 4 个字节组成,并有着严格的层次结构。例如 121. 7. 106. 83 这样一个 IP地址,其中的每个字节都被句点分隔开来,表示了 0 ~ 255 的十进制数字。IP 地址具有层次结构,是因为当我们从左至右扫描它时,我们会得到越来越具体的关于主机位于因特网何处的信息(即在众多网络的哪个网络里) 类似地,当我们从下向上查看邮政地址时,我们能够获得该地址位于何处的越来越具体的信息。

2.4.1 DNS 提供的服务

        识别主机有两种方式:通过主机名或者 IP 地址。需要一种能进行主机名到 IP地址转换的目录服务。这就是域名系统(DNS)的任务。DNS 是:① 一个由分层的 DNS服务器 实现的分布式数据库;② 一个使得主机能够查询分布式数据库的应用层协议。DNS 服务器通常运行 BIND 软件的 UNIX 机器。DNS 协议运行在 UDP 之上,使用 53号 端口。

         DNS 通常是由其他应用层协议所使用的,包括 HTTP SMTP 和 FTP,将用户提供的主机名解析为 IP 地址。举一个例子,考虑运行在某用户主机上的一个浏览器(即一个 HTTP客户)请求 URL www.someschool.edν/index. html 页面时会发生什么现象。为了使用户的主机能够将一个 HTTP 请求报文发送到 Web 服务器 www. someschool.edu该用户主机必须获得 www. someschool.edu 的 IP 地址。其做法如下:

        1 ) 同一台用户主机上运行着 DNS 应用的客户端
        2) 浏览器从上述 URL 中抽取出主机名 www.someschool.edu,并将这台主机名传给 DNS 应用的客户端
        3) DNS 客户向 DNS 服务器发送一个包含主机名的请求
        4)DNS 客户最终会收到一份回答报文,其中含有对应于该主机名的 IP 地址
        5) 一旦浏览器接收到来自 DNS 的该 IP 地址,它能够向位于该 IP 地址 80 端口的 HTTP 服务器进程发起一个 TCP 连接

         DNS 给使用它的因特网应用带来了额外的时延,有时还相当可观。想获得的 IP 地址通常就缓存在一个“ 附件的 ”DNS服务器中,这样有助于减少 DNS 的网络流量和 DNS 的平均时延。

        除了进行主机名到 IP地址 的转换外,DNS 还提供了一些重要的服务:

        ① 主机别名(host aliasing):有着复杂主机名的主机能拥有一个或者多个别名。例如,一台名为 relay1.west-coast.enterprise.com 的主机,可能还有两个别名为 enterprise.com 和 www.enterprise.com 。在这种情况下 relay1.west- coast.enteprise.com 也称为规范主机名 (canonical hoslname) 。主机别名(当存在时)比主机规范名更加容易记忆,应用程序可以调用DNS 来获得主机别名对应的规范主机名以及主机的 IP地址

        ② 邮件服务器别名(mail server aliasing)。 例如,如果 Bob 在雅虎邮件上有一个账户,Bob 的邮件地址就像 bob@yahoo.com 这样简单。然而,雅虎邮件服务器的主机名可能更为复杂,不像 yahoo. com 那样简单好记(例如,规范主机名可能像 relay1.west-coast.hotmail.com 那样) 电子邮件应用程序可以调用 DNS ,对提供的主机名别名进行解析,以获得该主机的规范主机名及其 IP 地址。事实上, MX 记录(参见后面)允许一个公司的邮件服务器和 Web 服务器使用相同的(别名化的)主机名;例如,一个公司的 Web 服务器和邮件服务器都能叫做 enterprise.com。

        ③ 负载分配(load distribution)。 DNS 也用于在冗余的服务器之间进行负载分配。繁忙的站点(如 cnn.com)被冗余分布在多台服务器上,每台服务器均运行在不同的端系统上,每个都有着不同的 IP 地址。由于这些冗余的 Web 服务器,一个 IP 地址集合因此与同一个规范主机名相联系。 DNS 数据库中存储着这些 IP 地址集合。当客户对映射到某地址集合的名字发出一个 DNS 请求时,该服务器用 IP 地址的整个集合进行响应,但在每个回答中循环这些地址次序。因为客户通常总是向 IP 地址排在最前面的服务器发送 HTTP 请求报文,所以 DNS 就在所有这些冗余的 Web 服务器之间循环分配了负载。DNS 的循环同样可以用于邮件服务器,因此,多个邮件服务器可以具有相同的别名。

 2.4.2 DNS 工作机理概述

        下面给出 DNS 工作过程的总体概括,集中在主机名到 IP 地址转换服务方面。

        假设运行在用户主机上的某些应用程序(如 Web 浏览器或邮件阅读器)需要将主机名转换为 IP 地址。这些应用程序将调用 DNS 的客户端,并指明需要被转换的主机名(在很多基于 UNIX 的机器上,应用程序为了执行这种转换需要调用函数 gethostbyname())。用户主机上的 DNS 接收到后,向网络中发送一个 DNS 查询报文。所有的 DNS 请求和回答报文使用 UDP 数据报经端口 53 发送。经过若干毫秒到若干秒的时延后,用户主机上的 DNS 接收到一个提供所希望映射的 DNS 回答报文。这个映射结果则被传递到调用 DNS 的应用程序。因此,从用户主机上调用应用程序的角度看, DNS 是一个提供简单、直接的转换服务的黑盒子。但事实上,实现这个服务的黑盒子非常复杂,它由分布于全球的大量 DNS 服务器以及定义了 DNS 服务器与查询主机通信方式的应用层协议组成。

        DNS 的一种简单设计是在因特网上只使用一个 DNS 服务器,该服务器包含所有的映射。在这种集中式设计中,客户直接将所有查询直接发往单一的 DNS 服务器同时该 DNS 服务器直接对所有的查询客户做出响应。尽管这种设计的简单性非常具有吸引力,但它不适用于当今的因特网,因为因特网有着数量巨大(并得续增长)的主机。这种集中式设计的问题包括:

        ① 单点故障:如果该 DNS 服务器崩溃,整个因特网随之瘫痪!

        ② 通信容量:单个 DNS 服务器不得不处理所有的 DNS 查询(用于为上亿台主机产生的所有 HTTP 请求报文和电子邮件报文服务)。

        ③ 远距离的集中式数据库单个 DNS 服务器不可能 “ 邻近 ” 所有查询客户。如果将单台 DNS 服务器放在纽约市,那么所有来自澳大利亚的查询必须传播到地球的另一边,中间也许还要经过低速和拥塞的链路。将导致严重的时延。

        ④ 维护单个 DNS 服务器将不得不为所有的因特网主机保留记录。这不仅将使这个中央数据库庞大,而且还不得不为解决每个新添加的主机而频繁更新。 

        总的来说,在单一 DNS 服务器上运行集中式数据库完全没有可扩展能力。因此采用了分布式的设计方案。事实上,DNS 是一个在因特网上实现分布式数据库的案例。

         1. 分布式、层次数据库

        为了处理扩展性问题, DNS 使用了大量的 DNS 服务器 ,它们以层次方式组织,并且分布在全世界范围内。没有一台 DNS 服务器拥有因特网上所有主机的映射。相反、这些映射分布在所有的 DNS 服务器上。大致说来,有 3 种类型的 DNS 服务器:根 DNS 服务器顶级域 (Top-Level Domain , TLD) DNS 服务器权威 DNS 服务器。这些服务器以图 2-17 中所示的层次结构组织起来。为了理解这 3 种类型的 DNS 服务器交互的方式,假定一个 DNS 客户要决定主机名 www. amazon.com 的 IP地址。粗略说来,将发生下列事件。客户首先与根服务器之一联系它将返回顶级域名 com TLD 服务器的 IP地址。该客户则与这些 TLD 服务器之一联系,它将为 amazon. com 返回权威服务器 IP地址 。最后,该客户与 amazon. com 权威服务器之一联系,它为主机名 www.amazon.com返回其 IP 地址。我们将很快更为详细地考察 DNS 查找过程。不过我们先仔细看一下这种类型的 DNS 服务器

        ① 根 DNS 服务器。有 400 多个根名字服务器编辑全世界。这些根名字服务器由 13 个不同的组织管理。根名字服务器的全部清单连通管理它们的组织及其 IP 地址可以在【Root Servers 2016】找到。根名字服务器提供 TLD 服务器的 IP 地址

        ② 顶级域(DNS)服务器。对于每个顶级域(如 com org net edu gov)和所有国家的顶级域(uk fr ca 和 jp),都有 TLD 服务器(或服务器集群)。TLD 服务器提供了权威 DNS 服务器的 IP 地址。

        ③ 权威 DNS 服务器。在因特网上具有公共可访问主机(如 Web 服务器和邮件服务器)的每个组织机构必须提供公共可访问的 DNS 记录,这些记录将这些主机的名字映射为 IP 地址。一个组织机构的权威 DNS 服务器收藏了这些 DNS 记录。一个组织机构能够选择实现它自己的权威 DNS 服务器以保存这些记录;另一种方法是,该组织能够支付费用,让这些记录存储在某个服务提供商的一个权威 DNS务器中。多数大学和大公司实现和维护它们自己基本和辅助(备份)的权威 DNS服务器

         根、 TLD 和 权威 DNS 服务器都处在该 DNS 服务器的层次结构中,如图 2~17 所示。有另一类重要的 DNS 服务器,称为本地 DNS 服务器 (local DNS server)。严格说来,一个本地 DNS 服务器并不属于该服务器的层次结构,但它对 DNS 层次结构是至关重要的。每个 ISP (如一个居民区的 lSP 或一个机构的 ISP) 都有一台本地 DNS 服务器(也叫默认名字服务器)。当主机与某个 ISP 连接时,该 ISP 提供一台主机的 IP 地址该主机具有一台或多台其本地 DNS 服务器的 IP 地址(通常通过 DHCP)。通过访问 Windows 或 UNIX 的网络状态窗口,用户能够容易地确定他的本地 DNS 服务器的 IP 地址。主机的本地 DNS 服务器通常 “ 邻近 ”本主机。对某机构 ISP 而言,本地 DNS 服务器可能就与主机在同一个局域网中;对于某居民区 ISP 来说,本地 DNS 服务器通常与主机相隔不超过几台路由器。当主机发出 DNS 请求时,该请求被发往本地 DNS 服务器,起着代理的作用,并将该请求转发到 DNS 服务器层次结构中

         来看一个简单例子,假设主机 cse.nyu.edu 想知道主机 gaia.cs.umass.edu 的 IP 地址。同时假设纽约大学(NYU)的  cse.nyu.edu 主机的本地 DNS 服务器为  dns.nyu.edu,并且 gaia.cs.umass.edu 的权威服务器为 dns.umass.edu。如图 2-18 所示,主机  cse.nyu.edu 首先向它的本地 DNS 服务器  dns.nyu.edu 发送一个 DNS 查询报文。该查询报文含有被转换的主机名 gaia.cs.umass.edu。本地 DNS 服务器将该报文转发到根 DNS 服务器。该根 DNS 服务器注意到其 edu 前缀并向本地 DNS 服务器返回负责 edu 的 TLD 的 IP 地址列表。该本地 DNS 服务器则再次向这些 TLD 服务器之一发送查询报文。该 TLD 服务器注意到 umass.edu 前缀,并用权威 DNS 服务器的 IP 地址进行响应,该权威 DNS 服务器是负责马赛诸塞大学的 dns.umass.edu。最后,本地 DNS 服务器直接向 dns.umass.edu 重发查询报文,dns.umass.edu 用 gaia.cs.umass.edu 的IP 地址进行响应。本例中,为了获得一台主机名的映射,共发送了 8 份 DNS 报文:4份查询报文和 4 份回答报文。

         我们前面的例子假设了 TLD 服务器知道用于主机的权威 DNS 服务器的 IP 地址。一般而言,这种假设并不总是正确的。相反,TLD 服务器只是知道中间的某个 DNS 服务器该中间 DNS 服务器依次才能知道用于该主机的权威 DNS 服务器。例如,再次假设马萨诸塞大学有一台用于本大学的 DNS 服务器,它称为 dns.umass.edu。同时假设该大学的每个系都有自己的 DNS 服务器,每个系的 DNS 服务器是本系所有主机的权威服务器。在这种情况下,当中间 DNS 服务器 dns.umass.edu 收到了对某主机的请求时,该主机名是以 cs. umass. edu 结尾,它向 dns.nyu.edu 返回 dns.cs.umass. edu 的 IP 地址,后者是所有以cs. umass. edu 结尾的主机的权威服务器本地 DNS 服务器 dns. nyu. edu 则向权威 DNS 服务器发送查询,该权威 DNS 服务器向本地 DNS 服务器返回所希望的映射,该本地服务器依次向请求主机返回该映射。在这个例子中,共发送了 10 DNS 报文!

         图 2-18 所示的例子利用了递归查询 迭代查询从 cse.nyu.edu 到 dns.nyu.edu 发出的查询是递归查询,因为该查询以自己的名义请求 dns.nyu.edu 来获得该映射。而后继三个查询是迭代查询,因为所有的回答都是直接返回给 dns.nyu.edu。从理论上来讲,任何 DNS 查询即可能是迭代的也能是递归的。例如,图 2-19 显示了一条 DNS 查询链,其中的所有查询都是递归的。实践中,查询通常遵循图 2-18中的模式:从请求主机到本地 DNS 服务器的查询是递归的,其余的查询是迭代的。

         2. DNS 缓存

        前面的讨论一致忽略了 DNS 系统的一个非常重要特色:DNS 缓存(DNS caching)。DNS 缓存的原理很简单。在一个请求链中,当某 DNS 服务器接收一个 DNS 回答(例如,包含某主机名到 IP 地址的映射)时,它能将映射缓存在本地存储器中 。例如,在图 2-18 中,每当本地DNS服务器 dns.nyu.edu 从某个 DNS 服务器接收到一个回答,它能够缓存包含在该回答中的任何信息。如果在 DNS 服务器中缓存了一台主机名/IP地址对,另一个相同主机名的查询到达该 DNS 服务器时,该 DNS 服务器就能够提供所要求的 IP 地址,即使它不是该主机的权威服务器。由于主机和主机名与 IP 地址间的映射并不是永久的,DNS 服务器在一段时间后(通常设置为两天)将丢弃缓存的信息

 2.4.3 DNS 记录和报文

        共同实现 DNS 分布式数据库的所有 DNS 服务器存储了资源记录(Resource Record,RR),RR 提供了主机名到 IP 地址的映射。每个 DNS 回答报文包含了一条或多条资源记录。概要地介绍 DNS 资源记录和报文。

         资源记录是一个包含了下列字段的 4 元组:{Name、Value、Type、TTL}

        TTL 是该记录的生存时间,决定了资源记录应当从缓存中删除的时间。下面给出记录的例子,忽略 TTL 字段。 Name 和 Value 的值取决于 Type:

        ① 如果 Type =A,则 Name 是主机名,Value 是该主机名对应的 IP 地址。因此,一条类型为 A 的资源记录提供了标准的主机名到 lP 地址的映射。例如( relay1.bar.foo.com , 145. 37. 93. 126 A),的就是一条类型 A 记录。
        ② 如 Type =NS ,则 Name 是个域(如 foo. com) ,而 Value 是个知道如何获得该域中主机 IP 地址的权威 DNS 服务器的主机名。这个记录用于沿着查询链来路由 DNS查询。例如(foo.com,dns. foo.com , NS) 就是一条类型为 NS 的记录。
        ③ 如果 Type = CNAME,则 Value 是别名为 Name 的主机对应的规范主机名。该记录能够向查询的主机提供一个主机名对应的规范主机名,例如 (foo. com, relay1.har.foo.com , CNAME) 就是一条 CNAME 类型的记录。
        ④ 如 Type = MX ,则 Value 是个别名为 Name 的邮件服务器的规范主机名。举例来说, (foo. com , mail. bar. foo. com , MX )就是一条 MX 记录。MX 记录允许邮件服务器主机名具有简单的别名。值得注意的是,通过使用 MX 记录,一个公司的邮件服务器和其他服务器(如它的 Web 服务器)可以使用相同的别名。为了获得邮件服务器的规范主机名, DNS 客户应当请求 MX 记录;而为了获得其他服务器的规范主机名, DNS 客户应当请求 CNAME 记录。

        如果一台 DNS 服务器是用于某特定主机名的权威 DNS 服务器,那么该 DNS 服务器会有一条包含用于该主机名的类型 A 记录(即使该 DNS 服务器不是其权威 DNS 服务器,它也可能在缓存中包含有一条类型 A 记录)。如果服务器不是用于某主机名的权威服务器,那么该服务器将包含一条类型 NS 记录,该记录对应于包含主机名的域它还将包括一条类型 A 记录,该记录提供了在 NS 记录的 Value 字段中的 DNS 服务器的 IP 地址。举例来说,假设一台 edu TLD 服务器不是主机 gaia. cs. umass. eclu 的权威 DNS 服务器, 则该服务器将包含一条包括主机 css. umass. edu 的域记录,如( umass. edu , dns. umass. edu , NS); 该 edu TLD 服务器还将包含一条类型A记录,如 (dns. unlass. edu , 128. 11.9.40. 111 ,A),该记录将名字 dns.umass.edu 映射为 IP 地址

         1. DNS 报文

        本节前面,提到了 DNS 查询和回答报文。DNS 只有这两种报文,并且,查询和回答报文有着相同的格式,如图 2-20 所示。DNS 报文中各字段的语义如下:

           前 12 个字节是首部区域,其中有几个字段。第一个字段(标识符)是一个 16 比特的数,用于标识该查询。这个标识符会被复制到对查询的回答报文中,以便让客户用它来匹配发送的请求和接收到的回答。标志字段中含有若干标志。1 比特的" 查询/回答 "标志位指出报文是查询报文 (0) 还是回答报文(1)。当某 DNS 服务器是所请求名字的权威 DNS 务器,1比特的" 权威的 "标志位被置在回答报文中。如果客户(主机或者 DNS 服务器)在该 DNS 服务器没有某记录时希望它执行递归查询,将设 1 比特的"希望递归"标志位。如果该 DNS 服务器支持递归查询,在它的回答报文中会对 1 比特的" 递归可用 "标志位置位。在该首部中,还有 4 个有关数量的字段,这些字段指出了在首部后的 4 类数据区域出现的数量。

          问题区域包含着正在进行的查询信息。该区域包括:① 名字字段包含正在被查询的主机名字② 类型字段,指出有关该名字的正被询问的问题类型,例如主机地址是与一个名字相关联(类型A)还是与某个名字的邮件服务器相关联(类型 MX)。

          在来自 DNS 服务器的回答中,回答区域包含了对最初请求的名字的资源记录。前面讲过每个资源记录都有 Type(A、NS、CNAME 和 MX)字段、Value 字段和 TTL 字段。在回答报文的回答区域中可以包含多条 RR,因此一个主机名能够有多个 IP 地址。 

          权威区域包含了其他权威服务器的记录。

          附加区域包含了其他有帮助的记录。例如,对于一个 MX 请求的回答报文的回答区域包含了一条资源记录,该记录提供了邮件服务器的规范主机名。该附加区域包含一个类型 A 记录,该记录提供了用于该邮件服务器的规范主机名的 IP 地址。 

        从正在工作的主机直接向某些 DNS 服务器发送一个 DNS 查询报文,使用 nslookup 程序。对于多数 Windows 和 UNIX 平台,nslookup 程序是可用的。例如,从一台 Windows 主机打开命令提示符界面,直接键入“ nslookup ”即可调用该程序。在调用 nslookup 后,能够向任何 DNS 服务器(根、TLD 或 权威)发送 DNS 查询。在接收到来自 DNS 服务器的回答后,nslookup 将显示包括在该回答中的记录(以人可读的格式)。

        2. 在 DNS 数据库中插入记录

        在一个特定的例子中看看如何完成插入数据。假定你刚刚创建一个称为网络乌托邦 (Network Utopia) 的令人兴奋的新创业公司。你必定要做的第一件事是在注册登记机构注册域名 networkutopia.com。注册登记机构 (register)是一个商业实体,它验证该域名的唯一性,将该域名输入 DNS 数据库(如下面所讨论的那样),对提供的服务收取少量费。1999 年前,唯一的注册登记机构是 Nework Solution ,它独家经营对于com net 和 org 域名的注册。但是现在有许多注册登记机构竞争客户,因特网名字和地址分配机构 (Internet Corporation for Assigned Names and Numbers, lCANN) 向各种注册登记机构授权 在 http://www.internic.net 上可以找到授权的注册登记机构的列表。

         当你向某些注册登记机构注册域名 networkutopia.com 时,需要向该机构提供你的基本和辅助仅威 DNS 服务器的名字和 IP 地址。假定该名字和 IP 地址是 dns1.networkutopia.com dns2. networkutopia.com 及 212.212.212.1 和 212.212.212.2。对这两个权威 DNS 服务器的每一个,该注册登记机构确保将一个类型 NS 和 一个类型A 的记录输入 TLD com 服务器。特别是对于用于 networkutopia.com 的基本权威服务器,该注册登记机构将下列两条资源记录插入该DNS系统中。

       还必须确保用于 Web 服务器 www.networkutopia.com 的类型A 资源记录和用于邮件服务器 mail. networkrωpia-com 的类型 MX 资源记录被输入你的权威 DNS 服务器中。(直到最近,每台 DNS 服务器中的内容都是静态配置的,例如来自系统管理员创建的配置文件。最近,在 DNS 协议中添加了一个更新 (UPDATE) 选项,允许通过 DNS 报文对数据库中的内容进行动态添加或者删除

     一旦完成所有这些步骤,人们将能够访问你的 Web 站点,并向公司的雇员发送电子邮件。通过验证该说法的正确性来总结DNS的讨论。假定在澳大利亚的 Alice 要观看 www.networkutopia.com 的 Web页面。如前面所讨论,她的主机将首先向其本地 DNS 服务器发送请求。该本地服务器接着则联系一个 TLD com 服务器。(如果 TLD com 服务器的地址没有被缓存,该本地 DNS 服务器也将必须与根 DNS 服务器相联系。)该 TLD 服务器包含前面列出的类型 NS 和类型A 资源记录,因为注册登记机构将这些资源记录插入所有的 TLD com 服务器。该 TLD com 服务器向 Alice 的本地 DNS 服务器发送一个回答,该回答包含了这两条资源记录。该本地 DNS 服务器则向 212.212.212.1 发送 DNS 查询,请求对应于 www.networkutopia. com 的类型A记录。该记录提供了所希望的 Web 服务器的 IP 地址,如 212.212.71.4,在本地 DNS 服务器将该地址回传给 Alice 的主机。Alice 的浏览器此时能够向主机 212.212.71.4 发起一个 TCP连接,并在该连接上发送一个 HTTP 请求

2.5 P2P 文件分发

         在目前为止本章中描述的应用(包括 Web 电子邮件和 DNS)都采用了客户-服务器体系结构,极大地依赖于总是打开的基础设施服务器。2.1.1节讲过,使用 P2P 体系结构,对总是打开的基础设施服务器有最小的(或者没有)依赖。与之相反,成对间歇连接的主机(称为对等方)彼此直接通信。这些对等方并不为服务提供商所拥有,而是受用户控制的桌面计算机和膝上计算机。

        一个非常自然的 P2P 应用,即从单一服务器向大量主机(称为对等方)分发一个大文件。 而在客户--服务器文件分发中,该服务器必须向每个对等方发送该文件的一个副本,即服务器承受了极大的负担,并且消耗了大量的服务器带宽。在 P2P 文件分发中,每个对等方能够向任何其他对等方重新分发已经收到的该文件的任何部分,从而在分发过程中协助该服务器。到 2016 年止,最为流行的 P2P 文件分发协议是 BitTorrent。

        1. P2P 体系结构的扩展性

         现在考虑一个用于两种体系结构类型的简单定量模型,将一个文件分发给一个固定对等方集合。如图 2-21 所示,服务器和对等方使用接入链路与因特网相连。其中 u_{s} 表示服务器接入链路的上载速率,u_{i} 表示第 i 对等方接入链路的上载速率, d_{i } 表示了第 i 对等方接入链路的下载速率。 还用 F 表示被分发的文件长度(以比特计),N 表示要获得的该文件副本的对等方的数量。分发时间(distribution time) 是所有 N 个对等方得到该文件的副本所需要的时间。在下面分析分发时间的过程中,我们对 客户-服务器 和 P2P 体系结构做了简化的假设,即因特网核心具有足够的带宽,这意味着所有瓶颈都在网络接入链路。我们还假设服务器和客户没有参与任何其他网络应用,因此它们的所有上传和下载访问带宽能被全部用于分发该文件。

         

         首先来确定对于 客户 - 服务器 体系结构的分发时间,将其表示为 D_{cs}。在该体系中,没有对等方参与来帮助分发文件。做下列观察:

        ① 服务器必须向 N 个对等方的每个传输该文件的一个副本。因此该服务器必须传输 N*F 比特,因为该服务器的上载速率是 u_{s },分发该文件的时间必定是至少为 NF/u_{s }

        ② 令 d _{min} 表示具有最小下载速率的对等方的下载速率,即  d _{min} = min{d _{1},d _{p},,,d _{N}}。具有最小下载速率的对等方不可能少于 F/d _{min} 秒时间内获得该文件的所有 F 比特。因此最小分发时间至少为 F/d _{min}

        再来看 P2P 体系结构的简单分析,其中每个对等方能够帮助服务器分发该文件。特别是,当一个对等方接收到某些文件数据,它能够使用自己的上载能力重新将数据分发给其他对等方。计算P2P 体系结构的分发时间在某种程度上比计算 客户-服务器 体系结构的更为复杂,因为分发时间取决于每个对等方如何向其他对等方分发该文件的各个部分。无论如何,能够得到对该最小分发时间的一个简单表示式。做下列观察:

        ① 分发的开始,只有服务器具有文件。为了使社区的这些对等方得到文件,该服务器必须经其接入链路至少发送该文件的每个比特一次。因此,最小分发时间至少是 F/ u_{s }。(与客户-服务器方案不同,由服务器发送过一次的比特可能不必由该服务器再次发送,因为对等方在它们之间可以重新分发这些比特)。

        ② 与客户-服务器体系结构相同,具有最低下载速率的对等方不能够以小于 F/ d _{min} 秒的分发时间获得所有 F 比特,因此最小分发时间至少为  F/ d _{min}

        ③ 最后,观察到系统整体的总上载能力等于服务器的上载速率加上每个单独的对等方的上载速率,即u_{total}=u_{s}+u_{1}+....+u_{N}。系统必须向这 N 个对等方的每个交付(上载)F 比特,总共交付 NF 比特。这不能以快于 Utotal 的速率完成。因此,最小的分发时间至少也是 NF/Utotal

         图 2-22 比较了客户-服务器 和 P2P 体系结构的最小分发时间,其中假定所有的对等方具有相同的上载速率 u。在图 2-22中,我们已经设置了 F/u =1 h,us=10u,d_{min}\geq u_{s}。因此,在一个小时中一个对等方能够传输整个文件该服务器的传输速率是对等方上载速率的 10 倍并且对等方的下载速率被设置的足够大,使之不会产生影响。在图2-22中看到,对于客户 - 服务器体系结构,随着对等方数量的增加,分发时间呈线性增长并且没有界。然而,对于 P2P 体系结构,最小分发时间不仅总是小于 客户-服务器体系结构的分发时间,并且对于任意的对等方数量 N,总是小于 1h。因此,具有 P2P 体系结构的应用程序能够是自扩展的。成因:对等方除了是比特的消费者还是重新分发者。

        2. BitTorrent 

        BitTorrent 是一种用于文件分发流行 P2P 协议。用 BitTorrent 的术语,参与一个特定文件分发的所有对等方的集合被称为一个洪流(torrent)。在一个洪流中的对等方彼此下载等长度的文件块(chunk),典型的块长度为 256KB。当一个对等方首次加入一个洪流时,它没有块。随着时间流逝,它累积了越来越多的块。当它下载块时,也为其他对等方上载了多个块。一旦某对等方获得了整个文件,它也许(自私地)离开洪流,或(大公无私地)留在该洪流中继续向其他对等方上载块。同时,任何对等方可能在任何时候仅具有块的子集就离开洪流,并在以后重新加入该洪流中

         每个洪流具有一个基础设施节点,称为追踪器。当一个对等方加入洪流中,他向追踪器注册自己,并周期性地通知追踪器它仍在洪流中。以这种方式,追踪器跟踪参与在洪流中的对等方。一个给定的洪流可能在任何时刻具有数以百计或千计的对等方。

         如图 2-23 所示,当一个新的对等方 Alice 加入该洪流时,追踪器随机地从参与对等方的集合中选择对等方的一个子集(为了具体起见,设有 50 个对等方) ,并将这 50 个对等方的 IP 地址发送给 Alice。Alice 持有对等方的这张列表,试图与该列表上的所有对等方创建并行的 TCP 连接。我们称所有这样与 Alice 成功地创建一个 TCP 连接的对等方为" 邻近对等方 " (在图 2-23 中, Alice 显示了仅有三个邻近对等方。通常,她应当有更多的对等方)。随着时间的流逝,这些对等方中的某些可能离开,其他对等方(最初 50 个以外的)可能试图与 Alice 创建TCP连接。因此,一个对等方的邻近对等方随时间而波动。

         在任何给定的时间,每个对等方将具有来自该文件的块的子集,并且不同的对等方具有不同的子集。Alice 周期性地(经 TCP 连接)询问每个邻近对等方它们所具有的块列表。如果 Alice 具有 L 个不同的邻居,他将获得 L 个块列表。有了这个信息,Alice 将对它当前还没有的块发出请求(仍通过 TCP 连接)。

        因此在任何给定的时刻, Alice 将具有块的子集并知道它的邻居具有哪些块。利用这些信息, Alice 将做出两个重要决定。第一,她应当从她的邻居请求哪些块呢?第二,她应当向哪些向她请求块的邻居发送块? 在决定请求哪些块的过程中, Alice 使用一种称为最稀缺优先 (rarest first) 的技术。这种技术的思路是,针对她没有的块在她的邻居中决定最稀缺的块(最稀缺的块就是那些在她的邻居中副本数量最少的块) ,并首先请求那些最稀缺的块。这样,最稀缺块得到更为迅速的重新分发,其目标是(大致地)均衡每个块在洪流中的副本数量。

         为了决定她响应哪个请求,BitTorrent 使用了一种机灵的对换算法。其基本想法是,Alice 根据当前能够以最高速率向她提供数据的邻居,给出其优先权。特别是, Alice 对于她的每个邻居都持续地测量接收到比特的速率,并确定以最高速率流入的 4 个邻居。每过10 秒,她重新计算该速率并可能修改这 4 个对等方的集合。BitTorrent 术语来说,这个对等方被称为疏通(unehoked)。重要的是,每过 30 秒,她也要随机地选择另外一个邻居并向其发送块。我们将这个被随机选择的对等方称为 Bob。因为 Alice 正在向 Bob 发送数据,她可能成为 Bob 前 4 位上载者之一,这样的话 Bob 将开始向 Alice 发送数据。如果 Bob 向 Alice 发送数据的速率足够高, Bob 接下来也能成为 Alice 的前 4 位上载者。换言之,每过 30秒 Alice 将随机地选择一名新的对换伴侣并开始与那位伴侣进行对换,如果这两名对等方都满足此对换,它们将对方放入其前 4 位列表中并继续与对方进行对换,直到该对等方之一发现了一个更好的伴侣为止。这种效果是对等方能够以趋向于找到彼此的协调的速率上载。随机选择邻居也允许新的对等方得到块,因此它们能够具有对换的东西。

        除了这 5 个对等方(“ 前” 4 个对等方和一个试探的对等方)的所有其他相邻对等方均被 “阻塞”,即它们不能从 Alice 接收到任何块。BitTorrent 还有一些机制:片(小块)、流水线、随机优先选择、残局模型和反怠慢。

相关文章:

  • 1.6软考系统架构设计师:架构师的角色与能力要求 - 练习题附答案及超详细解析
  • audit审计
  • 蓝桥杯17. 机器人塔
  • 机器人雅克比Jacobian矩阵程序
  • leetcode-排序
  • 【鸿蒙HarmonyOS】深入理解router与Navigation
  • 从边缘到云端,如何通过时序数据库 TDengine 实现数据的全局洞
  • C语言五子棋项目
  • 【PostgreSQL教程】PostgreSQL 特别篇之 语言接口连接Perl
  • 体积小巧的 Word 转 PDF 批量工具
  • VMware中CentOS 7虚拟机设置固定IP(NAT模式)完整教程
  • HarmonyOS 是 Android 套壳嘛?
  • ubantu18.04(Hadoop3.1.3)Hive3.1.2安装指南
  • C++算法(15):INT_MIN/INT_MAX使用指南与替代方案
  • 网络原理 - 6
  • ActiveMQ 核心概念与消息模型详解(一)
  • 数据结构的学习(1)二分查找,利用二分查找找局部最小值,选择排序,冒泡排序,插入排序,位运算的基础知识
  • Java虚拟机面试题:JVM调优
  • Vue3 小功能记录:密码的显示与隐藏功能
  • 实时数仓体系概览与架构演进
  • 山西省援疆前方指挥部总指挥刘鹓已任忻州市委副书记
  • 大卫·第艾维瑞谈历史学与社会理论③丨尼古拉斯·卢曼与历史研究
  • 王励勤谈国乒备战洛杉矶奥运会:要对六块金牌制定新的战略
  • 世界读书日丨“好书最美”,国家图书馆举办读书日特别活动
  • 今年以来金价涨幅超26%,未来会继续上涨吗?
  • 从板凳席到指挥台,横扫广东男篮的少帅潘江究竟有何神奇