1:为什么需要分片

每个数据链路层协议都有自己的帧格式,在这个格式中有一个字段是"数据字段最大长度"(MTU,最大传输单元),当数据报被封装成帧时,数据报的总长度必须小于这个最大长度.

它是由网络使用的硬件和软件带阿里的限制确定的.

IPv4数据报的最大长度2^16(65535)字节,如果MTU>=2^16,那么什么也不用做,直接把IPv4的数据报塞到帧的数据段中就行了,但是对于MTU<2^16的数据链路层协议,那就应该把

数据报分成很多份,这个步骤就是分片.

2.怎么分片

当数据报被分片时

1:每一个数据报文都有自己的首部,大部分的字段是重复的

2:选项可以复制也可以不复制.只有数据报中的数据是分片的

3:检验和必须重新计算,因为检验和只包含头部,然而头部最少有三个字段(标识,标志,分片偏移量)改变了

4:如果分片后的数据遇到更小的MTU,需要再次分片

使用IPv4协议中 标识,标志,分片偏移来进行数据报分片.

标识:头部中16位的字段,标志了从源主机发出的一个数据报,当数据报离开源主机后,此标识与源IP地址的组合必须唯一确定这个数据报.

   进行分片时,这个字段必须复制到所有的分片中,这样目的主机收到所有被分片的报文后,才知道把那些分片组装起来

标志:头部中3位的字段,

   1:第一保留未用

   2:第二位称为不分片位,如果是1,这个数据报不能进行分片,如果不分片过不了网络,只能丢弃,然后发送一个ICMP差错报文回去.如果是0,那就可以分片

   3:第三位是还有分片位,若这个值是1,则表示这个数据报不是最后的分片,如果是0,表示是最后一个分片

分片偏移:头部中13位的字段

  1:这个字段表示的是分片在整个数据报中的相对位置,看后面的计算过程

  2:8字节为度量,为什么?而这个字段只有13位,它不能表示超过8191个字节,如果以8字节为度量单位,那么可以表示65528字节,

     超过IPv4中数据段的最大值(2^16-1-20)=65515

  3:第一个分片的字节数量必须能够被8除尽

具体分片过程

            IPv4数据报首部格式

Ip协议版本4位

首部长度4位

服务类型8位

总长度16位

标识16位

标志3位

分片偏移量13位

生存时间8位

协议8位

头部检验和16位

源IP地址  32位

目的IP地址 32位

选项+填充

          未分片的数据报:首部长度是20,数据长度是5000

5020

123

0

0

0

          假设我们一个分片大小是2000

            第一个分片如下

2000+20=2020

123

0

1

0   (0/8=0)

0-1999字节(为了便于观看加上的内容)

            第二个分片

2000+20=2020

123

0

1

250  (2000/8=250)

2000-3999字节

            第三个分片

1000+20=1020

123

0

0

500  (4000/8=500)

4000-4999字节

  

IPv4报文分片的更多相关文章

  1. IP 层收发报文简要剖析3--ip输入报文分片重组

    在ip_local_deliver中,如果检测到是分片包,则需要将报文进行重组.其所有的分片被重新组合后才能提交到上层协议,每一个被重新组合的数据包文用ipq结构实例来表示 struct ipq { ...

  2. TCP和UDP报文分片的区别

    搞了三年网络,今天才知道这个细节,汗,总结下: MTU大家都知道,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节.一个IP数据报在以太网中 传输,如果它的长度大于该MTU ...

  3. 解析IPV4报文 和IPV6 报文的 checksum

    解析IPV4报文和IPV6报文的checksum的算法: 校验和(checksum)算法,简单的说就是16位累加的反码运算: 计算函数如下: 我们在计算时是主机字节序,计算的结果封装成IP包时是网络字 ...

  4. Networking - IPv4 报文格式

    每个 IP 数据报都以一个 IP 报头开始.源计算机的 TCP/IP 软件构造这个 IP 报头,目的计算机的 TCP/IP 软件利用 IP 报头中封装的信息处理数据.IP 报头包含大量信息,包括源 I ...

  5. IP报文分片

    1. 最大传输单元(Maximum Transmission Unit,MTU). 以太网帧中的数据长度规定最小46 字节,最大1500 字节,MTU 指数据帧中有效载荷的最大长度,不包括帧首部的长度 ...

  6. 如何设置IPv4和IPv6报文的DSCP值——网络测试仪实操

    一.操作说明 在QoS测试中,经常要设置不同优先级的报文,来验证被测设备对于优先级的调度.所以,我们就要了解如何设置IPv6和IPv6报文中的DSCP(大部分使用DSCP值,也会用到TOS值) 这里我 ...

  7. Linux内核IP层的报文处理流程(一)

    本文主要讲解了Linux内核IP层的整体架构和对从网卡接受的报文处理流程,使用的内核的版本是2.6.32.27 为了方便理解,本文采用整体流程图加伪代码的方式对Linxu内核中IP整体实现架构和对网卡 ...

  8. IPV4基本知识介绍

    转自华为官网 1.1  介绍 定义 IPv4(Internet Protocol Version 4)协议族是TCP/IP协议族中最为核心的协议族.它工作在TCP/IP协议栈的网络层,该层与OSI参考 ...

  9. 第十章 用户数据报协议和IP分片

    用户数据报协议和IP分片 UDP是一种保留消息边界的简单的面向数据报的传输层协议.它仅提供差错检测.只是检测,而不是纠正,它只是把应用程序传给IP层的数据发送出去,但是并不会保证数据能够完好无损的到达 ...

随机推荐

  1. OVSSL企业证书认证

    最近,在做http->https的转化,虽然我没有操作证书的安装过程,但是在这个过程中学习到不少知识呢. 因为我没有操作,所以操作上我就不知道了.下面是这个过程中要注意的一些事项: 1.公司名称 ...

  2. AngularJS的简单订阅发布模式例子

    控制器之间的交互方式广播 broadcast, 发射 emit 事件 类似于 js中的事件 , 可以自己定义事件 向上传递直到 document 在AngularJs中 向上传递直到 rootScop ...

  3. HPU 1166: 阶乘问题(一)

    1166: 阶乘问题(一) [数学] 时间限制: 1 Sec 内存限制: 128 MB提交: 58 解决: 24 统计 题目描述 小H对阶乘!很感兴趣.现在他想知道N!N!的位数,由于NN太大了,所以 ...

  4. SQL Server2008 R2命令行启动及停止SQL服务的方法

    ===================================================== 在 SQL Server中,想要启动或停止SQL Server服务,通过SQL Server ...

  5. 来自官方的一些dbt 最佳实践

    限制对原始数据的依赖性 您的项目将取决于存储在数据库中的原始数据.我们建议制作所谓的“基本模型”,以最大限度地减少对原始数据表的依赖性.在此约定中,基本模型可以具有以下职责: 仅选择与当前分析相关的字 ...

  6. grandstack 基于graphql&&react&& apollo&& neo4j 的全栈开发工具

    grandstack是一个基于graphql&&react&& apollo&& neo4j 的全栈开发工具. 有篇关于graphql 的5个常见问题的 ...

  7. 【转】每天一个linux命令(60):scp命令

    原文网址:http://www.cnblogs.com/peida/archive/2013/03/15/2960802.html scp是secure copy的简写,用于在Linux下进行远程拷贝 ...

  8. 洛谷4030(Codeplus11月月赛)可做题1

    题目:https://www.luogu.org/problemnew/show/P4030 原来一个方阵巧妙的充要条件是该方阵的每个2*2子方阵都是巧妙的!!! 可以把每一行选的列视为一个排列,需要 ...

  9. HttpFileCollection类

    最近在学HttpRequest类搞文件上传的时候看到Request.Files返回了HttpFileCollection 这个类的一个对象,这个类用于获取浏览器上传的文件集合,在文件上传的时候可以通过 ...

  10. ML(4.3): R Random Forest

    随机森林模型是一种数据挖掘模型,常用于进行分类预测.随机森林模型包含多个树形分类器,预测结果由多个分类器投票得出. 决策树相当于一个大师,通过自己在数据集中学到的知识对于新的数据进行分类.俗话说得好, ...