简介
IP分片产生的原因是网络层的MTU,当IP报文长度大于MTU时,需要利用分片和重组来完成报文的传输。
最大传送单元(MTU):MTU是链路层可封装数据的上限,以太网的MTU为1500字节,也就是IP分组最大为1500,超过则需要进行分片。
IP头格式:
IP分片字段:
- Flags (标志位)
- 3比特
- Bit 0: 保留位,必须为0。
- Bit 1: DF(Don't Fragment),能否分片位,0表示可以分片,1表示不能分片。
- Bit 2: MF(More Fragment),表示是否该报文为最后一片,0表示最后一片,1代表后面还有。
- Fragment Offset (片偏移)
- 13比特
- 分片重组时会用到该字段。表示较长的分组在分片后,某片在原分组中的相对位置。以8个字节为偏移单位。
示例
在以太网MTU为1500的环境下,发送一个数据长度为3000的UDP协议报文,即要发送IP数据部分长度为3008;分三片发送,发送的数据部分长度分别为1480、1480、48。
发包命令
hping3 -I em2 -c 1 --udp -d 3000 192.168.13.41
抓包命令
tcpdump -i em2 -envvv host 192.168.13.41 -w xfabc.pcap
第一片
- 帧长:1514字节(不含CRC4字节)
- IP总长度:1500字节(IP头20字节+数据1480字节)
- Flags标识位:MF为1(后面还有分片)
- Fragment Offset片偏移:0
第二片
- 帧长:1514字节(不含CRC4字节)
- IP总长度:1500字节(IP头20字节+数据1480字节)
- Flags标识位:MF为1(后面还有分片)
- Fragment Offset片偏移:1480(185*8)
第三片
- 帧长:82字节(不含CRC4字节)
- IP总长度:68字节(IP头20字节+数据48字节)
- Flags标识位:MF为0(后面没有分片了)
- Fragment Offset片偏移:2960(1480+1480)