TCP/IP 网络协议栈基础 —— 分解过程
1、以太网帧的组成:
(Ethernet II 标准)
[目的MAC 6B] [源MAC 6B] [类型 2B] [数据 46~1500B] [FCS 4B]
其中:
最小帧长为64字节,最大帧长为1518字节。
类型字段,用于指明处理它的网络层协议。例如IPv4(0x0800)、IPV6(0x86Dd)、ARP( 0x0806)。
数据字段,如果长度小于46字节,则会填充到46字节。
过程:
以太网帧包含一个48位的目的地址和一个16位的以太网类型字段。假设目的地址与接收方的一个地址匹配,这个帧将被接收并校验差错。接下来假设类型字段表示的是IPv4,那么数据字段表示的是一个IP数据报,以太网头部和尾部信息将被清除,并将数据部分交给IP层来处理。
2、IP数据报的组成:
[版本/首部长度 1B] [服务类型 (TOS) 1B] [总长度 2B]
[标识 2B] [标志/片偏移 2B] [生存时间 (TTL) 1B]
[协议 1B] [首部校验和 2B] [源IP地址 4B] [目的IP地址 4B]
[(可选字段 0~40B)] [数据 (Payload)]
其中:
不包含可选字段时头部为20字节。
协议字段,指明封装在数据部分的上层协议。例如ICMP为1、IGMP为2、IPV4为4、TCP为6、UDP为17。
过程:
IP层检测一系列的字段,包括数据报中的目的IP地址。如果目的地址与自己的一个IP地址匹配,并且数据报头部没有错误,则检测8位的IPv4协议字段,以决定接下来调用哪个协议来处理。如果采用的协议为TCP或UDP,则需要将数据报(必要时由分片重组而成)交给传输层处理。
注:分片与重组
当IP数据报的大小超过网络的最大传输单元(MTU)时,路由器或发送端主机会将其分割为多个分片(Fragments)。每个分片独立传输,包含独立的IP头部(标识相同,但分片偏移不同)。接收端的网络层需要将所有分片按顺序重组为原始IP数据报,再交给上层协议(如传输层)。重组必须由最终目的主机的网络层完成,因为分片可能通过不同路径到达目的地,中间路由器无法保证收集到所有分片。目的主机的网络层接收所有分片,根据标识字段(Identification)识别属于同一数据报的分片。将分片按片偏移字段(Fragment Offset)排序,并缓存等待其他分片到达。所有分片到达后,按偏移拼接成完整IP数据报,移除分片相关的IP头部字段(如MF、片偏移),将重组后的数据报交给传输层。
3、TCP数据段的组成
略