封装
当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息)。TCP传给IP的数据单元称作 TCP报文段或简称为 TCP段(TCP Segment)。 IP传给网络接口层的数据单元称作 IP数据报(IP datagram)。通过以太网传输的比特流称作帧(Frame)。下图是数据进入协议栈时的封装过程:
图中帧头和帧尾下面所标注的数字是典型以太网帧首部的字节长度。以太网数据帧的物理特性是其长度必须在 46-1500字节之间。UDP数据与 TCP数据基本一致。唯一的不同是 UDP传给 IP的信息单元称作 UDP数据报
(UDP datagram),而且UDP的首部长为8字节。由于TCP、UDP、ICMP和IGMP都要向IP传送数据,因此 IP必须在生成的 IP首部中加入某种标识,以表明数据属于哪一层。为此, IP在首部中存入一个长度为8 bit的数值,称作协议域。其中1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议, 17表示为UDP协议。类似地,许多应用程序都可以使用 TCP或UDP来传送数据。运输层协议在生成报文首部时要存入一个应用程序的标识符。 TCP和UDP都用一个16bit的端口号来表示不同的应用程序。TCP和UDP把源端口号和目的端口号分别存入报文首部中。网络接口分别要发送和接收 IP、ARP和RARP数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个 16 bit的帧类型域。哈哈哈,幸好现在这几层就足够应付现在的需求了,要不然这么多层的累积下去,可什么时候是个头啊,每帧数据真正存除了这个标识信息的就要有多少。
分用
当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用。下面贴一张图,来表示以太网数据帧的分用过程:
对于分用的理解,我觉得就是封装的反向过程吧。毕竟前面带了帽子,后面不是得摘下来,才知道你到底是谁不是。