在应用程序中,必须关心IP数据的长度。如果它超过网络的MTU,那么就要对IP数据报进行分片。如果需要,源目的端之间的每个网络都要进行分片, 并不只是发送端主机连接第一个网络才这样做。
分片是分组交换的思想体现,也是IP 协议解决的两个主要问题之一。在IP 协议中的分片算法主要解决异种网最大传输单元(MTU) 的不同. 但是分组在传输过程中不断地分片和重组会带来很大的工作量还会增加一些不安全的因素。
一、什么是IP分片
IP分片是网络上传输IP报文的一种技术手段。IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组。这一过程称为分片( fragmentation)。
二、为什么要进行IP分片
通常要传输的IP报文的大小超过最大传输单位MTU(Maximum Transmission Unit)时就会产生IP分片情况。IP分片通常发生在网络环境中。比如说,在以太网(Ethernet)环境中可传输最大IP报文大小(MTU)为1500字节。而传输的报文大小要比1500字节(不包括以太协议的首部和尾部18个字节)大,这个时候就需要利用到分片技术,经分片后才能传输此报文。另外,使用UDP很容易导致IP分片,而很难强迫TCP发送一个需要进行分片的报文。
三、IP分片原理及分析
分片和重新组装的过程对传输层是透明的,其原因是当IP数据报进行分片之后,只有当它到达下一站时,才可进行重新组装,且它是由目的端的IP层来完成的。分片之后的数据报根据需要也可以再次进行分片。
IP分片和完整IP报文差不多拥有相同的IP头,ID域对于每个分片都是一致的,这样才能在重新组装的时候识别出来自同一个IP报文的分片。在IP头里面,16位识别号唯一记录了一个IP包的ID(ipid),具有同一个ID的IP分片将会重新组装;而13位片偏移则记录了某IP片相对整个包的位置;而这两个表中间的3位标志则标志着该分片后面是否还有新的分片。这三个域就组成了IP分片的所有信息, 接受方就可以利用这些信息对IP数据进行重新组织。
IP数据报格式:
标志字段的作用
标志字段在分片数据报中起了很大作用,在数据报分片时把它的值复制到每片中。标志字段的其中一个比特称作“不分片”位,用其中一个比特来表示“更多的片”。除了最后一片外,其他每个组成数据报的片都要把该比特置1。片偏移字段指的是该片偏移原始数据报开始处的位置。另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。如果将标志字段的"不分片"比特置1,则IP将不对数据报进行分片。相反把数据报丢弃并发送一个I C M P差错报文并通知源主机废弃的原因。如果不是特殊需要,则不应该置1;最右比特置1表示该报文不是最后一个IP分片。
故意发送部分IP分片而不是全部,则会导致目标主机总是等待分片消耗并占用系统资源。某些分片风暴攻击就是这种原理。
这里以以太网为例,由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes最大不能超过1518bytes, 抛去以太网帧的帧头14Bytes和帧尾CRC校验部分4Bytes,那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes,这就是前面所说的MTU的值。这个也是网络层协议非常关心的地方,因为网络层的IP协议会根据这个值来决定是否把上层传达下来的数据进行分片。就好比一个盒子没法装下一大块面包,我们需要把面包切成片,装在多个盒子里面一样的道理。
避免IP分片
在网络编程中,我们要避免出现IP分片,那么为什么要避免呢?原因是IP层是没有超时重传机制的 ,如果IP层对一个数据包进行了分片,只要有一个分片丢失了,只能依赖于传输层进行重传,结果是所有的分片都要重传一遍,这个代价有点大。由此可见,IP分片会大大降低传输层传送数据的成功率,所以我们要避免IP分片。
对于TCP协议,应用层就不需要考虑这个问题了,因为传输层已经帮我们做了。在建立连接的TCP三次握手的过程中,连接双方会相互通告MSS(Maximum Segment Size,最大报文段长度1460),MSS一般是MTU - IP首部(20) - TCP首部(20),每次发送的TCP数据都不会超过双方MSS的值,所以就保证了IP数据报不会超过MTU,避免了IP分片。
转载于:https://my.oschina.net/u/4167465/blog/3082440
分享到:
相关推荐
《IP分片:原理、影响与安全》 IP分片是TCP/IP协议栈中的一个重要机制,主要用于解决因网络层数据包大小超过链路层的最大传输单元(MTU)而导致的传输问题。本文将深入探讨IP分片的概念、原因、工作原理,以及由此...
### IP分片与重组的分析与整理 #### 1. 原理 ##### 1.1 为一个数据包片再次分片 为数据包分片和为数据包片再次分片之间的主要区别在于网关如何处理MF(More Fragments)比特。当一个网关对未分片的数据包进行首次...
IP 分片和 TCP 分段原理 IP 分片是指在数据传输过程中,为了避免数据超过网络的 MTU(Maximum Transmission Unit),将数据分割成多个小的数据包,以便在网络中传输。这是因为,某些协议如 UDP 和 ICMP,它们不支持...
在深入探讨“ip分片重组及tcp分段重组具体实现”这一主题之前,首先要明确IP分片和TCP分段的概念。IP分片是IP层的一种机制,用以将一个较大的IP数据包分割成多个小的数据包以便在网络中传输。因为不同的网络链路可能...
IP分片是网络通信中的一个重要概念,特别是在TCP/IP协议栈中。它涉及到当一个大型的数据报文无法在单个IP数据包中传输时,如何将其分割成多个小块以便通过网络进行传输。这些小块被称为IP分片。当接收端接收到这些分...
### IP分片重组算法(RFC815)的实现及其改进 #### 一、引言 随着互联网技术的发展,IP分片与重组成为了IP机制中不可或缺的一部分。IP数据报在网络传输过程中,可能会遇到不同网络之间的最大传输单元(MTU)差异...
这段代码是用于模拟和处理IP分片的程序,主要针对虚拟网络教学系统。IP分片是在IP层(网络层)为了适应传输层的数据报文过大,无法通过某些网络的MTU(最大传输单元)限制时,将数据包分割成较小的部分进行传输的...
用于分析IP分片的wireshark抓包文件,IP分片解析文章地址:https://blog.csdn.net/Firefly_cjd/article/details/110366657
《高效IP分片重组的设计与实现》一文深入探讨了IP分片及重组技术在FPGA中的实现,这是TCP/IP协议栈中IP层的关键功能之一。文章首先剖析了网络环境中导致IP分片产生的原因,接着详述了IP分片重组的具体流程,并提出了...
基于FPGA的IP分片重组实现 一、背景介绍 在计算机网络中,IP分片问题是指一个较大的IP数据报在网络中传输时,可能因传输路径中的最大传输单元(MTU)限制而被拆分成多个小的数据片进行传输。这些小的数据片在网络...
IP分片是互联网协议(IP)中处理网络层传输的一个重要过程,它将大数据报分割成更小的片段,以适应不同网络的MTU(最大传输单元)。在RFC 791文档中,规定了互联网协议的正式规范,其中包括了关于分片和重组的详细...
亲自写的,很有用,希望能对大家有帮助,里面主要介绍了IP分片重组的概念、方法以及在Linux下进行操作所需要的代码
IP协议在处理大数据包时,可能会遇到网络路径中最大传输单元(Maximum Transmission Unit, MTU)的限制,这时就需要将大包分成若干小片进行传输,这个过程称为IP分片。而在接收端,这些数据片需要重新组合成原始的...
本话题将深入探讨IP数据包的分片解析,以及如何通过ping命令和抓包工具观察这一过程。 首先,我们要了解IP数据包的基本结构。每个IP数据包包含头部和数据部分。头部通常为20字节,包含了诸如版本、头部长度、服务...
本实验的目标是理解和实现IP分片与重组的过程,以确保数据的完整传输。 IP分片是指当一个IP数据包的总长度超过了沿途某个网络节点的MTU时,路由器会将该数据包拆分成若干个较小的片段进行传输。每个分片都包含原...
基于fpga的ip分片重组的实现,文中详细介绍了相关内容
This document provides software architecture information, development environment information and optimization guidelines.For programming examples and for instructions on compiling and running each ...
### IP分片技术详解 #### 引言 在互联网通信中,数据的传输并非一帆风顺,尤其是在不同网络间的数据传递过程中。由于各网络的物理特性与技术限制,如链路层的最大传输单元(Maximum Transmission Unit,MTU),...