数据链路层
数据链路层功能概述
数据链路层的基本概念
- 结点:主机、路由器
- 链路:网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路和无线链路。
- 数据链路:网络中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路。
- 帧:链路层的协议数据单元,封装网络层数据报。
数据链路层负责通过一条链路,从一个结点向另一个物理链路直接相连的相邻结点传输数据报。
数据链路层功能概述
数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻结点的目标机网络层。其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
图3-1 数据链路层功能示意图
如图3-1所示,网络层是老板,数据链路层是秘书,而物理层是跑腿的员工。数据链路层有以下这些功能:
- 为网络层提供三种服务:无确认无连接服务、有确认无连接服务、有确认有连接服务。(有连接就一定有确认)
- 链路管理:连接的建立、维持和释放(用于面向连接的服务)。
- 组帧。
- 流量控制。
- 差错控制。
封装成帧和透明传输
概念介绍
-
封装成帧
在一段数据的前后部分添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
首部和尾部包含许多的控制信息,他们的一个重要作用:帧定界(确定帧的界限)。
帧同步:接收方应当能从接收到的二进制比特流中区分出帧的起始和终止。
组帧的四种方法:字符计数法、字符填充法、零比特填充法和违规编码法。
图3-2 封装成帧示意图
-
透明传输
指不管所传数据是什么样的比特组合,都应当能够在链路上传送。因此,链路层就“看不见”有什么妨碍数据传输的东西。(联想图3-1,哪怕是老板让小秘书传送要解雇他的信息,小秘书也毫不关心信息的内容,只兢兢业业把信息传输过去就行。)
当所传数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,使收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。
组帧的四种方法
-
字符计数法
帧首部使用一个计数字段(第一个字节,八位)来标明帧内的字符数。
图3-3 字符计数法示意图
缺点是鸡蛋装在一个篮子里了,如果第1帧的首部错了,那么接下来每个帧都会被标识错误,边界都会被找错。
-
字符填充法
在开始边界添加一个八位的比特组合SOH,在结束边界也添加一个八位的比特组合EOT,这样去告诉对方,开始和结束边界中间的内容就是我要传输的内容。
图3-4 错误找到帧边界的示意图
如图3-4所示,如果装在帧中的数据部分也出现了和EOT一样的信息,那么对方就会误以为数据部分的EOT是结束边界。为解决这个问题,可以在数据部分中的EOT或SOH前面添加一个八位的比特组合(转义字符),从而告诉对方在接收的时候不用理数据部分的EOT或SOH,最后再还原成真正的数据部分。
图3-5 字符填充法示意图
-
零比特填充法
在发送端,扫描整个信息字段,只要遇到连续的5个1,就立即填入1个0;在接收端收到一个帧时,先找到标志字段确定边界,再用硬件对比特流进行扫描。发现连续的5个1时,就把后面的0删除。
图3-6 零比特填充法示意图
这种方法的优点是,保证了透明传输,在传送的比特流中可以传送任意比特组合,而不会引起对帧边界的判断错误。
-
违规编码法
可以用“高-高”,“低-低”来定界帧的起始和终止。由于字节计数法中Count字段的脆弱性(其值若有差错将导致灾难性后果)及字符填充实现上的复杂性和不兼容性,目前较普遍使用的帧同步法是比特填充法和违规编码法。
差错控制
差错控制针对的错误是比特错,在检错编码中分为奇偶校验码和循环冗余码CRC,在纠错编码中有海明码。
值得注意的是,数据链路层的编码和物理层的编码是不一样的。
- 物理层编码针对的是单个比特,解决传输过程中比特的同步等问题,如曼彻斯特编码。
- 数据链路层的编码针对的是一组比特,它通过几余码的技术实现一组二进制比特串在传输过程是否出现了差错。
差错从何而来
概括来说,传输中的差错都是由于噪声引起的。
- 全局性:由于线路本身电气特性所产生的随机噪声(热噪声),是信道固有的,随机存在的解决办法:提高信噪比来减少或避免干扰。(对传感器下手)
- 局限性:外界特定的短暂原因所造成的冲击噪声,是产生差错的主要原因。解决办法:通常利用编码技术来解决。
图3-7 差错类型
检错编码
-
奇偶校验码
在前面增加1位校验元,信息元的个数就是n-1位。对于奇校验码而言,使得“1”的个数为奇数;对于偶校验码而言,使得“1”的个数为偶数。如果接收方发现规则相同,那么就认为“没问题”。
以偶校验为例,事实上,如果序列“0101001”增加了校验码“1”成为序列“10101001”,最终传输过去的序列为“00001001”,“1”的个数仍然为偶数个,这样也是检验不出来的。
-
CRC循环冗余码
首先准备待传送的有效数据,切割成等长的分组。
每个组都加上冗余码构成帧再发送:双方商定r+1位的生成多项式,d位数据和r位0组成一个序列,跟生成多项式进行模2除法(异或),得到的余数就是r位FCS帧校验序列,最终发送的帧就是d位数据和r位FCS组成的序列。
最后进行接收方检验:(d+r)位的数据和生成多项式进行模2除法,如果余数为0,则认为正确接收;如果余数不为0,则丢弃。
图3-8 CRC循环冗余码
要发送的数据是1101011011,采用CRC校验,生成多项式是10011,那么最终发送的数据应该是什么?
最终发送的数据是:要发送的数据+帧检验序列FCS
计算冗余码:
- 加0:生成多项式是10011,表示成多项式为: x 4 + x 1 + 1 x^{4}+x^{1}+1 x4+x1+1,阶为4,则加4个0。
- 模2除法:数据加0后是“11010110110000”除以生成多项式“10011”(异或),商为“1100001”,余数为“1110”。
- 得到的余数“1110”即为冗余码,也成为FCS检验序列,故最终发送的数据为“11010110111110”
图3-9 题目计算过程
接收端检错过程:
- 把收到的每一个帧都除以同样的除数,然后检查得到的余数R。
- 余数为0就判断没有错,不为0就判定有错,丢弃。
在数据链路层仅仅使用循环冗余检验CRC差错检测技术,只能做到对的无差错接收,即“凡是接收端数据链路层接受的帧,我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。接收端丢弃的帧虽然曾收到了,但是最终还是因为有差错被丢。“凡是接收端数据链路层接收的帧均无差错”。
纠错编码
纠错编码相对于检错编码可以实现发现错误、找到位置和纠正错误。
两个合法编码(码字)的对应比特取值不同的比特数称为这两个码字的**海明距离(**码距),一个有效编码集中,任意两个合法编码(码字)的海明距离的最小值称为该编码集的海明距离(码距)。
比如,“000”和“001”的海明编码为1;“000”、“001”、“010”、“011”的海明距离也是1,任意两个编码码距的最小值。
如果需要检测出 d d d位错误的话,码距需要 d + 1 d+1 d+1位,如果需要纠正d位错误的话,码距需要 2 d + 1 2d+1 2d+1位。
图3-10 海明码工作流程
-
确定校验码位数 r r r
数据/信息有 m m m位,冗余码/校验码有 r r r位,那么校验码一共有 2 r 2^{r} 2r种取值,根据海明不等式 2 r ≥ m + r + 1 2^{r}\geq m+r+1 2r≥m+r+1。
例如,要发送的数据是“D=1100”,数据的位数 m = 4 m=4 m=4,满足不等式的最小 r r r为3,也就是“D=1100”的海明码应该有 4 + 3 = 7 4+3=7 4+3=7位,其中原数据4位,校验码3位。
-
确定校验码和数据的位置
校验码放在序号位 2 n 2^{n} 2n的位置,数据按序列填上。用二进制表示序号,校验码对应位置上二进制可转换成“x1x”、“1xx”的形式,即为校验码可校验的位,如图3-11所示。
图3-11 求出校验码的过程
以4号校验码为例,偶校验的意思是,让4、5、6、7位组成的“ x 4 011 x_4011 x4011”出现偶数个1,因此 x 4 x_4 x4为0。因此,可以写出完整的海明码。
-
检错并纠错
假设接收方收到的数据为“1110001”,4号校验码负责4、5、6、7的校验:0、1、1、1,发现不对;2号校验码负责2、3、6、7的校验:0、0、1、1,发现正确;1号校验码负责1、3、5、7的校验:1、0、1、1,发现错误。因此,接收的数据是存在错误的。
纠错方法一:找到不满足奇/偶校验的分组取交集,并与符合校验的分组取差集。发现5和7是交集,接着取差集的结果为5,故出错的位置是第5位。
纠错方法二:把 x 4 x_4 x4、 x 2 x_2 x2、 x 1 x_1 x1写成矩阵的形式,然后横着进行异或,这里得到的结果是1、0、1,101对应的十进制数是5,因此是第5位发生了错误,过程如图3-12所示。
图3-12 纠错方法二过程示意图
流量控制和可靠传输机制
数据链路层的流量控制
较高的发送速度和较低的接收能力的不匹配,会造成传输出错,因此流量控制也是数据链路层的一项重要工作。
数据链路层的流量控制是点对点的,而传输层的流量控制是端到端的。
数据链路层流量控制手段:接收方收不下就不回复确认。
传输层流量控制手段:接收端给发送端一个窗口公告。
流量控制的方法
流量控制方法分为停止-等待协议、滑动窗口协议(后退N帧协议GBN、选择重传协议SR)。这一小节先简单介绍一下。
-
停止-等待协议
每发送完一个帧就停止发送,等待对方的确认,在收到确认后再发送下一个帧。可以看成是特殊的滑动窗口,发送窗口大小为1,接收窗口大小为1。
图3-13 停止-等待协议示意图
-
滑动窗口协议
在0号帧发送过去后,接收方会确认0号帧,同时接收方窗口移动一位,向发送方表示可以开始接收1号帧;在发送方收到接收方移动一位的信息后,发送方也移动一位。当然,也有可能,发送方可以连续发送多位,但是只有收到确认帧,发送窗口才会移动一格。
图3-14 滑动窗口示意图
可靠传输、滑动窗口、流量控制
- 可靠传输:发送端发啥,接收端就接啥。
- 流量传输:控制发送速率,使接收方有足够的缓冲空间来接收每一帧。
- 滑动窗口:解决流量控制(收不下就不给确认,想发也发不了)和解决可靠传输(发送方自动重传)。
停止等待协议
-
为什么要有停止-等待协议?
除了比特出差错,底层信道还会出现丢包问题。所谓丢包,指的是物理线路故障、设备故障、病毒攻击、路由信息错误等原因导致的数据包丢失。
-
研究停止-等待协议的前提?
虽然现在常用全双工通信方式,但为了讨论问题方便,仅考虑一方发送数据(发送方),一方接收数据(接收方)。
因为是在讨论可靠传输的原理,所以并不考虑数据是在哪一个层次上传送的。
“停止-等待”就是每发送完一个分组就停止发送,等待对方确认,在收到确认后再发送下一个分组。
-
停止-等待协议有几种应用情况?
无差错和有差错。
无差错情况的停止-等待协议
在图3-15中,发送端发送的每一帧数据都会带有一个编号(0或1),以便接收端能够确认接收到的数据是新的还是重复的。在这个例子中,发送端发送的帧编号依次为0、1、0、1…
这样设置是为了防止ack延迟造成的超时重发,超时重发了,又收到ack就是发两次同一个,如果重复,接收方就丢弃。
图3-15 无差错情况的停止-等待协议示意图
有差错情况的停止-等待协议
-
数据帧丢失或检测到帧出错
该数据帧在传输过程中丢失,接收方没有接收到该帧。
发送方等待一段时间,没有收到ACK确认帧,认为数据帧丢失,于是重新发送帧0。
接收方正确接收到重发的帧0,处理数据并发送ACK 0确认帧。
检测到帧出错也是同理,因为中途丢弃了。在这两种情况下,是自动的,且在发完一个帧后,必须保留它的副本,直到收到确认帧后才可以删掉;数据帧和确认帧必须编号。
图3-16 数据帧丢失或检测到帧出错示意图
-
ACK丢失
发送方等待一段时间,如果在规定时间内没有收到ACK确认帧,发送方会重发该数据帧。
接收方再次收到这个数据帧,因为它之前已经正确接收过该帧,并且该帧的序列号相同,因此接收方识别出这是重复帧。
接收方丢弃这个重复帧,但仍然发送ACK确认帧,以确认它已正确接收到该帧(实际上是对之前的确认)。
图3-17 ACK丢失出错示意图
-
ACK迟到
接收方接收到帧0,处理数据并发送ACK 0确认帧。
ACK 0帧在传输过程中延迟,发送方在超时前没有接收到ACK 0。
发送方等待一段时间后没有收到ACK 0,重新发送帧0。
接收方识别出这是重复的帧0,丢弃数据,但重发ACK 0。
图3-18 ACK迟到出错示意图
停止-等待协议性能分析
图3-19 停止-等待协议性能分析示意图
所谓信道利用率,就是发送方在一个发送周期内,有效地发送数据所需要的时间所占整个发送周期的比率。其计算公式如图3-20所示。要注意的是,针对的是发送周期,与接收的时间无关。
图3-20 信道利用率计算公式图
一个信道的数据传输率为4kb/s,单向传播时延为30ms,如果使停止-等待协议的信道最大利用率达到80%要求的数据帧长度至少为多少?
假设
L
L
L为数据帧的长度:
0.8
=
L
/
4
2
×
30
m
s
+
L
/
4
=
L
L
+
2
×
30
m
s
×
4
b
/
m
s
L
=
960
b
0.8=\frac{L/4}{2\times30ms+L/4}\\ =\frac{L}{L+2\times30ms\times4b/ms}\\ L=960b
0.8=2×30ms+L/4L/4=L+2×30ms×4b/msLL=960b
后退N帧协议(GBN)
在停止-等待协议中,信道利用率非常低,说白了就是太闲了,为解决这个问题,提出了“流水线技术”,即发送方发送完一个紧接着再发送一个,如图3-21所示。后退N帧协议和选择重传协议就是基于流水线技术的一种传输协议。
图3-21 流水线技术示意图
GBN发送方必须响应的三件事
-
上层(网络层)的调用
上层要发送数据时,发送方先检查发送窗口是否已满,如果未满,则产生一个帧并将其发送;如果窗口己满,发送方只需将数据返回给上层,暗示上层窗口己满。上层等一会再发送。(实际实现中,发送方可以缓存这些数据,窗口不满时再发送帧)。
-
收到了一个ACK
GBN协议中,对n号帧的确认采用累积确认的方式,标明接收方已经收到n号帧和它之前的全部帧。
-
超时事件
协议的名字为后退N帧/回退N帧,来源于出现丢失和时延过长帧时发送方的行为。就像在停等协议中一样定时器将再次用于恢复数据帧或确认帧的丢失。如果出现超时,发送方重传所有已发送但未被确认的帧。
GBN接收方要做的事
- 如果正确收到N号帧,并且按序,那么接收方为N帧发送一个ACK,并将该帧中的数据部分交付给上层。
- 其余情况都丢弃帧,并为最近按序接收的帧重新发送ACK。接收方无需缓存任何失序帧,只需维护一个信息:expectedseqnum(下一个按序接收的帧序号)。比如,接收方收到了1、2、4、5,其中的3号帧没有收到,所以4、5帧会被丢弃,并发送2号帧的ACK,这样发送方就知道只收到了2号帧及前面帧的信息。
后退N帧协议运行流程
图3-22 后退N帧协议运行流程示意图
以图3-22为例,下面介绍GBN协议的发送接收过程,搭配上面两小节食用。总的来说有以下4点要注意的:
- 累积确认(偶尔捎带确认)
- 接收方只按顺序接收帧,不按序无情丢弃
- 确认序列号最大的、按序到达的帧
- 发送窗口最大未 2 n − 1 2^n -1 2n−1,接收窗口大小为1
图3-22的过程如下:
- 假设发送窗口尺寸为4,说明一次性可以发送4帧。
- 发送方首先发送第0帧,接收方收到第0帧后,返回ACK0。
- 由于发送窗口未满,继续发送第1帧,接收方收到第1帧后,返回ACK1。
- 由于发送窗口未满,继续发送第2帧,但是第2帧丢失,接收方不会返回ACK2,此时的expectedseqnum为2。
- 由于发送窗口未满,继续发送第3帧,接收方收到第3帧,但是expectedseqnum为2,所以丢弃第3帧并发送ACK1。
- 此时发送窗口满了,发送方开始等待,等到收到ACK0了,发送窗口移动1帧,因此发送第4帧,接收方收到第4帧,同理,丢弃第4帧并发送ACK1。
- 此时发送窗口满了,不过上面发来的ACK1刚好到了,所以发送第5帧,接收方收到第5帧,同理,丢弃第5帧并发送ACK1。
- 这个时候第2帧的计时器超时了,发送方意识到第2帧丢失了,于是把第2帧以及往后所有发送但未被确认的帧都重新发一遍(2、3、4、5)。
滑动窗口长度
若采用 n n n个比特对帧编号,那么发送窗口的尺寸 W T W_T WT应该满足 1 ≤ W T ≤ 2 n 1\leq W_T \leq 2^n 1≤WT≤2n-1。因为发送窗口的尺寸过大,就会使得接收方无法区别新帧和旧帧。
假设 n = 3 n=3 n=3,则帧编号范围是 0 0 0到 7 7 7。如果发送窗口 W T = 8 W_T=8 WT=8,发送方在发送8个帧后,帧编号会重新循环。例如:
发送帧编号:0, 1, 2, 3, 4, 5, 6, 7
再发送下一帧时,编号会重新变为:0
如果此时接收方还没有确认前面的帧(比如编号0还没有确认),接收方收到新的编号0的帧时,将无法判断这个编号0是新帧(重新循环后的帧)还是旧帧(之前发送但未确认的帧),这会导致数据混乱。
数据链路层采用了后退N帧(GBN)协议,发送方已经发送了编号为0~7的帧。当计时器超时时,若发送方只收到0、2、3号帧的确认,则发送方需要重发的帧数是()。
需要重新发送4、5、6、7这4个帧。1号帧是和2号帧一起发送的,不然发送方不会收到2号帧的确认。
主机甲与主机乙之间使用后退N帧协议(GBN)传输数据,甲的发送窗口尺寸为1000,数据帧长为1000字节信道带宽为100Mb/s,乙每收到一个数据帧立即利用一个短帧(忽略其传输延迟)进行确认,若甲、乙之间的单向传播时延是50ms,则甲可以达到的最大平均数据传输率约为()。
A.10Mb/s B.20Mb/s C.80Mb/s D.100Mb/s
甲把发送窗口里的数据全部发送出去的时间: 1000 × 1000 × 8 ( b ) 100 × 1 0 6 ( b / s ) = 80 ( m s ) 由于没有给甲的发送速率,所以用带宽近似来计算 甲在第一个帧发送之后,发送第二个帧的时间: 50 ( m s ) + 1000 × 8 ( b ) 100 × 1 0 6 ( b / s ) + 50 ( m s ) = 100.08 ( m s ) 也就是说,甲发送了第一个帧之后需要等待约 100.08 ( m s ) 的时间才会收到其确认帧 题目说的最大平均数据传输率代表中途不会出现丢失的情况 而一共窗口尺寸是 1000 ,代表甲会移动 1000 次 则最大平均数据传输率为: 1000 × 1000 × 8 ( b ) 100.08 ( m s ) ≈ 80 M b / s 甲把发送窗口里的数据全部发送出去的时间:\\ \frac{1000\times1000\times8(b)}{100\times10^6 (b/s)}=80(ms)\\ 由于没有给甲的发送速率,所以用带宽近似来计算\\ 甲在第一个帧发送之后,发送第二个帧的时间:\\ 50(ms)+\frac{1000\times8(b)}{100\times10^6 (b/s)}+50(ms)=100.08(ms)\\ 也就是说,甲发送了第一个帧之后需要等待约100.08(ms)的时间才会收到其确认帧\\ 题目说的最大平均数据传输率代表中途不会出现丢失的情况\\ 而一共窗口尺寸是1000,代表甲会移动1000次\\ 则最大平均数据传输率为:\\ \frac{1000\times1000\times8(b)}{100.08(ms)}\approx80Mb/s 甲把发送窗口里的数据全部发送出去的时间:100×106(b/s)1000×1000×8(b)=80(ms)由于没有给甲的发送速率,所以用带宽近似来计算甲在第一个帧发送之后,发送第二个帧的时间:50(ms)+100×106(b/s)1000×8(b)+50(ms)=100.08(ms)也就是说,甲发送了第一个帧之后需要等待约100.08(ms)的时间才会收到其确认帧题目说的最大平均数据传输率代表中途不会出现丢失的情况而一共窗口尺寸是1000,代表甲会移动1000次则最大平均数据传输率为:100.08(ms)1000×1000×8(b)≈80Mb/s
选择重传协议
在GBN中,累积确认的性质使得数据帧在出现问题时,需要进行批量重传。那么,可不可以只重传出错的帧?其解决方法是,设置单个确认,同时加大接收窗口,设置接收缓存,缓存乱序到达的帧。
选择重传协议的滑动窗口(SR)
图3-23 选择重传协议的滑动窗口
在图3-23中,如果发送窗口的第一个帧不是发送并被确认的,那么发送窗口不能移动;如果接收窗口的第一个帧不是收到的帧,那么也不能移动。
SR发送方必须响应的三件事
-
上层的调用
从上层收到数据后,SR发送方检查下一个可用于该帧的序号,如果序号位于发送窗口内,则发送数据帧;否则就像GBN一样,要么将数据缓存,要么返回给上层之后再传输。
-
收到了一个ACK
如果收到ACK,加入该帧序号在窗口内,则SR发送方将那个被确认的帧标记为已接收。如果该帧序号是窗口的下界(最左边第一个窗口对应的序号),则窗口向前移动到具有最小序号的未确认帧处。如果窗口移动了并且有序号在窗口内的未发送帧,则发送这些帧。
图3-24 初始情况
图3-25 收到ACK2后移动窗口后的情况
-
超时事件
每个帧都有自己的定时器,,一个超时事件发生后只重传一个帧。
SR接收方要做的事情
-
对窗口内的帧来者不拒
SR接收方将确认一个正确接收的帧而不管其是否按序。失序的帧将被缓存,并返回给发送方 一个该帧的确认帧(收谁确认谁),直到所有帧(即序号更小的帧)皆被收到为止,这时才可以将一批帧按序交付给上层,然后向前移动滑动窗口。
如图3-26所示,5号帧是还没来的,6号帧是已经来了的,7号和0号帧是目前还没有接收到。
图3-26 情况1
如图3-27所示,现在来了一个7号帧,此时将其缓存起来,直到5号帧到来。
图3-27 情况2
当5号帧来了之后,窗口下界的帧是被接收的,那么窗口可以往前移动,然后5、6、7交付给网络层,窗口会移动到下界为0号帧的位置。如图3-28所示。
图3-28 情况3
-
如果收到了窗口序号外(小于窗口下界)的帧,就返回一个ACK:其他情况,就忽略该帧。
SR运行流程
SR协议的重点有以下四点:
- 对数据帧逐一确认,收一个确认一个
- 只重传出错帧
- 接收方有缓存
- W T m a x = W R m a x = 2 ( n − 1 ) W_{Tmax}=W_{Rmax}=2^{(n-1)} WTmax=WRmax=2(n−1)
图3-29 SR运行流程
- 发送方首先发送第0帧,接收方接收到第0帧后发送ACK0。
- 发送方接着发送第1帧,接收方接收到第1帧后发送ACK1。
- 发送方接着发送第2帧,接收方没有收到第2帧,不发送任何东西。
- 发送方由于发送窗口还有第3帧,于是发送第3帧,接收方接收到第3帧,由于第2帧没有收到,所以缓存第3帧并发送ACK3。
- 虽然发送窗口已经发完了,但此时收到了ACK0,所以发送窗口移动一格,并发送第4帧,接收方收到第4帧后,由于第2帧还没有收到,所以缓存第4帧并发送ACK4。
- 虽然发送窗口又发完了,但此时收到了ACK1,所以发送窗口移动一格,并发送第5帧,接收方收到第5帧后,由于第2帧还还没有收到,所以缓存第5帧并发送ACK5。
- 此时发送方的第2帧超时了,因此重传第2帧,接收方接收到第2帧,因此把2~5帧交付,并发送ACK2。
- 此时发送方收到ACK3,可是ACK2还没收到,所以发送窗口不移动,造成无帧可发。
SR协议中的滑动窗口长度,发送窗口最好等于接收窗口,不然大了会溢出,小了没意义。即 W T m a x = W R m a x = 2 ( n − 1 ) W_{Tmax}=W_{Rmax}=2^{(n-1)} WTmax=WRmax=2(n−1)。
数据链路层采用了选择重传(SR)议,发送方已经发送了编号为0~3的帧。现已收到1号帧的确认,而0、2号帧依次超时,则发送方需要重传的帧数是()。
A.2 B.3 C.4 D.5
只重传0和2号帧,3号帧的情况没有告诉,所以不考虑。
信道划分介质访问控制
传输数据使用的两种链路
- 点对点链路:两个相邻节点通过一个链路相连,没有第三者。应用:PPP协议,常用于广域网。
- 广播式链路:所有主机共享通信介质。应用:早期的总线以太网、无线局域网,常用于局域网。典型拓扑结构:总线型、星型(逻辑总线型)。(之所以适用于局域网,可以想象一下,在小村庄里面喊一嗓子,都能听见)
图3-30 介质访问控制分类
信道划分介质访问控制:将使用介质的每个设备与来自同一信道上的其他设备的通信隔离开,把时域和频域资源合理地分配给网络上的设备。
静态划分信道:多路复用技术
把多个信号组合在一条物理信道上进行传输,使得多个计算机或终端设备共享信道资源,提高信道利用率。把一条广播信道,逻辑上分成几条用于两个节点之间通信的互不干扰的子信道,实际就是把广播信道转变为点对点信道。
图3-31 多路复用技术示意图
-
频分多路复用FDM
用户在分配到一定的频带后,在通信过程中自始至终都占用这个频带。频分复用的所有用户在同样的时间占用不同的带宽(频率带宽,单位为Hz)资源。充分利用传输介质带宽,系统效率较高;由于技术比较成熟,实现也比较容易。
图3-32 频分复用示意图
-
时分多路复用TDM
将时间划分为一段段等长的时分复用帧(TDM帧)。每一个时分复用的用户在每一个TDM帧中占用固定序号的时隙,所有用户轮流占用信道。频分复用可以理解为“并行”,时分复用可以理解为“并发”。
图3-33 时分多路复用示意图
-
统计时分复用STDM
每一个STDM帧中的时隙数小于连接在集中器上的用户数。各用户有了数据就随时发往集中器的输入缓存,然后集中器按顺序依次扫描输入缓存,把缓存中的输入数据放入STDM帧中,一个STDM帧满了就发出。STDM帧不是固定分配时隙,而是按需动态分配时隙。(谁先来就让谁先走)
图3-34 统计时分复用示意图
-
波分多路复用WDM
波分多路复用就是光的频分多路复用,在一根光纤中传输多种不同波长(频率)的光信号,由于波长(频率)不同,所以各路光信号互不干扰,最后再用波长分解复用器将各路波长分解出来。(几乎不考察)
图3-35 波分多路复用示意图
-
码分多路复用CDM
码分多址(CDMA)是码分复用的一种方式,当码分复用信道为多个不同地址的用户所共享时,就称为码分多址。
每一个用户可以在同样的时间使用同样的频带进行通信,码分复用集合了频分复用和时分复用的优点。且抗干扰能力强,其频谱类似于白噪声,不易被人发现。
1个比特分为多个码片/芯片,每一个站点被指定一个唯一的 m m m位的芯片序列,发送1时发送芯片序列(通常把0写成-1)。
码分多址的特点:
- 每个站分配的码片序列各不相同,且必须互相正交(向量S和T的规格化内积等于0)。
- 任何一个码片向量和该码片向量自己的规格化内积都是1。
- 一个码片向量和该码片反码的向量的规格化内积值是-1。
图3-36 码分多址示意图
图3-37 码分复用例题
动态分配信道
-
ALOHA协议
纯ALOHA协议思想:不监听信道,不按时间槽发送,随机重发(想法就发)。**冲突如何检测?**如果发送冲突,接收方就会检测出差错,然后不予确认,发送方在一定时间内收不到就判断发送冲突。**冲突如何解决?**超时后等一随机时间再重传。
图3-38 纯ALOHA协议示意图
-
时隙ALOHA协议
时隙ALOHA协议的思想:把时间分成若于个相同的时间片,所有用户在时间片开始时刻同步接入网络信道若发生冲突,则必须等到下一个时间片开始时刻再发送(控制想发就发的随意性)。
图3-39 时隙ALOHA示意图
-
CSMA协议
CS:载波侦听/监听,每一个站在发送数据之前要检测一下总线上是否有其他计算机在发送数据。当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。当一个站检测到的信号电压摆动值超过一定门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞,即发生了冲突。
MA:多点接入,表示许多计算机以多点接入的方式连接在一根总线上。
1-坚持CSMA思想:如果一个主机要发送信息,那么它先监听信道。**空闲则直接传输,不必等待;忙则一直监听,直到空闲马上传输。**如果有冲突(一段时间内未收到肯定回复),则等待一个随机长的时间再监听,重复上述过程。优点是只要媒体空闲,站点就马上发送,避免了媒体利用率的损失。缺点是假如有两个或两个以上的站点有数据要发送,冲突就不可避免。
非坚持CSMA思想:如果一个主机要发送消息,那么它先监听信道。空闲则直接传输,不必等待;忙则等待一个随机的时间之后再进行监听。优点是采用随机的重发延迟时间可以减少冲突发生的可能性。缺点是可能存在大家都在延迟等待过程中,使得媒体仍可能处在空闲状态,媒体使用率降低。
p-坚持CSMA思想:如果一个主机要发送消息,那么它先监听信道。空闲则以p概率直接传输,不必等待;概率1-p等待到下一个时间槽再传输。忙则持续监听直到信道空闲再以p概率发送。若冲突则等到下一个时间槽开始再监听并重复上述过程。优点是既能像非坚持算法那样减少冲突,又能像1-坚持算法那样减少媒体空间时间。缺点是发生冲突以后还是要坚持把数据帧发送完,造成了浪费。
图3-40 三种CSMA思想对比
-
CSMA/CD协议
CS:载波侦听/监听,每一个站在发送数据之前以及发送数据时都要检测一下总线上是否有其他计算机在发送数据。MA:多点接入,表示许多计算机以多点接入的方式连接在一根总线上(总线型网络)。CD:碰撞检测(冲突检测),“边发送边监听”,适配器边发送数据边检测信道上信号电压的变化情况,以便判断自己在发送数据时其他站是否也在发送数据(半双工网络)。
传播时延对载波监听的影响
规定单程端到端传播时延 τ \tau τ,从主机A往主机B发送数据,当数据还未到达主机B时,此时主机B监听结果为空闲,如图3-41所示。
图3-41 主机B监听结果为空闲
那么此时,主机B会把自己的数据发送出去,因此双方会造成冲突碰撞。这是传播时延对载波监听的影响造成的。
图3-42 传播时延对载波监听的影响
如图3-42所示,主机A发送的数据与主机B发送的数据发送碰撞后继续发送,设主机A发送数据的开始时刻是 t = 0 t=0 t=0,由于单程端到端的传播时延是 τ \tau τ,因此主机A发送的数据到达主机B的时刻是 t = τ t=\tau t=τ。这个时候主机B检测到发生碰撞,会反思是不是自己的问题,停发;设主机B开始发生数据的时刻是 t = τ − δ t=\tau-\delta t=τ−δ-,因此主机A检测到发生碰撞的时刻是 2 t − δ 2t-\delta 2t−δ。
当 δ → 0 \delta\rightarrow0 δ→0时,是最迟知道自己发送的数据没和别人碰撞的时间,故这个时间最多是两倍的总线端到端的传播时延。只要经过 2 τ 2\tau 2τ时间还没有检测到碰撞,就能肯定这次发送不会发生碰撞。
如何确定碰撞后的重传时机
使用截断二进制指数规避算法,首先确定基本退避(推迟)时间为 2 τ 2\tau 2τ;接着定义参数 k k k,它等于重传次数,但 k k k不超过10,即 k = m i n [ 重传次数, 10 ] k=min[重传次数,10] k=min[重传次数,10]。当重传次数不超过10时, k k k等于重传次数;当重传次数大于10时, k k k就不再增大而一直等于10;从离散的整数集合 [ 0 , 1 , ⋯ , 2 k − 1 ] [0,1,\cdots,2^k -1] [0,1,⋯,2k−1]中随机取出一个数 r r r,重传所需要退避的时间就是** r r r倍的基本退避时间**,即 2 r τ 2r\tau 2rτ;当重传达16次还不能成功时,说明网络太拥挤,认为此帧无法正确发出,抛弃此帧并向高层报告出错。过程如图3-43所示。
图3-43 截断二进制指数规避算法流程举例
若连续多次发生冲突,就表明可能有较多的站参与争用信道使用此算法可使重传需要推迟的平均时间随重传次数的增大而增大,因而减小发生碰撞的概率,有利于整个系统的稳定。
最小帧长问题
如果帧太小了,检测到都没来得及反应停止,就已经发完了,那么CSMA/CD就失去意义了。因此规定帧的传输时延至少要两倍于信号在总线中的传播时延。即 最小帧长 = 总线传播时延 × 数据传输速率 × 2 最小帧长=总线传播时延\times数据传输速率\times2 最小帧长=总线传播时延×数据传输速率×2。
-
CSMA/CA协议
发送数据前,会先检测信道是否空闲。若是空闲则发出RTS,RTS包括发射端的地址、接收端的地址、下一份数据持续发送的时间等信息;忙则等待。接收端收到RTS后,将响应CTS。发送端收到CTS后,开始发送数据帧,同时预约信道,发送方告诉其他站点自己要传多久数据。接收端收到数据帧后,将用CRC来检验数据是否正确,正确则响应ACK帧。发送方收到ACK就可以进行下一个数据帧的发送,若没有则一直重传至规定重发次数为止(采用截断二进制指数规避算法来确定随机的推迟时间)。
CSMA/CD协议和CSMA/CA协议的对比如图3-44所示。
图3-44 CSMA/CD协议和CSMA/CA协议对比
轮询访问介质访问控制
介质访问控制的特点
信道划分介质访问控制协议是基于多路复用技术进行资源的划分,当网络负载重时,共享信道效率高且公平;网络负载轻时,共享信道效率低。
随机访问MAC协议可以让用户根据意愿随机发送信息,发送信息时可独占信道带宽。当网络负载重的情况下,产生冲突开销;当网络负载轻的情况下,共享信道效率高,单个结点可利用信道全部带宽。
轮询访问MAC协议既要不产生冲突又要发送时占全部带宽,主要分为轮询协议和令牌传递协议。
轮询协议
主结点轮流邀请从属结点发送数据。只有主结点询问从属结点后,从属结点才能选择发或不发数据,因此每次只能允许一个主机发送数据,占据了所有的带宽。
但也存在问题:轮询开销(发送数据帧询问从属主机)、等待延迟(靠后的从属主机,如果最后一台主机要发,前面的主机都不发,时间就浪费了)、单点故障(如果主结点发生故障了,那么所有的从属结点都发送不了)。(轮询协议不是重点)
令牌传递协议
令牌:一个特殊格式的MAC控制帧,不含任何信息。
控制信道的使用:确保同一时刻只有一个结点独占信道。
应用于令牌环网(物理是星型拓扑,逻辑是环形拓扑),采用令牌传送方式的网络常用于负载较重、通信量较大的网络中。
令牌会在令牌环网中不断传递,直到有主机想要发送数据,这个时候该主机修改标志位后就发送数据。
每个结点都可以在一定时间内(令牌持有时间)获得发送数据的权利,并不是无限制地持有令牌。
但也有几个问题:令牌开销、等待延迟、单点故障(哈哈哈和轮询协议一样)。
图3-45 令牌环网
局域网基本概念和体系结构
局域网基本概念
局域网(Local AreaNetwork):简称LAN,是指在某一区域内由多台计算机互联成的计算机组,使用广播信道。
特点1:覆盖的地理范围较小,只在一个相对独立的局部范围内联,如一座或集中的建筑群内。
特点2:使用专门铺设的传输介质(双绞线、同轴电缆)进行联网,数据传输速率高(10Mb/s~10Gb/s)。
特点3:通信延迟时间短,误码率低,可靠性较高。
特点4:各站为平等关系,共享传输信道。
特点5:多采用分布式控制和广播式通信,能进行广播和组播,
决定局域网的主要要素为:网络拓扑,传输介质与介质访问控制方法。
局域网体系结构
图3-46 局域网体系结构
局域网介质访问控制方法
- CSMA/CD:常用于总线型局域网,也用于树型网络。
- 令牌总线:常用于总线型局域网,也用于树型网络。它是把总线型或树型网络中的各个工作站按一定顺序如按接口地址大小排列形成一个逻辑环。只有令牌持有者才能控制总线,才有发送信息的权力。
- 3.令牌环:用于环形局域网,如令牌环网。
局域网的分类
- 以太网:以太网是应用最为广泛的局域网,包括标准以太网(10Mbps)、快速以太网(100Mbps)千兆以太网(1000Mbps)和10G以太网,它们都符合IEEE802.3系列标准规范。逻辑拓扑总线型,物理拓扑是星型或拓展星型。使用CSMA/CD。
- 令牌环网:物理上采用了星形拓扑结构,逻辑上是环形拓扑结构。已是“明日黄花”。
- FDDl网(Fiber Distributed Data Interface) 物理上采用了双环拓扑结构,逻辑上是环形拓扑结构。
- ATM网(Asymnchronous Transfer Mode) 较新型的单元交换技术,使用53字节固定长度的单元进行交换。
- 无线局域网(Wireless Local Area Network;WLAN)采用IEEE 802.11标准。