我们假设撇开中间系统,看源主机A到目的主机B的通信,从顶层来看我们是希望源主机A的用户数据送到目的主机B接收,比如一个文件,或一句话。按照OSI参考模型来看,主机A和主机B都需要实现7层功能。
在OSI参考模型看来,数据通信时,是一层一层处理,逐层封装好,在物理上进行实在的传输:从源主机(SOURCE)的应用层发出来的数据是有一定格式的协议数据单元,称为PDU(protocol data unit)。应用层发给下一层表示层后,在PDU前面加上了本层控制信息,也就是图1.3中的AH,加在头部。图1.3中加了头部PH的A-PDU,更新为本层的PDU,也就是要发给第五层会话层的内容。即A-PDU+PH=P-PDU。上一层向下一层发送PDU,逐层加上本层的头部后成为下一层的PDU。直至发到数据链路层,数据链路层还加一个尾部,也就是DT,起到校验作用,如果数据正确,继续传输,数据错误直接丢掉不继续传输。数据链路层发给物理层后,物理层将PDU转换为二进制编码(比特流),通过硬件转换为信号发送出去。这样源主机七层任务完成。
图1.3右侧是目的主机的数据接收过程:接收到硬件的二进制信号后,物理层转换为PDU发个数据链路层。数据链路层拆掉头部和尾部后,将赤裸的PDU送给网络层。网络层再拆掉头部,送入下一层,逐层拆掉头部,到了送给应用层时,前面不同层添加的头部完全被拆干净,留下原本发送的最原始PDU,也就是用户数据。
图1.3 OSI参考模型数据封装与通信过程那么这里就有一个问题,为什么要进行数据封装?回答这个问题之前,先来了解一下加了那么多的头和尾,加的都是些什么内容。我们在构造协议数据单元(PDU)时会在头部增加控制信息,这些控制信息主要包括1)地址(Address):用来标识发送端和接收端,源主机得知道数据往哪发,目的主机得知道数据是谁给发的。2)差错检测编码(Error-detecting code): 用于差错检测或纠正。3)协议控制(Protocol control): 实现协议功能的附加信息,如: 优先级(priority)、服务质量(QoS)、 和安全控制等。