TCP协议之IP数据报分片

版权声明:本文为博主原创文章,未经博主允许不得转载。 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数据报分片的原因
  • 分片怎样重组

猜你喜欢

转载自blog.csdn.net/Function_Dou/article/details/87826819