1.28k likes | 1.44k Views
计算机网络. 王占全 zhqwang@ecust.edu.cn. 第 4 章 数据链路层. 本章学习要求 :. 1 数据传输过程中 差错产生的原因与性质 2 误码率的定义与差错控制方法 3 数据链路层的基本概念 4 面向字符型数据链路层协议实例— BSC 5 面向比特型数据链路层协议实例— HDLC 6 Internet 中的数据链路层协议. 4.1 差错产生与差错控制方法. 4.1.1 为什么要设计数据链路层 在原始物理传输线路上传输数据信号是有差错的; 设计数据链路层的主要目的: 将有差错的物理线路改进成无差错的数据链路;
E N D
计算机网络 王占全 zhqwang@ecust.edu.cn
本章学习要求: • 1 数据传输过程中差错产生的原因与性质 • 2 误码率的定义与差错控制方法 • 3 数据链路层的基本概念 • 4 面向字符型数据链路层协议实例—BSC • 5 面向比特型数据链路层协议实例— HDLC • 6 Internet中的数据链路层协议
4.1 差错产生与差错控制方法 4.1.1 为什么要设计数据链路层 • 在原始物理传输线路上传输数据信号是有差错的; • 设计数据链路层的主要目的: 将有差错的物理线路改进成无差错的数据链路; 方法 — 差错检测 差错控制 流量控制 • 作用:改善数据传输质量,向网络层提供高质量的服务。
4.1.2 差错产生的原因和差错类型 • 传输差错 — 通过通信信道后接收的数据与发送数据 不一致的现象; • 差错控制 — 检查是否出现差错以及如何纠正差错; • 通信信道的噪声分为两类:热噪声和冲击噪声; • 由热噪声引起的差错是随机差错,或随机错; • 冲击噪声引起的差错是突发差错,或突发错; • 引起突发差错的位长称为突发长度; • 在通信过程中产生的传输差错,是由随机差错与突发差错共同构成的。
传输差错产生过程 总共15bit,有两位出错!
4.1.3 误码率的定义 • 误码率定义: 二进制比特在数据传输系统中被传错的概率, 它在数值上近似等于: Pe = Ne/N 其中,N为传输的二进制比特总数 Ne为被传错的比特数
讨论 • 误码率应该是衡量数据传输系统正常工作状态下传输可靠性的参数; • 对于一个实际的数据传输系统,不能笼统地说误码率越低越好,要根据实际传输要求提出误码率要求; • 对于实际数据传输系统,如果传输的不是二进制比特,要折合成二进制比特来计算; • 差错的出现具有随机性,在实际测量一个数据传输系统时,只有被测量的传输二进制比特数越大,才会越接近于真正的误码率值。
4.1.4 检错码与纠错码 • 纠错码: 每个传输的分组带上足够的冗余信息; 接收端能发现并自动纠正传输差错。 • 检错码: 分组仅包含足以使接收端发现差错的冗余信息; 接收端能发现出错,但不能确定哪一比特是错的,并且自己不能纠正传输差错。
常用的检错码 • 奇偶校验码 垂直奇(偶)校验 水平奇(偶)校验 水平垂直奇(偶)校验(方阵码) • 循环冗余编码CRC 目前应用最广的检错码编码方法之一
最简单的例子是奇偶校验,在数据后填加一个奇偶位最简单的例子是奇偶校验,在数据后填加一个奇偶位 • 例:使用偶校验(“1”的个数为偶数) 10110101 ——> 101101011 10110001 ——> 101100010 • 奇偶校验可以用来检查奇数个错误。
循环冗余编码工作原理 • 在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术。 • 假设待传送的数据 f(x) = 1010001101(共n bit)。我们在f的后面再添加供差错检测用的 k bit 冗余码一起发送。
冗余码的计算 • 用二进制的模 2 运算进行 2k乘 f的运算,这相当于在 f后面添加 k 个 0。 • 得到的 (k + n) bit 的数除以事先选定好的长度为 (k+ 1) bit 的数 G,得出商是 Q 而余数是 R,余数 R 比除数 G 至少要少1 个比特。
R(x) R’(x) 4.1.5 循环冗余编码流程
举例2 :具体描述 循环冗余检验的原理说明 1101010110←Q(x)商 除数G(X)→110101 101000110100000←2nf(x)被除数 110101 111011 110101 111010 110101 111110 110101 101100 110101 110010 110101 01110←R(x)余数
举例 2: • 设k = 5, G= 110101,模 2 运算的结果是:商 Q = 1101010110, 余数R = 01110。 • 将余数 R 作为冗余码添加在数据f(x) M 的后面发送出去,即发送的数据是101000110101110,或 2kf(x) + R。
标准CRC生成多项式G(x) • CRC-12 G(x)= x12+x11+x3+x2+x+1 • CRC-16 G(x)= x16+x15+x2+1 • CRC-CCITT G(x)= x16+x12+x5+1 • CRC-32 G(x)= x32+x26+x23+x22+x16+x12+x11+ x10 +x8+x7+x5+x4 +x2+x+1 • 硬件实现CRC校验 • 网卡NIC(Network Interface Card)
CRC校验码的检错能力 • CRC校验码能检查出全部单个错; • CRC校验码能检查出全部离散的二位错; • CRC校验码能检查出全部奇数个错; • CRC校验码能检查出全部长度小于或等于K位的突发错; • CRC校验码能以[1-(1/2)K-1]的概率检查出长度为(K+1)位的突发错; • 如果K=16,则该CRC校验码能全部检查出小于或等于16 位的所有的突发差错,并能以1-(1/2)16-1=99.997%的概率检查出长度为17位的突发错,漏检概率为0.003%;
帧检验序列 FCS • 在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。 • 循环冗余检验 CRC 和帧检验序列 FCS并不等同。 • CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。 • FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的惟一方法。
检测出差错 • 只要得出的余数 R 不为 0,就表示检测到了差错。 • 但这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错。 • 一旦检测出差错,就丢弃这个出现差错的帧。 • 只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率就很小很小。
应当注意 • 仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受(accept)。 • “无差错接受”是指:“凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于1的概率认为这些帧在传输过程中没有产生差错”。 • 也就是说:“凡是接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)。 • 要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制。
4.1.6 差错控制机制 反馈重发机制
停止等待协议完全理想化的数据传输 发送方 接收方 主 机 B 主 机 A AP1 AP2 高层 缓存 缓存 帧 帧 数据链路层 数据链路
完全理想化的数据传输所基于的两个假定 • 假定 1: 链路是理想的传输信道,所传送的任何数据既不会出差错也不会丢失。 • 假定 2: 不管发方以多快的速率发送数据,收方总是来得及收下,并及时上交主机。 • 这个假定就相当于认为:接收端向主机交付数据的速率永远不会低于发送端发送数据的速率。
具有最简单流量控制的数据链路层协议 • 现在去掉上述的第二个假定。但是,仍然保留第一个假定,即主机 A 向主机 B传输数据的信道仍然是无差错的理想信道。然而现在不能保证接收端向主机交付数据的速率永远不低于发送端发送数据的速率。 • 由收方控制发方的数据流,乃是计算机网络中流量控制的一个基本方法。
反馈重发机制的分类 • 停止等待方式 1:正常情况 2:数据帧出错 3:数据帧丢失 4:应答帧丢失
停止等待协议的算法 • 这里确认帧带有序号 n。 • 按照习惯的表示法,ACKn表示“第n – 1号帧已经收到,现在期望接收第n号帧”。 • ACK1 表示“0号帧已收到,现在期望接收的下一帧是1号帧”; • ACK0现在期望接收的下一帧是 0 号帧”。
在发送结点 (1) 从主机取一个数据帧,送交发送缓存。 (2) V(S)←0。 (3) N(S)←V(S)。 (4) 将发送缓存中的数据帧发送出去。 (5) 设置超时计时器。 (6) 等待。 {等待以下(7)和(8)这两个事件中最先出现的一个} (7) 收到确认帧 ACKn, 若 n = 1 – V(s),则: 从主机取一个新的数据帧,放入发送缓存; V(S)←[1 V(S)],转到 (3)。 否则,丢弃这个确认帧,转到(6)。 (8) 若超时计时器时间到,则转到(4)。
在接收结点 (1) V(R)←0。 (2) 等待。 (3) 收到一个数据帧; 若 N(S) = V(R),则执行(4); 否则丢弃此数据帧,然后转到(6)。 (4) 将收到的数据帧中的数据部分送交上层软件 (也就是数据链路层模型中的主机)。 (5) V(R)←[1 V(R)]。 (6) n←V(R); 发送确认帧 ACKn,转到(2)。
停止等待协议的要点 • 只有收到序号正确的确认帧ACKn后,才更新发送状态变量V(S)一次,并发送新的数据帧。 • 接收端接收到数据帧时,就要将发送序号N(S)与本地的接收状态变量V(R)相比较。 • 若二者相等就表明是新的数据帧,就收下,并发送确认。 • 否则为重复帧,就必须丢弃。但这时仍须向发送端发送确认帧ACKn,而接收状态变量V(R)和确认序号n都不变。
停止等待协议的要点(续) • 连续出现相同发送序号的数据帧,表明发送端进行了超时重传。连续出现相同序号的确认帧,表明接收端收到了重复帧。 • 发送端在发送完数据帧时,必须在其发送缓存中暂时保留这个数据帧的副本。这样才能在出差错时进行重传。只有确认对方已经收到这个数据帧时,才可以清除这个副本。
停止等待协议的要点(续) • 实用的CRC检验器都是用硬件完成的。 • CRC 检验器能够自动丢弃检测到的出错帧。因此所谓的“丢弃出错帧”,对上层软件或用户来说都是感觉不到的。 • 发送端对出错的数据帧进行重传是自动进行的,因而这种差错控制体制常简称为 ARQ (Automatic Repeat reQuest),直译是自动重传请求,但意思是自动请求重传。
停止等待协议的定量分析 • 设 tf是一个数据帧的发送时间,且数据帧的长度是固定不变的。显然,数据帧的发送时间tf 是数据帧的长度 lf(bit)与数据的发送速率 C (bit/s)之比,即 tf= lf/C = lf /C (s) 发送时间 tf也就是数据帧的发送时延。 • 数据帧沿链路传到结点B还要经历一个传播时延tp。 • 结点 B 收到数据帧要花费时间进行处理,此时间称为处理时间 tpr,发送确认帧 ACK 的发送时间为 ta。
tT 停止等待协议中数据帧和确认帧的发送时间关系 A B 数据帧的 发送时间 传播时延 tp tf DATA 两个成功发送的 数据帧之间的 最小时间间隔 处理时间 tpr tout 确认帧发送时间 ta ACK 设置的 重传时间 传播时延 tp 处理时间 tpr DATA 时间
停止等待协议 ARQ 的优缺点 • 优点:比较简单 。 • 缺点:通信信道的利用率不高,也就是说,信道还远远没有被数据比特填满。 • 为了克服这一缺点,就产生了另外两种协议,即连续 ARQ 和选择重传 ARQ。这将在后面进一步讨论。
连续工作方式 • 拉回方式
重传 DATA3 DATA0 DATA1 DATA2 DATA3 DATA4 DATA5 重传 DATA2 重传 DATA5 重传 DATA4 ACK2 ACK3 ACK1 ACK2 ACK2 ACK4 ACK2 连续 ARQ 协议的工作原理 A B ACK1 确认 DATA0 送交主机 超 时 重 传 时 间 ACK2 确认 DATA1 ?? DATA2 出错,丢弃 tout DATA3 不按序,丢弃,重传 ACK2 DATA4 不按序,丢弃,重传 ACK2 DATA5 不按序,丢弃,重传 ACK2 ACK3 确认 DATA2 ACK4 确认 DATA3 送交主机 …
连续 ARQ 协议连续 ARQ 协议的工作原理 • 在发送完一个数据帧后,不是停下来等待确认帧,而是可以连续再发送若干个数据帧。 • 如果这时收到了接收端发来的确认帧,那么还可以接着发送数据帧。 • 由于减少了等待时间,整个通信的吞吐量就提高了。
需要注意1: (1) 接收端只按序接收数据帧。虽然在有差错的 2号帧之后接着又收到了正确的 3 个数据帧,但接收端都必须将这些帧丢弃,因为在这些帧前面有一个 2 号帧还没有收到。虽然丢弃了这些不按序的无差错帧,但应重复发送已发送过的最后一个确认帧(防止确认帧丢失)。 (2) ACK1 表示确认 0 号帧 DATA0,并期望下次收到 1 号帧;ACK2 表示确认 1 号帧 DATA1,并期望下次收到 2 号帧。依此类推。
需要注意2: (3) 结点 A 在每发送完一个数据帧时都要设置该帧的超时计时器。如果在所设置的超时时间内收到确认帧,就立即将超时计时器清零。但若在所设置的超时时间到了而未收到确认帧,就要重传相应的数据帧(仍需重新设置超时计时器)。 在等不到 2 号帧的确认而重传 2 号数据帧时,虽然结点 A 已经发完了 5 号帧,但仍必须向回走,将 2号帧及其以后的各帧全部进行重传。连续 ARQ 又称为Go-back-N ARQ,意思是当出现差错必须重传时,要向回走 N 个帧,然后再开始重传。
滑动窗口的概念 • 发送端和接收端分别设定发送窗口和接收窗口 。 • 发送窗口用来对发送端进行流量控制。 • 发送窗口的大小 WT代表在还没有收到对方确认信息的情况下发送端最多可以发送多少个数据帧。
WT (b) 2 4 0 1 3 5 6 7 0 1 2 已发送 还允许发送 4 个帧 不允许发送这些帧 WT (c) 0 1 2 3 4 5 6 7 0 1 2 已发送 不允许发送这些帧 WT (d) 0 1 2 3 4 5 6 7 0 1 2 还允许发送 3 个帧 不允许发送这些帧 已发送 已发送 并已收到确认 发送窗口 WT (a) 0 1 2 3 4 5 6 7 0 1 2 允许发送 5 个帧 不允许发送这些帧
接收端设置接收窗口 • 在接收端只有当收到的数据帧的发送序号落入接收窗口内才允许将该数据帧收下。 • 若接收到的数据帧落在接收窗口之外,则一律将其丢弃。 • 只有当收到的帧的序号与接收窗口一致时才能接收该帧。否则,就丢弃它。 • 每收到一个序号正确的帧,接收窗口就向前(即向右方)滑动一个帧的位置。同时发送对该帧的确认。
WR (b) 0 1 2 3 4 5 6 7 0 1 2 已收到 不允许接收这些帧 准备接收 1 号帧 WR (c) 0 1 2 3 4 5 6 7 0 1 2 不允许接收这些帧 已收到 准备接收 4 号帧 WR (a) 0 1 2 3 4 5 6 7 0 1 2 不允许接收这些帧 准备接收 0 号帧
滑动窗口的重要特性 • 只有在接收窗口向前滑动时(与此同时也发送了确认),发送窗口才有可能向前滑动。 • 收发两端的窗口按照以上规律不断地向前滑动,因此这种协议又称为滑动窗口协议。 • 当发送窗口和接收窗口的大小都等于 1时,就是停止等待协议。
发送窗口的最大值 • 当用 n 个比特进行编号时,若接收窗口的大小为 1,则只有在发送窗口的大小 WT 2n 1时。 • 例如,当采用 3 bit 编码时,发送窗口的最大值是 7 而不是 8。
信道利用率 • 由于每个数据帧都必须包括一定的控制信息(如帧的序号、地址、同步信息以及其他的一些控制信息),所以即使连续不停地发送数据帧,信道利用率(即扣除全部的控制信息后的数据率与信道容量之比)也不可能达到 100 %。 • 当出现差错时(这是不可避免的),数据帧的不断重传将进一步使信道利用率降低。
选择重传 ARQ 协议 • 可加大接收窗口,先收下发送序号不连续但仍处在接收窗口中的那些数据帧。等到所缺序号的数据帧收到后再一并送交主机。 • 选择重传 ARQ 协议可避免重复传送那些本来已经正确到达接收端的数据帧。 • 但我们付出的代价是在接收端要设置具有相当容量的缓存空间。 • 对于选择重传 ARQ 协议,若用 n比特进行编号,则接收窗口的最大值受下式的约束 WR 2n/2