前言
在上一篇文章中我们简单介绍了数据链路层-数据帧传输的基本知识点,并留下几个追问环节
1.链路层如何将网络层下发的数据封装成帧的?
2.链路层是如何做到忽略物理层影响,完成"透明传输"?
3.如何保证链路层帧无差错传输?
涉及知识点:最大传送单元(MTU)、帧定界符、ASCII码、转义符、循环冗余检验CRC
准备好了更进一步了吗?这篇文章开始逐个深入剖析各个问题,难度略有提升,我尽量用通俗易懂语言让各位轻松掌握
链路层如何封装成帧?
封装成帧(framing)就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。
首部和尾部的标记用于识别物理层上交的比特流,这样就可以识别出一段数据的开始和结束。这一段数据就是指的因特网上的一个基本概念:所有在因特网上传送的数据都是以分组(即IP数据报)为传送单位传送的。网络层的IP数据报传送到数据链路层就成为帧的数据部分
所以真正的因特网要传输的数据是IP数据报,链路层增加了帧首部和尾部后,数据长度会增加;显然,为了提高帧的传输效率,应当使帧的数据部分长度尽可能地大于首部和尾部的长度。
但是,数据链路层协都规定了所能传送的帧的数据部分长度上限——最大传送单元MTU (Maximum Transfer Unit)。
下图则是帧的首部和尾部的位置,以及帧的数据部分与MTU的关系。
用帧首部和帧尾部封装成帧
帧定界符
帧的首尾部其实是帧的界定符划分,界定符又是由ASCII码组成,我们知道,ASCII码是7位编码,一共可组合成128(2的7次方)个不同的ASCII码。
如下图,例子可说明帧定界符的概念,其中SOH、EOT就是ASCII码所代表的控制符。控制字符SOH (Start Of Header)放在一帧的最前面,表示帧的首部开始。另一个控制字符EOT (End Of Transmission)表示帧的结束
用控制字符进行帧定界的方法举例
这里值得注意的是,SOH和EOT都是控制字符的名称。它们ASCII码对应二进制编码的分别是00000001(01)和00000100(04)。SOH(或EOT)并不是S,O,H(或E,O,T)三个字符。
除了界定传输的数据开始和结束位置,当数据在传输中出现差错时,帧定界符的作用就更加明显。
比如发送端在尚未发送完一个帧时突然出故障,中断了发送。但随后很快又恢复正常,于是重新从头开始发送刚才未发送完的帧。由于使用了帧定界符,如果只有首部开始符SOH而没有传输结束符EOT,在接收端就知道前面收到的数据是个不完整的帧,必须丢弃。而后面收到的数据有明确的帧定界符(SOH和EOT),因此这是一个完整的帧,应当收下。
总结
1.帧是由IP数据报和帧界定符组成,界定符分为开始符SOH,结束符EOT
2.链路层数据大小有限制,称为最大传送单元MTU
3.链路层接收的数据,如果帧界定符不完整,则直接丢弃
后续追问
1.物理层交给链路层是比特,也就是0101这类的数据,可能会和界定符冲突,链路层又是如何解决的呢?
涉及知识点:转义符、循环冗余检验CRC
写在最后
好了,这篇文章就介绍到这儿,是不是有点意犹未尽,并不是吊着大家的胃口,知识点最小化是为了能让读者在快速化生活中利用间隙时间随时学习和掌握,之后的每篇文章衔接都会比较连贯,不想错过的看官,不惜可点个关注,一起加油!
摸鱼也算学习!!
我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!