日常生活中,大家在网购或邮寄某件物品时,除了要填写双方的地址,还要填写联系方式、是否需要保价等信息。另外负责邮寄的快递公司可能还会有一些其它规定也要附加在购买和邮寄的物品详单上。这样做的目的都是为了保证邮寄过程的可靠、准确。
类似的在通信网络中,数据包利用网络在不同设备之间传输时,为了可靠和准确地发送到目的地,并且高效地利用传输资源(传输设备和传输线路),事先要对数据包进行拆分和打包。
在所发送的数据包上附加上目标地址、本地地址以及一些用于纠错的字节,当安全性和可靠性要求较高时,还要进行加密处理等。
上述的操作就叫做数据封装,而对数据包进行处理时通信双方所遵循和协商好的规则称为协议。与邮寄过程相比,数据包类似于物品,而封装就如同填写各种邮寄信息,协议就是如何填写信息的规定。
从上面的分析可以看出,对数据包封装实际上很复杂:要达到可靠、准确及高效的目的,必须考虑很多影响因素,并有针对性地采取防范措施。
在实际应用中,组网的数据封装按功能分层进行,目的就是为了能将复杂系统分解为很多模块,各模块独立、互不影响。每个模块(每层)之间用接口进行连接和交互,并互相提供服务。这样不仅更容易实现功能,而且使整个系统具有良好的兼容性和可扩展性。
以常见的OSI模型为例,它共分为七层,从下到上依次为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,每层都对应不同的功能。为了实现对应功能,都会对数据按本层协议进行协议头和协议尾的数据封装,然后将封装好的数据传送给下层,各层的数据封装过程如下图所示。
其中:
- 在传输层用TCP头已标示了与一个特定应用的连接,并将数据封装成了数据段。
- 到了网络层则用IP头标示了已连接的设备网络地址,并可基于此信息进行网络路径选择,此时将数据封装为数据包。
- 到了数据链路层,数据已封装成了数据帧,并用MAC头给出了设备的物理地址,当然还有数据校验等功能字段等。
- 到了物理层,则将数据帧转换为比特流,在物理链路上进行传输。
数据的接收端从物理层开始,进行与发送端相反的操作,称为“解封装”,如下图所示,最终使应用层程序获取数据信息,使得两点之间的一次单向通信完成。
需要说明的是,目前应用最为广泛的TCP/IP协议可以看作是OSI协议层的简化,它分为四层:网络接入层、网际互联层、传输层、应用层,其各层对应的数据封装与OSI大同小异。