精华内容
下载资源
问答
  • IP分片

    2021-04-11 15:10:06
    IP分片属于网络层特性 所包含的字段 identification: 标识,主机每发一个报文,加 1 Flages: 标志位 Bit 0: 保留位,必须为0 Bit 1:DF,分片为0,不能分片为1 Bit 2: MF,表示是否该报文为最后一片,0表示最后...

    IP分片属于网络层特性
    所包含的字段
    在这里插入图片描述

    identification: 标识,主机每发一个报文,加 1
    Flages: 标志位
    在这里插入图片描述
    Bit 0: 保留位,必须为0
    Bit 1:DF,分片为0,不能分片为1
    Bit 2: MF,表示是否该报文为最后一片,0表示最后一片,1表示后面还有
    Fragment Offset : 片偏移

    举例示意
    6000字节的数据进行分片
    在这里插入图片描述
    由于每个数据前都有IP头部20字节,第一片分片1480 剩余4520
    在这里插入图片描述
    id 为 x DF(是否分片)=0 MF(是否还有分片):1 F0:片偏移(之前分片的字节):0
    第二片分片1480 剩余3040
    在这里插入图片描述
    id 为 x DF(是否分片)=0 MF(是否还有分片):1 F0:片偏移(之前分片的字节):1480

    第三片分片1480 剩余1560
    在这里插入图片描述
    id 为 x DF(是否分片)=0 MF(是否还有分片):1 F0:片偏移(之前分片的字节):2960
    第四片分片1480 剩余80
    在这里插入图片描述
    id 为 x DF(是否分片)=0 MF(是否还有分片):1 F0:片偏移(之前分片的字节):4440
    第五片分片80
    在这里插入图片描述
    id 为 x DF(是否分片)=0 MF(是否还有分片):0 F0:片偏移(之前分片的字节):5920
    可以通过抓包获取以上数据
    运行环境
    在这里插入图片描述
    配置
    设置两台路由器的IP
    配置 6000字节

    ping -s 6000 10.1.1.2
    

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • TCP/IP——IP分片

    2019-02-19 21:36:02
    一、IP分片 IP把出接口的MTU与数据报长度进行比较,如果需要则进行分片。分片可以发送在原始发送端主机上,也可以发送在中间路由器时。把一份IP数据报分片以后,只有到达目的地才进行重新组装,重新组装是由目的端的...

    一、IP分片

    IP把出接口的MTU与数据报长度进行比较,如果需要则进行分片。分片可以发送在原始发送端主机上,也可以发送在中间路由器时。把一份IP数据报分片以后,只有到达目的地才进行重新组装,重新组装是由目的端的IP层来完成的,其目的是使分片和重新组装过程对传输层是透明的,已经分片过的数据报可以再次进行分片。

    使用UDP很容易导致分片

    任何时候I P层接收到一份要发送的 IP数据报时,它要判断向本地哪个接口发送数据(选路),并查询该接口获得其 M T U。 I P把M T U与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。
    对于TCP来说,MTU是路径MTU。

    对于UDP来说,MTU是本地的MTU。

    无论TCP还是UDP,即使在发送时,已按MTU大小来限制,但仍有可能在中途发生分片。这是因为,对于TCP来说,路径MTU并不一定是当前路径的MTU,当前路径的MTU仍可能小于源端发送数据包时的MTU。对于UDP来说,路径中的任何节点的MTU都可能小于发送端的MTU。

    把一份 I P数据报分片以后,只有到达目的地才进行重新组装。重新组装由目的端的 I P层来完成,其目的是使分片和重新组装过程对运输层( T C P和U D P)是透明的。已经分片过的数据报有可能会再次进行分片(可能不止一次)。
    重新组装的依据(参考IP头部格式):IP首部中的三个字段

    16位的标识符(数据报的唯一标识)

    3位标识符(1位未用,1位是否分片标志,1位是否还有更多分片标识)

    13位偏移片(单位是字节;在分片时,除最后一片外,其他每一片中的数据部分(除 I P首部外的其余部分)必须是 8字节的整数倍。)

    在分片时,除最后一片外,其他每一片中的数据部分(除 I P首部外的其余部分)必须是 8字节的整数倍。IP分片之后,只有第一片中有上层协议的头部。这是正常的,因为对于IP层来说,IP分片分的只是数据部分,而上层协议(TCP/UDP)是属于IP数据报的数据部分的。

    分片之后,每一个分片中都含有IP的头部,但只有第一个分片中才会包含上层协议的头部。

    当发生分片丢失时,即使只丢失一片数据也要重传整个数据报。为什么会发生这种情况呢?因为 I P层本身没有超时重传的机制,需要由更高层来负责超时和重传( T C P有超时和重传机制,但 U D P没有该机制,因此需要使用UDP协议的上层应用来实现重传功能)。

    在第一个到达数据报片出现时, I P层必须启动一个定时器。这里“第一个”表示给定数据报的第一个到达数据报片,而不是第一个数据报片(数据报片偏移为 0)。正常的定时器值为 3 0或6 0秒。如果定时器超时而该数据报的所有数据报片未能全部到达,那么将这些数据报片丢弃,避免接收端缓存满。另外,如果最终超时未收到该IP数据报的全部分片,但收到了该IP数据报的第一个分片(即片偏移为0,包含TCP/UDP的头部),则会产生ICMP差错报文给发送端;如果未收到该IP数据报的第一个分片,则不产生ICMP差错报文。(为什么只有在收到第一个IP分片后才会产生ICMP差错报文,请参考: 第三章:IP 网际协议 )

    关于TCP分段和IP分片

    1. IP分片产生的原因是网络层的MTU;TCP分段产生原因是MSS(最大报文段);

    2. IP分片由网络层完成,也在网络层进行重组;TCP分段是在传输层完成,并在传输层进行重组;

    3.对于以太网,MSS为1460字节,而MUT往往会大于MSS。

    在这里插入图片描述

    标识位:每个IP数据报都有唯一的标识符,通常多发一个包这个标识就+1(操作系统不一样可能也不一样),由这个数据报可能产生了很多分片,但是每个分片的标识位都是一样的,当抵达最终目的地时,网络层会根据标识位相同的数据包进行重组,然后交给传输层,这时对两端的传输层来说,它们是不知道数据报有没有被分片过(透明的),只知道完整的收到了对端的数据。

    CU:没有使用

    DF:分片(0)或者不分片(1),如果对DF设置值为1,而且数据报的大小又大于路径MTU,那么中间的路由器会把数据报给丢到,并发送一个ICMP差错报文“需要分片,但是设置了DF位”

    MF:标识该分片是不是数据报的最后一片,1表示不是最后一片,0表示是最后一片

    片偏移:指出较长的分钟再分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。也就是说,每个分片的长度一定是8字节(64位)的整数倍。

    例子:一数据报的总长度为3820字节,其数据部分为3800字节长(使用固定首部),需要分片为长度不超过1420字节的数据报片。因固定首部长度为20字节,因此每个数据报片的数据部分长度不能超过1400字节。于是分成3个数据报片,其数据部分的长度分别分为1400,1400和1000字节。原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值。
    在这里插入图片描述
    当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立,当数据报的这些片到达目的端时有可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据分片,传输过程中,哪怕丢失一片数据也要重传整个数据报。IP本身没有超时重传的机制,由更高层的TCP来完成,一些UDP应用程序也具有超时和重传。

    在分片时,除最后一片外,其他每一片中的数据部(除IP首部外的其余部分)必须是8字节的整数倍。只有第一个分片携带四层信息,IP数据报(从传输层给网络层,由网络层发下来的数据叫数据报)是指IP层端到端的传输单元(分片之前和重组之后),分组(在网络中传输的叫分组)是指IP层和链路层之间传送的数据单元。一个分组可以是一个完整的IP数据报,也可以是IP数据报的一个分片。

    二、ICMP不可达差错(需要分片)

    在这里插入图片描述
    在出接口查MTU

    当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片(DF)的标志比特,路由器就会返回一个ICMP不可达信息。

    Ping的时候DF置为不分片(echo设置DF位,echo-reply也会设置DF位),A去B的时候可能数据报大小小于MTU,但是回来的时候却大于MTU,这时A就会显示超时,不会收到ICMP不可达信息,而是由B收到ICMP不可达信息。

    MTU发现机制,在IPsec VPN中,要防止IP分片,因为有分片的话会严重影响效率,所以两台路由器都会做一个 path MTU发现技术,发送一个数据报为1500字节的IP数据报,并且DF置1。如果中间路由器MTU比1500小,就会对源端发送一个ICMP不可达信息,在这个ICMP不可达信息中,携带此路由器的最大MTU值,这时源端主机收到后修改数据报大小继续发送,如果中间路由器还有更小的,又会向源发送一个ICMP不可达信息,源端主机再次修改,如此重复,只到到达目的地,就知道单向路径MTU的最小值了。

    展开全文
  • 15.9 积分Linux下IP――分片与重组――详解原理介绍 为一个数据包片再次分片 为数据包分片和为数据包片再次分片之间的细微差别就在于网关处理MF比特的不同。但一个网关为原来为分片的数据包分片时,除了末尾的数据包...

    62e50291a81fc54b507f33cb80033297.gif Linux下IP――分片与重组――详解

    (10页)

    fa47e85278b8317eb96d9009314d925b.png

    本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

    15.9 积分

    Linux下IP――分片与重组――详解原理介绍 为一个数据包片再次分片 为数据包分片和为数据包片再次分片之间的细微差别就在于网关处理MF比特的不同。但一个网关为原来为分片的数据包分片时,除了末尾的数据包片,它将其余所有分片上的MF比特都置为一,最后一片为0。然而,当网关为一个非末尾的数据包片再次分片时,它会把生成的所有子分片中的MF比特全部设置为1,因为所有这些子分片都不可能是整个数据包的末尾的数据包片。 对于分片,需要拷贝IP首部和选项,以及数据。而选项的拷贝要注意:根据协议标准,某些选项只应当出现在的一个数据包片中,而其他一些则必须出现在所有的数据包中。数据包重组 数据结构 为了使数据包的重组效率更高,用于保存数据包的数据结构必须能够做到: 为构成某一个特定数据包的一组数据包片快速定位; 在一组数据包片中快速插入新的数据包片; 有效地判断一个完整的数据包是否已经全部抵达; 具有数据包片超时机制(ip_expire),并且,如果在重组完成之前定时器溢出,则删除数据包片。 互斥操作 重组程序代码使用了一个互斥信号量。Ipfrag_lock在链表中加入一个数据包片 查找方式:链表的线性查找溢出时的丢弃 分片列表空间以全满的情况下:丢弃对应的数据包的所有分片。Ip_evictor测试是否组成一个完整的数据包ip_frag_queue 判断IP_MF位是否为0!将数据包片组装成完整的数据包LAST_IN,ip_frag_reasm 数据包片链表的维护管理 为了使丢失数据包片的数据包不再浪费存储资源 ,并防止因为标示符字段的重新使用而给IP带来混乱,但已经不可能再受到剩余数据包片时,IP必须定期检查数据包片列表。Ipq_unlinkIpq_putIpq_killIpqhashfnLinux下的实现 IP分片 如何提高分片处理的效率ip_fragment(非UDP使用) 典型调用者 ip_sendà ip_fragment(skb, ip_finish_output);一般从转发来 ip_queue_xmit2à ip_fragment(skb, skb->dst->output)一般从TCP来 因为IP报太大而将其分片以适合于一个帧的传输。处理过程 获取外出设备(由skb决定) dev = rt->u.dst.dev; 出口路由设备 !!!skb->dst=rt=rt->u.dstàdst_entry 取IP包头 raw = skb->nh.raw; iph = (struct iphdr*)raw; 取IP头 设定开始值 hlen=IP头长 left = ntohs(iph->tot_len) - hlen; 包总长度减去IP头长度――需要分片的数据长度 mtu = rt->u.dst.pmtu - hlen; 物理MTU减去IP头长度――除去IP头的分片长度 ptr = raw + hlen; 取数据区指针 将数据包分片 分片算法很简单,但由于对sk_buff结构和链的操作时的实现非常复杂。 如果DF比特禁止分片,则ip_output丢弃分组并返回错误消息。 如果该数据包是在本地生成的,则传输层协议把该错误传回该进程 如果分组是被转发的,则ip_forward生成一个ICMP目的不可达差错报文,并指出不分片就我发转发该分组。 路径发现机制?该算法用来搜索到目的主机的路径,并发现所有中间网络支持的最大传送单元MTU。 新的分片包含:IP首部、某些原始分组中的选项以及最多len的长度的数据。 Linux下没有分片队列,分一个片就发一个分片包。 offset = (ntohs(iph->frag_off) & IP_OFFSET) << 3; 取出偏移位(13位),并乘8算出总字节数――算该包的偏移字节数 not_last_frag = iph->frag_off & htons(IP_MF);取出MF位(第14位) 循环进行分片: while(left > 0) { len = left; /* IF: it doesn't fit, use 'mtu' - the data space left */ if (len > mtu) 如果剩下的数据left还比MTU大,则以MTU为分片的数据长度;否则,就用left作为数据长度(对于最后一片) len = mtu; /* IF: we are not sending upto and including the packet end then align the next start on an eight byte boundary下一个开始出是八字节的边界对齐 */ if (len < left) { 当len

    524d6daf746efaa52c3c71bbfe7ba172.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

    展开全文
  • IP分片与组装

    2021-05-14 21:13:48
    详解IP分片与组装

      摘要

          下面将主要介绍ip的分包与组包;分包的思路很简单,难点在于组包的逻辑设计。

      IP分片的原因

          简单的来说,数据链路层规定了物理网络的最大传输单元 MTU,这个值体现了设备的网络收发能力,该值因设备而异,默认值为 1500 个字节。网络层收到传输层的数据报后需要先判断往哪个网卡发包,并获取该网卡的 MTU值,如果数据包长度大于 MTU,则需要将数据包分片。

      如何进行分片

          首先讲一下分片的规则,以 UDP 数据报为例(图画的比较粗略,读者别计较协议头部的长度比例呀),假设下图中 data0 长度 大于 MTU,在发送的时候 ip 会将该包进行分片,分成如下两个包(假设分两个包就可以了,分包数量根据 UDP 数据报长度而定),则满足 data0 = data1 + data2.而且UDP头部只在第一个包中出现,之后的包不再添加 UDP 头部;另一方面 IP 头部是必须加在每个数据包的前面的。这是因为 ip 分片之后的每个 fragment 都会独立的在互联网中传输,所以 ip 是必须的。

    在这里插入图片描述

      如何进行组装

          组装 ip fragment 需要用到 ip 头部中的 Identification、Source Address、Destination Address、Flags 和 Fragment Offset 字段。 ip 头部结构与这几个字段的释义如下。接收端通过 (Identification,Source Address、Destination Address)三元组可以唯一的确定 IP 包的身份,属于同一个 IP 包的 fregment,具备同一个三元组。之后通过 DF 与 MF 可以判断是否分包,以及后续是否还有 fragment。Fragment Offset 字段用于重组包时进行排序使用,使用时注意该值的单位是 8 byte,举个例子:该值为100时,说明需要偏移 800 byte。

    在这里插入图片描述

    字段释义
    Identification标识,主机每发一个报文,加1,分片重组时会用到该字段。
    Flags标志位,分为 0、DF 和 MF。DF(Don’t Fragment):能否分片位,0表示可以分片,1表示不能分片;MF(More Fragment),表示是否该报文为最后一片,0表示最后一片,1代表后面还有。
    Fragment Offset片偏移:分片重组时会用到该字段。表示较长的分组在分片后,某片在原分组中的相对位置。以8个字节为偏移单位。
    Source Address源IP地址。
    Destination Address目的IP地址。

      实现思路(DPDK)

          下面简单介绍 DPDK 中分片与组装的思路。通过三元组建立 hash 表以快速的找到接收端未完成组装的包,未完成组装的包都存放在链表当中(新接收的数据包放尾部),如果完成组装后是释放响应的资源。如果链表满了,则删除链表头部已经过时的数据包。

    在这里插入图片描述

    展开全文
  • 在之前的一篇博文Linux内核网络协议栈TCP/IP分析之三:网络层分析了IP网络层协议,下面基于Linux 2.4.9内核代码着重分析IP分片重组。 二 IP分片 2.1 标志  与分片有关的是’标志’字段,标志字段占3bit。目前只有前...
  • 【TCP/IP】IP分片

    2018-05-21 20:18:09
    IP分片 IP把MTU与数据报长度进行比较,如果需要则进行分片。分片可以发送在原始发送端主机上,也可以发送在中间路由器时。把一份IP数据报分片以后,只有到达目的地才进行重新组装,重新组装是由目的端的IP层来完成...
  • IP分片与重组详解

    千次阅读 2017-11-29 13:02:26
    大家对IP数据包头,应该不陌生吧 分片便是与图中圈出来的两个地址有关,本文也是将主要围绕他们展开。...1位:不分段(DF) ...如果DF标志被设置,并且分片需要来路由分组,则该分组被丢弃。这可以发送分组
  • 浅谈IP分片的大小及其原因

    千次阅读 2018-04-22 19:31:22
    一、IP分片的定义 IP分片是网络上传输IP报文的一种技术手段。IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组,这一过程称为分片。二、进行IP分片的原因 数据链路层具有最大传输...
  • IP数据报结构和IP分片
  • 上次分析了ip分片重组,这次分析一下ip分片。首先我们要先了解为什么需要分片。比如在以太网中,使用CSMA/CD协议(由网卡实现),他规定了一个链路层数据包(不包括mac头,但是这一版内核实现的时候是包括了mac头的大小...
  • IP数据报分片总结

    万次阅读 2016-10-12 19:25:02
    网络层的数据报需要借助于数据链路层来真正完成传输,但是数据链路层的MTU有限制,一般以太网的MTU是1500B。但是网络层的数据报大小...分片主要借助标识(16位),标志(3位X|DF|MF)和片偏移(13位)三个数据来完成。
  • ip报头分片

    千次阅读 2016-07-24 17:08:14
     IP分片是网络上传输IP报文的一种技术手段。IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组  在IP协议中的分片算法主要解决不同物理网络最大传输单元(MTU) 的不同造成的传输问题...
  • IP分片的一些理解

    2019-08-12 14:37:04
    MF位为0,表示是最后一个 DF位为0,表示可以分割成片 看一下例题:一个长4000B的IP数据报(首部20B,数据部分3980B),到达一个路由器,需要转发到一条MTU为1500B的链路上。那么这要分为几块呢? 按公式有设...
  • IP分片实例分析

    千次阅读 2020-06-05 11:45:51
    IP分片实例分析 引言 最近公司要研发一款用于链路通信加密的设备,使用祖冲之算法对OSI七层中的数据链路层数据进行流式加密,在设计技术方案时,发现一个问题,就是广域网上传输的数据包都是有最大长度限制的,...
  • 本质区别: IP是网络层的分片,即在网络传输过程中若遇到链路MTU比自己报文小的情况才进行分片 TCP是传输层的分片,即在TCP交互过程中对传输内容的...IP分片与重组 在IP首部中,标识、标志、片偏移这三部分就是与...
  • IP分片 简析

    2017-09-16 21:20:00
    标示Identification DF:Don't Flagment MF:More flagment 片偏移:...最大传输单元为1500B,除去首部20B后每分片长度为1480B,则分为3片,长度分别为1480、1480、1040每片总长度、标示、DFMF、片偏移分别如下:1500...
  • IP分片笔记

    2019-12-21 18:23:07
    ip分片的结构体组织形式 先记录以下特殊的字段: (1)skb_buff的cb字段 char cb[48],是一个自定义字段,在协议各层处理时,可以存储各协议的私有数据,就是随便自己定义,在ip层分片时存储的是struct inet_skb_...
  • IP分片与重组

    千次阅读 2016-11-24 11:53:16
    数据报重组的依据是:标识,标志,偏移量三个字段 标识:这个针对的是对传输层向网络层提供的数据报进行打标。在发送端,每一个被发送的数据报都有一个唯一(近似唯一)的数据报标识,这个标志用整型数据表示,他...
  • 过了好久才解决这个简单的问题,罪过罪过……答案:如果IP数据报不分片分片标志DF(Don’t Fragment)会被设置为1。分片标志MF(More Fragment)设置为0。下面是详细解释:1:首先来一张IP数据报的报文头部结构。 ...
  • IP分片和TCP分段

    千次阅读 2018-08-24 13:10:07
    转自:IP分片和TCP分段 MTU和MSS的概念 MTU 最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。 例如:以太网MTU值为1500字节,802.3的MTU...
  • IP Fragmentation(IP分片)

    2018-04-26 19:16:00
    IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组... IP分片(Fragmentation)发生在要传输的IP报文大小超过最大传输单位MTU(Maximum Transmission Unit)的情况。比如说,在以太网(Eth...
  • ip分片重组 ip_defrag

    2017-09-28 02:42:00
    ip_local_deliver中,如果检测到是分片包,则需要进行分片重组; ip_local_deliver  |-->ip_is_fragment //判断是否为分片包  |-->ip_defrag //分片缓存&重组  |-->ip_find //查找ipq  |-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,453
精华内容 1,381
关键字:

dfip分片mf