我是靠谱客的博主 欣喜树叶,最近开发中收集的这篇文章主要介绍数据链路层的三个问题封装成帧透明传输差错检测,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天学习了关于数据链路层的知识,数据链路层使用的信道主要有以下的两种类型:
1. 点对点信道。这种信道使用一对一的点对点信道方式。
2. 广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。

通常我们使用的更多的是点对点的信道,所以在这里我们需要了解一些相关的概念。

点对点信道的数据链路层在进行通信的时步骤如下:
1. 节点A的数据链路层把网络层交下来的IP数据报添加首部和尾部封装成帧。
2. 节点A把封装好的帧发送给节点B的数据链路层。
3. 若节点B的数据链路层收到的帧无差错,则从收到的帧当中提取出IP数据报上交给上面的网络层,否则丢弃这个帧。

数据链路层的三个基本问题:
封装成帧、透明传输、差错检测。

封装成帧


在进行数据链路层传输的时候存在一个问题,我们需要对饮数据链路层的协议对应将有效的数据封装成一个帧,封装成帧就是在一段数据的前后分别添加首部和尾部,这样就构成一个帧。这个时候我们就需要考虑,我们如何来识别一个帧,所以这里提出了一个帧定界的概念,使用两个控制字符,一个控制字符SOH放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT标识帧的结束。
![enter description here][1]

所以简单的说第一步就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。首部和尾部就是起到帧定界的作用。

透明传输


关于透明传输,我们主要目的是因为,在帧的有效数据当中,可能出现和帧定界的控制字符一样的字符,为了防止将这些字符当中帧定界的字符,错误的处理帧,所以我们采方法使得数据当中可能出现的控制字符“SOH”和“EOT”在接收端不被解释为控制字符。

方法是:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符”ESC”。而在接收端的数据链路层在将数据送往网络层之前删除这个插入的转义字符。我们把这种方法叫做字节填充法。当然如果转义字符”ESC“也出现在数据当中,那么解决的方法仍然是在转义字符的前面插入一个转义字符,所以,当接受到连续的两个转义字符的时候,就去删除其中前面的一个。
![enter description here][2]

差错检测


数据链路层点对点传输的第三个问题就是差错检测。就是我们所说的比特在传出过程当中可能会产生差错,1可能会变成0,0可能会变成1.这就是比特差错。而这种差错对于我们来说是不希望发生这种状况的,所以为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用差错检测措施。目前广泛运用的是循环冗余检验CRC

CRC的基本思想就是将传输的数据当作一个位数很长的数,将这个书除以另外的一个数。得到的余数作为校验数据附加到原数据后面。

原理:
首先把数据M划分为组,每个组k个比特。CRC运算就是在数据M后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,所以一共就是(k+n)位。这样虽然是增加了数据传输的开销,但是却可以进行差错检测。为了避免传输差错,这种效率上的损失是值得的。

重点就是这n位冗余的计算方法。
用二进制的模2运算再进行2^n乘M运算,模2运算相当于是二进制的不进位加法,其实也就是异或运算,而2^n乘M运算相当于是进行在M后面加上n个0。
![enter description here][3]

这种添加冗余码的方法叫做帧检验序列FCS,而CRC循环冗余差错检测和这个并不是一个概念,然后我们可以对上面最后的数据进行CRC检验,方法就是把收到的每一帧都除以相同的除数,然后检查得到的余数。如果没有差错,那么得到的余数一定是0。

![enter description here][4]

所以总的来说,就是每一个接受到的帧经过了CRC检验后,只会有两种情况:
1. 余数为0,表示结果是正确的,这个时候自然就接收这个帧。
2. 余数不为0,这样标识这个帧是有问题的,这样就丢弃这个帧。

另外一种就是使用多项式的方法进行循环冗余检验过程。用多项式P(x)=x^3+x^2+1表示除数P=1101。这个多项式称作生成多项式。生成多项式的选取是有难度的,如果选的不好,那么检测出错误的概率就会很低。现在常用的几种多项式有:

CRC8=X8+X5+X4+X0
CRC-CCITT=X16+X12+X5+X0
CRC16=X16+X15+X2+X0
CRC12=X12+X11+X3+X2+X0
CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X0

最后需要说一下,数据链路层如果仅仅使用CRC循环冗余检验,则只能对帧做到无差错接受,但是,当数据链路层向网络层提供传输的时候,这个时候就不一定是可靠的传输了,数据链路层不确保这个。所以数据链路层协议不适用确认和重传机制,不向上层提供可靠传输的服务。所以保证可靠传输就需要让上层协议(TCP)来做了。这样的目的,也是为了更好的提升通信的效率。

最后

以上就是欣喜树叶为你收集整理的数据链路层的三个问题封装成帧透明传输差错检测的全部内容,希望文章能够帮你解决数据链路层的三个问题封装成帧透明传输差错检测所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部