一、背景
随着网络的发展,网络中的数据量以及用户量越来越多,那么这些数据是怎么从发送端传输给接收端的呢?发送端和接收端又对数据会有怎样的处理呢。
二、对等层通信
图1
以【图1】为例,如果【HostA】QQ应用程序与【HostB】QQ应用程序进行数据互通时,首先肯定得保证数据能够被两端的应用程序所处理,不能说【HostA】QQ应用程序的数据被【HostB】除QQ以外其他应用程序所处理。那么我们怎么确保不出现上述现象呢?此时需要了解【对等层通信】概念
图2
以OSI参考模型为例,每层都使用自己的协议,例如:
应用层数据称为APDU(应用层协议数据单元)
表示层数据称为PPDU(表示层协议数据单元)
会话层数据称为SPDU(会话层协议数据单元)
传输层数据称为数据段(Segment)
网络层数据称为数据包(Packet)
数据链路层称为数据帧(Frame)
物理层数据称为比特(Bit)
【对等层通信】就是每一层都与另一方的对等层次进行通信,但这种通信并非直接进行的,而是通过下一层为其提供的服务来间接与对端的对等层交换数据。值得注意的是,不同层次结构之间无法进行通信。
简单来说上层的通信需要依靠下层提供的服务,如果下层无法提供响应的服务,则上层无法通信。
综上所述,这里其实也给了我们一定的网络排障思路,上层无法通信应该按照层次结构先从底层开始排障。
三、数据封装与解封装
图3
了解到对等层通信后,结合网络参考模型的相关概念,发送方将数据传输给接收方是需要通过传输介质、物理层该搞定的事情,而发送方如果是应用程序所产生的数据,那么数据应处于应用层,此时怎么将应用层的数据交给物理层传输呢?在此,我们需要了解到数据的封装与解封装。
封装简单来说就是在原始数据内容的头部添加额外的信息,这个额外的信息我们称为头部信息(封装头),有部分协议还会在原始数据内容的尾部添加额外的信息,这个额外的信息我们称为尾部信息(封装尾)。不仅如此,被封装完后的数据,原始数据内容此时称为【数据载荷】。例如:【图3】发送方的应用层封装了APDU(应用协议数据单元)头部信息,应用程序所产生的用户数据就是数据载荷。
需要注意的是,数据发送方在传输数据时需要进行逐层封装至网络接口层,再转化成二进制的比特流进行传输给接收方,不允许跨越层次进行封装。
解封装简单来说就是将每层封装的额外信息拆除掉,识别数据载荷并交给上层处理,方便数据被上层所理解。那为什么需要被上层所理解呢?举个例子:我们可以将每层所使用的协议可以看作成是一门语言,不同的层次结构语言不同,不同层次之间自然也就没办法直接进行交互了。所以解封装只能拆除每层能够识别的额外信息。
同理,数据接收方在接收数据时需要逐层进行解封装,接收方接收到数据时是处于在网络接口层的数据,只有拆除下层封装后才能看到传输的应用层数据。
当然了,所有的数据不一定都是从应用层产生且逐层封装至网络接口层。例如:应用程序所产生的数据处于在应用层,而网络层所产生的数据处于在网络层,从网络层开始至网络接口层逐层封装。所以我们要了解数据的封装,首先得知道数据的产生源于哪一层。
四、总结
1. 对等层通信就是发送方发送数据的层次要与接收方接收数据的层次是一样的,并且当前层次的通信需基于下层提供的服务
2. 数据发送方会将数据进行封装,数据接收方会进行解封装