IP分片与重组详解
大家对IP数据包头,应该不陌生吧
分片便是与图中圈出来的两个地址有关,本文也是将主要围绕他们展开。
那我们先来了解他们的概念。
标志
一个三比特字段遵循与用于控制或识别片段。他们是(按顺序,从高分以低位):
0:保留; 必须为零。
1位:不分段(DF)
2位:更多片段(MF)
如果DF标志被设置,并且分片需要来路由分组,则该分组被丢弃。这可以发送分组到不具有足够的资源来处理破碎的宿主时,可以使用。它也可用于路径MTU发现由主机IP软件,可以自动或使用诊断工具例如手动平或跟踪路由。对于未分段的数据包,对MF标志被清除。对于分片包,除了最后的所有片段具有MF标志设置。最后片段具有一个非零片偏移量字段,从一个未分段的分组区分它。
分片偏移
片段偏移字段以8字节块为单位进行测量。它是13位长,并指定特定相对于原始未分段的IP数据报的开始的片段的偏移量。零第一片段已偏移。这允许最多(2偏移13(次方) - 1)×8 =字节65,528,这将超过65,535字节的最大IP报文长度与包括报头长度(+ 65,528 20 = 65548字节)。
为什么要分片呢?
互联网协议使网络互相通信。设计要迎合不同物理性质的网络; 它是独立于链路层使用的基础传输技术。具有不同硬件的网络通常会发生变化,不仅在传输速度,而且在最大传输单元(MTU)。当一个网络要的数据报发送到具有较小MTU的一个网络,它可能片段的数据报。在IPv4中,这个功能被放置在因特网层,并且在IPv4路由器,这因此只需要这个层作为最高的一个在其设计中实现的处理。
与此相反,IPv6的,下一代互联网协议的,不允许的路由器来执行分片; 发送数据包之前,主机必须确定路径MTU。
分片
当路由器收到一个数据包时,它会检查目的地址,并确定出接口使用,并且该接口的MTU。如果分组的大小是比MTU大,并且在该分组的头中的不分段(DF)位被设置为0,则路由器可分段的数据包。
路由器将所述分组成片段。每个片段的最大尺寸是MTU减去IP包头的大小(20字节最低; 60个字节的最大值)。路由器会在每个片段到其自己的数据包,有以下改变每个分片报文:
该总长度字段是片段大小。
所述多个片段(MF)标志被设置为除了最后一个,这被设置为0的所有片段。
该片段的偏移字段被设置的基础上,在原来的数据有效载荷的片段的偏移量。这是在8字节块为单位进行测量。
该头校验域被重新计算。
例如,对于1500字节的MTU和20个字节的报头大小,该片段的偏移将是(1500年至1520年)/ 8 = 185。这些倍数倍数0,185,370,555,740,...
它有可能为一包在一个路由器进行分段,并在另一路由器进行分段的片段。例如,考虑4500个字节,没有选项大小和20字节的IP报头大小传输层段。因此IP分组大小为4,520字节。
重组
接收机知道一个分组是片段,如果满足下列条件中的至少一个为真:
“更多碎片”标志设置。(这是除最后所有片段真)。
在“片段偏移”字段是零。(这是为除第一所有片段真)
接收器标识匹配使用外国和当地的互联网地址,协议号,和识别领域的片段。接收器将重组从片段数据与同时使用的片段偏移和多个片段标志相同的ID。当接收机接收的最后一个片段(其具有的“更多片段”标志设置为0),它可以通过乘以最后一个片段的八个偏移,并加入最后一个片段的数据的大小来计算的原始数据有效载荷的长度,。在上面的例子中,这一计算是495 * 8 + 540 = 4500字节。
当接收机具有所有的片段,它可以把它们在正确的顺序,通过使用他们的偏移。然后,它可以通过他们的数据的堆栈作进一步处理。
IP分片与重组详解的更多相关文章
- DPDK IP分片及重组库(学习笔记)
1 前置知识学习 1.1 MTU MTU是最大传输单元( Maximum Transmission Unit)的缩写,指一个接口无需分片所能发送的数据包的最大字节数. MTU范围在46 ~ 1500 ...
- IP地址、子网掩码详解
如何通过子网掩码划分网段 资料一: 一.缺省A.B.C类地址,子网掩码: 二.子网掩码的作用: code: IP地址 192.20.15.5 11000000 00010100 00001111 ...
- IP命令的用法详解
IP命令的用法详解 原创 2017-06-29 10:02:34 0932 摘自:http://www.php.cn/linux-371363.html ip命令是Linux下较新的功能强大的 ...
- 网络基础知识-TCP/IP协议各层详解
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
- TCP/IP协议簇分层详解---转
http://blog.csdn.net/hankscpp/article/details/8611229 一. TCP/IP 和 ISO/OSI ISO/OSI模型,即开放式通信系统互联参考模型(O ...
- redis主从架构,分片集群详解
写在前面:这篇笔记有点长,如果你认真看完,收获会不少,如果你只是忘记了相关命令,请翻到末尾. redis的简单介绍: 一个提供多种数据类类型储存,整个系统都在内存中运行的, 定期通过异步的方式把数据刷 ...
- IP数据包格式详解(转)
摘自:http://blog.163.com/hlz_2599/blog/static/1423784742011112195857956/</> TCP/IP协议定义了一个在因特网上传输 ...
- TCP/IP数据包结构详解
一般来说,网络编程我们只需要调用一些封装好的函数或者组件就能完成大部分的工作,但是一些特殊的情况下,就需要深入的理解网络数据包的结构,以及协议分析.如:网络监控,故障排查等…… IP包是不安全的,但是 ...
- TCP/IP笔记(七)TCP详解
TCP的特点及其目的 为了通过数据包实现可靠性传输,需要考虑很多事情,例如数据的破坏.丢包.重复记忆分片顺序混乱等问题.如不能解决这些问题,也就无从谈起可靠传输. TCP通过检验和.序列号.确认应答. ...
随机推荐
- BZOJ.3329.Xorequ(数位DP)
题目链接 x^3x=2x -> x^2x=3x 因为a^b+((a&b)<<1)=a+b,x^2x=x+2x,所以x和2x的二进制表示中不存在相邻的1. (或者,因为x+2x ...
- UVA.12230.Crossing Rivers(期望)
题目链接 /* 到达一条河时,船在河中的位置是随机的,所以船到达岸边需要的时间在 0~2l/v 均匀分布,所以船到岸的期望为 (0+2l/v)/2 过河需要 l/v 的时间,所以过一条河总的期望为 ( ...
- eclipse如何导入jar包 BUILD PATH
http://blog.csdn.net/believejava/article/details/41750987
- windows 64位环境下php执行环境部署配置
1.下载安装包 地址可以网上找,我下载的是php-5.6.27-Win32-VC11-x64.zip 2.解压安装包,我的解压到D:\tools\php5.6 3.配置php.ini 在解压的目录中, ...
- 前端框架React Js入门教程【精】
现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...
- Java知识回顾 (6)正则表达式、方法、文件与异常
一.正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. Java 正则表达式和 Perl 的是最为相似 ...
- NVIDIA-docker报错:docker-ce (= 5:18.09.0~3-0~ubuntu-xenial) but 18.06.0~ce~3-0~ubuntu is to be installed
报错: The following packages have unmet dependencies: nvidia-docker2 : Depends: docker-ce (= 5:18.09.0 ...
- shell自动补全功能:bash和zsh
首要一点:shell有多种,比如bash.zsh.csh.ksh.sh.tcsh等 因此,制作自动补全功能时,要先搞清楚,你使用的是哪种shell,各个shell制作方法是不同的,网上大部分介绍的是关 ...
- 在 Visual Studio 2010 中配置SharpPcap
最近需要在C#下写一个抓取ARP包的程序,网上找来找去,在C#下只能用SharpPcap来做了.SharpPcap是作者把winPcap用C#重新封装而来的,详细信息见如下的链接. SharpPcap ...
- 微软BI 之SSIS 系列 - 变量查询语句引起列输出顺序不一致的解决方法
开篇介绍 这个问题来自于 天善BI社区,看了一下比较有意思,因为我自己认为在 SSIS中处理各种类型文件的经验还比较丰富(有一年的时间几乎所有ETL都跟文件相关),但是这个问题确实之前没有特别考虑过. ...