Transcript 第三章:数据链路层
Chapter 3 The Data Link Layer 内容 a) b) c) d) e) f) 数据链路层设计要点 错误检测和纠正 基本数据链路协议 滑动窗口协议 协议验证 数据链路层协议示例 数据链路层设计要点 • • • • 为网络层提供的服务 分帧 错误控制 流控 数据链路层功能 • • • 向网络层提供一个定义良好的接口 处理传输错误 调节数据流 • 确保慢速的接收方不会被快速的发送方淹没 分组和帧之间的关系. 为网络层提供的服务 1. 无确认的无连接 服务 2. 有确认的无连接 服务 3. 有确认的面向连 接服务 P156 (a) 虚拟通信过程. (b) 实际通信过程. 示例:为网络层提供的服务 数据链路层协议的位置 3层看来,2层提供了某种连接服务 成帧 a) 目标:把位流分解到离散的帧中 • • • • 字符计数法 含字节填充的分界符法 含位填充的分界符法 物理层编码违例法 字符计数法成帧 字符流. (a) 无错. (b) 一位差错. 101111,计数值被破坏 含字节填充的分界符法成帧 (a) 使用标志字节作为帧的开始和结束 (b) 字节填充前后的4个字节序列例子 缺点是依赖于 8位字符模式 含位填充的分界符法分帧 位填充 标志位模式为01111110,每5个1填充1个0 (a) 原始数据. (b) 线路上的数据. (c) 删除填充之后存储在接收方存储器中的数据. 物理层编码违例法成帧 • • 如果物理介质上的编码方法中包含冗余信息,可以使用 例: • • +1表示高电平、-1表示低电平 +1-1表示比特“1”;-1+1表示比特“0”,而+1+1和-1-1不表 示数据,有可能用于帧分界 注:多种方法的联合使用可能会提高帧边界检测的速度 内容 a) b) c) d) e) f) 数据链路层设计要点 错误检测和纠正 基本数据链路协议 滑动窗口协议 协议验证 数据链路层协议示例 错误检测和纠正 • 纠错码 • 检测码 突发错误:集中在某些比特位产生错误。 例如 1000×100位数据块,每一位错误概率 0.001; 如果错误是孤立的,那么每个1000位数据块 都可能有某1位发生错误; 如果错误每次发生都是连续的100位,那么 这些错误可能只发生在1-2块数据块中,大 部分数据块没有错误。 编码基础知识 • 汉明距离:两个码字中不相同的位的格式,设码字x,y,其 汉明距离为w(xy),其中w(z)表示z比特串中1的个数 若x和y的汉明距离为d,则x至少需要d个错误位才会变成y。 所有可用码字之间最小的汉明距离称为最小汉明距离 一些结论: • • • • • 为了检测d位错误,需要d+1的最小汉明距离 为了纠正d位错误,需要2d+1的最小汉明距离 编码基础知识 • 奇偶校验码: • • • • 数据后面增加1位奇偶位,奇偶位的取值保证码字中1的数目是偶数 (偶校验)或者奇数(奇校验) 例如1011010,偶校验时发送10110100,奇校验时发送10110101 奇偶校验编码方法汉明距离为2?可以检测单个错误 一种距离为5的编码方案 • • A=0000000000 B=0000011111 C=1111100000 D=1111111111 可以纠正2个错误,例如0000000111会被纠正为B码字 纠错码之汉明码 考虑n位码字n=m+r 其中m位为报文,r 位为校验位。 r下界:m+r+12r 当m=7时,8 2r-r 可以计算r最小值4 汉明码手工计算 汉明码也能够纠正突发错 误,只需要把传输的码字 按照矩阵排列即可。 (1) 偶校验 (2) 3 (4) 5 6 7 (8) 9 10 11 H: 1 0 0 1 0 0 0 3=1+2; 5=1+4; 6=2+4; 7=1+2+4; 9=1+8; 10=2+8; 11=1+2+8; 3|5|7|9|11 0 3|6|7|10|11 0 m: 1 1 1 1 5|6|7 0 1 0 1 0 9|10|11 1 0 1 0 通常用于出错概率比较高的链路 检错码 •(7,4)汉明码可以纠正单 个错误,可以检测2位错误 (最小汉明距离为3) •奇偶校验编码方法汉明距离 为2,可以检测单个错误 •为了增加突发性错误的检测 概率,可以使用分组的奇偶校 验码 • • • • 可以纠正单个错误 是否能检测3位错误呢? 码流A B…M-1 M 坏块被接受每一列都有 正确的奇偶位2-n a1 a2 … an-1 an H1 b1 b2 … bn-1 bn H2 … … … … … … m-11 m-12 … m-1n m-1n Hn-1 m1 m2 … mn-1 V1 V2 … Vm-1 Vm mn Hn Hn+1 检错码 • 循环冗余校验码 • • • • • 一帧有m位,对应M(x) 发送方和接收方有共同的生成多项式G(x),阶为r 发送方M(x)×xr ÷G(x) = S(x) + R(x),发送方发送 T(x)=M(x)×xr -R(x) 接收方计算T(x)/ G(x) ,如果整除则认为没有错误;如果不整除, 则认为发生了错误,错误可以用E(x)表示 • 所有长度小于等于r位的错误,可以检测(G(x)为r+1位) • 当G(x)含有x+1因子时,可以检测只影响奇数个位的突发错误 • 当长度大于r时,如果所有位模式等概,则错判概率约为(1/2)r 标准化的G(x)多项式 • P167 检测码 多项式编码校验和的计算过程. 基本数据链路层协议 • • • 无限制的单工协议 单工的停-等协议 有噪声信道的单工协议 通用头文件-1 5种数据类型: 帧类型可以是数据、ACK帧、NAK帧 帧的序列号用于接收方检测重复的帧 ACK序列号指出了接收方刚接收到的帧的序列号 分组信息在数据帧时有效,包含网络层分组 通用头 文件-2 •接口函数 •初始状态 •wait_for_event •层间接口 •from/to_network_layer •from/to_physical_layer •定时器 •发送方数据定时器 •start/stop_timer •接收方ACK定时器 •start/stop_ack_timer •层交互 •enable/disable_n.._l.. •内联宏 •inc 无限制的单工协议 • • • • • 信道单向 信道不会损坏或者丢失帧 网络层始终就绪 接收方缓存空间无限 处理时间可以忽略 无限制的 单工协议 发送数据 高层->低层 单向 接收数据 低层->高层 单工的停-等协议 • • • 信道半双工 信道不会损坏或者丢失帧 网络层始终就绪 • 接收方只能处理一帧,没有缓存和排队机制 • 处理时间不可忽略,发送方需要考虑接收方的处理时间 单工的 停-等 协议 需要等待 接收方响应 给发送方 响应 有噪声信道的单工协议 • • 信道半双工 网络层始终就绪 • • 信道会损坏和丢失帧 接收方只能处理一帧,没有缓存和排队机制 • • 损坏和丢失帧:定时器 避免冗余:序列号 • 序列号的位数? • 接收方只需要判断一帧是新帧还是已经接收的帧 有重传的ACK协议-发送方 发送方 发送0帧 s.info=buffer; s.seq=n; to_phical_layer(&s) start_timer Wait for ACK0 n=0 正确接收了一帧 正确接收了一帧 && 该帧是ACK0 && 该帧是ACK1 stop_timer Inc(n) stop_timer Inc(n) Wait for ACK1 n=1 发送1帧 s.info=buffer; s.seq=n; to_phical_layer(&s) start_timer 有重传的ACK协议-接收方 接收方 接收到一帧&& 帧序号为0 to_network_layer; Inc(n); 发送ACK0 接收到一帧&& 不是帧1 接收到一帧&& 不是帧0 等待 帧n=0 等待 帧n=1 发送ACK1 接收到一帧&& 帧序号为1 to_network_layer; Inc(n); 发送ACK1 发送ACK0 滑动窗口协议 • 1位滑窗协议 • Go Back N • 选择重传 滑窗协议概述 • 全双工数据传输 • • • • • 两条数据单工信道 一条信道,数据帧和ACK帧混合,用帧头部信息区分不同帧 捎带确认:确认信息附在往外发送的数据帧上 • 需要增加定时器来决定是否使用捎带确认 滑动窗口协议 发送窗口 • • 发送方已经发送但没有确认的帧,和允许发送的帧。窗口大小 可能动态变化 接收窗口 • 接收方可以接受的帧 示例:窗口大小为1 序列号为3比特长. (a) 初始时. (b) 第一帧发送以后 (c) 第一帧接收以后 (d) 第一个确认帧收到以后. 1位滑窗协议-1 通常只有某一个数 据链路层程序需要 首先发送一帧,然 后才进入循环 Continued 1位滑窗协议-2 两个if条 件,4种 程序流程 更新buffer内 容,不执行时 buffer依旧是 刚发送的帧 1位滑窗协议-3 (a) 通常的情形. (b) 双方并发地发送初始分组(进入循环之前,都发送了一帧) 向量含义是(seq, ack, 分组号);星号表示网络层接受了一个分组 停等协议的性能 • • • 考虑传播延迟,即考虑分组在路上的时间 使用停-等协议(窗口大小为1) 例: 1 Gbps链路, 15 ms 端到端传播延迟, 1KB 分组: T transmit – = 10/pkt L (packet length in bits) 8×2 = R (transmission rate, bps) 10^9 b/sec 8 us U sender: 利用率 – 发送方忙于发送数据的时间与发送时间之比 U sender = L/R RTT + L / R = .008 30.008 = 0.00027 – microsec onds 约每30ms可以发送1KB 分组 -> 每秒约33kB、即约0.26Mbps,而链路带 – 宽是 1 Gbps 后果:网络协议限制了物理资源的使用! 管道化 • • • • • 基本思想是允许发送方在阻塞(wait_for_event)之前发送w帧, w>1 w的取值与带宽时延积有关。带宽R为Xbps,时延为Ys, 那么带宽时延积为XYb,即时延期间发送方可以发送的数 据量,或者发送方填满链路所需要的数据量 把链路看作管道,则带宽时延积说明了管道的容量 管道化:在链路上发送多帧,使得链路上的数据量逼近管 道容量 管道化问题:在一个很长的帧流中,某一帧被损坏或者丢 失,接收方该如何损坏帧之后到达的正确帧呢? Go Back N && 选择重传 回退n帧 接收方丢弃错误帧之后的所有 帧 发送方在没有被确认的帧超时 后,退回该帧,重新发送 选择重传 接收方缓存错误帧之后的正 确帧;发送方在没有被确认 的帧超时后重新发送该帧 使用NAK提高性能 检测到错误时,接收方主动 向发送方发送NAK,激发重 传操作 管道化与错误回复 (a) 接收窗口大小为1. (b) 接收窗口尺寸较大. 使用 Go Back N的滑窗协议 • • • 双向数据流 信道会损坏帧,丢失帧 网络层希望发送分组时,需要引发network_layer_ready事件; 链路层使用enable_network_layer和disable_network_layer来 阻止链路层引发ready事件 使用 Go Back N的 滑窗协议 用于检查b是否在 窗口 [a,c)内部 捎带确认发送数据 作为GBN接收方, 当期望接收的帧是 frame_expected时, 意味着刚接收到 frame_expected-1 这一帧 没有接收到任何帧时, 使用MAX_SEQ Continued Sliding Window Protocol Using Go Back N ack_expected指向发送方发送出去但没有被确 认的第一个帧 next_frame_to_send指向发送方发送下一帧 时使用的帧号 所以[ack_expected, next_frame_to_send) 表示发送方的发送窗口 nbuffered在发送一帧以后增加1,在正确接收 到一帧的ack后减少1,所以指明了已经发送但 是没有被确认的帧的数量,说明了窗口大小 frame_expected接收方期望接收的帧,在 GBN中,接收方按序接收,所以 frame_expected帧左侧的帧恰好是接收到需 要ACK的帧 Continued Sliding Window Protocol Using Go Back N 发 送 接 收 Continued Sliding Window Protocol Using Go Back N 发送方接收到 ack,滚动窗口 超 时 发 送 关于nbuffered大小 Assume MAX_SEQ=7 • nbuffered=8 • • • • • 0…7 0…7 0…7 … 0…7 Assume MAX_SEQ=7 • nbuffered=7 Ack0 Ack0 Ack1 … … ACK5 ACK7 ACK7 • • • • • 0…6 7…5 6…4 … x…y ACK6 ACK6 关于定时器 用软件来模拟多个定时器 三个超时事件分别在 10:00:00.5 10:00:00.5+00:00:00.8 10:00:00.5+00:00:00.8+00:00:00.6 缓存接收到的失序帧 • 线路质量比较差,就不应该把正确的帧抛弃,而应该利用 起来 选择重传: 序列号与窗口大小 a)例: b)序列号: 0, 1, 2, 3 c)窗口大小=3 d)接收方区分不了到底是窗 口大小只有3个还是序列号 小于等于3! e)接收方会不正确的把冗余 数据作为新的数据发送给上 层 f)Q: 序列号大小与窗口大小 的关系是什么? (MAX_SEQ+1)/2 选择重传带来的。。。 • • 接收方缓存区大小:显然应该与窗口大小一致 定时器 • • • • 数量:发送方缓存区的数量 间隔:紧一点,发送方较快超时 帧号:确定帧号较复杂,协议中假设为oldest_frame 辅助定时器 • • • • 接收方没有即时的反向流量时,辅助定时器超时激发ACK 发送方数据重传之前,接收方应该优先超时,然后主动发送ACK 帧 接收方在接收正确到达的帧时,启动辅助定时器 否定确认 • • 接收方接收到受损帧 接收方接收到的帧不是期望的帧,并且该期望的帧的NAK没有发 送过 A Sliding Window Protocol Using Selective Repeat 与协议5 含义相同 可以发送 数据帧和 nak帧 Continued A Sliding Window Protocol Using Selective Repeat (2) 三个缓存对应输 入输出窗口和到 每个缓存是否有 数据的指示 窗口上限 Continued A Sliding Window Protocol Using Selective Repeat (3) 指示将要发送的帧的序列号 发送方 怀疑有错,发送nak,不然准备 接收下来,先启动辅助定时器 接收方 当期望的帧到了 以后,期望目标 转移,需要重设 no_nak等与期望 帧相关的变量 是否在接收窗 口内?是则缓 存下来,并尝 试递交网络层 Continued A Sliding Window Protocol Using Selective Repeat (4) 发送方 滚动窗口 注意到发送方发送时ack是 frame_expected-1,此时 还原为frame_expected 协议验证 • 有限状态机模型 • Petri 网模型 有限状态机 • • • • • • • 发送方或者接收方在任意时刻总是处于某种状态 有限状态机是协议分析所常用的工具 描述等待方协议时,其主要状态为等待0或者1帧 描述整个发送方、接收方、信道所构成的系统的协议时, 系统的主要状态为各个组成部分主要状态的合理组合 状态转换指从一种状态到达另外一种状态,通常时事件触 发 初始状态即系统开始运行时,或者某个起始时刻系统所具 有的状态 从初始状态开始,经过状态转换,分析所有可能达到的状 态和不可能达到的状态称为可达性分析。可达性分析是分 析协议正确性的基本技术 Finite State Machined Models • • (a) 协议3的状态图. (b) 转换(变迁、跃迁). SRC: Source Receive Channel Petri 网 • Petri网具有四个基本元素: • • • • • 库所Place、变迁transition、弧arc、标记token 所有可能的状态由Place表示,在图中用圆圈表示 系统当前所处的状态由token表示,图中为粗黑点 转换用水平或者垂直的线表示,基本上可以理解为瞬时态 arc是从库所到转换的输入弧,或者转换到库所的输出弧 下图为典型的包含两个库所和两个转换的Petri网. Petri Net Models (2) 初始态: S等待ACK0,0帧在C 上,R等待接收0 可能激活的转换:2,5, 10 Case1:超时则2激活, 发送方重发0帧,依旧 在等待ACK0状态,信 道接收到0帧,依旧在0 帧在C上的状态 Case2:接收方顺利接 收0帧则10激活,接收 方发送ACK,进入等待 1帧状态,信道进入 ACK在C状态,发送方 状态不变,但此时1可 能激活 协议3的Petri网描述 SRC的状态分别描述 Example Data Link Protocols • HDLC – High-Level Data Link Control • The Data Link Layer in the Internet High-Level Data Link Control Frame format for bit-oriented protocols. 序列号、确认等 成帧 检错、纠错 成帧 High-Level Data Link Control (2) 不同类型帧的控制域 (a) 信息帧(数据帧). (b) 管理帧:确认帧、NAK帧(GBN)、选择重 传.等 (c) 控制或者提供不可靠连接. The Data Link Layer in the Internet 通过调制解调器拨号上网的点到点链路. PPP – Point to Point Protocol The PPP full frame format for unnumbered mode operation. •成帧 Flag(面向字符) •错误检测(校验和域) •序列号、确认(控制域,默认不提供可靠传输) •额外的: •NCP:可以协商承载的协议(IP,IPX等网络层协议或者其它协议) •LCP:用于启动线路、测试线路,协商参数、关闭连接 PPP – LCP 链路启动到关闭的简化状态图P203 PPP – Point to Point Protocol (3) 不同类型的LCP帧用于PPP所设计的目标,例如协商、测试、 管理连接等。其中协商机制是PPP的特色之一 思考 a) b) c) 链路层如何成帧 CRC校验如何工作 可靠数据传输都需要在终端设置哪些变量,各有什么作用?