计算机网络 第 3 章 数据链路层 课件制作人:谢希仁
第 3 章 数据链路层 *3.1 数据链路层的基本概念 *3.2 停止等待协议 3.2.1 完全理想化的数据传输 第 3 章 数据链路层 *3.1 数据链路层的基本概念 *3.2 停止等待协议 3.2.1 完全理想化的数据传输 3.2.2 具有最简单流量控制的数据链路层协议 3.2.3 实用的停止等待协议 3.2.4 循环冗余检验的原理 3.2.5 停止等待协议的算法 课件制作人:谢希仁
第 3 章 数据链路层(续) *3.3 连续 ARQ 协议 3.3.1 连续 ARQ 协议的工作原理 3.3.2 滑动窗口的概念 第 3 章 数据链路层(续) *3.3 连续 ARQ 协议 3.3.1 连续 ARQ 协议的工作原理 3.3.2 滑动窗口的概念 3.4 选择重传 ARQ 协议 课件制作人:谢希仁
第 3 章 数据链路层(续) *3.5 面向比特的链路层协议 HDLC 3.5.1 HDLC 协议概述 3.5.2 HDLC 的帧结构 第 3 章 数据链路层(续) *3.5 面向比特的链路层协议 HDLC 3.5.1 HDLC 协议概述 3.5.2 HDLC 的帧结构 *3.6 因特网的点对点协议 PPP 3.6.1 PPP 协议的工作原理 3.6.2 PPP 协议的帧格式 3.6.3 PPP 协议的工作状态 课件制作人:谢希仁
3.1 数据链路层的基本概念 链路(link)是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。 一条链路只是一条通路的一个组成部分。 数据链路(data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。 现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。 一般的适配器都包括了数据链路层和物理层这两层的功能。 课件制作人:谢希仁
数据链路层的主要功能 (1) 链路管理 (2) 帧定界 (3) 流量控制 (4) 差错控制 (5) 将数据和控制信息区分开 (6) 透明传输 (7) 寻址 课件制作人:谢希仁
3.2 停止等待协议 3.2.1 完全理想化的数据传输 先研究一下数据链路层的模型。 课件制作人:谢希仁
3.2 停止等待协议 3.2.1 完全理想化的数据传输 发送方 接收方 主 机 A 主 机 B AP1 AP2 高层 缓存 缓存 帧 帧 3.2 停止等待协议 3.2.1 完全理想化的数据传输 发送方 接收方 主 机 A 主 机 B AP1 AP2 高层 缓存 缓存 帧 帧 数据链路层 数据链路 课件制作人:谢希仁
完全理想化的数据传输 所基于的两个假定 假定 1: 链路是理想的传输信道,所传送的任何数据既不会出差错也不会丢失。 假定 2: 不管发方以多快的速率发送数据,收方总是来得及收下,并及时上交主机。 这个假定就相当于认为:接收端向主机交付数据的速率永远不会低于发送端发送数据的速率。 课件制作人:谢希仁
3.2.2 具有最简单流量控制的数据链路层协议 现在去掉上述的第二个假定。但是,仍然保留第一个假定,即主机 A 向主机 B传输数据的信道仍然是无差错的理想信道。然而现在不能保证接收端向主机交付数据的速率永远不低于发送端发送数据的速率。 由收方控制发方的数据流,乃是计算机网络中流量控制的一个基本方法。 课件制作人:谢希仁
具有最简单流量控制的 数据链路层协议算法 在发送结点: (1) 从主机取一个数据帧。 (2) 将数据帧送到数据链路层的发送缓存。 (3) 将发送缓存中的数据帧发送出去。 (4) 等待。 (5) 若收到由接收结点发过来的信息(此信息 的格式与内容可由双方事先商定好),则 从主机取一个新的数据帧,然后转到(2)。 课件制作人:谢希仁
具有最简单流量控制的 数据链路层协议算法(续) 在接收结点: (1) 等待。 (2) 若收到由发送结点发过来的数据帧, 则将其放入数据链路层的接收缓存。 (3) 将接收缓存中的数据帧上交主机。 (4) 向发送结点发一信息,表示数据帧已 经上交给主机。 (5) 转到(1)。 课件制作人:谢希仁
两种情况的对比(传输均无差错) 不需要流量控制 需要流量控制 A B A B DATA DATA 送主机 B 送主机 B DATA 时 间 送主机 B 课件制作人:谢希仁
3.2.3 实用的停止等待协议 四种情况 A B A B DATA0 NAK 送 主 机 ACK (b) 数据帧出错 重 传 出错 A B 3.2.3 实用的停止等待协议 四种情况 A B A B DATA0 NAK 送 主 机 ACK (b) 数据帧出错 重 传 出错 A B DATA0 送 主 机 ACK (c) 数据帧丢失 重 传 tout 丢 失 ! A B DATA0 送 主 机 ACK 丢 弃 (d) 确认帧丢失 重 传 tout 失 ! DATA0 送 主 机 ACK DATA1 送 主 机 ACK 时 间 (a) 正常情况 课件制作人:谢希仁
超时计时器的作用 结点A发送完一个数据帧时,就启动一个超时计时器(timeout timer)。 计时器又称为定时器。 若到了超时计时器所设置的重传时间 tout而仍收不到结点 B 的任何确认帧,则结点 A 就重传前面所发送的这一数据帧。 一般可将重传时间选为略大于“从发完数据帧到收到确认帧所需的平均时间”。 课件制作人:谢希仁
解决重复帧的问题 使每一个数据帧带上不同的发送序号。每发送一个新的数据帧就把它的发送序号加 1。 若结点 B 收到发送序号相同的数据帧,就表明出现了重复帧。这时应丢弃重复帧,因为已经收到过同样的数据帧并且也交给了主机 B。 但此时结点 B 还必须向 A 发送确认帧 ACK,因为 B 已经知道 A 还没有收到上一次发过去的确认帧 ACK。 课件制作人:谢希仁
帧的编号问题 任何一个编号系统的序号所占用的比特数一定是有限的。因此,经过一段时间后,发送序号就会重复。 序号占用的比特数越少,数据传输的额外开销就越小。 对于停止等待协议,由于每发送一个数据帧就停止等待,因此用一个比特来编号就够了。 一个比特可表示 0 和 1 两种不同的序号。 课件制作人:谢希仁
帧的发送序号 数据帧中的发送序号 N(S) 以 0 和 1 交替的方式出现在数据帧中。 每发一个新的数据帧,发送序号就和上次发送的不一样。用这样的方法就可以使收方能够区分开新的数据帧和重传的数据帧了。 课件制作人:谢希仁
可靠传输 虽然物理层在传输比特时会出现差错,但由于数据链路层的停止等待协议采用了有效的检错重传机制,数据链路层对上面的网络层就可以提供可靠传输的服务。 课件制作人:谢希仁
3.2.4 循环冗余检验的原理 在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术。 3.2.4 循环冗余检验的原理 在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术。 假设待传送的数据 M = 1010001101(共k bit)。我们在M的后面再添加供差错检测用的 n bit 冗余码一起发送。 课件制作人:谢希仁
冗余码的计算 用二进制的模 2 运算进行 2n 乘 M 的运算,这相当于在 M 后面添加 n 个 0。 得到的 (k + n) bit 的数除以事先选定好的长度为 (n + 1) bit 的数 P,得出商是 Q 而余数是 R,余数 R 比除数 P 至少要少1 个比特。 课件制作人:谢希仁
冗余码的计算举例 设 n = 5, P = 110101,模 2 运算的结果是:商 Q = 1101010110, 余数R = 01110。 将余数 R 作为冗余码添加在数据 M 的后面发送出去,即发送的数据是101000110101110,或 2nM + R。 课件制作人:谢希仁
循环冗余检验的原理说明 除数 P → 110101 101000110100000 ← 2nM 被除数 课件制作人:谢希仁 1101010110 ← Q 商 除数 P → 110101 101000110100000 ← 2nM 被除数 110101 111011 111010 111110 101100 110010 01110 ← R 余数 课件制作人:谢希仁
帧检验序列 FCS 在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。 循环冗余检验 CRC 和帧检验序列 FCS并不等同。 CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。 FCS 可以用 CRC 这种方法得出,但 CRC 并非用来获得 FCS 的惟一方法。 课件制作人:谢希仁
检测出差错 只要得出的余数 R 不为 0,就表示检测到了差错。 但这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错。 一旦检测出差错,就丢弃这个出现差错的帧。 只要经过严格的挑选,并使用位数足够多的除数 P,那么出现检测不到的差错的概率就很小很小。 课件制作人:谢希仁
应当注意 仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受(accept)。 “无差错接受”是指:“凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错”。 也就是说:“凡是接受的帧都没有传输差错”(有差错的帧就丢弃而不接受)。 要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制。 课件制作人:谢希仁
停止等待协议的优缺点 优点:比较简单 。 缺点:通信信道的利用率不高,也就是说,信道还远远没有被数据比特填满。 为了克服这一缺点,就产生了另外两种协议,即连续 ARQ 和选择重传 ARQ。这将在后面进一步讨论。 课件制作人:谢希仁
3.3连续 ARQ 协议 3.3.1 连续 ARQ 协议的工作原理 在发送完一个数据帧后,不是停下来等待确认帧,而是可以连续再发送若干个数据帧。 如果这时收到了接收端发来的确认帧,那么还可以接着发送数据帧。 由于减少了等待时间,整个通信的吞吐量就提高了。 课件制作人:谢希仁
连续 ARQ 协议的工作原理 … A B DATA0 ACK1 确认 DATA0 DATA1 tout 送交主机 超 时 重 传 间 ?? tout ACK2 DATA2 出错,丢弃 DATA3 tout DATA3 不按序,丢弃,重传 ACK2 DATA4 DATA4 不按序,丢弃,重传 ACK2 DATA5 DATA5 不按序,丢弃,重传 ACK2 重传 DATA2 ACK3 确认 DATA2 重传 DATA3 ACK3 ACK4 确认 DATA3 重传 DATA4 送交主机 ACK4 重传 DATA5 … 课件制作人:谢希仁
需要注意: (1) 接收端只按序接收数据帧。虽然在有差错的 2号帧之后接着又收到了正确的 3 个数据帧,但接收端都必须将这些帧丢弃,因为在这些帧前面有一个 2 号帧还没有收到。虽然丢弃了这些不按序的无差错帧,但应重复发送已发送过的最后一个确认帧(防止确认帧丢失)。 (2) ACK1 表示确认 0 号帧 DATA0,并期望下次收到 1 号帧;ACK2 表示确认 1 号帧 DATA1,并期望下次收到 2 号帧。依此类推。 课件制作人:谢希仁
需要注意: (3) 结点 A 在每发送完一个数据帧时都要设置该帧的超时计时器。如果在所设置的超时时间内收到确认帧,就立即将超时计时器清零。但若在所设置的超时时间到了而未收到确认帧,就要重传相应的数据帧(仍需重新设置超时计时器)。 在等不到 2 号帧的确认而重传 2 号数据帧时,虽然结点 A 已经发完了 5 号帧,但仍必须向回走,将 2号帧及其以后的各帧全部进行重传。连续 ARQ 又称为Go-back-N ARQ,意思是当出现差错必须重传时,要向回走 N 个帧,然后再开始重传。 课件制作人:谢希仁
需要注意: (4) 以上讲述的仅仅是连续 ARQ 协议的工作原理。协议在具体实现时还有许多的细节。例如,用一个计时器就可实现相当于 N 个独立的超时计时器的功能。 课件制作人:谢希仁
3.4 选择重传 ARQ 协议 可加大接收窗口,先收下发送序号不连续但仍处在接收窗口中的那些数据帧。等到所缺序号的数据帧收到后再一并送交主机。 选择重传 ARQ 协议可避免重复传送那些本来已经正确到达接收端的数据帧。 但我们付出的代价是在接收端要设置具有相当容量的缓存空间。 对于选择重传 ARQ 协议,若用 n 比特进行编号,则接收窗口的最大值受下式的约束 WR 2n/2 (3-18) 课件制作人:谢希仁
3.5 面向比特的链路控制规程 HDLC 3.5.1 HDLC 协议概述 1974年,IBM 公司推出了面向比特的规程SDLC (Synchronous Data Link Control)。 后来 ISO 把 SDLC 修改后称为 HDLC (High-level Data Link Control),译为高级数据链路控制,作为国际标准ISO 3309。 CCITT 则将 HDLC 再修改后称为链路接入规程 LAP (Link Access Procedure)。不久,HDLC 的新版本又把 LAP 修改为 LAPB,“B”表示平衡型(Balanced),所以 LAPB 叫做链路接入规程(平衡型)。 课件制作人:谢希仁
3.5.2 HDLC 的帧结构 比特 8 8 8 可变 16 8 标志 F 地址 A 控制 C 信息 Info 帧检验序列 FCS 标志 F FCS 检验区间 透明传输区间 标志字段 F (Flag) 为 6 个连续 1 加上两边各一个 0 共 8 bit。在接收端只要找到标志字段就可确定一个帧的位置。 课件制作人:谢希仁
零比特填充法 HDLC 采用零比特填充法使一帧中两个 F 字段之间不会出现 6 个连续 1。 在发送端,当一串比特流数据中有 5 个连续 1 时,就立即填入一个 0。 在接收帧时,先找到 F 字段以确定帧的边界。接着再对比特流进行扫描。每当发现 5 个连续 1 时,就将其后的一个 0 删除,以还原成原来的比特流。 课件制作人:谢希仁
零比特的填充与删除 数据中某一段比特组合恰好 0 1 0 0 1 1 1 1 1 1 0 0 0 1 0 1 0 出现和 F 字段一样的情况 发送端在 5 个连 1 之后 填入 0 比特再发送出去 填入 0 比特 0 1 0 0 1 1 1 1 1 0 1 0 0 0 1 0 1 0 在接收端将 5 个连 1 之后 的 0 比特删除,恢复原样 在此位置删除填入的 0 比特 0 1 0 0 1 1 1 1 1 0 1 0 0 0 1 0 1 0 课件制作人:谢希仁
透明传输 采用零比特填充法就可传送任意组合的比特流,或者说,就可实现数据链路层的透明传输。 当连续传输两个帧时,前一个帧的结束标志字段 F 可以兼作后一帧的起始标志字段。 当暂时没有信息传送时,可以连续发送标志字段,使收端可以一直和发端保持同步。 课件制作人:谢希仁
其他字段 地址字段 A 是 8 bit。 帧检验序列 FCS 字段共 16 bit。所检验的范围是从地址字段的第一个比特起,到信息字段的最末一个比特为止。 控制字段 C 共 8 bit,是最复杂的字段。HDLC 的许多重要功能都靠控制字段来实现。 课件制作人:谢希仁
3.6 因特网的点对点协议 PPP 3.6.1 PPP 协议的工作原理 现在全世界使用得最多的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。 用户使用拨号电话线接入因特网时,一般都是使用 PPP 协议。 课件制作人:谢希仁
用户拨号入网的示意图 … 用户家庭 因特网服务提供者(ISP) 调制解调器 至 因 使用 TCP/IP 的 特 PC 机 客户进程 路由器 拨号电话线 路由选择 进程 调制解调器 使用 TCP/IP 的 PPP 连接 课件制作人:谢希仁
PPP 协议 1992 年制订了 PPP 协议。经过 1993 年和 1994 年的修订,现在的 PPP 协议已成为因特网的正式标准[RFC 1661]。 PPP协议有三个组成部分 一个将 IP 数据报封装到串行链路的方法。 链路控制协议 LCP (Link Control Protocol)。 网络控制协议 NCP (Network Control Protocol)。 课件制作人:谢希仁
3.6.2 PPP 协议的帧格式 PPP 的帧格式和 HDLC 的相似。 标志字段 F 仍为 0x7E (符号“0x”表示后面的字符是用十六进制表示。十六进制的 7E 的二进制表示是 01111110)。 地址字段 A 只置为 0xFF。地址字段实际上并不起作用。 控制字段 C 通常置为 0x03。 PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节。 课件制作人:谢希仁
PPP 协议的帧格式 PPP 有一个 2 个字节的协议字段。 当协议字段为 0x0021 时,PPP 帧的信息字段就是IP 数据报。 先发送 首部 尾部 F A C F 协议 信 息 部 分 FCS 7E FF 03 7E 字节 1 1 1 2 不超过 1500 字节 2 1 PPP 帧 PPP 有一个 2 个字节的协议字段。 当协议字段为 0x0021 时,PPP 帧的信息字段就是IP 数据报。 若为 0xC021, 则信息字段是 PPP 链路控制数据。 若为 0x8021,则表示这是网络控制数据。 课件制作人:谢希仁
透明传输问题 当 PPP 用在同步传输链路时,协议规定采用硬件来完成比特填充(和 HDLC 的做法一样)。 课件制作人:谢希仁
字符填充法 将信息字段中出现的每一个 0x7E 字节转变成为 2 字节序列(0x7D, 0x5E)。 若信息字段中出现一个 0x7D 的字节, 则将其转变成为 2 字节序列(0x7D, 0x5D)。 若信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符),则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变。 课件制作人:谢希仁
不提供使用序号和确认 的可靠传输 PPP 协议之所以不使用序号和确认机制是出于以下的考虑: 在因特网环境下,PPP 的信息字段放入的数据是 IP 数据报。数据链路层的可靠传输并不能够保证网络层的传输也是可靠的。 帧检验序列 FCS 字段可保证无差错接受。 课件制作人:谢希仁