一、报文数据格式
二、二层数据格式
| DMAC(6字节) | SMAC(6字节) | type(2字节) | DATA(46-1500字节) | CRC(4字节) |
| 字段 | 长度 | 含义 |
|---|---|---|
| DMAC | 6字节 | 目的MAC地址,IPV4为6字节,该字段确定帧的接收者。 |
| SMAC | 6字节 | 源MAC地址,IPV4为6字节,该字段标识发送帧的工作站。 |
| Type | 2字节 | 协议类型。下表列出了链路直接封装的协议。 0x0800 IPv4协议 |
| Data | 变长 | 数据字段的最小长度必须为46字节以保证帧长至少为64字节,这意味着传输一字节信息也必须使用46字节的数据字段。如果填入该字段的信息少于46字节,该字段的其余部分也必须进行填充。数据字段的最大长度为1500字节。 |
| CRC | 4字节 | 用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。 |
三、IP报文字段
| version | Header Lenth | type of service | Total length | |
| Identification | Flags | Fragment offset | ||
| time to live | protocol | header checksum | ||
| Source address | ||||
| Destination address | ||||
| Options(可变) | Padding(可变) | |||
IP头字段解释
| 字段 | 长度 | 含义 |
|---|---|---|
| Version | 4比特 |
|
| Header Lenth | 4比特 | 首部长度,如果不带Option字段,则为20,最长为60,该值限制了记录路由选项。以4字节为一个单位。 |
| Type of Service | 8比特 | 服务类型。只有在有QoS差分服务要求时这个字段才起作用。 (不重要 一般都是0) |
| Total Length | 16比特 | 总长度,整个IP数据报的长度,包括首部和数据之和,单位为字节,最长65535,总长度必须不超过最大传输单元MTU。 |
| Identification | 16比特 | 标识,主机每发一个报文,加1,分片重组时会用到该字段。(Identification相同的代表是同一个包的分片) |
| Flags | 3比特 | 标志位: IP Flag字段格式
|
| Fragment Offset | 13比特 | 片偏移:分片重组时会用到该字段。表示较长的分组在分片后,某片在原分组中的相对位置。以8个字节为偏移单位,也就是分片长度必须是8的倍数 偏移字节数是该值*8 , |
| Time to Live | 8比特 | 生存时间:可经过的最多路由数,即数据包在网络中可通过的路由器数的最大值。一般是128 |
| Protocol | 8比特 | 协议:下一层协议。指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。 常见值:
|
| Header Checksum | 16比特 | 首部检验和,只检验数据包的首部,不检验数据部分。 |
| Source Address | 32比特 | 源IP地址。 |
| Destination Address | 32比特 | 目的IP地址。 |
| Options | 可变 | 选项字段,用来支持排错,测量以及安全等措施,内容丰富。选项字段长度可变,从1字节到40字节不等,取决于所选项的功能。 |
| Padding | 可变 | 填充字段,全填0。 |
二、IP分片产生原因
数据链路层用MTU(Maximum Transmission Unit,最大传输单元)来限制所能传输的数据包大小,MTU是指一次传送的数据最大长度,不包括数据链路层数据帧的帧头,如以太网的MTU为1500字节,实际上数据帧的最大长度为1514字节,其中以太网数据帧(二层)的帧头为14字节。

如果IP层有数据包要传,而且数据包的长度(包括IP头)超过了MTU,那么IP层就要对数据包进行分片操作,使每一片的长度都小于或等于MTU。
三、IP分片原理
IP分片发生在IP层(三层),不仅源端主机会进行分片,中间的路由器也有可能分片,因为不同的网络的MTU是不一样的,如果传输路径上的某个网络的MTU比源端网络的MTU要小,路由器就可能对IP数据包再次进行分片。而分片数据的重组只会发生在目的端的IP层。
UDP和ICMP不会像TCP那样自己分段,如果组成的 IP数据报长度超过了MTU大小,那么IP数据报显然就要进行分片。(TCP会自己分段所以一般不会产生IP分片,如果TCP不分段而交由IP层分片,则原理一样)
UDP和ICMP认为网络层可以传输无限长(实际上有65535的限制)的数据,当这两种协议发送数据时,它们不考虑数据长度,仅在其头部添加UDP或ICMP首部,然后直接交给网络层。接着网络层IP协议会对数据进行分片,它会直接将整个的上层数据切成N个分片,这样做的结果是,只有最后一个分片具有UDP或者ICMP首部,而其它分片则没有。
一般MTU为1500,IP首部为20字节,UDP或ICMP首部为8字节,数据的净荷(payload)部分预留是1500-20-8=1472字节。如果数据静荷载部分大于1472字节,就会出现分片现象。
下图为MTU设置为100时,IP分片情况:
可以看到IPv4报文长度为114=mtu(100)+14字节的二层以太网长度
mtu(100)-IP头部(20)= IP最大负载长度(80),所以可以看到offset偏移量为80的倍数

四、tcp分段与IP分片(MSS和MTU)
MSS=MTU-IP头部长度-TCP头部长度,所以一般MTU为1500时,可以看到MSS为1460

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/57681.html