📜  数据链路层中的成帧(1)

📅  最后修改于: 2023-12-03 15:10:20.944000             🧑  作者: Mango

数据链路层中的成帧

在计算机网络中,数据链路层是位于物理层和网络层之间的一层,主要任务是将网络层传输下来的数据分割成数据帧(Frame),并在数据帧中加上必要的控制信息以实现可靠传输。成帧是数据链路层中非常重要的一环,对于程序员来说也是必须了解的一部分。

什么是成帧

成帧(Framing)是指将数据分成一个个数据帧,以便于标识和传输。在数据链路层中,成帧是为了解决数据帧的分割和组装问题,是数据链路中最基本的功能之一。

数据链路层成帧的过程类似于图像处理中的裁剪和拼接,只不过这里的“裁剪”和“拼接”是基于字节而非像素的。成帧从数据链路层的角度看,就是在原数据前后插入标志、控制、校验等信息,形成成帧格式的过程。这些控制信息包括帧的起始位置、帧的结束位置、错误检测码等等。

为什么要进行成帧

成帧的主要目的是将要传输的数据分割成一个个的数据帧,以便于标识和传输。这是因为数据链路层所面对的物理介质都是以比特作为单位。如果直接将网络层的数据按比特进行传输,容易产生混淆和误传。而通过将数据划分成一个一个的数据帧,不仅有助于管理数据的传输顺序,还能够在一些较长的帧中间插入短帧,以保证数据的实时传输和及时校验。

另外,成帧还有以下几个作用:

  • 判断帧的边界:成帧可以标识一个完整数据帧的起点和终点,这使得接收方可以快速地将一个帧从数据流中剥离出来。

  • 添加错误检测码:现代网络架构中绝大部分都使用了成帧技术,这是因为成帧能够在帧的结尾处放置一些冗余码,以检测帧的传输是否存在错误,从而能够提高数据的可靠性。

成帧的过程

成帧过程可以分为三个步骤:首先,在数据报实体中加入一个帧起始分界符,表示一个帧的开始;接着,数据报实体中的数据按字节传输,并添加校验和等必要的信息;最后,在数据报实体中添加一个帧的结束分界符,表示一个帧的结束。

常用的成帧方法有以下几种:

字符计数法

字符计数法是一种非常简单和常见的成帧方法。对于每个数据帧,在开头加入一个特定的控制字符STX(Start of Text),表示一个帧的开始,随后传输帧长LEN,表示数据部分的长度(以字节为单位),然后传输数据部分,最后加上ETX(End of Text)表示一个帧的结束。

<STX> LEN Data <ETX>
字符填充法

字符填充法采用字符填充的方式来封装数据,即在数据部分中遇到特定控制字符时,在这些字符前面插入一个转义字符,以避免这些字符被误认为是控制帧的标志。这种方法要求数据帧中不能出现特定的控制帧标志字符。

常用的字符填充方法包括字符填充法和比特填充法。其中,字符填充法是在字符层面上进行填充,比特填充法则在比特层面上进行填充。

比特填充法

比特填充法(Bit stuffing)是一种将信息字节转换成比特流的方法,即在数据部分中遇到连续的字节为一的控制字节时,在这些字节之间插入一个零比特,以避免控制字节被误认为是特定的控制帧标志。

比特填充法中,用连续的 0x00111111 来代表原本的数据中出现了01011这个5比特的控制字节。同理,不出现011111,也不出现011110,因为这两个字节表示着一个帧的起始和结束,在数据的过程中使用它们会让接收方混淆,造成巨大的错误。

常用的比特填充方法包括字节填充和比特填充。其中,字节填充在比特层面上进行填充,比特填充则在比特层面上进行填充。

总结

成帧是数据链路层中非常重要的一环,对于程序员来说也是必须了解的一部分。成帧能够将需要传输的数据划分成一个个的数据帧,以便于标识和传输,并且还能够在帧中间插入短帧,以保证数据的实时传输和及时校验。常用的成帧方法包括字符计数法、字符填充法和比特填充法,在实际应用中应根据实际需求进行选择。