版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Function_Dou/article/details/87826819
在TCP中MSS和MTU中讲到过分片, 分片 : 当IP数据报的字节大于了MTU的值就需要数据报进行分片, 将数据放入不同的数据报中发送.
IP数据报格式
接下来会涉及到IP数据报的格式.
本节主要涉及IP数据报 : 标记 , 片偏移.
IP数据报分片
-
数据分组发送并不一定是按照顺序发送的, 对端也不一定按顺序接收.
比如一段数据超过了MTU的值而被分成了1, 2, 3片, 发送时可能是先发送2片, 再发送3片1片; 对端接收分片时可能3片滞后, 先收到2片再是1片, 最后是3片. 但是通过IP数据报中的信息将分片进行重组.
-
对端通过IP数据报中的片偏移和标志将分片进行重组.
标志 : 只有3位.
- 最低位MF : MF=1表示还有分片; MF=0表示没有分片
- 中间位DF : DF=1表示不能进行分片; DF=0表示可以进行分片.
片偏移 : 13位
- 该分组在原数据的位置. 该值一定是8的倍数.
-
分片丢失将重传整个IP数据报.
当IP数据报被分片后, 到达目的主机后会对IP数据报分片进行重组, 进而组成一个IP数据报, 但是如果其中缺少一个IP分片, 也就只能缺少了, 因为IP没有超时重传机制. 这是由上层协议支持的, 而对于上层协议(如TCP), 发现少了IP数据报不完整, 会进行整个IP数据报的重传, 而不是只重传其中某一个分片.
实验验证
验证方法 : 因为我的实验环境采用的是动态端口, MTU为65536, 所以发送的数据尽量就大一点. 客户端随机生成10000个字节的数据, IP数据报将数据进行分组发送.
实验代码 : [地址]
服务端输入 :
./a.out 1 8080 192.168.1.16
客服端输入 :
./a.out 2 8080 192.168.1.16
可以看到该数据被分成了5组进行发送, 虽然远远没有达到MTU的大小, 但是也足够大了.
总结
- 理解IP数据报分片的原因
- 分片怎样重组