封装和解封装
今天我们重点学习封装和解封装
首先我们来看看它们的概念:
封装:将上层的应用数据按照OSI参考模型从上到下的依次加入相应的头部。
解封装:将一个封装好的数据按OSI参考模型从下到上依次去除相应的头部,将数据传递给应用。
关于OSI参考模型可以参考文章 OSI七层模型与TCP/IP四层模型
如果你觉得不好去理解,那么下面我用一个实际的例子去进行展示。
男士给女生通过某个应用程序发送了:你好 ,对于“你好”这个数据,我们描述了封装与解封装的一个简要流程,上图不完全精确,因为还涉及到很多网络概念比如前导位、帧、FCS等,但这张图能够让我们很快的了解封装与解封装的基本过程。
数据到达传输层时,称为 数据段(Segment)
数据到达网络层时,称为 数据包(Packet)
数据到达数据链路层时,称为数据帧(Frame)
数据传输过程中添加到数据包或段前面的附加信息,称为报头(Header)
封装
根据上图,我们进行封装的概念讲解:
首先,男士通过某个应用程序(比如微信、QQ等)向女士发送了一条消息“你好”
我们的终端设备(电脑、手机、平板等)收到了男士输入的消息后,为了传递该消息到远端,于是开始进行封装。
在OSI七层模型下,“你好”首先在应用层产生,再逐步向会话层、表示层等逐步向下一层传递,传递至传输层后,传输层会在“你好”这个数据前加一个专属于传输层的报头,即TCP/UDP报头。从而形成了数据段(Segment)。再将该数据段向下一层发送,到达网络层。
网络层在收到来自传输层的数据段后,将专属于网络层的报头,即IP报头添加到数据段的前面,从而形成数据包(Packet)。再将该数据包向下次层发送,到达数据链路层。
数据链路层在收到来自网络层的数据包后,将专属于数据链路层的报头以及数据链路层必须添加的FCS帧校验,分别添加到数据包的前面和末尾,从而形成数据帧(Frame)。再将该数据包向下次层发送,到达物理层。
注:动图的数据链路层中未体现FCS帧校验。
物理层收到该数据帧后,在数据帧前加入7byte的前同步码以及1byte的帧开始定界符。转换成一串二进制字符串,再转换为电/光信号在链路上进行传输,最后到达女生的终端设备上。 随后开始解封装的过程。
解封装
接下来,我们进行解封装的详解:
到达女生的终端设备后,首先由电/光信号转换为二进制字符串,再将二进制数据转换为数据帧格式,去掉开头的前同步码+帧开始标识符,随后将数据帧传递至上一层,即数据链路层。
数据链路层收到物理层传递过来的数据帧后,去除专属于数据链路层的报头,即MAC报头以及FCS帧校验,露出数据包,将数据包传递至上一层,即网络层。
网络层收到数据链路层传递过来的数据包后,去除专属于网络层的报头,即IP报头,露出数据段,将数据段传递至上一层,即传输层。
最后,传输层收到网络传递过来的数据段后,去除专属于传输层的报头,即TCP/UDP报头,露出数据,交由上层,即会话层、表示层、应用层进行处理,此时女生成功收到 “你好”这条数据。解封装完成。
注:
- 上述关于封装与解封装的过程,我们没有详细描述数据在各个层中所加入报头的详细细节,比如TCP/UDP报头的详细内容、IP报头的详细内容以及MAC报头的详细内容以及该如何填写这些内容。后期更新相应内容后,我会及时的通知大家。本篇文章的重点是让大家可以简单了解到封装与解封装的过程。
- 在上述封装与解封装的过程中,我们并没有详细介绍数据在会话层、表示层、应用层中的变化情况。我们重点要讲述的是二到四层也就是数据链路层、网络层以及传输层的变化。有关数据在会话层、表示层、应用层中的详细情况,后续我会及时的更新。