当Ip数据报的长度超过贞的MTU时,将被分片传输。IP头部中的三个字段给IP的分片和重组提供了足够的信息:数据报标识,标志和片偏移。一个IP数据报的每个分片都具有自己的IP头部,它们具有相同的标识值,但具有不同的片偏移,并且除了最后的一个分片外,其他分片都将设置MF标志,此外,每个分片的IP头部的总长度字段将被设置为该片的长度。
以太网帧的MTU是1500字节,因此它携带的IP数据报的数据部分最多是1480字节(IP头部占用20字节)。考虑用IP数据报封装一个长度为1481字节的ICMP报文(包括8字节的ICMP头部,所以其数据部分长度为1473字节),则该数据报在使用以太网帧传输时必须被分片。
例如,长度为1501字节的IP数据报,会被拆成2个IP分片,第一个IP分片为1500字节,第二个IP分片长度为21字节。每个IP分片都包含自己的IP头部(20字节),且第一个IP分片的IP头部设置了MF标志,而第二个IP分片的IP头部没有设置MF标志,因为是最后一个分片。原始IP数据报的ICMP头部内容被完整的复制到了第一个IP分片中,第二个IP分片不包含ICMP头部信息,因为IP模块重组该ICMP报文的时候,只需要一ICMP头部信息,重复传递这个信息没有任何益处。1473字节(1500 -20IP头部-8ICMP头部 +1)的ICMP报文数据的前1472字节被IP模块复制到第一个IP分片中,其总长度为1500字节,从而满足MTU的要求,而多出的最后一个字节责备复制到第二个IP分片中(21字节)。
另外,ICMP报文的头部长度取决于报文的类型,其变化范围很大,ping程序使用的ICMP回显和应答报文的头部长度是8字节。
用ping程序举例:
ping -s 1473 -c 1 192.168.1.106 用 tcpdump抓包:
sudo tcpdump -ntv -i enp0s3 icmp #只抓取icmp报文
看前4行,两个ip分片的知识都是39125,说明它们是同一个IP数据报的分片。第一个分片的片偏移值为0,第二个则是1480,很显然,第二个分片的片偏移值实际上是第一个分片的ICMP报文长度。第一个分片设置了MF标志以表示还有后续分片,所以tcpdump输出"flags[+]".而第二个分片没有设置任何标志。所以tcpdump输出"flags[none]".这两个分片的长度分别为1500和21字节。
相关推荐
IP分片与重组的分析与整理IP分片与重组的分析与整理IP分片与重组的分析与整理
IP分片原理
用于分析IP分片的wireshark抓包文件,IP分片解析文章地址:https://blog.csdn.net/Firefly_cjd/article/details/110366657
这个是虚拟的ip 分片过程的源代码,比较基本,大家可以试试看滑动窗口协议的基本原理,就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的...
tcp/ip协议中ip分片重组以及tcp分段重组具体实现原理
亲自写的,很有用,希望能对大家有帮助,里面主要介绍了IP分片重组的概念、方法以及在Linux下进行操作所需要的代码
对于分片,需要拷贝IP首部和选项,以及数据。而选项的拷贝要注意:根据协议标准,某些选项只应当出现在的一个数据包片中,而其他一些则必须出现在所有的数据包中。 1.2 数据包重组 1.2.1 数据结构 为了使数据包的...
ip分片的模拟源代码。已经在vc环境下实现。
基于fpga的ip分片重组的实现,文中详细介绍了相关内容
IP分片及重组。详细介绍关于IP分组在FPGA中的实现
介绍ip 为什么分片以及如何分片和 tcp 分段的原理
摘要:因为IP不允许分片而导致报文丢弃的故障现象通常是:绝大部分网站和应用都可以正常使用,但个别网站打不开,某些应用(如收发邮件等)无法正常使用,通过ping命令测试到目的...关键词:IP分片原理; 故障分析; 修改; 值;
NULL 博文链接:https://lostyue.iteye.com/blog/540256
关于IP分片的一篇小论文,介绍tcp/ip协议中ip分片的知识。
IP分片技术简介..
分片与重组是IP机制之一。IP数据报可以在网关处被分片,各分片分别送达。...介绍了IP分片重组的原理,在此基础上介绍了RFC8l5算法的实现,并对重组算 法做了优化改进,在保证安全性的同时提高算法的效率。
基于FPGA的IP分片重组的实现.pdf
This document provides software architecture information, development environment information and optimization guidelines.For programming examples and for instructions on compiling and running each ...
对一个较长的IP分组进行分片,然后再将所有的分片重新组装成一个IP分组
这是一个详细的介绍IP分片算法研究及其在嵌入式系统中的应用的电子文档,比较不错的