深入理解IP包分片原理

合集下载

IP分片

IP分片

1、分片ICMP ECHO请求发送与响应1.1、IP报头中的分片处理[RFC 791]:The fields which may be affected by fragmentation include:(1) options field(2) more fragments flag(3) fragment offset(4) internet header length field(5) total length field(6) header checksum如果假设各个分片都没有选项字段那么与数据报的分片与重组有关的字段是:数据报总长度、数据报标识(每个分片该字段值都一样)、分段标志、分片偏移、16位首部校验和。

数据报总长度:该字段是报头长度和数据字节的总和,以字节为单位。

最大长度为65535字节。

从IP报头开始算。

数据报标识:这个唯一的16位标识符由产生它的主机指定给数据报。

发送主机为它送出的每个数据报产生一个单独ID,但数据报在传输的过程中可能会分段,并经过不同的网络而到达目的地。

分段后的数据报都共享同一个数据报ID,这将帮助接收主机对分段进行重装。

分段标志:3位分段标志位中的第一位未用,其他两位用于控制数据报的分段方式。

如果“不能分段(DF)”位设为1,意味着数据报在选路到目的地的过程中不会分段传输。

如果数据报不分段就无法选路,试图分段的路由器将丢掉该数据报并向源主机发送错误报文。

如果“更多段(MF)”位设为1,意味着该数据报是某两个或多个分段中的一个,但不是最后一段。

如果MF位设为0,意味着后面没有其他分段或者是该数据报本来就没有分段。

接收主机把标志位和分段偏移一起使用,以重组被分段的数据报。

所以第一个包DF=0,MF=1;第二个包DF=0,MF=0分段偏移值:这个字段包含13位,它表示以8字节为单位,当前数据报相对于初始数据报的开头的位置。

换句话说,数据报的第一个分段的偏移值为0;如果第二个分段中的数据从初始数据报开头的第800字节开始,该偏移值将是100。

IP地址分配的原理是什么

IP地址分配的原理是什么

IP地址分配的原理是什么IP地址是互联网中设备的唯一标识符,它用于标识网络中的各个设备。

IP地址的分配是指将可用的IP地址分配给不同的网络设备,以确保网络通信的正常运行。

IP地址分配的原理主要包括两个方面:IP地址的层次结构和IP地址分配的机制。

一、IP地址的层次结构IP地址采用分层结构,以便更有效地管理和组织网络。

IP地址由32位二进制数组成,通常分为网络地址和主机地址两部分。

网络地址用于标识网络,主机地址用于标识网络中的具体设备。

IP地址的层次结构中,最高位的一部分用于标识地址类型,其中0开头的地址为A类地址,10开头的地址为B类地址,110开头的地址为C类地址,1110开头的地址为D类地址(用于多播),1111开头的地址为E类地址(保留地址,不用于分配)。

A类、B类和C类地址被广泛应用于网络中。

A类地址中,最高位为0,后面7位用于网络标识,剩下的24位用于主机标识,可以分配给最多2^24个主机。

B类地址中,最高位为10,后面14位用于网络标识,剩下的16位用于主机标识,可以分配给最多2^16个主机。

C类地址中,最高位为110,后面21位用于网络标识,剩下的8位用于主机标识,可以分配给最多2^8个主机。

二、IP地址分配的机制IP地址的分配是通过专门的组织和机构进行管理和协调的。

主要的IP地址分配机制包括:分配给互联网服务提供商(ISP)的地址、分配给组织机构的地址和动态地址分配。

首先,一部分IP地址被分配给互联网服务提供商(ISP),这些ISP负责将这些IP地址分配给自己的用户。

ISP根据需要从互联网号码分配机构(IANA)申请一定数量的IP地址,然后根据自身需要将这些IP地址分配给自己的用户。

其次,一部分IP地址被分配给各个组织机构,如企事业单位、学校等。

这些组织机构需要从ISP获取IP地址,通常是购买或租用。

最后,为了更有效地利用IP地址资源,还出现了动态地址分配的机制,如动态主机配置协议(DHCP)。

IP包的分片与重组

IP包的分片与重组

Linux下IP――分片与重组――详解1 原理介绍1.1 为一个数据包片再次分片为数据包分片和为数据包片再次分片之间的细微差别就在于网关处理MF比特的不同。

但一个网关为原来为分片的数据包分片时,除了末尾的数据包片,它将其余所有分片上的MF比特都置为一,最后一片为0。

然而,当网关为一个非末尾的数据包片再次分片时,它会把生成的所有子分片中的MF比特全部设置为1,因为所有这些子分片都不可能是整个数据包的末尾的数据包片。

对于分片,需要拷贝IP首部和选项,以及数据。

而选项的拷贝要注意:根据协议标准,某些选项只应当出现在的一个数据包片中,而其他一些则必须出现在所有的数据包中。

1.2 数据包重组1.2.1 数据结构为了使数据包的重组效率更高,用于保存数据包的数据结构必须能够做到:l 为构成某一个特定数据包的一组数据包片快速定位;l 在一组数据包片中快速插入新的数据包片;l 有效地判断一个完整的数据包是否已经全部抵达;l 具有数据包片超时机制(ip_expire),并且,如果在重组完成之前定时器溢出,则删除数据包片。

1.2.2 互斥操作重组程序代码使用了一个互斥信号量。

Ipfrag_lock1.2.3 在链表中加入一个数据包片查找方式:链表的线性查找1.2.4 溢出时的丢弃分片列表空间以全满的情况下:丢弃对应的数据包的所有分片。

Ip_evictor1.3 测试是否组成一个完整的数据包ip_frag_queue判断IP_MF位是否为0!1.3.1 将数据包片组装成完整的数据包LAST_IN,ip_frag_reasm1.4 数据包片链表的维护管理为了使丢失数据包片的数据包不再浪费存储资源,并防止因为标示符字段的重新使用而给IP带来混乱,但已经不可能再受到剩余数据包片时,IP必须定期检查数据包片列表。

Ipq_unlinkIpq_putIpq_killIpqhashfn2 Linux下的实现2.1 IP分片如何提高分片处理的效率2.1.1 ip_fragment(非UDP使用)2.1.1.1 典型调用者ip_send ip_fragment(skb, ip_finish_output);一般从转发来ip_queue_xmit ip_fragment(skb, skb->dst->output)一般从TCP来, 因为IP报太大而将其分片以适合于一个帧的传输。

TCPIP协议栈中,为什么选择IP层负责分片?

TCPIP协议栈中,为什么选择IP层负责分片?

TCPIP协议栈中,为什么选择IP层负责分片?
“我是哟哟吼说科技,专注于数据网络的回答,欢迎大家与我交流数据网络的问题”
如题,TCP/IP协议栈中,为什么会选择IP层进行分片呢?简单说,IP层来分片的话效率会更高。

为什么说IP层分片效率高呢?下面哟哟来详细介绍一下:
在互联网,某主机与服务器进行通信时需要将数据包经过各个节点然后到达目标服务器,而在经过每一跳的时候都会查看IP包头里的目的IP地址,根据路由表对应后转发到某接口进行Forwarding。

若数据需要进行分片,那么就有几种情况:
1、在IP层进行分片。

若在IP层进行分片操作的话,那么只需要读取IP包头信息,它不关心里面具体传输的是TCP、UDP、ICMP还是其它协议,在IP眼中
只是IP Payload,然后通过硬件、或软件硬件结合、或其它方式进行分片。

2、在上层进行分片。

在考虑在上层进行分片操作的话,那么需要关心是UDP报文,还是TCP报文,还是其它的,然后会转交给特定的模块进行分片处理,这样一方面增加路由器的复杂度,另一方面效率会降低。

但以哟哟的个人想法来说,在网络通信中,要尽可能的去避免IP 包的分片操作,因为在进行此操作的话,那么负责分片的主机、路由器会耗费很多CPU资源去处理分片,另外还需要负责重组这些分片,这样会更占用设备的CPU资源,因此哟哟建议,在网络通信中,尽可能减少IP包的分片。

欢迎大家多多关注我,在下方评论区说出自己的见解。

IP数据包分片理解

IP数据包分片理解

IP数据包分片理解IP 数据包在数据帧中的封装:一、在很多物理网络中,都对数据帧的长度有限制,而且这个限制大都比IP 数据包长度的限制小。

二、物理网络的这个限制(对帧数据区)通常都称为最大传输单元(MTU,Maximum Transfer Unit)。

三、IP 协议使用了分片与重组的策略,这种策略的原理就是:1、如果一个IP数据包无法封装在一个数据帧中,就将数据包分成几个长度小于MTU 的片,将片封装在帧中进行传输。

2、当这些分解的片都传输到目的地后,再将这些片重新组全成原来的IP数据包。

3、当一个IP数据包从MTU大的网络发往MTU小的网络时,IP 数据包往往就在路由器上进行分片。

4、IP数据包的分片可能在IP数据包的源主机和网络路由器上发生,但重组只能在目标主机中进行。

5、IP 数据包对数所包进行分片时,每一个分片都会独立地成为一个IP数据包。

6、分片后的数据包都有自已的IP包头和数据区。

最大传输单元(MTU -maximum transfer unit)–各种物理网络技术都限制了一个物理帧的大小,这个限值被称为最大传输单元;不同物理网络技术的MTU 不同。

–对于一个网络而言,其MTU 值是由其采用的物理技术决定的,而且通常保持不变.IP分组的分片问题:–在小MTU 的网络上将较大分组分割后进行传输称为IP包分片– IP头中有3个单元与分片有关:.ID(Identification):该分组的唯一标识,以便进行分片的重组.MF(More Fragment,Flags 字段的Bit 0):MF=1 表示还有更多分片.FO(Fragment Offset):本片起始位置在原始分组数据区中的偏移量–分组的分片传输:在分组的传输通路上,分片操作只能出现在两个MTU 不同的网络的交界处,也就是出现在路由器上;进入一个新网络时,若新网络的MTU 小于原有网络的MTU,则可能需要进行分片;若新MTU 值不小于原有MTU 就不必进行分片。

TCP数据包分片机制详解

TCP数据包分片机制详解

TCP数据包分片机制详解IP分片在以太网上,由于电气限制,一帧不能超过1518字节,除去以太网帧头14字节(mac地址等)和帧尾4字节校验,还剩1500字节,这个大小称为MTU(最大传输单元)。

如果你的IP包大于1500字节,IP层就会分片了。

而1492的MTU值的来源,是因为PPPoE协议。

PPP协议是宽带运营商用于对用户认证计费的(TCP/IP 以太网无此功能)。

PPPoE头尾一共8字节,所以有效载荷MTU变小了,原来有1500字节,现在只剩1492了。

这1492还包含20字节IP头,8字节UDP头或者20字节TCP头。

所以真正的不分片数据,UDP为1492-28=1464,TCP为1492-40=1452字节。

TCP的确是流的,所以TCP一个包可以包含的数据大小为65536(包头长度定义为2字节).a向b连续发送数据,b在每次接受到数据大小大于其低水位后,你的recv就会返回(假设是阻塞模式),并得到数据长度。

当然你要持续接受和处理数据。

如果实际数据大于1452字节,IP会分片,但IP也会重组分片,所以还是一次recv就可以收到(不一定全,但跟分片无关)。

如果一个分片丢失,则整个TCP包都会重发,因为IP层不会将没收完的分片交给传输层。

ACK确认的时机,是收到了就会确认上一次的完整包的TCP序列号,如果不完整当然要等收完整,也不会交互到应用层,也不会发送ACK确认(可以通过3次确认上一个完整的序列号以让发送方快传)。

握手协商和ACK TCP在发起3次握手时,会协商MSS(最大分节大小),这个值一般是路径最小MTU-IP头-TCP头,如果MTU是1500,则1500-20-20=1460字节。

这样,每个包就不用IP层再分片了。

所以你发2000字节,你调用一次send,如果发送缓冲区移动窗口够大,应该会全部成功。

否则,会返回实际发送的字节。

假设2000字节全部成功,tcp实际会将其分为1460和540两个包发送,接受端接受到1460这个包就会回一次ACK,接到540大小这个再ACK一次。

【计算机网络】TCP分段与IP分片(转载)

【计算机⽹络】TCP分段与IP分⽚(转载)数据包切分⼩块这个⾏为在传输层和⽹络层都有可能发⽣。

在传输层(TCP协议)⾥,叫分段。

在⽹络层(IP层),叫分⽚。

(注意以下提到的IP没有特殊说明的情况下,都是指IPV4)那么不管是分⽚还是分段,肯定需要按照⼀定的长度切分。

在TCP⾥,这个长度是MSS。

在IP层⾥,这个长度是MTU。

MSS是什么MSS:Maximum Segment Size 。

TCP 提交给 IP 层最⼤分段⼤⼩,不包含 TCP Header 和 TCP Option,只包含 TCP Payload ,MSS 是TCP ⽤来限制应⽤层最⼤的发送字节数。

假设 MTU= 1500 byte,那么 MSS = 1500- 20(IP Header) -20 (TCP Header) = 1460 byte,如果应⽤层有 2000 byte 发送,那么需要两个切⽚才可以完成发送,第⼀个 TCP 切⽚ = 1460,第⼆个 TCP 切⽚ = 540。

我们都知道TCP三次握⼿,⽽MSS会在三次握⼿的过程中传递给对⽅,⽤于通知对端本地最⼤可以接收的TCP报⽂数据⼤⼩(不包含TCP和IP报⽂⾸部)。

发送、接收⽅两者在对⽐后,会采⽤⼩的那个值作为通信的MSS值,这个过程叫MSS协商。

另外,⼀般情况下MSS + 20(TCP头)+ 20(IP头)= MTU,上⾯抓包的图⾥对应的MTU分别是1372+40 和 1420+40。

同⼀个路径上,MTU不⼀定是对称的,也就是说A到B和B到A,两条路径上的MTU可以是不同的,对应的MSS也⼀样。

三次握⼿中协商了MSS就不会改变了吗?当然不是,每次执⾏TCP发送消息的函数时,会重新计算⼀次MSS,再进⾏分段操作。

对端不传MSS会怎么样?如果没有接收到对端TCP的MSS,本端TCP默认采⽤MSS=536Byte。

前⾯提到了IP会切⽚,那会切⽚,也就会重组,这个576正好是 IP 最⼩重组缓冲区的⼤⼩。

IP数据报的分片和组装原理是什么

IP数据报的分片和组装原理是什么当一个主机发送数据到另一个主机时,这些数据需要通过多个路由层转发。

IP在路由层的转发过程较为复杂,如何处理目的主机发送的数据报呢?首先我们需要了解数据报的格式:IP的转发和控制都是由IP数据报的头部决定4位首部长度的数值是以 4字节为单位的,最小值为 5,也就是说首部长度最小是 4x5=20字节 ,也就是不带任何选项的 IP首部 ,4位能表表示的最大值是 15,也就是说首部长度最大是 60字节8位TOS字段有 3个位用来指定IP数据报的优先级 (目前已经废弃不用 ),还有4个位表示可选包括服务类型的最小延迟、最大吞吐量、最大可靠性和最小成本,总比特数始终为0。

16位总长度是整个数据报 (包括IP首部和 IP层payload)的字节数。

每传一个 IP数据报 ,16 位的标识加1,可用于分片和重新组装数据报。

3位标志和13位切片偏移用于切片。

TTL(Time to live) 是这样用的 :源主机为数据包设定一个生存时间 ,比如 64,每过一个路由器就把该值减 1,如果减到 0就表示路由已经太长了仍然找不到目的主机的网络 ,就丢弃该包 ,因此这个生存时间的单位不是秒 ,而是跳 (hop)。

协议字段指示上层协议是 TCP、 UDP、 ICMP还是 IGMP。

然后是校验和, 只校验IP首部 ,数据的校验由更高层协议负责。

IPv4的IP地址长度为 32位。

在IP数据报中总长度是16位的字段,一次数据报的最大长度为2^16-1,虽然尽可能长的数据报能够提高传输效率,但是很少有超过 1500字节的;所以在这里只要超过1500字节,就认为此数据报该分片了。

IP数据报被分片以后,各分片分别组成一个具有IP首部的分组,并各自独立的路由,分别抵达目的主机后,目的主机的IP层会在传送给传输层之前将收到的所有分片重新组装成一个数据报。

一.IP分片1.IP分片原理:分片和重新组装的过程对于传输层是透明的,原因是IP数据报进行分片以后,只有它到达下一站时才可以进行重新组装,且它是由目的端的IP层来完成的,分片之后的数据报根据需要可以再次分片;IP分片和完整的报文差不多拥有相同的IP头,ID域对美英分片都是一致的,这样才能在进行组装的时候识别出来同一个IP数据报文分片。

ip分片的原理

IP分片的原理及分析分片是分组交换的思想体现,也是IP 协议解决的两个主要问题之一。

在IP 协议中的分片算法主要解决异种网最大传输单元(MTU) 的不同. 但是分组在传输过程中不断地分片和重组会带来很大的工作量还会增加一些不安全的因素。

1 IP分片的定义IP分片是网络上传输IP报文的一种技术手段。

IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组。

这一过程称为分片(fragmentation)。

2 IP分片的原因通常要传输的IP报文的大小超过最大传输单位MTU(Maximum Transmission Unit)时就会产生IP分片情况。

IP分片通常发生在网络环境中。

比如说,在以太网(Ethernet)环境中可传输最大IP报文大小(MTU)为1500字节。

而传输的报文大小要比1500字节(不包括以太协议的首部和尾部18个字节)大,这个时候就需要利用到分片技术,经分片后才能传输此报文。

另外,使用UDP很容易导致IP分片,而很难强迫TCP发送一个需要进行分片的报文。

3 IP分片的原理及分析分片和重新组装的过程对传输层是透明的,其原因是当IP数据报进行分片之后,只有当它到达下一站时,才可进行重新组装,且它是由目的端的IP层来完成的。

分片之后的数据报根据需要也可以再次进行分片。

IP分片和完整IP报文差不多拥有相同的IP头,ID域对于每个分片都是一致的,这样才能在重新组装的时候识别出来自同一个IP报文的分片。

在IP头里面,16位识别号唯一记录了一个IP包的ID(ipid),具有同一个ID的IP分片将会重新组装;而13位片偏移则记录了某IP片相对整个包的位置;而这两个表中间的3位标志则标志着该分片后面是否还有新的分片。

这三个域就组成了IP分片的所有信息,接受方就可以利用这些信息对IP数据进行重新组织。

3.1标志字段的作用标志字段在分片数据报中起了很大作用,在数据报分片时把它的值复制到每片中。

简述ip层转发分组的工作原理。

简述ip层转发分组的工作原理。

IP层转发分组的工作原理是指在网络中,当一个分组从源主机发送到目的主机时,经过多个路由器的转发,最终到达目的主机的过程。

IP层是网络协议栈中的第三层,负责将数据包从源主机传输到目的主机。

IP层的主要功能是将数据包分组,并为每个分组添加源IP地址和目的IP地址,以便在网络中进行路由选择和转发。

IP层转发分组的工作原理可以分为以下几个步骤:1. 分组的封装当一个主机发送数据包时,IP层将数据包分成若干个较小的分组,并为每个分组添加IP头部信息。

IP头部信息包括源IP地址、目的IP地址、协议类型、分组长度等信息。

这些信息可以帮助路由器在网络中进行路由选择和转发。

2. 路由选择当一个分组到达路由器时,路由器需要根据目的IP地址选择下一跳路由器。

路由器可以使用静态路由或动态路由协议来选择下一跳路由器。

静态路由是由网络管理员手动配置的路由表,而动态路由协议是路由器之间自动交换路由信息的协议。

3. 分组的转发当路由器选择下一跳路由器后,它将分组转发到下一跳路由器。

路由器使用转发表来确定分组的下一跳路由器。

转发表包括目的IP地址、下一跳路由器的IP地址和出接口等信息。

路由器将分组发送到正确的出接口,并将分组的目的IP地址修改为下一跳路由器的IP地址。

4. 分组的传输当分组到达下一跳路由器时,路由器重复上述步骤,选择下一跳路由器并转发分组。

这个过程一直持续到分组到达目的主机。

5. 分组的解封当分组到达目的主机时,IP层将分组的IP头部信息解封,并将数据包重新组装成原始数据包。

然后将数据包传递给上层协议,如TCP或UDP。

总结:IP层转发分组的工作原理是将数据包分组,并为每个分组添加源IP地址和目的IP地址,以便在网络中进行路由选择和转发。

路由器使用转发表来确定分组的下一跳路由器,并将分组发送到正确的出接口。

这个过程一直持续到分组到达目的主机。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

深入理解IP包分片原理
原理, 分片一、关键术语
MTU MRU PMTU MSS包分片
ip 分片和tcp分片差异
1.IP分片产生的原因是网络层的MTU;TCP分段产生原因是MSS.
2.IP分片由网络层完成,也在网络层进行重组;TCP分段是在传输层完成,并在传输层进行重组. //透明性
3.对于以太网,MSS为1460字节,而MUT往往会大于MSS.
故采用TCP协议进行数据传输,是不会造成IP分片的。

若数据过大,只会在传输层进行数据分段,到了IP层就不用分片。

而我们常提到的IP分片是由于UDP传输协议造成的,因为UDP传输协议并未限定传输数据报的大小。

为什么会有IP分片?直接原因是上层协议企图发送一段数据,其长度超过了MTU (Maxitum Transmission Unit)。

什么情况,或者说什么协议会尝试发送这么长的数据?常见的有UDP和ICMP,需要特别注意的是,TCP一般不会。

为什么TCP不会造成IP分片呢?原因是TCP自身支持分段:当TCP要传输长度超过MSS(Maxitum Segment Size)的数据时,会先对数据进行分段,正常情况下,MSS小于MTU,因此,TCP一般不会造成IP分片。

而UDP和ICMP就不支持这种分段功能了,UDP和ICMP认为网络层可以传输无限长(实际上有65535的限制)的数据,当这两种协议发送数据时,它们不考虑数据长度,仅在其头部添加UDP或ICMP首部,然后直接交给网络层就万事大吉了。

接着网络层IP协议对这种“身长头短”的数据进行分片,不要指望IP能很“智能”地识别传给它的数据上层头部在哪里,载荷又在哪里,它会直接将整个的数据切成N个分片,这样做的结果是,只有第一个分片具有UDP或者ICMP首部,而其它分片则没有。

于是又更进一步理解TCP存在的必要性了!
二、 MTU MRU简介
我们都知道,不同类型的网络,其MTU(最大传输单元)各不相同,如以太网中,最大的传输帧为1518字节,FDDI为4500字节,令牌环帧在4500字节到17800字节之间,而IP协议的一个重要功能,就是能够对传输的数据大于硬件接口的MTU时,对其进行分段传输。

即大于MTU的数据报将被分为2个或多个的合适的大小被传输。

一个分片在到达接收主机的路径中,还可能被继续分片,因此,分片的IP数据报可能会以不同的路径传输到接收主机,接收主机通过一系列的重组,将其还原为一个完整的IP数据报,再提交给上层协议处理。

而MRU是(最大接收单元)表示网络设备端口所能接收到的最大数据包的大小。

IP标识符、标志、偏移量3个字段在IP报头中的位置如下图1所示:
在发送数据报前,发送主机给每个数据报一个ID值,放在16位的标识符字段中。

此ID用于标识唯一的数据报或数据流。

接收主机利用此ID对收到的数据报进行重组。

正如前面所说,当分片的IP数据报从源地址发送到目的地址的时候,由于网络延迟或者不同的传输路径的关系,在到达目的主机时,这些分片数据报并不总是有序的排列,而是处于一种无序状态,因此,接收主机便用此ID判断接收的这些分片数据报是否属于同一个数据流,然后再根据每个分片包的偏移量进行重组。

标志字段在IP报头中占3位,第1位(Reserved bit)作为保留,置0;第2位(DF),分段,有两个不同的取值:该位置0,表示该数据包允许被分段;该位置1,表示不能被分段;第3位(More fragments),更多分段,同样有两个取值:该位置0,表示这是数据流中的最后一个分段,该位置1,表示数据流未完,后续还有分段,当一个数据报没有分段时,则该位置0,表示这是唯一的一个分段。

见下图2:
当设备接收到一个IP数据报时,会首先查看该数据报的标识符,并且检查DF位,看该包是否允许被分段:
如果为1,则确认报大小;如果小于MTU则进行转发;如果大于MTU,则标准的操作是发送一个标志ICMP报文给数据报发送源,告知数据报过大,然后丢弃这个过大的数据报。

如果为0,同样确认数据报大小;如果数据报加上传输开销大于MTU,则对数据报进行分片操作以满足转发要求;如果数据包加上传输开销小于MTU,则直接进行转发。

注:此处ICMP回应根据RFC文档有两种方法:第一种方法:RFC 792 ,此种方法只告知数据报发送源数据包大于MTU值。

第二种方法:RFC 1191,此种方法在告知数据报发送源数据包大于MTU值的同时还会同时告知当前适合传送链路中适合的MTU值大小。

三、 IP包的重组过程:、
IP包重组是通过每个分片的标示符来确认哪些分片是属于同一个数据包。

而分片的顺序则是通过IP头的偏移量字段来实现。

偏移量字段的大小是13个BIT,偏移量数值乘以8表示该分片在数据包中的起始位置。

以太网中,源主机如果需要通过UDP传送3000字节的数据到目的主机,这时的分段情况如下图4所示(在同一网段):
此处需要注意的是对于分片1的报头,相对于其他两个分片的报头而言,要多出8个字节UDP协议的报头开销,因此,在计算实际传输的数据净载荷时,分片1要多减去8字节UDP 报头。

最后,接收主机通过此偏移值将数据重组成完整的数据报。

四、 TCP包分片及优化
TCP 因为是面向连接的协议,在传输过程中有着较为复杂的窗口滑动以及确认机制。

因此在TCP包传送过程中应该尽量避免数据包被分片转发。

一般情况下TCP协议在三次握手时就回根据发送方和接受方的MTU值大小来确定MSS的大小。

MSS是TCP头中option字段里面的一个可选项。

当option kind=2时,其表示MSS值。

但是问题出现了。

因为在TCP三次握手过程中传送的数据包一般都不会大于数据链路的MTU 值。

当握手完毕MSS值被确定下来之后。

开始使用MSS值最为最大传送数据段时,中间的网络设备MTU值达不到被传送数据包大小的要求。

此时数据包遭到丢弃。

例如:您可以用 FTP 命令行工具成功地与 FTP 服务器建立连接并登录。

但是,当您试图下载或者上载文件时,中间的 PMTU 黑洞路由器就会丢弃达到最大大小的 TCP 数据段,从而导致错误和文件传输失败。

这里又引入了一个新的概念PMTU,即路径最大传送单元。

这个值实际上就是两个通信主机之间所经过设备的最小MTU值。

TCP如何去发现传送过程中的PMTU,以最大效率的发送数据包呢?通常的做法是TCP包在发送是允许被分片。

当对端接收到分片的TCP包时,会修改自身的MSS值,使得对端和自己重新协商MSS。

达到最终发现PMTU的目的。

相关文档
最新文档