-
封装:上层协议使用下层协议提供的服务是通过封装实现的。数据发送到物理网络上之前,沿协议栈从上往下依次传递,每层都在上层基础上加上自己的头部(有时还有尾部)信息以实现该层的功能,此过程即为封装。
-
经过TCP封装的数据称为TCP报文段,由TCP头部信息和TCP内核缓冲区(发送缓冲区或接收缓冲区)数据构成。
- 当使用send或write向TCP连接写入数据时,内核中的TCP模块先把这些数据复制到与该连接对应的TCP内核发送缓冲区中,TCP模块再调用IP模块提供服务,传递的参数即为「TCP头部信息」和「TCP发送缓冲区的数据」。
- 经过UDP封装的数据称为UDP数据报。对数据的封装与TCP类似,区别是UDP发送后,其内核缓冲区中的数据报即被丢弃。
- 经过IP封装的数据称为IP数据报,包括头部信息和数据部分(TCP报文段、UDP数据报或ICMP报文)。
-
经过数据链路层封装的数据称为帧,媒介不同帧的类型也不同,如以太网上传输的是以太网帧,令牌环上传输的是令牌环帧...
- 帧的最大传输单元(Max Transmit Unit,MTU)就是帧最多能携带多少上层协议数据,受网络类型限制。如上图以太网帧的MTU为1500字节,因此过长的IP数据报可能要被分片传输。
- 帧才是最终在物理网络上传送的字节序列,至此封装the end。
-
-
分用,即反封装,解包。
- 帧到达目的主机后将沿协议栈自下往上依次传递,各层协议依次处理帧中本层负责的头部数据,以获取所需信息,最终交给目标应用程序,这个过程叫分用。
-
分用依靠头部信息中的类型字段标识或区分上层的不同协议(RFC1700或/etc/protocols定义了所有标识上层协议的类型字段以及每个上层协议对应的数值,如下图以太网帧的分用)
- 如以太网帧使用2字节的类型字段标识上层协议,0x800则帧的数据部分为IP数据报;0x806则帧的数据部分为ARP报文;0x835则帧的数据部分为RARP报文。
- 同样ICMP、TCP、UDP都是用IP协议,故IP数据报的头部采用16位协议字段来区分。
- TCP报文段和UDP数据报通过头部中的16位的端口号字段来区分上层应用程序,如DNS协议对应端口号53;HTTP对应端口号80.(可参考/etc/services)