数据链路层解决的三个问题
封装成帧:在数据前后加帧头帧尾进行定界
透明传输:数据中有控制符如何正确的传输,采用字节填充法解决,即在数据中出现的控制符和转义字符前面插入转义字符,在接收时去掉转义字符。
字节填充法解决透明传输差错校验:在数据后面加帧检测序列来进行差错检验,典型的检错方法:循环冗余检验CRC
补充CRC原理(原文链接:https://blog.csdn.net/wenqiang1208/article/details/71641414)
1.基本概念
(1)模2运算:实际上是按位异或运算,即相同为0,相异为1,也就是不考虑进位、借位的二进制加减运算。如:1111+1010 = 0101
(2)FCS:其实就是冗余码,帧检验序列(Frame Check Sequence)
(3)生成多项式:其实就是除数,比如下面将要用到的除数p = 1101
2.计算n位冗余码
现假定待传输的数据M = 101001(k = 6),除数p = 1101 (n = 3)比n多一位
这n位冗余码可以用下面的方法得出:
(1)用二进制的模2运算进行(2^n)乘M的运算,相当于在M后面添加n个0,即M后面添加3个0
(2)现在得到M = 101001000(k+n = 9)位的数除以除数p(n = 3)位,得到商是Q(不关心),余数R =001(n位)R就是冗余码FCS
3.接收端检验
现在加上FCS后发送的帧是101001001
在接收端把接收到的数据M = 101001001以帧为单位进行CRC检验:把收到的每一个帧都除以相同的除数p(模2运算),然后检查得到的余数R。
结果有两种情况:
(1)余数R = 0,则判断这个帧没有问题,就接受
(2)余数R != 0,则判断这个帧有差错,就丢弃。
网友评论