【计算机网络】—— 封装成帧 & 透明传输
目录
一、数据链路层功能概述
数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。
数据链路层的功能就是将网络层的数据报进行加工和处理,然后在传输到物理层。
二、封装成帧
封装成帧的过程就是把网络层的IP数据报加上帧首部和帧尾部形成链路层的数据传输单元,也就是形成帧。IP数据报成为帧的数据部分。
封装成帧就是在一段数据的前后部分添加首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
首部和尾部包含许多的控制信息,他们的一个重要作用:帧定界(确定帧的界限);
帧的开始和帧的结束由定界符确定,发送从帧开始(帧首部)开始逐个比特发送,直到发送到帧尾部。
接收端从帧首部判断出来发送了一个帧数据,接收端开始接收数据,直到发现帧尾部的定界符;
帧同步:接收方应当能从接收到的二进制比特流中区分出帧的起始和终止;
组帧是在发送端进行的,帧同步是在接收端进行的;
帧首部+帧尾部+帧的数据部分的总长度是数据链路层的帧长,为了提高帧的传输效率,应该使帧的数据部分尽可能大于首部和尾部。链路层的协议规定了帧的数据部分的最大传送单元MTU,在不同协议中MTU的值不同。在传输过程中,帧的数据部分的长度一定小于等于最大传送单元MTU。
透明传输
透明传输是指不管所传输的数据是什么样的比特组合,都应当能够在链路上传送。因此,链路层就“看不见”有什么妨碍数据传输的东西。
当所传数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,使接收方不会将这样的数据误认为是某种控制信息,这样才能保证数据链路层的传输是透明的。
组帧的四种方法
- 字符计数法:
帧首部使用一个计数字段(第一个字节,八位)来标注帧内字符数。
痛点:鸡蛋装在一个篮子里了。比如第一个字节从5变成4,这样第一个帧的结束位就发生错误了。接着,第二个帧、第三个帧等往下的所有帧都发生了错误。
- 字符(节)填充法:
SOH是帧首部的第一个标记开始的字节,EOT是帧尾部的结束字节,有了这两个字节,接收端就能够判断帧接收的开始位置和结束位置。
SOH和EOT对应的比特组合可以根据协议的不同而不同,在接收端,看到【00000001】比特组合就知道帧开始,看到【00000100】就知道帧结束,这样接收端就能接收到一个完整的帧。
当传输的帧是由文本文件组成时(文本文件的字符都是从键盘上输入的,都是ASCII码)。不管从键盘上输入什么字符都可以放在帧里传输过去,即透明传输。
当传输的帧是由非ASCII码的文本文件组成时(二进制代码的程序或图像等),这种情况下帧数据部分可能会出现SOH或者EOT这两个定界符对应的比特组合,就要采用字符填充方法实现透明传输。
假如帧中的原始数据如上所示,在数据部分出现很多控制字符,比如EOT、SOH。对于这样的原始数据,首先需要进行字符填充。字符填充的过程就是在这些控制信息的字符前面加上一个转义字符(一个八位的比特组合),填入这样的字节用于告诉接收端忽略其后侧的EOT等信息,直到接收端遇到真正的EOT结束字符。
填充完毕后,发送端开始发送数据。接收端接受数据,发现SOH即开始接收数据,当看到ESC,接收端理解ESC是为了帮助实现透明传输使用的,接着会把ESC移除,并正常接收其后侧的EOT,直到遇到真正的EOT,结束数据接收。
- 零比特填充法;
零比特填充法中,首部和尾部的标志符是一样的,都是【01111110】。在发送一连串比特数据的时候,如果数据中出现同样的【01111110】,零比特填充法通过每五个1填充一个0的方法来避免出现数据传输错误问题。
在发送端,发送端扫描整个信息字段,只要连续5个1,就立即填入1个0。
在接收端收到一个帧时,先找到标志字段确定边界,再用硬件对比特流进行扫描。发现连续5个1时,就把后面的0删除。
零比特填充法:保证了透明传输,在传送的比特流中可以传送任意比特组合,同时不会引起对帧边界的判断错误。
- 违规编码法;
在曼切斯特编码中,每一个比特对应的电频都是对应“高-低”或者“低-高”,不会出现“高-高”或者“低-低”这两种编码方式,因此这两种编码方式就是两种违规的编码方法。
因此可以使用“高-高”,“低-低”来定界帧的起始和终止。
由于字节计数法中Count字段的脆弱性(其值若有差错将导致灾难性后果)及字符填充实现上的复杂性和不兼容性,目前较为普遍使用的帧不同法是比特填充和违规编码法。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)