文章目录
数据链路层
概述
链路(Link)
就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。
数据链路(Data Link)
是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
帧
数据链路层以帧为单位传输和处理数据。
点对点的数据链路层基本的三个问题
封装成帧
从网络层拿到数据单元时,数据单元已经被添加了运输层协议首部和网络层协议首部,数据链路层则对其加上帧头和帧尾使其成为帧
![image-20220920155423756](https://i-blog.csdnimg.cn/blog_migrate/4bd0dcec1b0fb39a33610789da96c7b9.png)
差错检测
接收方通过帧尾的FCS检错码和检错算法就可以判断传输过程中是否出现误码
可靠传输
当出现误码后接收方就会将该码丢弃,此时发送方会重新发送该数据,因此尽管误码是不能完全避兔的,但若能实现发送方发送什么,接收方就能收到什么,就称为实现了可靠传输。
广播信道的数据链路层
编址问题
主机c如何知道主机a发送的帧是给他的?
答:使用目的地址和源地址
![image-20220920160201797](https://i-blog.csdnimg.cn/blog_migrate/3a97903ebe58b979506a550a364e51bf.png)
封装成帧
封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
- 帧头和帧尾中包含有重要的控制信息。
- 帧头和帧尾的作用之一就是帧定界(判断物理层传输过来的bit流中从哪到哪是一个帧)。
透明传输
透明传输是指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
插入转义字符
如果传输数据中包含了帧定界符,就会导致帧定界出错,为了解决这个问题通常会在内容数据中包含帧定界符的数据之前插入转义字符(图中显示转义字符在后面是因为右侧主机是从右往左读取的),当接收方接收到转义字符时就知道接下来读取的数据可能是帧定界符并且将其作为数据并继续提取
![image-20220920160839138](https://i-blog.csdnimg.cn/blog_migrate/218a61d62de179ea08db1e2dd6151d4c.png)
零比特填充法
采用帧头和帧尾中的标志字段作为帧定界符,其值为01111110;
为了实现“透明传输”,采用“零比特填充法”(在内容数据中每5个连续1后面插入一个比特0,读取时在读取到5个1后默认删除下一个读取的0);
差错检测
- 实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能会变成0,而0也可能变成1。这称为比特差错。
- 在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER(Bit Error Rate)。
- 使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
奇偶校验码
在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数(奇校验)或偶数(偶校验)。
缺点:
如果产生了2位或2的倍数的误码,错误就检测不出来,现在一般不使用该校验方法
循环冗余码CRC
- 收发双方约定好一个生成多项式G(x);
- 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输;
- 接收方通过生成多项式来计算收到的数据是否产生了误码;
![image-20220920164845450](https://i-blog.csdnimg.cn/blog_migrate/5b6d63c13fd4484e79e6ce9239b8cbfe.png)
举例使用
除法并不是真正的除法,而是进行异或运算,而在补0时并不需要比除数大,只需要双方位数相同即可
![image-20220920165407687](https://i-blog.csdnimg.cn/blog_migrate/db33ec239fffcaf3e81e70641a8334c0.png)
判断结果
如果余数为0说明没有误码,如果余数不为0说明产生错误,如上图中余数为1说明产生了误码
注:检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用。
可靠传输
使用差错检测技术(例如循环冗余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是否产生了误码(比特错误)。而可靠传输就是就算出现了错误也要保证数据最终还是会被接收方正确接收
数据链路层向上层提供的服务类型
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做;
- 可靠传输服务:想办法实现发送端发送什么,接收端就收到什么。
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
传输差错
- 比特差错只是传输差错中的一种。
- 从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复。
可靠传输并不局限数据链路层
![image-20220920173709828](https://i-blog.csdnimg.cn/blog_migrate/23778444e5817ee0a2c51991e162fbeb.png)
可靠传输实现比较复杂,是否实现可靠传输按实际使用情况区别