一、数据链路层的概述
- 数据链路层在网络体系结构中所处的地位
- 链路:就是从一个节点到相邻结点的一段物理线路,而中间没有任何其他的交换结点。
- 数据链路:是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路。
- 数据链路层以帧为单位进行传输和处理数据。
数据链路层的三个重要问题
二、封装成帧
- 封装成帧是指数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
- 帧头和帧尾包含着重要的信息。
- 帧头和帧尾的作用就是帧定界。
- 透明传输:是指数据链路层对上层交互的传输数据没有任何限制,就好像数据链路层不存在一样。
- 面向字节的物理链路使用字节填充(字符填充)的方法实现透明传输。
- 面向比特的物理链路层使用比特填充的方法实现透明传输。
- 为了提高帧的效率,应当使得帧的数据部分的长度尽可能大些。
- 考虑到差错控制等多种因素,每一层数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU(Maximum Transfer Unit)。
练习:
三、差错检测
- 实际的通信链路都是不理想的,比特在传输的过程中可能会产生差错:1可能会变成0, 0也可能变成1.这称之为比特差错。
- 误码率:在一段时间内,传输错误的比特占所传输比特总数的比率称之为误码率。
- 使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。
奇偶校验
- 在待发送的数据后面添加1位奇偶校验位,使得整个数据(包括)所添加的校验位在内)中“1”的个数为奇数(奇校验)或者偶数(偶校验)。
- 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码。
- 如果有偶数个位发生误码,则奇偶性不发生变化,不能检测出误码(漏检)。
循环冗余校验CRC(Cycle Redundancy Check)
- 收发双方约定好一个生成多项式G(x)。
- 发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到传输数据的后面一起传输。
- 接收方通过生成多项式阿里计算收到的数据是否产生了误码。
练习1:
练习2:
注意:
- 检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
- 要想纠正传输中的错误,可以使用冗余信息更多的纠错码向前纠错,但纠错码的开销比较大,在计算机网络中较少使用。
- 循环冗余校验CRC有很好的检错能力(漏检率非常低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛用于数据链路层。
四、可靠传输的基本概念
不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做。
- 可靠传输服务:想办法实现
- 发送端发送什么,接收端就收到什么。
- 一般情况下,有限链路的误码率比较低,为了减少开销,并不要求数据链路层向上层提供服务可靠传输,即使出现了误码,可靠传输的问题由其上层处理。
- 无线链路受到干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务。
- 使用广播信道的数据链路层
比特差错只是传输差错中的一种,从整个计算机网络体系结构来看,传输差错还包括分组丢失,分组失序,以及分组重复。
- 分组丢失、分组失序、以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在上层。
- 可靠的传输服务并不仅局限于数据链路层,其他各层均可实现可靠传输。
零基础带你学习计算机网络复习—(五)(2)https://developer.aliyun.com/article/1383330