0%

谢希仁计算机网络06-应用层

应用层许多协议都是基于客户服务器方式。即便是 P2P 实质上也是一种特殊的客户服务器方式,客户 (clinet) 和服务器 (server) 都是指通信中涉及的两个应用进程

6.1 域名系统 DNS

6.1.1 概述

​ 域名系统 DNS 能把互联网上的主机名字转换为 IP 地址。互联网采用层次树状结构的命名方法,并使用分布式的域名系统 DNS。DNS 使大多数名字都在本地进行解析 (resolve),仅少量解析需要在互联网上进行通信。

​ 域名到 IP 地址的解析是由分布在互联网上的许多域名服务器程序共同完成的,人们也常讲运行域名服务器程序的机器称为域名服务器

​ 域名解析的请求以 UDP 用户数据报的方式进行传输。具体传输路径待后续探讨。

6.1.2 互联网域名结构

​ 互联网采用层次树状结构进行命名,任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名 (domain name)。域还可以划分为子域,这样就形成了顶级域、二级域、三级域等等。每个域名由标号 (label) 序列组成,各标号间用隔开,

image-20231123095017782

  • 每个标号不超过 63 字符。
  • 不区分大小写。
  • 多标号组成完整域名不超过 255 字符。

​ 顶级域名分为四大类:

  • 国家顶级域名 nTLD:如 cn 表示中国,us 表示美国等等,又常记为 ccTLD (country-code)。
  • 通用顶级域名 gTLD:截至 2006 年 12 月,已达 20 个。公司企业 com,网络服务机构 net,非营利性组织 org,国际组织 int,美国专用教育机构 edu,美国政府部门 gov,美国军事部门 mil,等等。
  • 基础结构域名:又称反向域名,只有一个 arpa,用于反向域名解析。
  • 新顶级域名 New gTld:2011 年正式批准,任何公司机构都有权申请。

​ 二级域名划分为类别域名行政区域名两大类。

  • 类别域名:7 个,科研机构 ac,工商金融等企业 com,教育机构 edu,政府机构 gov,国防机构 mil,互联网服务机构 net,非营利性组织 org。
  • 行政区域名:34 个,如江苏省 js,北京 bj,等等。

​ 一般采用域名树来表示互联网的域名系统,其中根节点无名,如图:

image-20231123095841535

6.1.3 域名服务器

​ 一个服务器管辖的范围叫做区 (zone),一个区中所有节点必须联通。每一个区设置相应的权限域名服务器 (authoritative name server),用于保存该区主机域名到 IP 的映射。

​ 按照所起作用,可将域名服务器划分为四种不同类型:

  • 根域名服务器 (root name server):最高层次服务器,也是最重要的服务器。全世界 588 (2016 年 2 月) 个地点安装的跟服务器,只有 13 个域名,a.rootservers.net,…,m.rootservers.net。这表明,互联网是由 13 套装置构成这 13 组域名服务器。每一地点的根服务器往往由多台机器组成。根域名服务器采用任播 (anycast) 技术,DNS 客户查询时,路由器就能找到最近的一个根域名服务器。
  • 顶级域名服务器:管理在该服务器注册的所有二级域名,收到 DNS 请求时给出回答。
  • 权限域名服务器:负责一个区的域名服务器。当一个权限域名服务器还不能给出回答时,便回复客户下一步应当请求哪个服务器。
  • 本地域名服务器:并不属于服务器层次结构。主机发出 DNS 请求时,先发往本地服务器。本地服务器若无法作出回应,则继续作为客户方向其他根域名服务器发出查询报文,得到结果后再将回复发送给主机。

​ 主机向本地服务器查询一般采用递归查询,即逐步深入。而本地服务器向根域名服务器查询采用迭代查询,即遍历询问。

image-20231123101430625

​ 为提高可靠性,DNS 域名服务器还将数据复制到几个域名服务器保存,其中一个为主域名服务器 (master name server),其余为辅助域名服务器 (secondary name sever)

​ 为提高效率,域名服务器广泛使用高速缓存,存放最近查询过的域名以及从何处获得域名映射信息的记录。域名服务器为每项内容设置计时器并处理超时项。

6.2 文件传送协议

6.2.1 概述

文件传送协议 FTP (File Transfer Protocol) 提供交互式访问,允许客户指明文件类型与格式,并允许文件具有存取权限。屏蔽系统细节,适合于在异构网络中任意计算机间传送文件。

​ 基于 TCP 的 FTP 和基于 UDP 的 TFTP 是文件共享协议的一大类,即复制整个文件,欲修改文件,只能修改副本,然后将整个副本传回。

​ 另一大类是联机访问 (on-line access)。由操作系统提供对远地文件进行访问的服务,如同对本地文件访问一样。操作系统提供透明存取。透明存取优点为更改远地文件时无需作过多改动。属于该协议的有网络文件系统 NFS (Network File System)

6.2.2 FTP 工作原理

​ 采用客户服务器方式。FTP 服务器进程由两大部分组成:一个负责接收请求的主进程和若干个负责处理单个请求的从属进程。工作步骤如下:

  1. 打开熟知端口(端口号 21),以便客户连接。
  2. 等待客户发出连接请求。
  3. 启动从属进程处理请求,建立连接(熟知端口号 20),处理完毕终止该从属进程。
  4. 回到等待状态,继续接受请求。主进程与从属进程是并发的。

​ 主进程即负责控制连接,从属进程即负责数据连接。FTP 控制信息是带外 (out of band) 传送的。

image-20231123103128516

​ NFS 允许应用进程打开一个远地文件并从某一特定位置开始读写数据,在网络上传送的仅是少量修改数据。

6.2.3 简单文件传送协议 TFTP

​ 两个优点:

  • 可用于 UDP 环境。
  • 代码所占内存小,可以用于小型机或某些特殊设备。

​ 主要特点:

  • 每次传输 512 字节,最后一次可不足。
  • 报文按序编号,1 开始。
  • 支持 ASCII 或 二进制传送。
  • 可对文件进行读或写。
  • 使用很简单的首部。

​ 发送一方在规定时间内收不到确认就需重发数据 PDU。 TFTP 熟知端口号码为 69。

6.3 远程终端协议 TELNET

​ TELNET 能将用户击键传到远地主机,也能将远地主机输出通过 TCP 连接返回用户屏幕。又称终端仿真协议

​ 为了适应不同操作系统的差异,TELNET 定义了数据和命令应怎样通过互联网,这些定义就是所谓的网络虚拟终端 NVT (Network Virtual Terminal)

image-20231123104246975

​ NVT 的格式定义很简单。所有通信都使用 8 位一个字节。运转时,采用 7 位 ASCII 码传输数据,最高位为 1 时用作控制命令。定义了两字符的 CR-LF 作为标准的行结束控制符。

6.4 万维网 WWW

​ 万维网是一个大规模的、联机式的信息储藏所。能方便地从一个站点访问(或称链接到)另外一个站点。万维网是一个分布式的超媒体 (hypermedia) 系统,是超文本 (hypertext) 系统的扩充。超文本是指包含指向其它文档的链接的文本。超文本是万维网的基础。

​ 万维网以客户服务器的方式工作。客户发出请求,服务器返回客户所需的万维网文档。万维网必须解决如下几个问题:

  • 怎样标志分布在整个互联网上的万维网文档?
  • 用什么协议实现万维网各种链接?
  • 如何使不同作者创作不同风格的文档,都能在各种主机上显示出来,同时使用户清楚知道什么地方存在着链接?、
  • 如何使用户方便找到所需信息?
6.4.2 统一资源定位符 URL

​ 常用协议 http,其次是 ftp。<主机>指出万维网文档的位置,<端口>和<路径>有时可以省略。

6.4.2.1 使用 HTTP 的 URL

​ HTTP 默认端口号 80,通常可省略。若再省略路径,则连接到主页 (home page)

image-20231123105938675

6.4.3 超文本传送协议 HTTP
6.4.3.1 HTTP 的操作过程

​ 从层次角度看,HTTP 是面向事务的 (transaction-oriented) 应用层协议,可以传输任何可从互联网上得到的信息,如文本、超文本、声音和图像等。

image-20231123113251838

​ 每个万维网网点都有一个服务器进程,不断监听 TCP 端口 80,以便发现是否有连接建立请求。一旦监听到连接建立请求并建立 TCP 连接后,浏览器就发出浏览某个页面的请求,服务器就返回页面作为响应。这种交互过程遵循的格式和规则,就是 HTTP。

​ HTTP 报文通常使用 TCP 的连接传送,但 HTTP 本身是无连接的。

​ HTTP 协议是无状态的 (stateless)。每次访问时服务器响应都相同,并不记录曾经的访问。

image-20231123113709977

​ 如图所示,请求一个 Web 文档所需时间是传输时间加上两倍往返时间 RTT。

​ HTTP/1.0 每次请求都有两倍 RTT 开销,加上每建立一次连接都需要分配缓存和变量,开销很大,这种非持续连接会使 Web 服务器负担很重。

​ HTTP/1.1 协议使用了持续连接,响应后仍在一段时间内保持该条连接,响应同一个服务器的请求。该协议有两种工作方式,非流水线方式 (without pipelining)流水线方式 (with pipelining)

​ 非流水线特点是,客户收到前一个响应后才能发出下一个请求,节省了建立连接所需一个 RTT 时间。

​ 流水线方式特点是,客户收到响应前就可发送下一个请求,服务器可连续响应,访问所有对象只需一个 RTT 时间,提高了效率。

6.4.3.2 代理服务器

代理服务器 (proxy server) 又称万维网高速缓存 (Web cache)。将最近的一些请求和响应暂存于本地磁盘,新请求到达先经代理服务器查询,查询不到则作为客户发送请求。

image-20231123114554859

6.4.3.3 HTTP 报文结构

​ HTTP 有两类报文:请求报文和响应报文。

​ HTTP 是面向文本的 (text-oriented),因此报文每个字段都是一些 ASCII 码。

image-20231123114745262

开始行:请求报文称请求行 (Request-Line),响应报文称状态行 (Status-Line)。最后 CR 和 LF 分别代表回车和换行。

  • ==有点复杂,先咕咕了==
6.4.4 Web 文档
6.4.4.1 静态 Web 文档

​ 超文本标记语言 HTML 是一种制作 Web 页面的标准语言。其中插入链接的终端可以是其它网站页面,称远程链接;亦可为本地计算机的某一个文件或文件某处,称本地连接

​ XML (Extensible Markup Language) 是可扩展标记语言,设计宗旨是传输数据。

​ XHTML (Extensible HTML) 是可扩展超文本标记语言,是更严格的 HTML 版本,并将逐渐取代 HTML。

​ CSS 是层叠样式表。HTML 负责结构化内容,CSS 负责格式化结构化的内容。

​ 以上都是静态文档 (static document),创建完即不会改变。缺点是不够灵活,但 HTML 可以由不懂程序设计的人员创建,优点是简单。

6.4.4.2 动态 Web 文档

动态文档 (dynamic document) 是指文档内容是在浏览器访问万维网服务器时才由应用程序动态创建的。动态文档的开发是编写用于生成文档的应用程序,因此开发难度更大。实现动态文档需要对 Web 服务器的功能进行扩充:

  • 增加一个应用程序用来处理浏览器发来的数据并创建动态文档。
  • 增加一个机制,使 Web 服务器将浏览器发来的数据传送给该程序,Web 服务器解释该应用程序输出并向浏览器返回 HTML 文档。

通用网关接口 CGI (Common Gateway Interface) 是一种标准,定义动态文档该如何创建,输入数据该如何提供给应用程序,输出结果应如何使用。 CGI 的正式名是 CGI 脚本 (script),又称 cgi-bin 脚本,因为在许多 Web 服务器上,为便于找到 CGI 程序,就放在 /cgi-bin 目录下。

6.4.4.3 活动 Web 文档

​ 有两种技术可用于浏览器屏幕显示的连续更新:

  • 服务器推送 (sever push):将所有工作交给服务器,服务器不断运行与动态文档相关应用程序并定期更新发送。
    • 服务器开销过大。
    • 要求 TCP 保持连接,TCP 连接数目增加导致平均带宽下降,时延增大。
  • 活动文档 (active document):把所有工作转移给浏览器端。传送角度看,浏览器和服务器都将活动文档看成静态文档。

image-20231123175807768

​ Java 技术是用于创建和运行活动文档的技术,是活动文档技术的一部分。

6.4.5 Web 信息检索系统

​ 工具是搜索引擎 (search engine),分两大类,全文检索搜索引擎和分类目录搜索引擎。

​ 全文搜索引擎通过搜索软件到互联网上各网站收集信息,建立一个在线索引数据库供用户查询,这种索引数据库必须及时更新以剔除过时信息。全文检索可以检索出大量信息,但缺点是结果不够准确。

​ 分类搜索引擎并不采集任何信息,而是用个网站向搜索引擎提交网站信息时填写的关键词和网站描述等信息,经审核后输入到分类目录数据库中,供用户查询。查询时无需使用关键词,只需按照分类,因而查询准确性较好。

​ 目前出现了垂直搜索引擎,在关键词检索基础上限制搜索领域,返回结果更倾向于信息、消息、条目等。

​ 还有元搜索引擎,将用户提交的检索发送到多个独立的搜索引擎上,处理结果并返回,重在提高搜索速度、智能化搜索结果、个性化搜索。查全率和准确率都较高。

​ Google 搜索软件同时进行许多运算,核心技术是 PageRank,即网页排名。PageRank 对链接数目进行加权统计。Larry Page 和 Sergey Brin 两人利用稀疏矩阵技巧,大大简化了计算量。

6.4.6 博客和微博

​ blog 使得网民不仅是互联网内容的消费者,亦是生产者

​ 微博是一种互动及传播极快的工具,实时性、现场感和快捷性往往超过所有媒体。

6.5 电子邮件

6.5.1 概述

​ 电子邮件两个重要标准:简单邮件传送协议 SMTP (Simple Mail Transfer Protocol)互联网文本报文格式

​ SMTP 只能传送可打印的 7 位 ASCII 邮件,因此后来又提出通用互联网邮件扩充 MIME (Multipurpose Internet Mail Extensions),可同时传送多种类型数据,数据类型于首部说明。

​ 一个电子邮件系统应有三个主要组成构件:用户代理、邮件服务器、邮件发送协议(如 SMTP)和邮件读取协议(如 POP3)

image-20231123182738670

用户代理 UA (User Agent) 是用户与电子邮件系统的接口,又称为电子邮件客户端软件,如 Microsoft Outlook 和张小龙的 Foxmail。

​ 一个 UA 至少应当具有如下四个功能:

  • 撰写。
  • 显示。
  • 处理,包括发送邮件和接收邮件。
  • 通信。

​ 互联网上有许多邮件服务器,功能是发送和接收邮件并向发件人报告邮件传送结果,使用两种不同的协议,一种用于 UA 向服务器发送邮件或在服务器间发送邮件,如 SMTP;另一种用于 UA 从服务器读取邮件,如 POP3。

​ SMTP 和 POP3 都是用 TCP 连接来传送邮件的,使用 TCP 是为了保证可靠性。邮件由发送方服务器与接收方服务器间建立 TCP 连接进行传输,不会在任何中间邮件服务器落地

​ 整个发送过程有两种不同通信方式,一是推 (push),用于 SMTP 客户将邮件推给 SMTP 服务器;一是拉 (pull),POP3 客户将邮件从 POP3 服务器拉过来。来件暂时存储在用户邮件服务器中,方便时便从服务器中读取来信。

​ TCP/IP 体系电子邮件系统规定电子邮件地址 (e-mail address) 格式如下:

6.5.2 SMTP

​ SMTP 分连接建立、邮件传送、连接释放三部分,TCP 连接总是在通讯双方 SMTP 服务器直接建立,且 SMTP 传输的是明文,不利于保密。后来对 SMTP 进行扩充,称为 ESMTP。客户端发送报文时改用发送 EHLO 报文,若被拒绝则表明对方仍是一个标准的 SMTP 邮件服务器,不支持扩展,就采用原来的参数进行 SMTP 传输。

6.5.3 电子邮件的格式

​ 首部包含一些关键字,最重要的是 To 和 Subject(主题),还有一项是抄送,表明给某某人发送一个副本。某些系统允许用户使用盲复写副本 Bcc (Blind carbon copy),又称暗送,使发件人能将副本送与某人,但不希望为收件人知道。

6.5.4 邮件读取协议 POP3 和 IMAP

​ 用户从 POP3 服务器读取了邮件,邮件即从服务器删除。容易猜到会有很多不必要的麻烦,因此 POP3 进行了些功能扩充,包括允许用户设置邮件读取后仍在 POP3 服务器中存放的时间。

​ IMAP 是一个联机协议,用户打开 IMAP 服务器的邮箱时,可以看到邮件首部。若需要打开某个邮件,则该邮件才传送到计算机上。缺点是如果用户没有将邮件复制到计算机上,则邮件一直存放在 IMAP 服务器中,需上网才能查看邮件。

6.5.5 基于 Web 的电子邮件

​ 打开浏览器后即可方便地收发邮件。

​ 浏览器和邮件服务器间传输用 HTTP 协议,但邮件服务器间仍采用 SMTP 协议。

6.5.6 通用互联网邮件扩充 MIME

​ SMTP 有如下缺点:

  • 不能传送可执行文件或其它二进制文件。
  • 限于传输 7 位 ASCII 码。
  • SMTP 服务器会拒收超过一定长度的邮件。
  • 某些 SMTP 实现并未完全按照 SMTP 互联网标准。

​ 于是提出通用互联网邮件扩充 MIME,继续用原来的邮件格式,但增加邮件主体结构,定义传送非 ASCII 编码规则。主要包括三部分:

  • 5 个新的首部,可包含在原来的首部中,提供了有关邮件主体信息。
  • 定义了许多邮件内容格式,对多媒体电子邮件表示方法进行格式化。
  • 定义传送编码,可对任何内容格式转换。

​ 内容传送编码:

  • 最简单的是 7 位 ASCII,每行不能超过 1000 字符。
  • quoted-printable,适用于存在少量非 ASCII 码的数据,除特殊字符 ‘=’ 之外,都不改变。’=’ 和不可打印的 ASCII 以及非 ASCII 编码:二进制代码用两个十六进制数表示,然后在前加上一个等号 ‘=’。’=’ 的 quoted-printable 编码是 “=3D”。
  • base64 编码,可用于任意二进制文件。先将二进制代码划分为一个个 24 位单元,每个单元分为 4 个 6 位组,每个 6 位组按如下方法转化为 ASCII:0 到 63 的表示:先是 ‘A’ 到 ‘Z’ 26 个大写字母,再是 ‘a’ 到 ‘z’ 26 个小写字母,再是 ‘0’ 到 ‘9’ 10个数字,最后是 ‘+’ 和 ‘/‘。然后用 ASCII 码发送。 24 位的代码编码后变成了 32 位,开销为 25%。

6.6 动态主机配置协议 DHCP

​ 在协议软件中给参数赋值的动作叫协议配置。连接到互联网的计算机的协议软件需要配置的项目包括:

  • IP地址;
  • 子网掩码;
  • 默认路由 IP 地址;
  • 域名服务器 IP 地址。

​ 用人工进行协议配置很不方便,且易出错,应当采用自动配置方法。现在广泛使用的是动态主机配置协议 DHCP (Dynamic Host Configuration Protocol),提供机制即插即用联网,允许计算机加入新的网络获取 IP 地址而不用手工参与。

​ DHCP 给运行服务器软件而位置固定的计算机指派一个永久地址,重启时地址不变。

​ DHCP 采用客户服务器方式。需要 IP 地址的计算机启动时就向 DHCP 广播发现报文 (DHCPDISCOVER)(目的 IP 地址全置为 1),DHCP 服务器回答报文称为提供报文 (DHCPOFFER),先从数据库中查找配置信息,若找到则返回,找不到则从 IP 地址池中取出一个分配之。

​ 每个网络至少有一个 DHCP 中继代理 (relay agent),收到主机 A 的广播发现报文后,就单播向 DHCP 服务器转发报文,收到服务器回答报文后转发给 A。

image-20231123194215241

​ DHCP 客户只能在一段有限时间内使用分配到的 IP,称为租用期 (lease period)。DHCP 客户使用的端口号为 68,服务器用的 UDP 端口是 67。

  • 租用期过了一半,DHCP 发送请求报文请求更新租用期。
  • 若服务器同意,则发回确认报文。更新计时器。
  • 不同意,则发回否认报文。客户必须重新申请 IP 地址。
  • 提前终止租用期,发送释放报文即可。

6.7 简单网络管理协议 SNMP

6.7.1 基本概念

​ 网络管理包括对硬件、软件和人力的使用、综合与协调,以便对网络资源进行监视、测试、配置、分析、评价和控制,以合理的价格满足网络的一些需求,如实时运行性能、服务质量等。

管理站又称管理器,是整个网络管理系统的核心,通常是个有着良好图形界面的高性能工作站,并由网络管理员直接操作和控制。

​ 管理站所在部门常称为网络运行中心 NOC (Network Operations Center),管理站中关键构件是管理程序,管理站(硬件)或管理程序(软件)均可称为管理者 (manager) 或管理器,网络管理员 (administrator) 才是指人。

image-20231124091630752

​ 被管网络中有很多被管设备,可以是主机、路由器、打印机、集线器、网桥或网络解调器等。被管设备有时可称网络元素网元。每个被管设备都要运行一个程序以便和管理站中的管理程序通信,这些程序称为网络管理代理程序或简称代理 (agent)

简单网络管理协议 SNMP (Simple Network Management Protocol) 中的管理程序和代理按客户服务器方式工作。管理程序运行 SNMP 客户程序,代理运行 SNMP 服务器程序。被管对象 SNMP 服务器不断监听来自管理站 SNMP 客户的请求,一旦发现就立刻返回i信息或执行某个动作。

​ 网络管理基本原理:若要管理某个对象,必然会给该对象添加一些硬件或软件,但这种“添加”对原有对象影响必须小些。

​ 若网元使用的不是 SNMP 而是另一种网管协议,可使用委托代理 (proxy agent) 实现如协议转换和过滤操作等功能对被管对象进行管理。

​ 下将详细介绍 SMI、MIB 和 SNMP。

​ SMI 建立规则,MIB 对变量进行说明, SNMP 完成网管的动作。

6.7.2 管理信息结构 SMI

​ SMI 有三个任务:

  • 被管对象怎么命名;
  • 被管对象的数据类型;
  • 被管对象如何编码。
6.7.2.1 被管对象的命名

​ 采用对象命名树 (object naming tree),根无名。

image-20231124092730981

6.7.2.2 被管对象的数据类型

​ SMI 使用基本抽象语法记法 1 (ASN.1) 来定义数据类型,也增加了一些新的定义。SMI 把数据类型分为两大类:简单类型结构化类型。

​ 两种结构化类型 sequence 和 sequence of,前者类似于 C 语言的 struct,后者类似于 C 语言的 array。

6.7.2.3 编码方法

​ SMI 使用 ASN.1 制定的基本编码规则 BER (Basic Encoding Rule) 进行编码。把所有数据元素表示为 T-L-V 三个字段,T (Tag) 定义类型,L (Length) 定义 V 字段长度,V (Value) 定义字段的值。

image-20231124093746676

​ T 字段又称为标记字段,分为如下三个子字段:

  • 类别(2 位):通用类 (00),应用类 (01),上下文类 (10),专用类 (11)。
  • 格式(1 位):简单数据类型 (0),结构化数据类型 (1)。
  • 编号(5 位):用以标志不同数据类型。
6.7.3 信息管理库 MIB

​ 管理程序使用 MIB 中信息的对网络进行管理,只有在 MIB 中的对象才是 SNMP 所能管理的。

image-20231124094124719

​ MIB 变量只给出了每个数据项的逻辑定义,而一个路由器使用的内部数据结构可能与 MIB 的定义不同。

6.7.4 SNMP 的协议数据单元和报文

​ SNMP 实际上只有两种基本管理功能:

  • :Get 报文检测被管对象状况。
  • :Set 报文改变被管对象状况。

​ SNMP 不是完全的探寻协议,允许不经过询问发送某些信息,这些信息称之为陷阱 (trap),能捕捉事件,但参数受限。仅在严重事件发生时才发送陷阱,且陷阱所需字节数很少。

​ SNMP 使用无连接的 UDP,开销很小。在运行代理的服务器端使用熟知端口 161 接收 Get 或 Set 报文以及发送响应报文,运行管理程序的客户端使用熟知端口 162 接收来自各代理的 trap 报文。

​ SNMP 报文无固定字段,采用 ASN.1 编码。一个 SNMP 报文由四部分组成:版本、首部、安全参数、数据部分

image-20231124094913065

6.9 P2P

​ 目前互联网流量中,P2P 文件分发已经占据最大份额。

6.9.1 集中目录服务器的 P2P —— 初代 P2P Napster

​ 使用 Napster 可通过互联网免费下载各种 MP3 音乐,运行 Napster 的所有用户,都必须及时向 Napster 的目录服务器报告自己已经存有哪些音乐文件。当用户需要时,便向服务器发出查询,服务器返回存有这一文件的计算机 IP 地址。

6.9.2 分布式结构的 P2P 文件共享程序

​ 二代 P2P Gnutella 使用洪泛法在大量 Gnutella 用户间进行查询。其使用了一种有限范围的洪泛查询

​ 下介绍更后来的技术——比特洪流 BT (Bit Torrent)。BT 把参与某个文件分发的所有对等方称之为一个洪流 (torrent),对等方下载文件的数据单元称为文件块 (block)

​ 每个洪流有一个基础设施节点称追踪器 (tracker),一个对等放方加入洪流时必须登记(或称注册),并周期性通知其仍处于洪流中。

​ 一个洪流中,文件的需求方和提供方之间通过建立 TCP 连接传输文件块。当一个对等方 A 加入洪流时,追踪器为其指派若干个相邻对等方,A 通过 TCP 连接周期性向相邻对等方索取它们拥有的文件块列表。

image-20231124100046577

image-20231124100053260

​ A 必须抉择的是:哪些文件块需要向相邻对等放请求?在众多请求中,应向哪些相邻对等放发送所请求的文件块?

​ 对于前者,A 采用最稀有的优先 (rarest first) 技术,凡是 A 所缺少而相邻对等方已拥有的块,都应当去索取。

​ 对于后者,采用算法:凡当前有以最高数据率向 A 传送文件块的某相邻对等方, A 就优先将请求块传送给它。

6.9.4 在 P2P 对等方中搜索对象

​ 数据库中存储信息仅两个部分:资源名 K(又称关键字)、存放该对象的节点的 IP 地址 N(有的 IP 还附有端口号)。

​ 现在广泛使用的索引和查找技术叫分布式散列表 DHT (Distributed Hash Table),是由大量对等方共同维护的哈希表。基于 DHT 的算法如 Chord,把资源名 K 及 IP 地址 N 分别映射到资源名标识符 KID节点标识符 NID。把结点标识符从小到大沿顺时针排列成一个环形覆盖网络 Chord 环并按规则映射:

  • NID 按照标识符值映射到 Chord 环上对应的点。
  • KID 按照其标识符值映射到最近的下一个 NID。

​ 举例说明: K31 和 K2 都放在 N4,表示要找资源 K31 或 K2 的结点的 IP,应当到 N4 去找。即按 K 映射到 KID,从 KID 找到 NID,在 NID 中寻找 IP 地址 N。

image-20231124101342545

​ 定位一个资源,平均沿环发送查找报文 N/2 个或遍历所有结点,显然效率很低。

​ 为加速查找,可以采用倍增算法,每个结点 x 指向 $x+1, x+2, x+4, x+8…$ 的结点,这样当欲定位某个编号的结点时,即可在 log 的开销内查找。举例:

​ 当前在结点 $1$,欲定位到结点 $28$,则 $1 + 16 = 17$, $17 + 8 = 25$, $25 + 2 = 27$, $27 + 1 = 28$。

image-20231124101751582

​ P2P 存在一些关键的问题,一是知识产权,二是 P2P 流量管理,处理网上一些灰色资源,三是网络资源占据。