计算机网络笔记03:数据链路层
本文是对《王道计算机网络》第三章视频的笔记总结归档。
基本概念与功能概述
数据链路层负责通过一条链路从一个结点向据报。另一个物理链路直接相连的相邻结点传送数据报。
- 结点:主机、路由器
- 链路:网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。
- 数据链路:网络中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构成数据链路。
- 帧:链路层的协议数据单元,封装网络层数据报。
数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
功能:
- 为网络层提供服务
- 无确认无连接服务 常用于实时通信(要求误码率较低)
- 有确认无连接服务 常用于无线通信(容许高误码率信道)
- 有确认面向连接服务
注:有连接一定有确认!
- 链路管理 即连接的建立、维持、释放(用于面向连接的服务)
- 组帧
- 流量控制
- 差错控制
- 位错
- 帧错
封装成帧
封装成帧就是在一段数据的前后部分添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
首部和尾部包含许多的控制信息,其中帧定界符起到了帧定界(确定帧的界限)的重要作用。
帧同步:接收方应当能从接收到的二进制比特流中区分出帧的起始和终止。
组帧的四种方法:
- 字符计数法
- 字符(节)填充法
- 零比特填充法
- 违规编码法

透明传输
透明传输是指不管所传数据是什么样的比特组合,都应当能够在链路上传送。
这里的“透明”是指透明传输过程对外界透明。也就是说,传送网络不管传输的业务如何,只负责将需要传送的业务传送到目的节点,同时保证传输的质量即可,不需要自行处理传输的业务。
当所传数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,使收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。
字符计数法
帧首部使用一个计数字段(位于帧的第一个字节,8位)来标明帧内字符数。

缺点:长度信息只保存在一个位置,无法察觉错误。
字符填充法

在字符填充法中,采用特殊的字符(字节)标记帧的开始(SOH)和帧的结束(EOT)。但如果帧的数据部分也出现了SOH、EOT的字节数据,就需要利用转义字符加以区分。具体做法是:
- 在数据部分的特殊字符(SOH、EOT、ESC)前面填充一个转义字符ESC【注意若数据中存在ESC本身,前面也要再填充一个ESC】
- 发送方在封装帧时,进行扫描,扫描到SOH、EOT、ESC(转义字符)时在其前面添加转义字符,以区分,告诉接受方这个和特殊字符相同的字符是数据,当然这些约定由双方之间的协议完成

- 当传送的帧是由文本文件组成时(文本文件的字符都是从键盘上输入的,都是ASCII码)。不管从键盘上输入什么字符都可以放在帧里传过去,即透明传输。
- 当传送的帧是由非ASCII码的文本文件组成时(二进制代码的程序或图像等),就要采用字符填充方法实现透明传输。
零比特填充法
类似于字符填充法,但SOH和EOT均设置为01111110
(中间是连续的6个1),且不采用转义的设计。为了防止数据中出现01111110
,需要采用如下操作阻止连续的6个1出现:
操作:“五个1一个0”
- 在发送端,扫描整个信息字段,只要连续5个1,就在其后立即填入1个0。
- 在接收端收到一个帧时,先找到标志字段确定边界,再用硬件对数据比特流进行扫描。发现连续5个1时,就把后面的0删除。
这样,在传送的比特流中就可以传送任意比特组合,而不会引起对帧边界的判断错误,保证了透明传输。
违规编码法
物理层采用曼彻斯特编码时,一个码元内只有两种状态:高-低、低-高。因此,可以额外“违规地”加入低-低、高-高的码元来定界帧的起始和终止。
常用的帧同步法
由于字节计数法中计数字段的脆弱性(其值若有差错将导致灾难性后果)及字符填充实现上的复杂性和不兼容性,目前较普遍使用的帧同步法是零比特填充法和违规编码法。
差错控制
概括来说,传输中的差错都是由于噪声引起的。
- 全局性:由于线路本身电气特性所产生的随机噪声(热噪声),是信道固有的,随机存在的。 解决办法:提高信噪比来减少或避免干扰。(对传感器下手)
- 局部性:外界特定的短暂原因所造成的冲击噪声,是产生差错的主要原因。 解决办法:通常利用编码技术来解决。
位错
检错编码
重传帧
纠错编码
帧错
定时器、编号机制
滑动窗口
实现流量控制、可靠传输