ddup

理解ip分片

· Read in about 1 min · (69 Words)
network

Image of IP header

ip数据包在经过每一个链路的时候, 如果ip数据包的大小大于链路的MTU就会进行分片.
如果该ip数据包有don’t fragment的标记, 则链路设备会丢弃该过大的ip数据包.

ip数据包在进行分片后, 目的主机需要以下信息进行包重组:
1. Fragment ID —所有属于同一个原始ip数据包的分片拥有一个同样的值.
2. Place & Offset —标识分片在原始ip数据包中的位置.
3. Length —分片的长度
4. MF flag —指示该分片包是否可以继续分片.

假设有一个4000个字节的icmp数据包(包含20个字节的ip头部, 8个字节的icmp协议头, 3972个字节的应用数据).
icmp packet

该数据包在经过MTU为1500的链路时, 会进行分片, 分片后如下图:
icmp packet fragment

tcpdump抓包显示如下:
> client.com > server.com: icmp: echo request (frag 21233 : 1472@0+)
> client.com > server.com: icmp: echo request (frag 21233 : 1480@1472+)
> client.com > server.com: icmp: echo request (frag 21233 : 1020@2952)

其中21233表示Fragment ID, 1472@0+表示从0个字节开始的1472个字节.

ip分片如果有一个分片丢包则会造成整个ip数据包重传, 因此分片会影响性能, 要尽量避免分片.

Comments