| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 【计算机网络】第三部分 数据链路层(11) 数据链路控制 -> 正文阅读 |
|
[网络协议]【计算机网络】第三部分 数据链路层(11) 数据链路控制 |
数据链路层的两个主要功能是数据链路控制和介质访问控制。前者,即数据链路控制的功能是用来处理两个邻近节点之间通信,即节点到节点通信的设计和程序,在此章节中阐述这一功能。而后者,数据链路层的第二个功能是介质访问控制,或者说如何共享链路,在【计算机网络】第三部分 数据链路层(12) 多路访问中阐述。 数据链路控制 我们需要协议来实现数据链路控制。每个协议都是一组规则,需要在软件中实现,并由「在数据链路层上参与数据交换的两个节点」来运行 在阐述了这五个协议后,我们以高级数据链路控制协议为例,展示了如何实际实现面向位的协议 11.1 成帧位于物理层的数据传递是指以信号的形式从源端传输到目的端。物理层提供位同步,以保证发送方和接收方能使用「相同的位周期和时序」。 另一方面,数据链路层需将位组合成帧,并使帧与帧之间是可识别的。邮局系统就实践了一种成帧形式:将一份信插入一个信封的简单动作,就将一段信息与另一段信息分离开来。信封就是一种分隔符。另外,既然邮局系统是一种多对多的传输设施,所以每个信封都标明了发送方和接收方的地址。 在数据链路层中,通过添加发送方地址和接收方地址,成帧 尽管整条报文 11.1.1 固定长度成帧帧的大小可以是固定的,也可以是可变的。固定大小成帧 11.1.2 可变长度成帧这里主要讨论在局域网中盛行的可变长度成帧 1. 面向字符协议在面向字符协议 当数据链路层只交换文本时,流行面向字符成帧,标记可以选择文本通信中不使用的任何字符。然而现在,我们传输其他如图片、音频、视频等的信息,标记所使用的任何模式可能是这些信息的一部分,如果接收方恰巧在数据的中段接收到这一模式,它会认为已经到了帧的结束处了。为了解决这个问题,在面向字符成帧中使用了**字节填充** 字节填充(或字符填充 通过换义字符来进行字节填充,允许标记出现在帧的数据段中,但也产生了另一问题——如果文本包含一个或多个转义字符,后跟一个标志,会发生什么情况?接收方移走了换义字符,但保留了标记,会被错译为帧的末端(?)。为了解决这一问题,作为文本一部分的换义字符,必须能被另一个换义字符标注。换言之,如果换义字符是文本的一部分,那么要增加额外的换义字符,以表明第二个换义字符是文本的一部分。图11.2说明了这一情况。 面向字符协议在数据通信中产生了另一个问题。如今广泛应用的编码系统,例如Unicode有 16 16 16 位和 32 32 32 位字符,就会与 8 8 8 位字符产生冲突。所以可以说,以下将讨论的面向位协议将是大势所趋。 2. 面向位协议在面向位协议 在位填充中,当遇到
1
1
1 个
0
0
0 和
5
5
5 个连续的
1
1
1 ,便增加一个
0
0
0 。这个额外填充的位,最终将被接收方移走。注意,无论接下来那个位是什么,额外的位
0
0
0 都会添加在一个
0
0
0 和五个
1
1
1 后面,使得接收方不会误认
0111110
0111110
0111110 是一个标记,这就保证了标志字段序列 图11.4说明了发送方填充位和接收方移走位的过程。注意,如果在五个
1
1
1 后有一个
0
0
0 ,我们仍然填充一个
0
0
0 。这个
0
0
0 将会被接收方移走。 11.2 流量控制和差错控制数据通信至少需要两个设备一起工作,一个发送而另一个接收。就算是如此基本的过程,也需要大量的协调来实现互相理解的交换。数据链路层最重要的职能就是流量控制 11.2.1 流量控制流量控制是数据链路层的一项重要职能,它在接收确认 任何接收设备处理传入数据的速度都有限,存储传入数据的内存也有限。接收设备必须能够在达到这些限制前,提示发送设备,并要求传输设备发送的帧少一些、或者暂时停止发送。 进入的数据必须经过校验和处理才能使用。这些过程通常比传输速度慢。因此,每个接收设备都有一块存储区,称之为缓冲区 11.2.2 差错控制差错控制包括差错检测和纠正。它使得接收方能够提示发送方「在传输过程中有帧的丢失或破坏」,并协调发送方重新传输这些帧。在数据链路层,术语差错控制通常指差错检测和重传的方法。在数据链路层中,差错控制一般容易实现:在交换的任何时刻检测到一个差错,就要重传这个出错的帧,这个过程称为自动重复请求 11.3 协议现在来看看数据链路层如何将封装成帧、流量控制和差错控制结合起来,从而实现节点对节点的数据传输。
在此讨论的协议与在真实网络中使用的协议是有区别的。此处讨论的协议是单向的,数据帧从一个节点(称之为发送方),传输到另一个节点(称之为接收方)。虽然有些特殊的帧——我们称之为确认 在现实生活的网络中,数据链路协议是双向实现的:数据可以双向流动。在这些协议中,流量控制和差错控制的信息(诸如 11.4 无噪声通道首先,我们假设有一种不会丢失帧、复制帧或损坏帧的理想通道,然后介绍此类通道的两种协议——第一种协议不使用流量控制,而第二种使用流量控制。当然,两者都不使用差错控制(差错检测和重传),因为,我们假设这种通道是完美的无噪声通道。 11.4.1 最简单的协议(无流量控制和差错控制)讨论的第一个协议就称为最简单的协议 还假定接收方可以即时处理它所接收的任何帧,而所花费的时间少到可以忽略不计——数据链路层中的接收方可以即时去除帧的头部、并将数据分组传递到它的网络层,而网络层会即时收到分组。换言之,接收方永远不会因进入的帧而超载。 1. 设计在这种方案中无需流量控制(和差错控制)。发送方站点的数据链路层从网络层获取数据,然后将数据成帧后发送。接收方站点的数据链路层从物理层接收到帧,从帧中取出数据,然后将数据传输到网络层。数据链路层的发送方和接收方,为其网络层提供传输服务。数据链路层使用其物理层提供的服务(例如发信号、多路复用等),进行位的物理传输。图11.6给出了一个设计。
2. 算法和分析算法11.1 在最简协议中发送方站点的算法,给出了发送方的程序。
该算法是一个无限的循环(不断地运行),也就是说当程序一旦启动,第 2 2 2 行到第 7 7 7 行就会一直重复。该算法是事件驱动型的,也就是说它休眠(第 2 2 2 行)直到一个事件唤醒它(第 3 3 3 行)。这意味着,第 2 2 2 行与第 3 3 3 行之间的执行存在不确定的时间段,它们之间存在缺口。当事件(即网络层发出的请求)发生时,第 4 4 4 行到第 6 6 6 行被执行。然后,程序开始重复循环,它又在第 2 2 2 行休眠、直到下一个事件发生时。 为主要过程编写了伪代码,而并没有说明 算法11.2 在最简协议中接收方站点的算法,给出了接收方站点的程序。
除了帧和数据的传输方向是「向上」的以外,该算法和算法11.1的格式相同。此处的事件是数据帧的到达。该事件发生后,通过使用 【例11.1】图11.7例举了一个使用最简协议通信的例子。这个例子非常简单。发送方发送一个帧序列而不用考虑接收方。为了发送三个帧,在发送方站点和接收方站点各发生了三个事件。注意,图中倾斜的长方块表示数据帧,方块的高度定义为「帧中第一位和最后一位传输的时间差」。 11.4.2 停止等待协议(有流量控制,无差错控制)如果「到达接收方的数据帧的速度」大于「它们能被处理的速度」,帧在使用前必须被存储。通常,接收方没有足够的存储空间,特别是它将接收来自多个源的数据肘。这样将导致帧被丢掉、或者服务被拒绝。为了避免接收方出现帧超负荷,我们要想办法让发送方减缓速度。也就是说接收方必须给发送方反馈信息。 现在讨论的协议称为停止等待协议 1. 设计图11.8描述了该过程。将该图与图11.6对比,可以看到前向通道(从发送方到接收方)和反向通道的数据流。在任何时刻,不是在前向通道有一个数据帧,就是在反向通道中有一个 2. 算法和分析算法11.3 停止-等待协议中发送方算法,是发送方站点的算法。
这里的 发送方会发生两个事件:来自网络层的请求、或来自物理层的通知。对这些事件的响应必须是交替的 我们知道两个到达事件 虽然有很多方法,但我们使用简单的变量 算法11.4 停止等待协议中接收方站点算法,描述了接收方站点的程序。
除了一处不同外,这个算法与算法11.2十分相似。当数据帧到达后,接收方发送一个 【例11.2】图11.9列举了一个使用停止-等待协议的例子。这个例子仍然很简单。发送方发送一个帧后要等待接收方的反愤。当 11.5 有噪声通道虽然停止-等待协议给出了我们如何在其程序中增加流量控制的概念,但是无噪声通道是不存在的。我们能忽略差错(就想我们时常做的那样),或者,我们需要为我们的协议增加差错控制。这部分,讨论三个使用差错控制的协议。 11.5.1 停止-等待自动重复请求(有流量控制和差错控制)第一个协议称为停止-等待自动重复请求
在此协议中,要重发被损坏的帧和丢失的帧,以实现差错纠正。当有差错时,如果接收方没有响应(发送方的计时器超时),那么发送方如何知道要重发哪个帧呢?为了解决这个问题,发送方保留已发送帧的副本,同时它启动一个计时器。如果计时器到时、且没有收到已发送帧的 既然一个 1. 序列号正如讨论的那样,此协议要求必须对帧进行编号。这通过使用序列号 序列号的排列是一个值得考虑的重要问题。既然我们希望帧的长度越小越好,就要寻找能提供无歧义通信的最小范围。序列号当然是可以循环的,例如,我们决定字段 m m m 位长,序列号从 0 0 0 开始,到 2 m ? 1 2^{m}-1 2m?1 , 再开始重复。 让我们来推出所需序列号的范围。假定我们使用 x x x 作为一个序列号,(在停止等待自动重复请求这一个协议中)接下来我们只需用 x + 1 x+1 x+1 , 而没有必要用 x + 2 x+2 x+2 。为了加以演示,假定发送方已经发送了序列号为 x x x 的帧,那么将会发生三种情况。
我们可以看到有必要使用序列号 x x x 和 x + 1 x+1 x+1 ,因为接收方需要区分情况 1 1 1 和情况 2 2 2 。但是,没有必要将帧编号为 x + 2 x+2 x+2 :
如果只需要 x x x 和 x + 1 x+1 x+1 , 就可以使 x = 0 x=0 x=0 及 x + 1 = 1 x+1 = 1 x+1=1 。这就意味着序号是 0 , ? 1 , ? 0 , ? 1 , ? 0 0,\ 1,\ 0,\ 1,\ 0 0,?1,?0,?1,?0 等。这就是模 2 2 2 运算。即,在停止等待ARQ中,我们使用序列号给帧编号,该序列号基于模 2 2 2 运算。 我们还注意到,对发送方而言,情况
2
2
2 和
3
3
3 是无法区分的,它无法判断是帧被丢失了、还是确认被丢失了,都重发对应帧
x
x
x 。但对接收方而言, 接收方可以区分这两种情况:情况
2
2
2 中接收方确认了
x
x
x 、期待收到
x
+
1
x +1
x+1 ,只是重发后收到的是
x
x
x ;情况
3
3
3 中接收方一开始期待收到
x
x
x ,重发后收到
x
x
x 、并期望收到
x
+
1
x + 1
x+1 。对这两种情况,无论一开始期待收到的是
x
+
1
x +1
x+1 还是
x
x
x ,最后都要发送确认号为
x
+
1
x +1
x+1 的 2. 确认号既然序列号必须既适用于数据帧,也要适用于 3. 设计图11.10描述了停止等待ARQ协议的设计,注意:发送方和接收方都只持有大小为
1
1
1 的窗口,发送设备保留最后传输的帧的副本、直到接收到该帧的确认。一个数据帧使用一个序列号,一个 发送方有一个控制变量,我们称为
S
n
S_n
Sn?(发送方,下一个要发送的帧 4. 算法和分析
我们首先注意到
S
n
S_n
Sn? ,它是下一个将要发送的帧的序列号。该变量只初始化一次(第
1
1
1 行),但每次发送一个帧后,它便递增为下一个帧做准备。然而,既然这是模
2
2
2 运算,那么序列号就是
0
,
1
,
0
,
1
0, 1, 0 , 1
0,1,0,1 等。注意:第一个事件的进程 我们仍然使用变量 算法11.6 停止等待ARQ协议中接收方站点的算法,显示了接收方站点的程序。
这显然与算法11.4不同。首先,将忽略所有已损坏的到达数据帧,且当帧的序列号是期待收到的那个
R
n
R_n
Rn? 时,帧才被接收,数据才被传输到网络层,
R
n
R_n
Rn? 值增加。然而,这里有一个微小的差别:即使数据帧的序列号与下一个期待的帧的序列号不匹配,也会发送一个 【例11.3】图11.11给出了一个停止等待ARQ协议的例子。帧
0
0
0 被发送并被确认。帧
1
1
1 丢失了并在超时之后被重发。重发的帧
1
1
1 被确认,计时器便停止计时。帧
0
0
0 被发送并确认,但是确认丢失了。发送方无法判断是帧被丢失了、还是确认被丢失了,因此超时后,它重发帧
0
0
0 ,虽然帧
0
0
0 己被确认了。 4. 效率如果我们的通道粗且长的话,那么前部分讨论的停止等待ARQ协议是十分低效的——粗指的是通道有很大的带宽,长指的是往返延迟较长。这两者的乘积称为带宽延迟乘积(时延带宽积) 【例11.4】假定,在一个停止等待ARQ系统中,带宽是
1
Mbps
1\textrm{Mbps}
1Mbps ,且一个位往返一次是
20
20
20 毫秒。那么带宽延迟乘积是多少?如果系统的数据帧的长度是
1000
1000
1000 位,那么链路的利用率是多少? 【例11.5】在例11.4中,如果我们拥有一种协议能在停止和担心确认之前发送
15
15
15 个帧,那么链路层的利用率是多少? 5. 流水线操作在网络或者其他领域中,一项任务通常是在前一项任务结束之前开始的 11.5.2 回退 N N N 帧自动重发请求(流水线提高效率)为了提高传输的效率(填满管道),在等待确认时必须传输多个帧。即,在发送方等待确认时,我们需要让多个帧待处理来使通道忙碌。在这一节,我们讨论一个能够达到这个目的的协议,在下一节将讨论另一个。 第一个协议称之为回退
N
N
N 帧自动重发请求 1. 序列号帧在发送站点按序编号。然而,因为我们要让每一个帧的头部中包含序列号,我们需要设置一个限制值。如果一个帧的头部允许序列号有
m
m
m 位,序列号的范围就是
0
0
0 到
2
m
?
1
2^m - 1
2m?1 。例如,如果
m
m
m 等于
4
4
4 ,那么序列号只能是
0
0
0 到
15
15
15 中的数字。当然,我们可以重复序列号。因此,序列号是
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
…
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, \dots
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0,1,2,3,4,5,6,7,8,9,10,11,… 。换言之,在回退
N
N
N 帧协议中,序列号是 2. 滑动窗口在此协议(和下一个协议)中,滑动窗口 发送窗口是一个假想的盒子,包含了能传输的数据帧的序列号。在每一个窗口中,一部分序列号定义了已经发送的帧,另一部分定义了能够被发送的帧。窗口的最大尺度是 2 m ? 1 2^m - 1 2m?1 ,原因以后阐述。在这里,我们固定窗口的大小,使之为最大值,但是在以后会看到一些协议有可变的窗口大小。图11.12给出了一个大小为 15 ? ( m = 4 ) 15\ (m=4) 15?(m=4) 的滑动窗口。 该窗口随时将可能的序列号划分为四个部分:
发送窗口本身是一个抽象体,三个变量定义了它在任何时候的大小和位置。我们称这些变量为
S
f
S_f
Sf?(发送窗口,第一个待处理的帧 图11.12b描述了:当另一端发来的确认到达时,一个发送窗口可以向右滑动一个或者多个时隙。正如不久可以看到的那样,在此协议中,确认是累加的,这意味着一个
3. 计时器(对于发送方而言)虽然每一个已发送的帧都能有一个计时器,但在我们的协议中我们只用一个计时器。原因是:第一个待处理帧的计时器总是先到时,当这个计时器到时时,我们发送所有的待处理帧。 4. 确认最简单的情况是,当一个帧安全有序到达时,接收方发送一个肯定的确认(一个帧对一个确认,正常情况)。 此外,如果一个帧被损坏了、或者收到时次序颠倒了,接收方便不响应、并将丢弃所有后来的帧、直到它收到一个它所期待的帧;接收方的不响应,导致发送方站点上未确认帧的计时器到时。这反过来会导致发送方回退 注意,接收方不需要确认每一个收到的帧,它能为多个帧发送一个累积的确认,这出现在接收方收到了多个帧、而发送的多个确认丢失时(多个帧对一个确认,异常情况)。 5. 重发帧当计时器到时的时候,发送方会重发所有待处理的帧 6. 设计图11.14描述了该协议的设计。正如我们可以看到的,多个帧可以正向传输,多个确认可以反向传输。这个理念与停止等待ARQ协议类似,区别在于发送窗口允许我们传输「与发送窗口中的时隙一样多的帧」 7. 发送窗口大小我们现在可以阐述,为什么发送窗口的大小必须小于 2 m 2^m 2m 了。作为一个示例,我们使 m = 2 m=2 m=2 ,这就意味着窗口的大小是 2 m ? 1 = 3 2^m - 1 = 3 2m?1=3 。图11.15将一个大小为 3 3 3 的窗口和一个大小为 4 4 4 的窗口进行比较。
总结来说,在回退 N N N 帧自动重发请求协议中,发送窗口的大小必须小于 2 m 2^m 2m ,而接收窗口的大小始终是 1 1 1 。 8. 算法和分析算法11.7 回退 N N N 帧自动重发请求的发送方算法如下:
该算法先初始化了三个变量。与停止等待ARQ协议不同,这个协议允许来自网络层的多个请求、而不需要其他事件的发生,我们只需要确定窗口并没有满。在我们的算法中,如果窗口满了,请求就会被忽视、而网络层就要再尝试。有一些实现使用了其他的方法,比如激活或者抑制网络层 对到达事件的处理远比之前的协议复杂得多。如果我们收到一个损坏的 算法11.8是在回退 N N N 帧自动重发请求协议中的接收方算法。
这个算法是简单的。我们忽略了损坏的帧或者失序的帧。如果一个帧以预期的序列号到达,我们就传送数据,更新
R
n
R_n
Rn? 的值,并发送一个 【例11.6】图11.6描述了一个回退
N
N
N 帧的例子。这个例子中正向通道是可靠的,而反向通道则不可靠。没有数据帧丢失,但是有一些 注意,帧
1
,
2
,
3
1,2,3
1,2,3 的重发是对一个单一事件的响应 9. 回退 N N N 帧ARQ与停止等待ARQ的比较能发现回退 N N N 帧ARQ与停止等待ARQ有相同之处。我们可以认为,停止等待ARQ协议实际上是回退 N N N 帧ARQ协议的一种,即当只有 2 2 2 个序列号、而发送窗口的大小为 1 1 1 时,即 m = 1 , 2 m ? 1 = 1 m= 1, 2^m -1 = 1 m=1,2m?1=1 。在回退 N N N 帧的ARQ中,条件是模 2 m 2^m 2m ,而在停止等待ARQ中,条件是模 2 2 2 ,即 m = 1 , 2 m = 2 m=1, 2^m = 2 m=1,2m=2 。 11.5.3 选择性重复ARQ回退
N
N
N 帧ARQ 对于有噪声链路而言,有另一种机制,可以在一个帧被损坏时不必重发
N
N
N 个帧。这个机制就称为选择性重复ARQ 1. 窗口选择性重复协议同样使用两个窗口:发送窗口和接收窗口。但是,这些窗口与回退 N N N 帧协议中的窗口有所不同。首先,窗口的尺度更小,为 2 m ? 1 2^{m- 1} 2m?1 ,原因后面解释。第二,接收窗口与发送窗口的大小一样。发送窗口最大只能是 2 m ? 1 2^{m-1} 2m?1 ,接收方也一样。例如,如果 m = 4 m=4 m=4 , 序号为 0 ~ 15 0 \sim 15 0~15 ,但是窗口的大小只能是 8 8 8(而在回退N帧协议中,它是 2 m ? 1 = 15 2^m - 1 = 15 2m?1=15 ,不是 2 m 2^m 2m 的原因已经讲述过了)。 窗口尺度变小,意味着对管道填充的有效性减少
图11.19显示了该协议中的接收窗口。窗口中的着色时隙指的是那些乱序到达的帧,这些帧被交付给网络层前,正等待其相邻帧的到达。 2. 设计该协议的设计与我们描述的回退
N
N
N 帧协议的设计,有一定程度的相似,但是正如图11.20所示,它要复杂的多。 3. 窗口大小现在能解释,为什么发送窗口和接收窗口的大小最多是 2 m 2^m 2m 的一半(不是 2 m 2^m 2m ,也不是 2 m ? 1 2^m - 1 2m?1 )了。举例来说,使 m = 2 m=2 m=2 , 意味着窗口的大小为 2 m / 2 2^m/2 2m/2 ,即 2 2 2 。图11.21将大小为 2 2 2 的窗口与大小为 3 3 3 的窗口做了一个比较。
即,接收方的滑动窗口大小为 2 m ? 1 2^{m - 1} 2m?1 ,接收了 2 m ? 1 2^{m - 1} 2m?1 个帧后,窗口向后滑动覆盖后面的 2 m ? 1 2^{m - 1} 2m?1 个位置,这两部分合起来为 2 m 2^m 2m ,刚好是序列号的一个变化周期,此时不会造成错误的接收。如果接收方滑动窗口大于 2 m ? 1 2^{m - 1} 2m?1 ,则接收了窗口大小的帧后,向后滑动覆盖又一部分位置,这两部分合起来大于 2 m 2^m 2m ,超过了序列号的一个变化周期,如果前一部分中的某些帧丢失确认、超时重传,则会被错误的接收。 4. 算法和分析算法11.9 发送方选择性重复算法,描述了发送方的程序。
请求事件的处理与前一协议(只使用一个计时器)相类似,除了每一个帧的发送都启动一个计时器外。这里到达的事件要复杂得多。到达的可能是一个 算法11.10 接收方选择性重复算法,描述了接收方的程序。
此处我们要有更多的初始化。为了不使另一端因为
【例11.18】这个例子与例11.3相似,都是一个帧丢失了。它描述了选择性重复在这个情况下如何工作。图11.23描述了这一情形。 一个主要的区别是计时器的数量。这里,每发送或重发一个帧都需要一个计时器,这就意味着计时器也要编号 ( 0 , 1 , 2 , 3 ) (0, 1, 2, 3) (0,1,2,3) 。
在接收方站点,我们需要分辨帧的接收和向网络层交付帧。在第二次到达发生时,帧 2 2 2 到达了并被保存和标记了(着色时隙),但是它不能被交付,因为帧 1 1 1 丢失了。下一个到达事件,帧 3 3 3 到达了并被保存和标记了,但是仍然没有帧能被交付。只有当最后一个到达事件发生,即帧 1 1 1 的副本到达了,帧 1 , 2 , 3 1, 2, 3 1,2,3 才能被交付给网络层。将帧交付给网络层有两个条件:第一,一组连续帧到达;第二,这组帧从窗口的起点开始。在第一个到达事件后,只有一个帧到达,它是从窗口的起点(此时是 0 0 0 )开始的。最后一个到达事件后,有三个帧、且第一个是从窗口的起点(此时是 1 1 1 )开始的。 另一个重要之处是,在第二个到达事件后,发送了一个 接下来这点是关于 11.5.4 捎带在这部分讨论的三个协议都是单向的:数据帧只朝一个方向流动,而诸如 当一个帧从
A
A
A 到
B
B
B 运载数据时,它也能从
B
B
B 运载「关于帧到达或丢失的控制信息」,当一个帧从
B
B
B 到
A
A
A 运载数据时,它也能从
A
A
A 运载「关于帧到达或丢失的控制信息」。在图11.24中,描述了使用捎带的回退
N
N
N 帧ARQ的设计。 关于捎带的另一重要之处是,发送方和接收方要使用同一种算法 11.6 高级数据链路控制高级数据链路控制 11.6.1 配置和传输方式HDLC提供了在不同的配置中都能使用的两种通用的传输模式:正常响应方式 1. 正常响应方式在正常响应方式中,站点配置是不平衡的。有一个主站 2. 异步平衡方式在异步平衡方式中,配置是平衡的。如图11.26所示,该链路是点到点的,且每个站点既有主站的功能、又有从站的功能(作为对等站点)。这是现在普遍应用的方式。 11.6.2 帧为了提供支持「上述模式和配置中所有可能选项」所需的灵活性,HDLC定义了三种类型的帧:信息帧 1. 帧的格式在HDLC中,每个帧都最多可包含六个字段,如图11.27所示:开始标记字段、地址字段、控制字段、信息字段、帧校检序列字段、结束标记字段。在多帧传输中,一个帧的结束标记可以作为下一个帧的开始标记。 2. 字段现在讨论各个字段,及它们在不同类型的帧中的作用。
11.6.3 控制字段控制字段决定帧的类型及其功能,因此要更详细地阐述这种字段的格式。其格式对于一种类型的帧是特定的,如图11.28所示。 1. 信息帧的控制字段信息帧被设计用来运载来自网络层的用户数据。另外,它们也能包含流量控制和差错控制信息(捎带)。控制字段的子字段用来定义这些功能:
2. 管理帧的控制字段无论当捎带
3. 无编号帧的控制字段无编号帧负责在连接的设备之间交换会话管理和控制信息。与管理帧不同,无编号帧包含一个信息字段,但是这个信息字段是用作系统管理的,而不是用户数据。 虽然与管理帧有相似之处,但无编号帧承载的多数信息包含在控制字段中的编码
【例11.10 无差错捎带】图11.30描述了一个使用捎带的交换:
【例11.11 有差错的捎带】图11.31描述了丢失了一个帧的交换:
11.7 点到点协议虽然高级数据链路控制协议是点到点和多点配置都能使用的一个通用协议,但点到点访问最通用的协议还是点到点协议 PPP提供以下服务:
另一方面,为了使PPP尽量简化,有些功能被删除了:
11.7.1 成帧PPP是一个面向字节的协议,根据前面讨论的面向字节协议实现成帧。 1. 帧的格式图11.32显示了一个PPP帧的格式。每个字段的描述如下:
2. 字节填充正如之前讨论的那样,PPP和HDLC的帧格式的结尾有相似之处,但是前者是面向字节的协议,这点完全区别于后者。作为一个面向字节的协议,PPP的标记是一个字节,而且只要它出现在帧的数据部分,就需要被转义。转义字节是 01111101 01111101 01111101 ,表明每次类似标记模式的字节出现在数据部分,都要填充这个额外的字节来告知接收方「接下来的字节并不是标记」。 11.7.2 传输阶段一个PPP连接可以通过转换阶段图
11.7.3 多路复用虽然PPP是一项数据链路层协议,但PPP也使用其他一组协议来建立链路,对涉及的参与者加以鉴别,并承载网络层数据 任何时刻,一个PPP信息分组都能在它的数据字段中,携带来自这些协议的数据,如图11.34所示。注意,图中有一个链路控制协议、两个鉴别协议和多个网络控制协议。数据也可能来自不同的网络层。 1. 链路控制协议链路控制协议 所有的LCP分组,都位于PPP帧的有效载荷字段中,该PPP帧的协议字段,被设定为十六进制的
0
x
C
021
0xC021
0xC021 。
在两个端点之间有许多能被协商的选项。选项插入配置分组的信息字段。这种情况下,信息字段被分为三段:选项类型,选项长度和选项数据。表11.3列示了其中最常用的一些选项。 2. 鉴别协议在PPP中鉴别具有很重要的作用,因为PPP被设计用于拨号链路中,这就使得用户身份的鉴别十分必要。鉴别 (1) PAP口令鉴别协议
当一个PPP帧承载PAP分组时,协议字段的值是
0
x
C
023
0xC023
0xC023。图11.36显示了PAP使用的三种类型的分组,以及它们如何交换。这三个 PAP分组分别是鉴别-请求,鉴别-确认和鉴别-不确认 (2) CHAP查询握手鉴别协议
CHAP比PAP安全得多,特别是当系统不断地更换查询值时。甚至当入侵者得知查询值和结果时,口令始终是保密的(?)。图11.37显示了分组及其如何被使用。 3. 网络控制协议PPP是一个多网络层的协议,它能使用因特网限定的协议,如OSI 、Xerox 、DECnet 、AppleTalk 、Novel等来运载网络层数据分组。为了做到这一点,PPP为每一个网络协议,都界定了一个特定的网络控制协议 (1) IPCP互联网络协议控制协议 (2) 其他协议还有针对其他网络层协议的NCP协议。OSI的网络层控制协议的协议字段值是 0 x 8023 0x8023 0x8023 ;Xerox NS IDP控制协议的协议字段值是 0 x 8025 0x8025 0x8025 ,诸如此类等。其他协议的编码值和分组的格式与表11.4所示的相同。 4. 来自网络层的数据当由一个NCP协议完成网络层确认后,用户可以交换来自网络层的数据分组。再次重申,不同的网络层有不同的协议字段。例如,如果PPP运载来自IP网络层的数据,字段值就是
0
x
0021
0x0021
0x0021(注意这个值最右边的三个数字跟IPCP的相同)。如果PPP运载来自OSI网络层的数据,协议字段值就是
0
x
0023
0x0023
0x0023 ,等等。图11.39显示了IP帧的格式。 11.7.4 多链路PPPPPP最初是为了单通道点到点的物理链路设计的。在单个点到点链路中多通道 为了简化,我们假定数据从用户端向系统端单向运动(例如通过ISP发送一封邮件)。
这个例子是微不足道的,但是它指出了LCP、AP和NCP分组的相似之处。它同样描述了协议字段值和特定协议的编码数字。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 7:37:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |