1 / 68

The Data Link Layer

The Data Link Layer. Chapter 3. 内容. 数据链路层设计要点 错误检测和纠正 基本数据链路协议 滑动窗口协议 协议验证 数据链路层协议示例. 数据链路层设计要点. 为网络层提供的服务 分帧 错误控制 流控. 数据链路层功能. 向网络层提供一个定义良好的接口 处理传输错误 调节数据流 确保慢速的接收方不会被快速的发送方淹没 分组和帧之间的关系. 为网络层提供的服务. (a) 虚拟通信过程 . (b) 实际通信过程. 无确认的无连接服务 有确认的无连接服务 有确认的面向连接服务 P156.

Download Presentation

The Data Link Layer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. The Data Link Layer Chapter 3

  2. 内容 • 数据链路层设计要点 • 错误检测和纠正 • 基本数据链路协议 • 滑动窗口协议 • 协议验证 • 数据链路层协议示例

  3. 数据链路层设计要点 • 为网络层提供的服务 • 分帧 • 错误控制 • 流控

  4. 数据链路层功能 • 向网络层提供一个定义良好的接口 • 处理传输错误 • 调节数据流 • 确保慢速的接收方不会被快速的发送方淹没 分组和帧之间的关系.

  5. 为网络层提供的服务 (a)虚拟通信过程. (b)实际通信过程. • 无确认的无连接服务 • 有确认的无连接服务 • 有确认的面向连接服务 • P156

  6. 示例:为网络层提供的服务 数据链路层协议的位置 3层看来,2层提供了某种连接服务

  7. 成帧 • 目标:把位流分解到离散的帧中 • 字符计数法 • 含字节填充的分界符法 • 含位填充的分界符法 • 物理层编码违例法

  8. 字符计数法成帧 字符流. (a)无错. (b)一位差错. 101111,计数值被破坏

  9. 含字节填充的分界符法成帧 (a)使用标志字节作为帧的开始和结束 (b)字节填充前后的4个字节序列例子 缺点是依赖于8位字符模式

  10. 含位填充的分界符法分帧 位填充 标志位模式为01111110,每5个1填充1个0 (a)原始数据. (b)线路上的数据. (c)删除填充之后存储在接收方存储器中的数据.

  11. 物理层编码违例法成帧 • 如果物理介质上的编码方法中包含冗余信息,可以使用 • 例: • +1表示高电平、-1表示低电平 • +1-1表示比特“1”;-1+1表示比特“0”,而+1+1和-1-1不表示数据,有可能用于帧分界 注:多种方法的联合使用可能会提高帧边界检测的速度

  12. 内容 • 数据链路层设计要点 • 错误检测和纠正 • 基本数据链路协议 • 滑动窗口协议 • 协议验证 • 数据链路层协议示例

  13. 错误检测和纠正 • 纠错码 • 检测码 突发错误:集中在某些比特位产生错误。 例如 1000×100位数据块,每一位错误概率0.001; 如果错误是孤立的,那么每个1000位数据块都可能有某1位发生错误; 如果错误每次发生都是连续的100位,那么这些错误可能只发生在1-2块数据块中,大部分数据块没有错误。

  14. 编码基础知识 • 汉明距离:两个码字中不相同的位的格式,设码字x,y,其汉明距离为w(xy),其中w(z)表示z比特串中1的个数 • 若x和y的汉明距离为d,则x至少需要d个错误位才会变成y。 • 所有可用码字之间最小的汉明距离称为最小汉明距离 • 一些结论: • 为了检测d位错误,需要d+1的最小汉明距离 • 为了纠正d位错误,需要2d+1的最小汉明距离

  15. 编码基础知识 • 奇偶校验码: • 数据后面增加1位奇偶位,奇偶位的取值保证码字中1的数目是偶数(偶校验)或者奇数(奇校验) • 例如1011010,偶校验时发送10110100,奇校验时发送10110101 • 奇偶校验编码方法汉明距离为2?可以检测单个错误 • 一种距离为5的编码方案 • A=0000000000 B=0000011111 C=1111100000 D=1111111111 • 可以纠正2个错误,例如0000000111会被纠正为B码字

  16. 纠错码之汉明码 考虑n位码字n=m+r 其中m位为报文,r 位为校验位。 r下界:m+r+12r 当m=7时,8  2r-r 可以计算r最小值4

  17. 汉明码手工计算 汉明码也能够纠正突发错误,只需要把传输的码字按照矩阵排列即可。 (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 3|6|7|10|11 5|6|7 9|10|11 0 0 1 0 m: 1 1 0 1 1 0 1 1 1 0 0 通常用于出错概率比较高的链路

  18. 检错码 • (7,4)汉明码可以纠正单个错误,可以检测2位错误(最小汉明距离为3) • 奇偶校验编码方法汉明距离为2,可以检测单个错误 • 为了增加突发性错误的检测概率,可以使用分组的奇偶校验码 • 可以纠正单个错误 • 是否能检测3位错误呢? • 码流A B…M-1 M • 坏块被接受每一列都有正确的奇偶位2-n

  19. 检错码 • 循环冗余校验码 • 一帧有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

  20. 检测码 多项式编码校验和的计算过程.

  21. 基本数据链路层协议 • 无限制的单工协议 • 单工的停-等协议 • 有噪声信道的单工协议

  22. 通用头文件-1 5种数据类型: 帧类型可以是数据、ACK帧、NAK帧 帧的序列号用于接收方检测重复的帧 ACK序列号指出了接收方刚接收到的帧的序列号 分组信息在数据帧时有效,包含网络层分组

  23. 通用头文件-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

  24. 无限制的单工协议 • 信道单向 • 信道不会损坏或者丢失帧 • 网络层始终就绪 • 接收方缓存空间无限 • 处理时间可以忽略

  25. 无限制的单工协议 发送数据 高层->低层 单向 接收数据 低层->高层

  26. 单工的停-等协议 • 信道半双工 • 信道不会损坏或者丢失帧 • 网络层始终就绪 • 接收方只能处理一帧,没有缓存和排队机制 • 处理时间不可忽略,发送方需要考虑接收方的处理时间

  27. 单工的停-等协议 需要等待 接收方响应 给发送方 响应

  28. 有噪声信道的单工协议 • 信道半双工 • 网络层始终就绪 • 信道会损坏和丢失帧 • 接收方只能处理一帧,没有缓存和排队机制 • 损坏和丢失帧:定时器 • 避免冗余:序列号 • 序列号的位数? • 接收方只需要判断一帧是新帧还是已经接收的帧

  29. 有重传的ACK协议-发送方

  30. 发送方 Wait for ACK0 Wait for ACK1 n=1 n=0 发送0帧 s.info=buffer; s.seq=n; to_phical_layer(&s) start_timer 正确接收了一帧 && 该帧是ACK0 正确接收了一帧 && 该帧是ACK1 stop_timer Inc(n) stop_timer Inc(n) 发送1帧 s.info=buffer; s.seq=n; to_phical_layer(&s) start_timer

  31. 有重传的ACK协议-接收方

  32. 接收方 等待 帧n=0 等待 帧n=1 接收到一帧&&帧序号为0 to_network_layer; Inc(n); 发送ACK0 接收到一帧&& 不是帧1 接收到一帧&& 不是帧0 发送ACK0 发送ACK1 接收到一帧&&帧序号为1 to_network_layer; Inc(n); 发送ACK1

  33. 滑动窗口协议 • 1位滑窗协议 • Go Back N • 选择重传

  34. 滑窗协议概述 • 全双工数据传输 • 两条数据单工信道 • 一条信道,数据帧和ACK帧混合,用帧头部信息区分不同帧 • 捎带确认:确认信息附在往外发送的数据帧上 • 需要增加定时器来决定是否使用捎带确认 • 滑动窗口协议 • 发送窗口 • 发送方已经发送但没有确认的帧,和允许发送的帧。窗口大小可能动态变化 • 接收窗口 • 接收方可以接受的帧

  35. 示例:窗口大小为1 序列号为3比特长. (a)初始时. (b)第一帧发送以后 (c)第一帧接收以后 (d)第一个确认帧收到以后.

  36. 1位滑窗协议-1 通常只有某一个数据链路层程序需要首先发送一帧,然后才进入循环 Continued 

  37. 1位滑窗协议-2 两个if条件,4种程序流程 更新buffer内容,不执行时buffer依旧是刚发送的帧

  38. 1位滑窗协议-3 (a)通常的情形. (b)双方并发地发送初始分组(进入循环之前,都发送了一帧) 向量含义是(seq, ack, 分组号);星号表示网络层接受了一个分组

  39. 停等协议的性能 • 考虑传播延迟,即考虑分组在路上的时间 • 使用停-等协议(窗口大小为1) • 例: 1 Gbps链路, 15 ms 端到端传播延迟, 1KB 分组: L (packet length in bits) 8×210/pkt T = =  8 us transmit R (transmission rate, bps) 10^9 b/sec • U sender: 利用率–发送方忙于发送数据的时间与发送时间之比 • 约每30ms可以发送1KB 分组 -> 每秒约33kB、即约0.26Mbps,而链路带宽是 1 Gbps • 后果:网络协议限制了物理资源的使用!

  40. 管道化 • 基本思想是允许发送方在阻塞(wait_for_event)之前发送w帧,w>1 • w的取值与带宽时延积有关。带宽R为Xbps,时延为Ys,那么带宽时延积为XYb,即时延期间发送方可以发送的数据量,或者发送方填满链路所需要的数据量 • 把链路看作管道,则带宽时延积说明了管道的容量 • 管道化:在链路上发送多帧,使得链路上的数据量逼近管道容量 • 管道化问题:在一个很长的帧流中,某一帧被损坏或者丢失,接收方该如何损坏帧之后到达的正确帧呢?

  41. Go Back N && 选择重传 回退n帧 接收方丢弃错误帧之后的所有帧 发送方在没有被确认的帧超时后,退回该帧,重新发送 管道化与错误回复 (a)接收窗口大小为1. (b)接收窗口尺寸较大. 选择重传 接收方缓存错误帧之后的正确帧;发送方在没有被确认的帧超时后重新发送该帧 使用NAK提高性能 检测到错误时,接收方主动向发送方发送NAK,激发重传操作

  42. 使用 Go Back N的滑窗协议 • 双向数据流 • 信道会损坏帧,丢失帧 • 网络层希望发送分组时,需要引发network_layer_ready事件;链路层使用enable_network_layer和disable_network_layer来阻止链路层引发ready事件

  43. 使用 Go Back N的滑窗协议 用于检查b是否在窗口 [a,c)内部 捎带确认发送数据 作为GBN接收方,当期望接收的帧是frame_expected时,意味着刚接收到frame_expected-1这一帧 没有接收到任何帧时,使用MAX_SEQ Continued 

  44. 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 

  45. Sliding Window Protocol Using Go Back N 发送 接收 Continued 

  46. Sliding Window Protocol Using Go Back N 发送方接收到ack,滚动窗口 超时发送

  47. 关于nbuffered大小 Assume MAX_SEQ=7 • nbuffered=8 • 0…7 • 0…7 • 0…7 • … • 0…7 Assume MAX_SEQ=7 • nbuffered=7 • 0…6 • 7…5 • 6…4 • … • x…y Ack0 … ACK5 ACK6 ACK6 Ack0 Ack1 … ACK7 ACK7

  48. 关于定时器 用软件来模拟多个定时器 三个超时事件分别在 10:00:00.5 10:00:00.5+00:00:00.8 10:00:00.5+00:00:00.8+00:00:00.6

  49. 缓存接收到的失序帧 • 线路质量比较差,就不应该把正确的帧抛弃,而应该利用起来

  50. 例: 序列号: 0, 1, 2, 3 窗口大小=3 接收方区分不了到底是窗口大小只有3个还是序列号小于等于3! 接收方会不正确的把冗余数据作为新的数据发送给上层 Q: 序列号大小与窗口大小的关系是什么? 选择重传:序列号与窗口大小 (MAX_SEQ+1)/2

More Related