报文分片(16位分片标识、3位标志、13位片偏移字段详解)

这篇具有很好参考价值的文章主要介绍了报文分片(16位分片标识、3位标志、13位片偏移字段详解)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、什么是分片?

二、如何分片?

三、如何组装?(16位分片标识、3位标志、13位片偏移)

1、回顾16位分片标识、3位标志、13位片偏移

2、组合分片报文

四、分片的影响

1、对UDP的影响

2、对TCP的影响


一、什么是分片?

网络层再继续向下传递的时候,会限制报文的大小,mtu(max transform unit)是最大传送单元,代表了每次所能传输报文的大小(含IP报头)。当我们的报文大小(含IP报头)超过了1500 个字节的时候,将一个报文分成多部份来传递,这就是“分片”。

报文分片(16位分片标识、3位标志、13位片偏移字段详解)

注意:分片不是大多数情况,而是特殊情况。本来传递一个报文就有着丢包的风险,现在要传递一堆报文,丢包的概率会增加。

二、如何分片?

假设 IP协议 收到上层的报文大小为 1700 字节。这1700字节在IP协议看来就是数据,不考虑选项字段,加上IP报头的20个字节,要向下传递的大小为1720个字节,很显然超出了传输限制。

报文分片(16位分片标识、3位标志、13位片偏移字段详解)

那么说明需要对这1700个字节进行分片,注意,是1700个字节分片,而不是1720个字节,先对数据进行分片,然后每一部分再加上报头。因为是分成多个报文来发送,每一个报文都要送到对端,那就必须加上报头来告诉下一层目标主机的IP地址。

报文分片(16位分片标识、3位标志、13位片偏移字段详解)

三、如何组装?(16位分片标识、3位标志、13位片偏移)

1、回顾16位分片标识、3位标志、13位片偏移

因为这些报文由一个完整的报文分片得到,不能随意组合。这就需要用到IP报头中的三个字段16位分片标识、3位标志、13位片偏移。

  • 13位片偏移:分片以后,各个部分在原始报文的哪个位置,即在原始报文中的偏移量。

  • 16位分片标识:如果一个报文不分片,不同报文之间的16位标识符是不同的;如果一个报文分片了,分片报文的16位标识符是一样的,说明这些分片报文原本属于一个完整的报文。

  • 3位标识:1位保留、1位标识禁止分片、1位标识更多报文(1说明后面跟了具有16位标志符的报文,0说明后面没有)

报文分片(16位分片标识、3位标志、13位片偏移字段详解)

2、组合分片报文

第一步,通过三位标识符的第三位标识“更多报文”判断当前收到的报文后面是否存在其他分片报文。

如果第三位标识为1,说明当前报文是分片报文,加入到具有相同16位标识符的集合中,进入下一步;如果为0,可能为普通报文,也有可能是分片报文的最后一部分,此时需要根据片偏移判断。

  • 如果片偏移为0,说明是普通报文,结束判断,直接向上层交付;
  • 如果不为0,说明是分片报文,加入到具有相同16位标识符的集合中

报文分片(16位分片标识、3位标志、13位片偏移字段详解)

第二步,判断所有的报文是否收全。将集合中的报文按照片偏移进行升序排序。

判断起始分片报文是否收到:如果第一个报文的片偏移为0,说明起始分片报文收到了。

判断末尾分片报文是否收到:如果最后一个报文的三位标志位中的第三位为0,说明末尾分片报文收到了

判断中间报文是否收到:以第二个报文为例,第二个报文的片偏移理应等于 第一个报文的片偏移 + 第一个报文的数据长度,以此来判断第二个报文是否收到;依此类推,可以判断中间报文是否收到。

=》该集合中一旦发现少了任意一个报文,整个集合中的报文直接全部丢弃!也不会通知上层TCP

四、分片的影响

分片有风险,只要有一部分丢了,如果对端网络层无法组装,要组装的几部分会全部丢弃,对方TCP没有收到报文,就认为是丢包了。所以一般不建议分片,分片会增加丢包概率。

1、对UDP的影响

UDP没有发送缓冲区,应用层要发多少,到了网络层就是多少,这个时候就得老老实实分片。分片会增加丢包的概率,一旦某个分片报文丢了导致无法组装就会将相关的分片报文全部丢弃。(是否相关可以根据16位分片标识来判断)

2、对TCP的影响

因为TCP有缓冲区的存在,想发多少、什么时候发都由TCP决定,TCP可以做到自己控制数据段的长度,然后再传到网络层,此时就无需网络层来分片了。

但TCP每次可以发送的数据长度不是无限大,受制于MTU和对方主机的MSS(Max Segment Size),即最大消息长度。文章来源地址https://www.toymoban.com/news/detail-455510.html

  • 受制于MTU的意思是,为了不分片,TCP每次最多携带的数据是多少。不同系统的MTU可能有所不同,MTU减去TCP报头和IP报头的大小,就是TCP每次最多可以发送的数据量。
  • 受制于对方主机的MSS的意思是,对方每次最多可以接收多少。双方在发送SYN的时候会在TCP头部写入自己可以支持的MSS值,在得知对方的MSS以后,选取较小的作为最终MSS。MSS的值就是在TCP首部的40字节变长选项中(kind=2);

到了这里,关于报文分片(16位分片标识、3位标志、13位片偏移字段详解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2.2 - 网络协议 - IP协议,IP地址划分,报文格式,数据分片,抓包实战

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 IP(Internet Protocol)协议也叫 「网际互联协议」 ,负责 「不同网络」 之间的

    2024年02月06日
    浏览(62)
  • IP首部报文字段

    字段如下图所示 版本 表示 IP 协议的版本。通信双方使用的 IP 协议版本必须一致。目前广泛使用的IP协议版本号为 4,即 IPv4 首部长度 这个字段所表示数的单位是 32 位字长(1 个 32 位字长是 4 字节)。因此,当 IP 的首部长度为 1111 时(即十进制的 15),首部长度就达到 60 字

    2024年02月17日
    浏览(32)
  • IP与TCP报文固定头部中的字段

    IP报文固定头部中的字段作用如下: 1.版本(Version)            该字段用于指定IP协议的版本,IPv4的版本号为4,IPv6的版本号为6。 2.头部长度(Header Length)           该字段用于指定IP报文头部的长度,单位为4字节。由于IPv4头部中可能包含多个选项字                 

    2024年04月23日
    浏览(39)
  • ElasticSearch修改分片数和副本数及增加字段

    一、修改副本数 PUT test/_settings {     \\\"index\\\": {         \\\"number_of_replicas\\\" : 1     } } 二、修改分片数 ElasticSearch中的数据会被分别存储在不同的分片上,索引库的分片数量是在索引库创建的时候通过settings去设置的,如果不设置,分片数默认是5,分片数一旦确定就不能改变。如果

    2024年02月05日
    浏览(44)
  • Linux 1.2.13 -- IP分片重组源码分析

    本文源码解析参考: 深入理解TCP/IP协议的实现之ip分片重组 – 基于linux1.2.13 计网理论部分参考: 自顶向下学习计算机网络 Linux 1.2.13 源码仓库链接: read-linux-1.2.13-net-code 笔者在完成cs144 lab 后,发现自己对IP层分片这部分知识点模糊不清,阅读了自顶向下学习计算机网络书籍对应

    2024年02月13日
    浏览(40)
  • ElasticSearch数据库修改分片数、副本数及修改mapping字段

            对于已经存在的索引,副本数可以随时修改。 示例演示如下:         ElasticSearch中的数据会被分别存储在不同的分片上,索引库的分片数量是在索引库创建的时候通过settings去设置的,如果不设置,分片数默认是5,分片数一旦确定就不能改变。分片数量的设

    2024年02月02日
    浏览(47)
  • MySQL运维13-Mycat分库分表之按月分片

    使用场景为按照自然月来分片,每个自然月为一个分片,但是一年有12个月,是不是要有12个数据节点才行呢?并不是。例如我现在只有三个分片数据库,这样就可以1月在第一个数据分片中,2月在第二个数据分片中,3月在第三个数据分片中,当来到4月的时候,就会重新开始

    2024年02月04日
    浏览(46)
  • 通过两种实现方式理解CANoe TC8 demo是如何判断接收的以太网报文里的字段的

    假设有一个测试用例,需求是:编写一个测试用例,发送一条icmpv4 echo request报文给DUT,identifier字段设置为10。判断DUT能够回复icmpv4 echo reply报文,且identifier字段值为10。 实现:在canoe的simulation setup界面插入一个test节点,ip地址为:192.168.0.1,mac地址为:02:00:00:00:00:01,作为测

    2024年02月15日
    浏览(63)
  • IPv4报文格式详解和报文示例

    目录 一,IP数据报文的组成 二,IP报文格式 三,IPv4报文示例 作者:柒烨带你飞 一个IP数据报文都是 由首部和数据两部分组成 。 每个 IP 数据报都以一个 IP 报头开始。IP 报头中包含大量信息,如源 IP 地址、目的 IP 地址、数据报长度、IP 版本号等。每个信息都被称为一个字段

    2023年04月08日
    浏览(43)
  • SQL窗口分析函数使用详解系列三之偏移量类窗口函数

    本文以HiveSQL语法进行代码演示。 对于其他数据库来说同样也适用,比如SparkSQL,FlinkSQL以及Mysql8,Oracle,SqlServer等传统的关系型数据库。 已更新第一类聚合函数类,点击这里阅读 ①SQL窗口函数系列一之聚合函数类 ②SQL窗口函数系列二之分组排序窗口函数 本节介绍Hive窗口分

    2024年04月26日
    浏览(40)