封装

【封装】
当应用程序用TCP传送数据时 , 数据被送入协议栈中 , 然后逐个通过每一层直到被当作一串比特流送入网络 。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息) , 该过程如图1 - 7所示 。TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCP segment) 。IP传给网络接口层的数据单元称作IP数据报(IP datagram) 。通过以太网传输的比特流称作帧(Frame) 。
;;;;图1 - 7中帧头和帧尾下面所标注的数字是典型以太网帧首部的字节长度 。在后面的章节中我们将具体讨论这些帧头的具体含义 。
;;;;以太网数据帧的物理特性是其长度必须在46~1500字节之间 。我们将在4.5节碰到最小长度的数据帧 , 在2.8节中碰到最大长度的数据帧 。
;;;;所有的Internet标准和大多数有关TCP/IP的书都使用octet这个术语来表示字节 。使用这个过分雕琢的术语是有历史原因的 , 因为TCP/IP的很多工作都是在DEC-10系统上进行的 , 但是它并不使用8 bit的字节 。由于现在几乎所有的计算机系统都采用8 bit的字节 , 因此我们在本书中使用字节(byte)这个术语 。
;;;;更准确地说 , 图1 - 7中IP和网络接口层之间传送的数据单元应该是分组(packet) 。分组既可以是一个IP数据报 , 也可以是IP数据报的一个片(fragment) 。我们将在11.5节讨论IP数据报分片的具体情况 。
;;;;UDP数据与TCP数据基本一致 。唯一的不同是UDP传给IP的信息单元称作UDP数据报(UDP datagram) , 而且UDP的首部长为8字节 。
;;;;回想1.3节中的图1 - 4 , 由于TCP、UDP、ICMP和IGMP都要向IP传送数据 , 因此IP必须在生成的IP首部中加入某种标识 , 以表明数据属于哪一层 。为此 , IP在首部中存入一个长度为8 bit的数值 , 称作协议域 。1表示为ICMP协议 , 2表示为IGMP协议 , 6表示为TCP协议 , 1 7表示为UDP协议 。
;;;;类似地 , 许多应用程序都可以使用TCP或UDP来传送数据 。运输层协议在生成报文首部时要存入一个应用程序的标识符 。TCP和UDP都用一个16 bit的端口号来表示不同的应用程序 。TCP和UDP把源端口号和目的端口号分别存入报文首部中 。
;;;;网络接口分别要发送和接收IP、ARP和RARP数据 , 因此也必须在以太网的帧首部中加入某种形式的标识 , 以指明生成数据的网络层协议 。为此 , 以太网的帧首部也有一个16 bit的帧类型域 。

    推荐阅读