IPv4报文分片
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报文分片的更多相关文章
- IP 层收发报文简要剖析3--ip输入报文分片重组
在ip_local_deliver中,如果检测到是分片包,则需要将报文进行重组.其所有的分片被重新组合后才能提交到上层协议,每一个被重新组合的数据包文用ipq结构实例来表示 struct ipq { ...
- TCP和UDP报文分片的区别
搞了三年网络,今天才知道这个细节,汗,总结下: MTU大家都知道,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节.一个IP数据报在以太网中 传输,如果它的长度大于该MTU ...
- 解析IPV4报文 和IPV6 报文的 checksum
解析IPV4报文和IPV6报文的checksum的算法: 校验和(checksum)算法,简单的说就是16位累加的反码运算: 计算函数如下: 我们在计算时是主机字节序,计算的结果封装成IP包时是网络字 ...
- Networking - IPv4 报文格式
每个 IP 数据报都以一个 IP 报头开始.源计算机的 TCP/IP 软件构造这个 IP 报头,目的计算机的 TCP/IP 软件利用 IP 报头中封装的信息处理数据.IP 报头包含大量信息,包括源 I ...
- IP报文分片
1. 最大传输单元(Maximum Transmission Unit,MTU). 以太网帧中的数据长度规定最小46 字节,最大1500 字节,MTU 指数据帧中有效载荷的最大长度,不包括帧首部的长度 ...
- 如何设置IPv4和IPv6报文的DSCP值——网络测试仪实操
一.操作说明 在QoS测试中,经常要设置不同优先级的报文,来验证被测设备对于优先级的调度.所以,我们就要了解如何设置IPv6和IPv6报文中的DSCP(大部分使用DSCP值,也会用到TOS值) 这里我 ...
- Linux内核IP层的报文处理流程(一)
本文主要讲解了Linux内核IP层的整体架构和对从网卡接受的报文处理流程,使用的内核的版本是2.6.32.27 为了方便理解,本文采用整体流程图加伪代码的方式对Linxu内核中IP整体实现架构和对网卡 ...
- IPV4基本知识介绍
转自华为官网 1.1 介绍 定义 IPv4(Internet Protocol Version 4)协议族是TCP/IP协议族中最为核心的协议族.它工作在TCP/IP协议栈的网络层,该层与OSI参考 ...
- 第十章 用户数据报协议和IP分片
用户数据报协议和IP分片 UDP是一种保留消息边界的简单的面向数据报的传输层协议.它仅提供差错检测.只是检测,而不是纠正,它只是把应用程序传给IP层的数据发送出去,但是并不会保证数据能够完好无损的到达 ...
随机推荐
- HihoCoder - 1794:拼三角形 (状压DP)
描述 给定 n 根木棍,第 i 根长度为 ai 现在你想用他们拼成尽量多的面积大于 0 的三角形,要求每根木棍只能被用一次,且不能折断 请你求出最多能拼出几个 输入 第一行一个正整数 n 第二行 n ...
- The Suspects 并查集
Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized ...
- JVM 加载class文件的原理
PS:类的装载过程是ClassLoader,只有把类 加载 到 JVM后才能运行: PS:两种加载类的方式: 显示:new 隐式:class.forname() PS:动态的执行,用到谁,加载谁:
- ubuntu安装sublime教程
1.安装Sublime Text 3 及常用的神器插件 ①首先添加sublime text 3的仓库:sudo add-apt-repository ppa:webupd8team/sublime-t ...
- docker 方式运行drill
drill 1.14 版本已经官方支持使用docker 直接运行可,还是比较方便的,尽管镜像 有点大,但是实际测试使用还是比较方便的,实际上自己做一个也比较简单. 下载镜像 docker pull d ...
- stardog 基本试用(社区版)
stardog 是一个知识图谱的实现,实现了sparql 以及graphql 协议,使用起来也比较简单,官方文档挺全 下载 社区版,注册之后会有邮件通知,里面会包含license 以及软件包 下载地址 ...
- smarty学习——编写扩展
在进行了以上的开发环境的配置之后就是,进行进一步的学习,为了开发的方便我们一般会使用oop的编程思想,进行方便的处理 如下: 1.smartyUser 的创建 <?php require_onc ...
- 用vmware安装gho文件心得
在卡饭学到了不少知识,下面是我的一个心得分享,希望大家能用的上. 用vmware安装gho文件心得 方法1:diskgenius+ghostexp用vm新建一个空白硬盘虚拟机, 记住虚拟机文件的存储位 ...
- binlog cache size设置是否合理判断
二进制日志是写操作是,首先写入二进制日志缓冲(binlog_cache)然后commit,再从binlog_cache写入到binlog文件,默认大小为32K,而binlog_cache是sessio ...
- windows server 2008 修改域的密码策略
1.一般情况下,进入本地安全策略修改密码策略时,,密码策略已经被锁定,无法更改,若要修改域服务器上的密码策略,请按照步骤2--6进行修改 2.在此情况下要改密码策略的过程如下, 进入组策略管理: 3. ...