当前位置: 首页 > news >正文

初识Linux · IP分片

目录

前言:

IP分片

分片vs不分片

如何分片

分片举例

三个字段


前言:

前文IP协议·上和IP协议·下我们已经把IP协议的报头的大多数字段介绍了,唯独有三个字段现在还有介绍,即16位标识,8位协议,13位片偏移,今天,我们将通过IP分片的介绍,隆重介绍这三个字段,那么废话不多说,直接进入主题吧!


IP分片

我们熟知报文在向下交付的时候,分别是经过应用层,传输层,网络层,再到数据链路层,那么在报文交付的过程我们是否考虑过报文的字节数是否会超过限制?

实际上,在报文交付的时候,我们拿以太网举例,在数据链路层存在MTU,即数据链路层定义的最大帧负载,说简单一点就是最大传输单元

即从传输层下来的数据不能超过MTU,而MTU在以太网中代表的是1500字节,在不同的网络中有不同的配置。那么传输层的报文经过网络层,封装的时候发现的数据一旦超过了MTU,就会进行分片。

分片vs不分片

我们知道,报文超过了MTU就会在网络层分片,那么分片就代表了报文会从1个报文变成多个报文,所以分片vs不分片的话题,也就变成了1个报文vs多个报文的话题了。

对于这个话题来说,非常的直观,因为网络世界中存在一个老生常谈的话题——丢包问题。如果分的片中,有一片丢失了,那么整个报文就丢失了,此时就会重传,会给网络带来额外的负担,所以分片并不是网络转发的主流,并且因为分片了,那么还要组装,有了组装,我们还得担心是否会有分片丢失,如果分片丢失,还需要重传,即便没有丢失,也需要判断是否发生了丢包的情况。这也就是为什么不想分片的原因。

那么如何做到不分片也很简单,只要发送的数据不超过对应网络的MTU就可以了,但是架不住有的情况下只能分片,所以本文的侧重点主要还是在如何分片上。

如何分片

分片举例

假设现在有一个3000字节的报文,我们一想,MTU不是1500字节吗?所以3000直接除以1500呗,就分两个片就行了呗。

实际上这个操作是非常错误的,因为报文在网络世界中往往要有一个标识,比如IP报头等。如果我们直接一分为2,前1500字节好说,有对应的IP报头嘛,但是后面的1500字节可就遭罪了,就只有有效载荷,报头呢?啥也没有,那谁接收了该报文不迷糊啊。

所以分片的时候,实际上是这样的(只考虑IP的20字节报头):

原始为3000字节的数据,分为了三片,每片都有自己的报头和有效载荷。这是正确分法。

三个字段

到这里,我们可以开始了解这三个字段了,分别是16位标识,3位标志,13位片偏移

对于16位标识来说,是对不同分片的一个分类,毕竟我们要有一个认识就是:OS内存在大量的报文,有的是已经分片了的,有的是没有分片的,那么对于已经分片的报文,我们后面组装的时候知道哪些分片是一类的,哪些不是,这样才能从分片的报文组装为一个完整的报文。

所以16为标识的作用是:标识从同一个报文分下来的分片报文

对于之后组装的时候,我们要清楚一个点就是,如何进行组装?稀里糊涂的组装?逮到谁就是谁吗?那肯定不行,所以我们需要一个字段来表示该分片是原始报文的哪个位置。

在IP报头中标识位置的字段就是13位片偏移,通过该字段有效的标记分片在原始报文的偏移量是多少,比如上面的偏移量分别是0,1480,2960。因为第一片的还有20字节的报头,所以偏移量应该是1480。

那么有意思的来了,我们知道片偏移量是13位,但是IP有一个字段是16位总长度(总字节数),也就代表了数据的最大可以到2^16次方,而片偏移量只有13位,所以偏移量最大只能表示2^13字节,那么没有表示出来的字节数怎么处理?

实际上,在分片的时候,实际偏移的字节数是偏移量右移8位得到的,也就是说这个偏移量一定是能够被8整除的。那么如果不能被8整除怎么办?这问题在网络层严格规定了,只有最后一片报文的字节数可以不被8整数,前面的报文都是要能被8整除的。那么在组装的时候,可以通过偏移量左移得到对应的真实的片偏移量。

所以13位片偏移的作用是:表示该分片在原始有效载荷的偏移量

三位标记字段就比较简单了,有的报文可以分片有的不能,所以三位标志字段中第一位是保留字段,现在不使用,第二个是置为1代表的是禁止分片,这个时候报文长度如果超过了MTU,IP就会丢弃该报文。第三位表示更多分片的意思,除了最后一个分片设置为0,其他的都是1,为0的时候类似于一个结束标志,就像C语言的字符串使用斜杠0结尾一样。

所以3位标志的作用是:表示该报文是否分片,并且如果分片,最后的分片标志位为0.        

那么在组装的时候,我们一定是要知道分片在原始有效载荷的位置,所以片偏移量有效帮我们解决了这个问题,因为按照顺序来说,依次的片偏移量是升序排列的。

那么我们如何区分报文的是分片了的,如果分片了,它是第一个或者是其他位置的?

对于没有分片的:更多分片为0 && 片偏移量为0。
对于分片了的,第一片的更多分片为1 && 片偏移量为0,其他片的更多分片为1 && 片偏移量>0,最后一片的更多分片为0 && 片偏移量不为0

这样就完美区分了分片和不分片,那么分片我们清楚了,组装不就也清楚了吗?

那么真正的分片如下:

以上就是IP分片的全部内容。


感谢阅读!

相关文章:

  • 牛客网 NC22167: 多组数据a+b
  • ROS--NAVI DWA
  • 牛客网刷题:NC208813求逆序数
  • 深度学习之用CelebA_Spoof数据集搭建一个活体检测-一些模型训练中的改动带来的改善
  • Linux系统——进程结束时退出的分析与总结(关于wait与waitpid函数)
  • 扣子(Coze)案例:工作流生成小红书心理学卡片
  • 测序的原理
  • 鸿蒙OSUniApp 实现的地图定位与导航功能#三方框架 #Uniapp
  • 5月15日day26打卡
  • Spring Boot 拦截器:解锁5大实用场景
  • 移动端网络调试全流程:从常见抓包工具到Sniffmaster 的实战体验
  • 小刚说C语言刷题—1088求两个数M和N的最大公约数
  • 每周靶点:TIGIT、ICAM1及文献分享
  • 嵌入式自学第二十二天(5.15)
  • 21、工业大数据分析与实时告警 (模拟根因分析) - /数据与物联网组件/bigdata-root-cause-analysis
  • 线程的两种实现方式
  • 鸿蒙OSUniApp实现的倒计时功能与倒计时组件(鸿蒙系统适配版)#三方框架 #Uniapp
  • 低损耗高效能100G O Band DWDM 10km光模块 | 支持密集波分复用
  • Elasticsearch 快速入门指南
  • ChromaDB 向量库优化技巧实战
  • 英国6月初将公布对华关系的审计报告,外交部:望英方树立正确政策导向
  • 一船明月过沧州:为何这座城敢称“文武双全”?
  • 坚持吃素,是不是就不会得高血脂了?
  • 市场监管总局召开平台企业支持个体工商户发展座谈会
  • 秦洪看盘|指标股发力,A股渐有突破态势
  • 前四个月人民币贷款增加10.06万亿元,4月末M2余额同比增长8%