转自:Tsihang 三层网络设备对于IP报文的分片和重组处理原理

三层网络设备对于IP报文的分片和重组处理原理

对于网络分片,我一年前就想整理出来,虽然说网络上的资料很多,但是真正掌握精髓的除非真正做过分片程序,不然很难将协议栈整体联系起来理解。这篇文章,包括设计分片原理图,耗时一小时完成,算是记录一点理解。

三层网络设备,即能够基于IP头信息对报文进行识别和处理的网络设备,在转发IP报文的时候,经常会遇到来自上层的数据包过长,从而导致打上MAC头的帧不符合IEEE802.3标准规定的最大帧长,造成不能被转发和对端解析的问题。这样就需要在三层进行分片,将过长的IP报文拆分成小的数据块,一般规定最大的IP报文(IP头+数据)长度应该在46~1500范围内,这样,加上MAC头的14个字节和4个字节的校验,就满足以太网帧的最大帧长1518的要求。

那么,如何分片?如图所示,假设,现在有一个总长度为4000字节的IP报文,一个巨帧IP数据包,在经由三层的时候,需要进行分片,将数据包长控制在以太网II规定的帧长范围内,然后进行转发。

如果按照分片长度为1000字节来计算,那么3980个字节的IP数据包的数据部分可分成4个分片,分别用A,B,C和D表示。很明显,最后一个分片的数据部分长度则是减去前三个1000bytes的分片后,剩下的数据包的长度—980。

按照固定头长度20字节计算,每个分片都将拷贝源IP报文的IP头部信息,作为IP头加在分片前面,同时需要修改由分片组成的新的IP报文的头部信息。如果源IP报文的头部标识符域=15000,该值标志从主机三层下发的IP Packet的编号。分片的标识符域同样是15000,在新的IP头中,需要修改的是分片标志位和offset位。

1 MF:更多分片
2 DF:不分片
3 Offset:该分片数据部分开始位置在原IP报文数据部分的偏移,单位是8bytes。 
1 对于第一个分片A来说,Offset=0表示是原IP数据包的第一个分片,MF=1,则说明后面还有分片报文;
2 对于第二个分片B来说,Offset=125=(1000/8),计算出第二个分片的数据部分距离原IP数据包的数据部分起始位置的偏移,同时MF=1说明后面还有分片;
3 …..
4 最后一个分片D中,计算出Offset后,写入新的IP头,然后将MF=0,表示对于编号为15000的IP数据包的分片就此结束,后面不再跟分片。 

这样一个过程,就实现了IP报文的分片操作。对对端的三层来说,收到MF=1的报文后,就知道该报文是某一个IP报文的分片,需要进行分片重组操作。重组时,从该分片的头中提取整个报文的长度(该长度就是3980),同时提取Offset域,计算该分片数据部分在整个IP报文数据部分的位置,填充,并继续接收后续分片(分片属同一个IP报文的依据是地址信息和报文编号),直到收到一个类似分片的MF=0的报文时,预示着分片结束,与之前重组的报文完成重组之后,交给四层处理。

问题:如果上述报文在分片的时候,最后一个分片的数据部分长度小于26字节,即加上固定IP头的20字节,再加上以太网头的14个字节,再加上校验的4个字节后,最终的分片组成的IP报文总长度小于以太网规定的64字节的最小长度的时候,会怎么办?

时间: 2024-10-25 00:41:46

转自:Tsihang 三层网络设备对于IP报文的分片和重组处理原理的相关文章

iptables ip报文 tcp报文 tcp三次握手四次端口 有限状态机 状态转移

linux 网络防火墙 netfilter :是内核的一个frame :框架 iptables :数据报文过滤:nat mangle等规则生成工具 网络知识: IP报文首部   tcp报文首部 hdr len   报头首部长度  给出的字节需要乘以横向 32/8 = 4字节 Type of Service(服务类型)    服务类型 Total Length(总长度)          报文总长度    包括表头与内容 (Data) 部分.最大可达 65535 bytes.   注: 报文总长度

浅谈IP分片和组装的原理

分片是分组交换的思想体现,也是IP协议解决的两个主要问题之一.在IP协议中的分片算法主要解决不同物理网络最大传输单元(MTU) 的不同造成的传输问题.但是分组在传输过程中不断地分片和重组会带来很大的工作量还会增加一些不安全的因素.IP分片是网络上传输IP报文的一种技术手段.IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组.这一过程称为分片(fragmentation).每一种物理网络都会规定链路层数据帧的最大长度,称为链路层MTU(Maximum Transmiss

IP数据包的分片与重组过程

一.IP分片 (一)IP分片的原理: 分片和重新组装的过程对传输层是透明的,其原因是当IP数据报进行分片之后,只有当它到达下一站时,才可进行重新组装,且它是由目的端的IP层来完成的.分片之后的数据报根据需要也可以再次进行分片.    IP分片和完整IP报文差不多拥有相同的IP头,ID域对于每个分片都是一致的,这样才能在重新组装的时候识别出来自同一个IP报文的分片.在IP头里面,16位识别号唯一记录了一个IP包的ID(ipid),具有同一个ID的IP分片将会重新组装:而13位片偏移则记录了某IP片

TCP/IP协议中分包与重组原理介绍

[原文链接] 引言 分片是分组交换的思想体现,也是IP协议解决的两个主要问题之一.在IP协议中的分片算法主要解决不同物理网络最大传输单元(MTU) 的不同造成的传输问题.但是分组在传输过程中不断地分片和重组会带来很大的工作量还会增加一些不安全的因素.我们将在这篇小论文中讨论IP分片的原因.原理.实现以及引起的安全问题. 一.什么是IP分片 IP分片是网络上传输IP报文的一种技术手段.IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组.这一过程称为分片(fragment

MAC(Media Access Control)地址,或称为 MAC位址、硬件位址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责 IP地址,第二层

http://baike.baidu.com/view/69334.htm MAC(Media Access Control)地址,或称为 MAC位址.硬件位址,用来定义网络设备的位置.在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC位址.因此一个主机会有一个IP地址,而每个网络位置会有一个专属于它的MAC位址. MAC(Medium/Media Access Control)地址,或称为 MAC地址.物理地址,用来表示互联网上每一个站点的标识符,采用十六进制数表示,共

以太网帧、IP报文格式

这几天完成一个对比以太网帧的程序(c语言),老师给了以太网帧头部和IP报文头部的结构体,跟实际抓取到的数据包的格式是相同的. 以太网帧头部的数据结构: typedef struct { unsigned char dest_mac[6]; unsigned char src_mac[6]; unsigned short eth_type; } ethernet_header; eth_type字段用来指明上层协议类型,两字节.eth_type字段常见值及对应协议 0x0800 网际协议(IP)

TCP/IP报文格式

一.传输层协议   TCP特点: 面向连接 可靠 适用于可靠性要求高的应用 开销大 UDP特点: 无连接 不可靠 适用于更关注传输效率的应用 可靠性由应用层负责   TCP主要功能:可靠.准确的传输并控制源主机与目的主机之间的信息流: TCP主要职责:提供端到端的控制,通过滑动窗口机制提供流控制,通过序号和确认号机制来保证可靠性: 功能如下: 连接管理:定义了允许两个用户像直接连接一样开始交谈的规则(类似于电话通信之前须拨通对方的号码).通常把连接的定义和建立的过程称为握手. 流量控制:以网络能

IP报文详解

IP协议 IP协议,Internet Protocol ,互联网协议,IP协议位于网络层,主要目的是使得网络间能互联通信 IP是TCP/IP协议族中得核心协议,所有TCP.UDP.ICMP和IGMP数据都是通过IP数据报传输. IP报文 IP数据报的首部部分长度为20-60个字节 版本号:指IP协议所使用的版本.4个位.版本号为0100,4,即IPv4,版本号为6,即IPv6 IP首部长度:表示IP包头长度,该字段用4位表示.最常见的报头长度是0101即20位,当IP报头长度不是4字节整数倍时,

IP报文格式详解

下图为常见的IP报文格式表: 上面是IP的报文格式,接下来我们先说明各个字段的意义.然后,用Etheral软件转包分析IP的报文格式. 1.版本:ip报文中,版本占了4位,用来表示该协议采用的是那一个版本的ip,相同版本的ip才能进行通信.一般此处的值为4,表示ipv4. 2.头长度:该字段用四位表示,表示整个ip包头的长度,其中数的单位是4字节.即二进制数0000-1111(十进制数0-15),其中一个最小长度为0字节,最大长度为60字节.一般来说此处的值为0101,表示头长度为20字节. 3