计算机网络(数据链路层、帧的概念、透明传输、差错检测、数据链路层可靠传输协议、滑动窗口、解决发送帧出错的协议)

数据链路层

数据链路层的功能
为网络层提供服务:

  • 链路管理 :数据链路的建立、维持和释放。
  • 寻址:保证每一帧都能正确到达目的站。

保证数据传输的有效、可靠:

  • 帧定界:将物理层的比特封装成帧,确定帧的开始和结束。
  • 透明传输 :指不管数据是什么样的比特组合,都应当能在链路上传输。
  • 差错检测:能对物理信道传输的比特流检测出差错。
  • 流量控制:控制发送方的发送数据速率使接收方来得及接收。

帧的概念

链路和帧
链路(物理链路)(link)是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。
一条链路只是一条通路的一个组成部分。
在这里插入图片描述

数据链路(逻辑链路)(data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。
一般的适配器都包括了数据链路层和物理层这两层的功能。

数据链路层传送的是帧
常常在两个对等的数据链路层之间画出一个数字管道,而在这条数字管道上传输的数据单位是帧。
在这里插入图片描述
帧的封装(帧定界)
封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。确定帧的界限。
首部和尾部的一个重要作用就是进行帧定界。
在这里插入图片描述
常用成帧方法
1.字节/字符填充的定界符法
(让每一帧用一些特殊的字节作为开始和结束标志。)
2.比特填充的标志法(也称零比特填充法)

透明传输

字节填充法
在这里插入图片描述
如果数据部分出现EOF,就会出现问题
在这里插入图片描述
解决方案:
发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是 1B)。
接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
如果转义字符也出现数据当中,那么应在转义字符前面插入一个转义字符。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
在这里插入图片描述
零比特填充
以01111110作为一帧的开始和结束标志F字段
在发送端,只要发现有 5 个连续 1,则立即填入一个 0。
接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。
在这里插入图片描述

差错检测

出错情况:在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1。帧(包括发送帧和响应帧)出错或者帧(包括发送帧和响应帧)丢失。

误码率:在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate)。为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。

差错检测编码分类
纠错码:前向纠错技术:发现错误,从错误中恢复出正确

  • 纠错码需要较多的冗余位,信道利用率不高。
  • 适用无线网络

检错码: 只能发现错误,不能从错误中恢复,但可采用重传。

  • 适用局域网
  • 循环冗余码(CRC)。

海明码
海明距离
两个码字(codeword)的海明距离 : 两个码字之间不同位的数,也就是异或(非进位加法)的结果中,1的个数。
例: 10001001 和10110001 的海明距离为?

# 非进位加法(二进制):1+1=0,1+0=1,0+1=1,0+0=0

	1 0 0 0 1 0 0 1
+	1 0 1 1 0 0 0 1
-------------------------
	0 0 1 1 1 0 0 0
	
# 1 的个数为3

解析:10001001 和10110001 的海明距离为3

海明距离与检错的关系
海明距离为d+1的编码能检测出d位差错

奇偶校验码
校验位的值取“0”还是“1”,取决于整个码字的总的“1” 的个数。(奇数还是偶数)

原理:如果是奇校验加上校验位后,编码中1的个数为奇数个。如果是偶校验加上校验位后,编码中1的个数为偶数个。

例: Data: 1011010(7位原码)
Even: 1011010 0 (7 + 1位 偶校验)
Odd: 1011010 1 (7 + 1位 奇校验)

海明距离与纠错的关系
海明距离为2d+1的编码,能纠正d位差错。
如果一个码字有d位发生差错,距离原来的码字距离最近的可以直接恢复为该码。
当接收到码字后,先比对是否合法,如果不合法,则恢复为海明距离最短的合法码字
例:
一个系统有4个合法码字: 0000000000, 0000011111, 1111100000 和 1111111111
码字之间最短海明距离是 5=2*2+1,所以可纠正2位错误
例:发送: 0000011111
接收: 0000000111(不合法,海明距离依次为[])
收方纠正后: 0000011111
练习:发送:0000000000
接收: 0000000111
收方纠正后: 0000011111

纠1位错,需要多少位冗余位?
要传输的数据(原码字)是 m 位,冗余位 r ,总长度 n
在这里插入图片描述
海明纠错码
每一个码字从左到右编号,最左边为第1位
校验位和数据位
凡编号为2的乘幂的位是校验位,如1、2、4、8、16、…
其余是数据位,如3、5、6、7、9、…
每一个校验位设置根据:包括自己在内的一些位的集合的奇偶值(奇数或偶数)。
计算过程移步:https://blog.csdn.net/lycb_gz/article/details/8214961

纠1位错的海明码的基本方法
发送方:根据校验集合填充校验位。
接收方:根据校验集合判定校验位是否出错,出错的位编号累加到累加器上,所有的校验位都检查完成后,通过读取累加器的值来确定码字中出错的那一位的编号。

循环冗余检验 CRC
循环冗余检验的原理
信息位:发送端要发送的数据
冗余位:发送端在向信道发送信息位之前,先按照某种关系加上一定的冗余位
发送与接收的过程:

  • 发送时:信息位+冗余位构成码字发送;
  • 接收时:收到码字后查看信息位和冗余位,并检查它们之间的关系(校验过程),以发现传输过程中是否有差错发生。

CRC码又称为多项式码。任何一个由二进制数位串组成的代码都可以和一个只含有0和1两个系数的多项式建立一一对应的关系。
长度为最高次幂+1
在这里插入图片描述
例如:
假设系统使用的生成多项式为G(x) = X4+X+1 (10011)
要发送的码为1101011011(长度为10)
对应的多项式为X9+X8+X6+X4+X3+X+1,设为 M(x)

首先将发送码字的多项式乘上生成多项式的最大阶:
T(x) = X4 M(X)

在这里插入图片描述
乘上多少阶等于向左移动多少位
再将移位后的码字按照(模2运算法则)计算如果有余数,则将码字减去余数
最后得到的码字就是可以发送的码字
在这里插入图片描述
当这个码字到达接收方时:
如CRC码在接收端能被10011整除,则说明接收正确。
在这里插入图片描述

数据链路层可靠传输协议

停止等待协议(肯定确认重传请求ARQ(也叫PAR))
每次发送帧的时候都会启动一个定时器
在这里插入图片描述
注意:
在发送完一个帧后,必须暂时保留已发送的帧的副本。
发送帧和确认帧都必须进行编号。
超时计时器的重传时间应当比数据在传输的平均往返时间更长一些。
在这里插入图片描述

停止等待协议的优点是简单,但缺点是信道利用率太低。

信道利用率计算公式:
RTT(来回时间)TD (发送数据时间) TA(接收数据时间)
在这里插入图片描述
如果忽略处理时间:假设
信道传输速率是: b bps
每帧的大小是: k bits
来回时间是: R sec
则信道的利用率是:k/(k + bR)
如何优化?
使用滑动窗口技术

滑动窗口(连续 ARQ 协议)

发送方有一个发送窗口,存放依据发送未被确认的数据,当数据确认后,滑动到下一个数据
接收方有一个接收窗口,存放期望接收的数据,当期望的数据接收后、滑动到下一个期望接收的数据
在这里插入图片描述
使用滑动窗口技术,批量发送数据,就是发送方可以利用等待接收方的确认数据的时间,继续发送数据直到接收到接收方发送的确认数据,再这段时间里发送的数据称为一个窗口。
在这里插入图片描述
发送过程图解:
在这里插入图片描述
发送方可连续发送多个帧,不必每发完一个帧就停顿下来等待对方的确认。
由于信道上一直有数据不间断地传送,这种传输方式可获得很高的信道利用率。

如何计算最大的窗口数量?
设窗口数量为 W
假设信道的传输利用率达到100%,W * k /(k + bR)= 1
即可得到W的值(b为传输速率(带宽),R 为RTT往返时间,k为每个数据包bit大小)

还有一种计算W值得方法,也是信道利用率 100%:
W = 2 * 时延带宽积 + 1

但是利用率100 % 一般不可能达到。实际的W值会比计算出来的W值小

累积确认
接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个帧发送确认,这样就表示:到这个帧为止的所有帧都已正确收到了。

小结
滑窗技术可以批量收发数据,提高了信道利用率。
发送窗口对应着已经发送但还未被确认的帧。

  • 滑动条件:收到了帧的确认。

接收窗口对应着期待接收的帧。

  • 滑动条件:收到了期待接收的帧。

窗口数的确认跟带宽-延迟积正相关。

解决发送帧出错的协议

Go-back-N(回退 N帧)
如果发送方发送了前 5 个分组,而中间的第 3 个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。
这就叫做 Go-back-N(回退 N),表示需要再退回来重传已发送过的 N 个分组。

选择重传协议
连续发送W个数据帧,其中有一帧出错,但其后续帧被成功发送
接收窗口存储差错帧后继的所有正确帧
发送方只重传差错帧
接收方接收重传帧,按正确顺序将分组提交网络层

发布了68 篇原创文章 · 获赞 12 · 访问量 5186

猜你喜欢

转载自blog.csdn.net/qq_40963076/article/details/105530527