【计网】封装成帧以及透明传输
封装成帧以及透明传输
定义
封装成帧是指将数据链路层将上层交付的协议数据单元添加帧头和帧尾使之成为帧。
-
类比理解:不妨将上层交付的协议数据单元比作新出炉的糖果,所添加的帧头和帧尾比作用来包装这颗糖果的包装纸。
-
再进一步,一定数量的糖果可能会被放入到一个统一规格的糖果罐里面来进行销售,这个罐就相对糖果纸拥有更大的面积去阐明生产地,生产日期和生产成分等等因素。
-
更进一步,可以将好几个罐头装入到快递箱子里面经由货车送到批发处,再有批发处进行解包装,然后批发到各个小零售点。
-
最后,可能是由你购买了这款糖果,并揭开了最后的糖果纸。
-
总的来说,我们不管是给糖果套上糖果纸,还是装入糖果罐,抑或是放入到快递箱里面,都给这个糖果附加上了一些信息。(漂亮的糖果纸暗示其可口味道,糖果罐交代了相关背景信息,快递箱交代送货地址......)
-
而打包好进快递箱的糖果最终会被送到对应的批发点,而批发点会将这些快递箱打开单罐单罐销售给零售店,最终你可能在这些零售点里面的之一买到了这种类型的糖果罐,并撬开糖果罐,揭开最后的糖果纸,品尝到了糖果。(解封装)
实际过程
在实际传输过程中帧总是以01串的形式进行传输的,为避免帧和帧之间的杂糅,帧往往会在帧头和帧尾添加标志位,以告诉接收方某个帧开始接收的位置和某个帧停止接收的位置。
比如就PPP帧而言,它就在帧头和帧尾各设置了一个长度为1字节的标志位。
当接收方扫描到的信息是标志位所代表的信息的时候,接收方就开始明白说这是一个帧的开始或者结束。
也就是说帧头和帧尾能够确定一个帧的大致的范围,也就是所说的帧定界功能。
但并不是所有的帧都具有帧定界功能。
比如说以太网V2的mac帧
它是将mac帧生成对应的前导码(帧开始定界符和时钟同步码),通过一定时间间隔来确定mac帧结束的位置。
而对于有帧定界的帧来说,要是帧内部出现了和帧边界相同的信息的话,也就是说接收方可能提早确定出帧结束的标志,从而提早结束当前帧,停止读入,使得后续信息的丢失,并且扰乱到了后面的帧。
而我们又该如何解决这个问题呢?
首先,我们会将要传输过去的信息进行一个扫描,如是内部出现了flag,会在这个flag前面附加上一个转义字符,用来告诉接收方这并不是一个真正的flag,不必当真。
- 其中转义字符ESC占一个字节,其值位27,十六进制表示即为1B(H)。
- ESC并非是由E、S和C三个字母组成。
而这其实也叫做透明传输
下面引入百度百科对透明传输的一段定义
透明传输是指不管所传数据是什么样的比特组合,都应当能够在链路上传送。当所传数据中的比特组合恰巧与某一个控制信息完全一样时,就必须采取适当的措施,使接收方不会将这样的数据误认为是某种控制信息。这样才能保证数据链路层的传输是透明的。
再浅谈一下个人的理解
个人理解 个人认为这里的"透明"是一种主观上的透明,传输数据者人是不知道数据在链路传送的过程是选择哪一条道路,受到哪些设备的加工,解封装,再封装,但始终相信传输的数据并不会被中间客动手动脚,始终相信传输地数据并不会受到实质性的改变,于是原本看似复杂的传输过程就可以看成将数据直接从源传送到目的地一样(就好像透明一样能够预知结果,但还是无法获悉具体地传输过程,但其实这也算是无关紧要)。
类比 就好像从网上下单的商品一样,从发货地到你接收到它的时候并没有在传输过程中受到任何损伤。你就可以直接将它半信半疑的透明化(你压根就不知道或者不想知道它到底是怎么被传输的)
透明传输的实现
零比特填充法
例如将帧定界设置为0111110,然后将01串(传输数据)进行扫描,若发现存在连续的5个1就在其后添加一个0,作为接收方用来重新整理的数据的标志。
- 实际运用