数据链路层(比特流成帧方法、纠错和检错、流量控制方法)

数据链路层功能:
  1. 向网络层提供一个定义良好的服务接口。即将源机器中来自网络层的数据传输到目标机器的网络层。数据链路层提供以下三个服务:(1)无确认的无连接服务:LANs;(2)有确认的无连接服务:Wireless Systems;(3)有确认的有连接服务:WANs;
  2. 差错控制,处理传输错误;
  3. 流量控制(限制发送方),调节数据流,确保慢速的一方不会被快速的发送方淹没。

数据链路层从网络层获得数据包(将这些数据包封装成帧(frame)以便传输,每个帧包含帧头、有效载荷、帧尾),数据链路层负责将数据包传输到目标机器,接受层将接收到的数据包传输给其网络层。

拆分比特流成帧4种方法:

(1)字节计数法:利用头部中的一个字段来标识该帧中的字符数。

(2)标志字节填充:让每个帧用特殊字节(Flag)作为开始和结束。(考虑了错误之后的重新同步问题:两个连续的flag)

(3)标志比特填充:用一段标志比特如:01111110,标志着每一个帧的开始与结束。连续发送多个帧时,用一个标志字段,即表示帧的开始,又表示帧的结束。

为避免其他字段中出现“01111110”:发送方除标志位外,连续发送5个“1”后自动插入“0”;接收方连续收到5个“1”后,若其后为“0”,则自动去掉该“0”,若其后为“1”,则检查下一位,为“0”则是标志位,为“1”说明出错。

相比于标志字节填充的优点:标志字节填充意味着帧只能由8比特的字节组成,而标志比特填充支持帧以任意大小的单元组成。

(4)使用“编码违法”(冗余比特)区分帧边界:优点是不用填充数据。

纠错和检错:

海明距离:海明距离指两个帧同样位置上,取值不同的位置数目。例: 10001001和10110001海明距离是3。

为检测至多k位错,充要条件是任意两个帧的海明距离大于等于k + 1。
为纠正至多k位错,充要条件是任意两个帧的海明距离大于等于2k + 1。

检错码:奇偶校验,比特流的尾部加上奇偶校验位(奇校验:加了校验位后1的个数为奇数),可检测出单个错误,帧之间海明距离至少为2。

海明码纠错:第2k (k = 0, 1, 2…)位为校验位。只能纠正单个错误。(数据位中1的个数为偶数个,则校验位为0,奇数个则校验位为1)

S:发送的字符串
R:收到的字符串
C:改正后的校验位(第1位和第8位出错,纠正须第8 + 1位取反)
F:纠错后的字符串

m个报文位, r个校验位, 纠单个错误。
n = m + r,2m个合法报文,每个都对应有n个非法的码字,他们与正确报文的距离为1。每个合法报文都要求n + 1个位模式,专门供它使用。
(n + 1) × 2m 应该小于等于2n,即:(m + r + 1) ≤ 2r,意义:给定m的情况下,纠单个错误需要的校验位数目下界。

流量控制:对链路上的帧的发送速率的控制,以使接收方有足够的缓存空间来接受每个帧。基本方法是由接收方控制发送方发送数据的速率:停等协议和滑动窗口协议。
自动重传请求(ARQ):
(1)停止-等待协议:发送窗口 = 1,接受窗口 = 1
(2)回退N帧(GBN)协议:发送窗口 > 1,接受窗口 = 1
(3)选择重传(SR)协议:发送窗口 > 1,接受窗口 > 1

发送窗口:允许发送的帧集合。(一个帧从发送窗口中删除掉当且仅当它已被确认)
接收窗口:允许接收的帧集合。

捎带确认:暂时延缓确认以便将确认信息搭载在下一个出境数据帧上。
好处:提高通信效率,单独帧的开销大,捎带只需占据帧头中的几位,发送的帧越少,“帧到达”中断也越少。

滑动窗口协议(全双工协议):不是单帧发送,而是可以一次发送若干帧。若双方窗口大小为1,它就是停等协议。

停等协议:

发送窗口 = 1,接受窗口 = 1,一个受损帧一直在接收窗口中,除非已正确收到。此外,第N个帧一直在窗口里除非第N - 1个帧被收到。

(a)初始化,接受窗口等待接受帧1
(b)发送帧1后,帧1在发送方的缓存区
(c)接受帧1后,接受窗口+1
(d)收到帧1的确认帧后,发送窗口下边界+1,帧1被删除

接收方收到帧后,首先核对是否为预期帧号(frame_expected),如果是的,则接收并frame_expected + 1,即移动接收窗口。

发送端收到应答帧,核对响应帧号next_frame_to_send,核对无误后,从网络层取新的帧,并执行next_frame_to_send + 1, 即移动发送窗口。如核对帧号不正确,则不移动窗口。

(seq(与数据编号一致),ack(确认已经收到的数据的seq),data)
(a) 正常传输;(b) A和B同时发起通信时的错误(有帧重复传送)

假设信道的容量是B位/秒,帧长为L位,往返传播时间为R秒(RTT),则传输一帧时间是L/B秒;在停等协议中(窗口大小为1),发送方有L/B秒是忙的,而R秒是空歇的;所以:
线 路 利 用 率 = 1 ∗ L / B ( L / B ) + R = 1 ∗ L L + B R 线路利用率=\frac{1*L/B}{(L/B)+R}=\frac{1*L}{L+BR} 线=(L/B)+R1L/B=L+BR1L
若增加滑动窗口大小(W):
线 路 利 用 率 = W ∗ L / B ( L / B ) + R = W ∗ L L + B R 线路利用率=\frac{W*L/B}{(L/B)+R}=\frac{W*L}{L+BR} 线=(L/B)+RWL/B=L+BRWL
W = 1 + B R L W=1+\frac{BR}{L} W=1+LBR时,利用率为100%。

回退n帧协议
发送方接收方
正常发送:对帧编号,待确认帧缓存收到每个期望的正确帧都上交网络层、回送确认
收到确认:释放确认帧所占缓存区,滑动发送窗口收到出错帧或非期望帧:丢弃,回送对接收的最后正确帧的确认
差错帧超时时间到:回退到超时帧(出错帧),顺序重传最后被确认帧以后的缓存区中缓存的帧收到重传帧(即为一个期望的正确帧)

(1)发送方一直保存着未被确认的帧。
(2)累计确认:n号帧的确认到达时,暗含一个意思:n - 1、n - 2……等n号帧之前的帧也被确认;当采用了累计确认,收到了n帧的确认,n帧之前的帧都可从缓存中删掉。
(3)该协议假设总是有反向的数据流量可以捎带确认。若没有这样的流量,确认报文不会被送出且发送允许上限帧后协议停止。(1位滑动窗口协议没有这样的要求,每次收到一帧就送回一帧,即便是刚刚已经送出了这一帧,但会无用重发,浪费带宽。)

未确认帧的最大数量是MAX_SEQ,而不是MAX_SEQ + 1(即发送方最大窗口尺寸等于序列号个数 - 1):如果为8则发送方无法判断第二批的8个帧是全部成功到达,还是全部丢失,因为是累计确认,这两种情况下,接收方都会发送针对7号帧的确认,但是发送方却无从分辨。

选择重传协议
发送方接收方
正常发送:对帧编号,待确认帧缓存正常接收:上交网络层、回送确认,滑动接收窗口
收到确认:释放确认帧所占缓存区,滑动发送窗口收到非期望的正确帧:缓存,回送对接收的最后正确帧的确认
差错帧超时时间到:重传缓存的最后被确认帧以后的那一帧收到重传帧:将缓存帧排序上交,回送确认,滑动接收窗口
否定确认NAK:加快出错帧的重传;对出错帧回送否定确认,使发方不再等到超时再重传。

滑动窗口长度W的选择(MAX_SEQ = 7):

(a)、(b) W = 7,新老窗口重叠 ;(c)、(d) W = 4,新老窗口不重叠

若全部丢失,重帧0被认为是正确帧提交,出现重复提交错误,错误原因是新老窗口重叠,解决办法:使新老窗口不重叠,此时0-3帧重传帧在接受窗口外,被拒绝:

W ≤ M A X _ S E Q + 1 2 W \leq \frac{MAX\_SEQ + 1}{2} W2MAX_SEQ+1

停等协议回退n帧协议选择重传协议
发送窗口 W 1 W_1 W1 0 ≤ W 1 ≤ 1 0\leq W_1\leq1 0W11 0 ≤ W 1 ≤ M A X _ S E Q 0\leq W_1\leq MAX\_SEQ 0W1MAX_SEQ 0 ≤ W 1 ≤ W 2 0\leq W_1\leq W_2 0W1W2
接收窗口 W 2 W_2 W2 W 2 = 1 W_2=1 W2=1 W 2 = 1 W_2=1 W2=1 W 2 = M A X _ S E Q + 1 2 W_2=\frac{MAX\_SEQ + 1}{2} W2=2MAX_SEQ+1
参考资料

《Computer Networks》(第5版)作者:Andrew S. Tanenbaum / David J. Wetherall

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值