封装成帧
什么是组帧?
是指把网络层的IP数据报加头加尾。数据报成为帧的数据部分。数据部分有一个最大传送单元MTU,即有传输数据上限。所组成的帧的长度就是帧长。
接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
首部和尾部包含许多的控制信息,他们的重要作用是:帧定界。(确定帧的界限)
帧同步: 接收方应当能从接收到的二进制比特流中区分出帧的起始和终止。
组帧的四种方法:
1.字符计数法
2.字符(节)填充法
3.零比特填充法
4.违规编码法
在介绍着四种方法之前要先了解“透明传输”这个概念。
透明传输
什么是透明传输?
指不管所传数据是什么样的比特组合,都能在链路上传送。
当比特组合和某个控制信息完全一样时,就必须采取适当措施,让接收方不会认为是某种控制信息。这样才能保证数据链路层的传输是透明的。
这里的适当措施其实也就是上面提到的组帧方法。
透明传输在组帧上的应用
1.字符计数法
每一个帧的首部都有一个计数字段(第一个字节,八位二进制数),其用来标明帧内的字符数。(包含该计数字段)。
但该方法有一个很大的缺点:
当某个帧的首部,即计数字段发生错误,就会导致后面的帧都出错。
如果第1帧计数字段为3,那么该帧中只有5、1、2,第2帧的首部(计数字段)就是数字3。导致后面的帧混乱。
2.字符填充法
我们拿出一个帧来举例。如下图:
SOH和EOT分别表示帧开始和结束。都是八位的比特组合。
①如果传送的帧由文本文件组成,那么都是从键盘上输入的,都是ASCII码,都可以传输过去。即透明传输。
②如果传送的是由非ASCII码的文本文件组成时(如二进制代码程序或者图像)。这时可能会导致帧中出现帧开始或结束的比特组合。如下图:
这样就会导致在接收端提前结束帧的识别。那么就需要字符填充法。
发送时,除了首尾的控制信息之外,每个控制信息之前加入转义字符(一个字节)。接收时在将转义字符去掉。
3.零比特填充法
还是拿一个帧来举例,同样除了首尾之外,还出现了控制信息。那么我们用零比特填充法来解决。
操作:
在发送端,扫描整个信息字段,只要连续5个1,就立即填入一个0。
在接收端,先找到标志字段,确定边界,再用硬件对比特流进行扫描,发现连续5个1时,就把后面的0删除。
总结一个口诀: 5 “1” 1 “0”(5个1,插入1个0)
4.违规编码
比如曼彻斯特编码,规定先高后低为1,先低后高为0,当然也可以反过来定义。
在这个编码中是不会出现“高-高”和“低-低”的,那么我们就用这两个来定界帧的起始和终止。
以上四种方法既是组帧的方法,又确保了透明传输。
由于字节计数法中Count字段的脆弱性(其值若有错将导致灾难性后果)及字符填充实现上的复杂性和不兼容性。所以比较普遍使用的帧同步法是比特填充和违规编码法。