文章目录
前言
阅读本文前请注意最后编辑时间,文章内容可能与目前最新的技术发展情况相去甚远。欢迎各位评论与私信,指出错误或是进行交流等。
本文是关于《计算机网络:自顶向下方法(第七版)》的学习分享,内容书写顺序也是按照书中的顺序。本文并不会提及书中的所有内容,主要写重点的知识,以及自己感兴趣的内容。会对原文中的内容进行一定的精简,或者加上个人的理解。
链路层和局域网
网络层提供的任意两台主机之间的通信服务。 在两台主机之间,数据报跨越一系列通信链路传输, 一些是有线链路,而一些是无线链路,从源主机起始,通过一系列分组交换机(交换机和路由器),在目的主机结束。沿协议栈继续往下,从网络层到达链路层,我们自然而然地想知道分组是如何通过 构成端到端通信路径的 各段链路的。网络层的数据报是怎样被封装进链路层帧的呢?不同的链路能够采用不同的链路层协议吗?
在链路层的讨论中,我们将看到两种截然不同类型的链路层信道。 第一种类型是广播信道,这种信道用于连接有线局域网、卫星网和混合光纤同轴电缆接入网中的多台主机。 因为许多主机与相同的广播信道连接,需要所谓的媒体访问协议来协调帧传输。 在某些场合中,可以使用中心控制器来协调传输。 第二种类型的链路层信道是点对点通信链路,诸如长距离链路连接的两台路由器之间,或用户办公室计算机与它们所连接的邻近以太网交换机之间等场合。
链路层概述
为方便讨论,将运行链路层协议的任何设备均称为节点,包括主机、路由器、交换机和WiFi 接入点。把沿着通信路径连接相邻节点的通信信道称为链路。为了将一个数据报从源主机传输到目的主机,数据报必须通过沿端到端路径上的各段链路传输。
链路层提供的服务
尽管任一链路层的基本服务都是将数据报通过单一通信链路从一个节点移动到相邻节点.但所提供的服务细节能够随着链路层协议的不同而变化。 链路层协议能够提供的可能服务包括:
- 成帧。在每个网络层数据报经链路传送之前,几乎所有的链路层协议都要将其用链路层帧封装起来。 一个帧由数据字段和首部字段组成,其中网络层数据报就在数据字段中。 帧的结构由链路层协议规定。
- 链路接入。 媒体访问控制 (Medium Access Control, MAC) 协议规定了帧在链路上传输的规则。 对于在链路的一端仅有一个发送方、链路的另一端仅有一个接收方的点对点链路, MAC 协议比较简单(或者不存在) ,即无论何时链路空闲,发送方都能够发送帧。当多个节点共享单个广播链路时,即所谓多路访问问题,MAC协议用于协调多个节点的帧传输。
- 可靠交付。 当链路层协议提供可靠交付服务时,它保证无差错地经链路层移动每个网络层数据报。前面讲过,某些运输层协议(例如TCP) 也提供可靠交付服务。 与运输层可靠交付服务类似, 链路层的可靠交付服务通常是通过确认和重传取得的。链路层可靠交付服务通常用于易产生高差错率的链路,例如无线链路。其目的是本地(也就是在差错发生的链路上)纠正一个差错,而不是通过运输层或应用层协议迫使进行端到端的数据重传。然而. 对于低比特差错的链路,包括光纤、 同轴电缆和许多双绞铜线链路,链路层可靠交付可能会被认为是一种不必要的开销。由于这个原因,许多有线的链路层协议不提供可靠交付服务。
- 差错检测和纠正。 当帧中的一个比特作为 1 传输时,接收方节点中的链路层硬件可能不正确地将其判断为0, 反之亦然。 这种比特差错是由信号衰减和电磁噪声导致的。 因为没有必要转发一个有差错的数据报,所以许多链路层协议提供一种机制来检测这样的比特差错。通过让发送节点在帧中包含差错检测比特,让接收节点进行差错检查,以此来完成这项工作。链路层的差错检测通常更复杂,并且用硬件实现。差错纠正类似于差错检测, 区别在于接收方不仅能检测帧中出现的比特差错,而且能够准确地确定帧中的差错出现的位置(并因此纠正这些差错)。
链路层在何处实现
在深入学习链路层的细节之前,考虑一下在何处实现链路层的问题。主机的链路层是用硬件还是用软件实现的呢?它是实现在一块单独的卡上还是一个芯片上?它是怎样与主机的硬件和操作系统组件的其他部分接口的呢?

上图显示了一个典型的主机体系结构。 链路层的主体部分是在网络适配器 (network adapter) 中实现的,网络适配器有时也称为网络接口卡 (Nehvork Interface Card, NIC) 。位于网络适配器核心的是链路层控制器,该控制器通常是一个实现了许多链路层服务(成帧、 链路接入、差错检测等)的专用芯片。 因此, 链路层控制器的许多功能是用硬件实现的。
在发送端,控制器取得了由协议栈较高层生成并存储在主机内存中的数据报,在链路层帧中封装该数据报,然后遵循链路接入协议将该帧传进通信链路中。 在接收端,控制器接收了整个帧,抽取出网络层数据报。 如果链路层执行差错检测,则需要发送控制器在该帧的首部设置差错检测比特,由接收控制器执行差错检测。
差错检测和纠正技术
比特级差错检测和纠正, 即对从一个节点发送到另一个物理上连接的邻近节点的链路层帧中的比特差错进行检测和纠正,它们通常是链路层提供的两种服务。我们将研究几种最简单的技术,它们能够用于检测比特差错,而且在某些情况下,能够纠正这样的比特差错。
下图表示了我们研究的环境。在发送节点,为了保护比特免受差错,使用差错检测和纠正比特来增强数据 D。通常,要保护的数据不仅包括从网络层传递下来需要通过链路传输的数据报,而且包括链路帧首部中的链路级的寻址信息、序号和其他字段。 链路级帧中的D和 EDC都被发送到接收节点。 在接收节点,接收到比特序列D'和EDC'。 注意到因传输中可能发生比特差错, D'和EDC'可能与初始的D和EDC不同。接收方的挑战是在它只收到 D'和 EDC'的情况下,确定 D'是否和初始的 D 相同。

奇偶校验
差错检测最简单的方式就是用单个奇偶校验位。

假设在上图中要发送的信息D有d 比特。 在偶校验方案中,发送方只需包含一个附加的比特,选择它的值,使得这 d + 1 比特(初始信息加上一个校验比特)中 1 的总数是偶数。 对于奇校验方案,选择校验比特值使得有奇数个1。采用单个奇偶校验位方式,接收方的操作也很简单。 接收方只需要数一数接收的 d + 1 比特中 1 的数目即可。 如果在采用偶校验方案中发现了奇数个值为 1 的比特,接收方知道至少出现了一个比特差错。 更精确的说法是,出现了奇数个比特差错。但是如果出现了偶数个比特差错,那会发生什么现象呢?这将导致差错无法被检测出来。 显然,需要一个更健壮的差错检测方案。
二维奇偶校验
将原始的数据划分成i行j列的矩阵,i和j是人为指定的,将原来是一维的数据 人为的放到一个矩阵中。对每行和每列汁算奇偶值。 产生的奇偶比特构成了链路层帧的差错检测比特。最终发送的数据包括原始数据 + 行校验字节 + 列校验字节。校验方式仍分为:奇校验和偶校验。
以下以偶校验为例说明计算过程。
bash
假设要发送的数据为:
10101
11110
01110
计算每行的偶校验位(要使得包括校验位 该行总的"1"的个数为偶数):
第1行 10101 → "1"的个数 = 3(奇数)→ 校验位 = 1
第2行 11110 → "1"的个数 = 4(偶数)→ 校验位 = 0
第3行 01110 → "1"的个数 = 3(奇数)→ 校验位 = 1
得到行校验位序列:1 0 1
计算每列的偶校验位(对原数据矩阵的每一列,不包括行校验位):
第1列:1,1,0 → "1"的个数 = 2(偶)→ 校验位 = 0
第2列:0,1,1 → "1"的个数 = 2(偶)→ 校验位 = 0
第3列:1,1,1 → "1"的个数 = 3(奇)→ 校验位 = 1
第4列:0,1,1 → "1"的个数 = 2(偶)→ 校验位 = 0
第5列:1,0,0 → "1"的个数 = 1(奇)→ 校验位 = 1
得到列校验位序列:0 0 1 0 1
bash
最终发送的数据 (最后一列是行校验位)
10101 1
11110 0
01110 1
00101 ← 列校验位(单独作为一行附加)
该算法检错与纠错能力:可检测所有单比特错误、多数双比特错误(除非形成矩形四角同时出错);可纠正单比特错误:定位方法是找到行校验失败 + 列校验失败的交叉点,即为错误位。无法检测:某些偶数个错误,特别是当错误呈矩形四角分布时(如位置 (i1,j1), (i1,j2), (i2,j1), (i2,j2) 同时翻转)。
检验和方法
一个简单的检验和方法就是将这k 比特数加起来, 并且用得到的和作为差错检测比特。 因特网检验和 (Internet checksum) 就基于这种方法,在之前的网络层中提到这种校验和。即待检验报文从头开始,每16位进行一次加法计算。如果遇到最高位进位,则将高于16字节进位的值加到最低位上。最终计算出来的和进行一次反码运算,就是检验和。接收方也通过对接收的数据 (包括检验和)进行加法运算, 并取反码,检测最终计算结果是否为全1 比特来检测差错。 如果这些比特中有任何比特是0, 就可以指示出差错。
循环冗余检测
现今的计算机网络中广泛应用的差错检测技术基于循环冗余检测(Cyclic Redundancy Check, CRC) 编码。CRC 编码操作如下。
- 考虑d 比特的数据D, 发送节点要将它发送给接收节点。 发送方和接收方首先必须协商一个称为生成多项式G,长度为r + 1比特。
- 需要在要发送的帧后面附加长度为 r 比特的数据(这个就是用来校验的校验码)。这个附加的数不是随意的,它要使所生成的新数据(原始数据 d+ 附加数据 r) 被发送端和接收端共同选定的G 用模2算术恰好整除( 即没有余数)。
- 到达接收端后,再把接收到的新帧除以(同样采用"模2除法")这个选定的除数G。如果有余数,则表明该帧在传输过程中出现了差错。注:生成多项式G可以随即选择,但按国际上通行的标准选择,最高位和最低位必须均为"1"。

"模2除法"与"算术除法"类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算。逻辑异或运算是两者对应位相同则结果为"0",不同则结果为"1"。如100101除以1110,结果得到商为11,余数为1,如图所示。

现在我们回到发送方怎样计算附加数据R这个关键问题上来。
设约定的生成多项式为 G ( x ) = x 4 + x 3 + 1 G(x)=x^4 + x^3+1 G(x)=x4+x3+1,将其转换为二进制表示。多项式只列出二进制值为1的位,也就是这个二进制的第4位、第3位、第0位的二进制均为1,其它位均为0。很快就可得到它的二进制比特串为11001。因为生成多项式的位数为5,根据前面的介绍,得知CRC校验码的位数为4(校验码的位数比生成多项式的位数少1)。假设原数据帧10110011,那么先在它后面再加4个0,得到101100110000。然后把这个数以"模2除法"方式除以生成多项式,得到的余数,即为CRC校验码为0100,如图所示。

多路访问链路和协议
前文我们提到了有两种类型的网络链路: 点对点链路和广播链路。 点对点链路 (point-to-point link) 由链路一端的单个发送方和链路另一端的单个接收方组成。许多链路层协议都是为点对点链路设计的,如点对点协议 (point-to-point protocol, PPP) 和高级数据链路控制 (high-level data link conll·ol, HDLC) 。 第二种类型的链路是广播链路 (broadcast link) , 它能够让多个发送和接收节点都连接到相同的、 单一的、共享的广播信道上。 这里使用术语"广播" 是因为当任何一个节点传输一个帧时,信道广播该帧, 每个其他节点都收到一个副本。 以太网和无线局域网是广播链路层技术的例子。 在本节,我们研究一个对链路层很重要的问题: 如何协调多个发送和接收节点对一个共享广播信道的访
问,这就是多路访问问题。 广播信道通常用于局域网中,局域网是一个地理上集中在一座建筑物中 (或者在一个公司, 或者在大学校园)的网络。
我们都很熟悉广播的概念,因为自电视发明以来就使用了这种通信方式。 但是传统的电视是一种一个方向的广播(即一个固定的节点向许多接收节点传输),而计算机网络广播信道上的节点既能够发送也能够接收。在计算机网络中,一个中心问题是确定谁以及在什么时候向信道传输数据。为了共享这种广播信道,计算机网络精心设计了多路访问协议,即节点通过这些协议来规范它们在共享的广播信道上的传输行为。在各种各祥的网络环境下需要多路访问协议,包括有线和无线接入网,以及卫星网络。
我们把节点作为发送和接收设备。在实践中,数以百计或者甚至数以千计个节点能够通过一个广播信道直接通信。因为所有的节点都能够传输帧,所以多个节点可能会同时传输帧。 当发生这种情况时,所有节点同时接到多个帧;这就是说,传输的帧在所有的接收方处发生碰撞。当碰撞发生时,没有一个接收节点能够有效地获得帧;在某种意义下.碰撞帧的信号纠缠在一起。因此,涉及此次碰撞的所有帧都丢失了,在碰撞时间中的广播信道被浪费了。如果许多节点要频繁地传输帧,许多传输将导致碰撞,广播信道的大量带宽将被浪费掉。
为了确保广播信道执行有用的工作,以某种方式协调活跃节点的传输是必要的。 这种协调工作由多路访问协议负责。此外,由于新类型链路尤其是新的无线链路不断出现,在多路访问协议方面研究的活跃状况仍在继续。
这些年来,链路层已经实现了几十种多路访问协议。尽管如此,我们能够将任何多路访间协议划分为3 种类型之一:信道划分协议 (channel partilioning protocol) , 随机接入协议 (random access protocol) 和轮流协议 ( taking-turns protocol) 。
在理想情况下,对于速率为R bps 的广播信道,多路访问协议应该具有以下所希望的特性:
- 当仅有一个节点发送数据时,该节点具有R bps 的吞吐量;
- 当有M个节点发送数据时,每个节点吞吐量为R/.M bps。 这不必要求 M个节点中的每一个节点总是有R/M的瞬间速率,而是每个节点有R/M 的平均传输速率
- 协议是分散的;这就是说不会因某主节点故障而使整个系统崩溃
- 协议是简单的,使实现不昂贵
信道划分协议
时分多路复用 (TDM) 和频分多路复用 (FDM) 是两种能够用于在所有共享信道节点之间划分广播信道带宽的技术。举例来说, 假设一个支持N个节点的信道且信道的传输速率为 Rbps。 TDM 将时间划分为 时间帧 ( time frame ) , 并进一步将每个时间帧为 N个时隙 (slot) 。然后把每个时隙分配给 N个节点中的一个。 无论何时某个节点在有数据要发送的时候, 它在TDM 指派给它的时隙内传输比特。 通常,选择的时隙长度应使一个时隙内能够传输单个分组。

TDM 是有吸引力的,因为它消除了碰撞而且非常公平: 每个节点在每个帧时间内得到了专用的传输速率R/N bps,. 然而它有两个主要缺陷。 首先, 节点被限制于 R/N bps 的平均速率,即使当它是唯一有分组要发送的节点。其次, 节点必须总是等待它在传输序列中的轮次,即使它是唯一一个有帧要发送的节点。
FDM 将 R bps信道划分为不同的频段(每个频段具有 R/N 带宽) , 并把每个频率分配给 N个节点中的一个。 因此 FDM 在单个较大的 R
bps 信道中创建了 N个较小的 R/N bps 信道。 FDM 也有 TDM 同样的优点和缺点。 它避免了碰撞. 在N个节点之间公平地划分了带宽, 然而, FDM限制一个节点只能使用R/N的带宽, 即使当它是唯一一个有分组要发送的节点时。

第三种信道划分协议是码分多址 (Code Division Multiple Access, CDMA) 。TDM 和FDM 分别为节点分配时隙和频率,而 CDMA 对每个节点分配一种不同的编码。 然后每个节点用它唯一的编码来对它发送的数据进行编码。 如果精心选择这些编码, CDMA 网络具有一种奇妙的特性,即不同的节点能够同时传输,并且它们各自相应的接收方仍能正确接收发送方编码的数据比特(假设接收方知道发送方的编码),而不在乎其他节点的干扰传输
随机接入协议
在随机接入协议中,一个传输节点总是以信道的全部速率(即 R bps) 进行发送。当有碰撞时,涉及碰撞的每个节点反复地重发它的帧(数据),到该数据无碰撞地通过为止。 但是当一个节点经历一次碰撞时,它不必立刻重发该帧。 相反,它在重发该帧之前等待一个随机时延。 涉及碰撞的每个节点独立地选择随机时延。 因为该随机时延是独立地选择的,所以下述现象是有可能的: 这些节点之一所选择的时延充分小于其他碰撞节点的时延,并因此能够无碰撞地将它的帧在信道中发出。
- 时隙 ALOHA
在对时隙ALOHA的描述中,我们做下列假设:
- 所有帧由 L 比特组成
- 时间被划分成长度为 L/R秒的时隙(这就是说, 一个时隙等于传输一帧的时间)。
- 节点只在时隙起点开始传输帧。
- 节点是同步的. 每个节点都知道时隙何时开始。
- 如果在一个时隙中有两个或者更多个帧碰撞,则所有节点在该时隙结束之前检测到该碰撞事件。
令p 是一个概率,在每个节点中,时隙ALOHA的操作是: - 当节点有一个新帧要发送时,它等到下一个时隙开始并在该时隙传输整个帧。
- 如果没有碰撞,该节点成功地传输它的帧,从而不需要考虑重传该帧。 (如果该节点有新桢,它能够为传输准备一个新帧。)
- 如果有碰撞,该节点在时隙结束之前检测到这次碰撞。 该节点以概率p在后续的每个时隙中重传它的帧,直到该帧被无碰撞地传输出去
时隙ALOHA 看起来有很多优点。与信道划分不同, 当某节点是唯一活跃的节点时(一个节点如果有帧要发送就认为它是活跃的),时隙ALOHA 允许该节点以全速R连续传输。时隙ALOHA 也是高度分散的,因为每个节点检测碰撞并独立地决定什么时候重传(然而,时隙ALOHA 的确需要在节点中对时隙同步)
当只有一个活跃节点时,时隙ALOHA工作出色,但是当有多个活跃节点时效率又将如何呢?这里有两个可能要考虑的效率问题。

如图中所示、当有多个活跃节点时,一部分时隙将有碰撞,因此将被"浪费"掉了。第二个考虑是,时隙的另一部分将是空闲的, 因为所有活跃节点由于概率传输策略会节制传输。唯一 "未浪费的" 时隙是那些刚好有一个节点传输的时隙。 刚好有一个节点传输的时隙称为一个成功时隙 (suecessful slot ) 。 时隙多路访问协议的效率定义为: 当有大量的活跃节点且每个节点总有大量的帧要发送时,长期运行中成功时隙的份额。 注意到如果不使用某种形式的访问控制,而且每个节点都在每次碰撞之后立即重传,这个效率将为零。 时隙ALOHA显然增加了它的效率,使之大于零,但是效率增加了多少呢?
现在我们继续概要讨论时隙ALOHA最大效率的推导过程广 为了保持该推导简单,我们对协议做了一点修改,假设每个节点试图在每个时隙以概率p传输一帧。(这就是说,我们假设每个节点总有帧要发送,而且节点对新帧和已经经历一次碰撞的帧都以概率p传输。)假设有N个节点。 则一个给定时隙是成功时隙的概率为节点之一传输而余下的N-1 个节点不传输的概率。一个给定节点传输的概率是p; 剩余节点不传输的概率是 ( 1 − p ) N − 1 (1- p)^N-1 (1−p)N−1 。因此, 一个给定节点成功传送的概率是p(1-p)^N-1: 因为有 N 个节点,任意一个节点成功传送的概率是Np(1- p) ^N-1
为了获得 N个活跃节点的最大效率,我们必须求出使这个表达式最大化的概率p。计算之后,我们会发现这个协议的最大效率为 1/e=0.37。 这就是说,当有大量节点有很多帧要传输时,则 (最多) 仅有37%的时隙做有用的工作。 囚此该信道有效传输速率不是R bps, 而仅为 0. 37 R bps! 相似的分析还表明 37% 的时隙是空闲的, 26% 的时隙有碰撞。
- ALOHA
时隙ALOHA 协议要求所有的节点同步它们的传输,使得在每个时隙开始时开始传输。ALOHA 协议是非时隙、完全分散的协议。 在纯ALOHA 中, 当一帧首次到达 (即一个网络层数据报在发送节点从网络层传递下来),节点立刻将该帧完整地传输进广播信道。 如果一个传输的帧与一个或多个传输经历了碰撞,这个节点将立即 (在完全传输完它的碰撞帧之后)以概率p重传该帧。 否则,该节点等待一个帧传输时间。 在此等待之后,它则以概率p传输该帧,或者以概率 1- p 一个帧时间等待 (保持空闲)。
为了确定纯ALOHA 的最大效率,我们关注某个单独的节点。 我们的假设与在时隙ALOHA 分析中所做的相同,取帧传输时间为时间单元。 在任何给定时间,某节点传输一个帧的概率是p。 假设该帧在时刻t0 开始传输。 如图所示,为了使该帧能成功地传输,在时间间隔 [t0-1, t0] 中不能有其他节点开始传输。 这种传输将与后续节点 i 的帧传输起始部分相重叠, 所有其他节点在这个时间间隔不开始传输的概率是 (1 - p) 。 一旦其他节点也在这个时候传输,那就发生了碰撞,传输也就失败了。所有其他节点在这个时间间隔不开始传输的概率也是 ( 1 - p)^N-1 。 因此,一个节点成功传输一次的概率是 p ( 1 − p ) ) 2 ( N − 1 ) p(1 -p ))^2(N-1) p(1−p))2(N−1) 。 通过与时隙 ALOHA 情况一样来取极限,我们求得纯ALOHA协议的最大效率仅为 1/(2e), 这刚好是时隙 ALOHA 的一半。 这就是完全分散的ALOHA 协议所要付出的代价。

- 载波侦听多路访问 (CSMA)
在时隙和纯ALOHA 中, 一个节点传输的决定独立于连接到这个广播信道上的其他节点的活动。 一个节点不关心在它开始传输时是否有其他节点碰巧在传输,而且即使有另一个节点开始干扰它的传输也不会停止传输。因此,最好增加两个规则
- 说话之前先听。 如果其他人正在说话, 等到他们说完话为止。 在网络领域中, 这被称为载波侦听 (carrier sensing),即一个节点在传输前先听信道。 如果来自另一个节点的帧正向信道上发送,节点则等待。直到检测到一小段时间没有传输, 然后开始传输。
- 如果与他人同时开始说话, 停止说话。 在网络领域中,这被称为碰撞检测 (colliion detection) , 即 当一个传输节点在传输时一直在侦听此信道。如果它检测到另一个节点正在传输干扰帧, 它就停止传输。等待一段随机时间后进行载波侦听,当空闲时传输。
关于CSMA 你可能要问的第一个间题是,如果所有的节点都进行载波侦听了,为什么当初会发生碰撞?毕竟,某节点无论何时侦听到另一个节点在传输,它都会停止传输。 对于这个问题的答案最好能够用时空图来说明。
上图显示了连接到一个线状广播总线的4个节点 A、B、 C、 D的时空图。 横轴表示每个节点所在空间的位置;纵轴表示时间。在时刻t0,节点 B 侦听到信道是空闲的,因为当前没有其他节点在传输。 因此节点B开始传输, B 的比特沿着广播媒体传播,传播也需要一定的时间(虽然以接近光的速度)。 在时刻t1 (t1 > t0) , 节点 D 有一个帧要发送。 尽管节点 B 在时刻 t1 正在传输,但B 传输的比特还没有到达D所在的空间, 因此D在t1事件侦听到信道空闲。 节点D不会去侦听A、B、C空间的信道,只会侦听自己这一块的。根据CSMA协议,从而D开始传输它的帧。 一个短暂的时间之后, B传输的比特来到了空间D,并开始干扰D 的传输。 因此,广播信道的端到端信道传播时延(信号从一个节点传播到另一个节点所花费的时间)在决定其性能方面起着关键的作用。 该传播时延越长,载波侦听节点不能侦听到网络中另一个节点已经开始传输的机会就越大。
- 具有碰撞检测的载波侦听多路访问 (CSMA/CD)
- CSMA/CD 效率
轮流协议
前面讲过多路访问协议的两个理想特性是: 1.当只有一个节点活跃时,该活跃节点具有R bps 的吞吐量;2.当有M个节点活跃时,每个活跃节点的吞吐量接近R/Mbps。 ALOHA 和 CSMA 协议具备第一个特性,但不具备第二个特性。 这激发研究人员创造另一类协议,也就是轮流协议 (taking-turns protocol) 。 和随机接入协议一样,有几十种轮流协议,其中每一个协议又都有很多变种。 这里我们要讨论两种比较重要的协议。 第一种是轮询协议 (polling protocol) 。 轮询协议要求这些节点之一要被指定为主节点。 主节点以循环的方式轮询每个节点。 特别是,主节点首先向节点 1 发送一个报文,告诉它 (节点 1)能够传输的帧的最多数量。 在节点 1 传输了某些帧后,主节点告诉节点2它(节点2) 能够传输的帧的最多数量。 (主节点能够通过观察在信道上是否缺乏信号、来决定一个节点何时完成了帧的发送。)上述过程以这种方式继续进行,主节点以循环的方式轮询了每个节点。
轮询协议消除了困扰随机接入协议的碰撞和空时隙,这使得轮询取得高得多的效率。但是它也有一些缺点。 第一个缺点是该协议引入了轮询时延, 即通知一个节点"它可以传输"所需的时间。 例如,如果只有一个节点是活跃的,那么这个节点将以小于R bps 的速率传输,因为每次活跃节点发送了它最多数量的帧时, 主节点必须依次轮询每一个非活跃的节点。 第二个缺点可能更为严重,就是如果主节点有故障, 整个信道都变得不可操作。
第二种轮流协议是令牌传递协议 (token-passing protocol) 。 在这种协议中没有主节点。一个称为令牌 (token) 的特殊帧在节点之间以某种固定的次序进行交换。 例如,节点 1 可能总是把令牌发送给节点2, 节点2可能总是把令牌发送给节点3,而节点N可能总是把令牌发送给节点 1。 当一个节点收到令牌时, 仅当它有一些帧要发送时,它才持有这个令牌; 否则,它立即向下一个节点转发该令牌。 当一个节点收到令牌时,如果它确实有帧要传输, 它发送完最大数目的帧数后,把令牌转发给下一个节点。 令牌传递是分散的,并有很高的效率。 但是它也有自己的一些问题。 例如, 一个节点的故障可能会使整个信道崩溃。 或者如果一个节点偶然忘记了释放令牌, 则必须调用某些恢复步骤使令牌返回到循环中来。
DOCSIS: 用于电缆因特网接入的链路层协议
参考目录
书籍:《计算机网络:自顶向下方法(第七版)》