这两点比较重要

1.IP+ICMP+DATA = 1500字节
2.ping size指定的是data的大小. 3,可以ping大包+不分片检测mtu(分片发生在出口,如果包尺寸大于接口ip mtu,则干脆不往出发包)

分片实验

我们都知道,在以太网中,如果源主机向目标主机发送的数据包大于网关MTU,则该数据包在传输过程中会被IP协议分片传输,具体的分片过程是怎样的呢?我们通过协议分析软件抓包来进行详细的查看(抓包软件使用科来网络分析系统)。

因为以太网默认的MTU值为1500Byte,所以,为了达到分片的效果,我们应该传输大于1500Byte字节的数据包,才能使该数据包分段传输。

我们从本机(192.168.6.11)发送一个2000字节的数据包到局域网的另一台主机(192.168.0.208)为例,在传输的过程中,开启软件抓包,就能够查看到详细的分片结果。

我们以ping为例,在Windows命令提示符下输入:ping 192.168.0.208 -l 2000

通过科来网络分析系统抓包,我们看到,该数据包被分片了,由于我们重复Ping了4次,所以,抓到了4次同样的请求与回显的数据包。如下图:



查看详细的数据包解码(见下图):

分析:因为ping的长度是2000字节,大于了MTU的值,所以会分片发送,如上图。捕获的这个数据包总长度为1500字节,更多分段位置1,表示还有数据分段。s,偏移量为0,需要注意的是IP头部的总长度字段值(这里是1500字节)并不全是数据的净载荷长度,这里还包括了IP以及ICMP的头部长度,分别是20字节和8字节。

另外,IP协议的头部总长度并不一定就是MTU值1500字节,这个值与网络环境、操作系统等因素有关。

下图是第一个分片包。

分析:IP字段的标识0x787F,与第一个包相同,说明这是同一个数据包,只是被分片了。
偏移量为185,表示相对第一个包的位置,以便接收主机根据偏移量进行数据重组。
需要注意的是此处分片包并没有ICMP字段,接收主机会可以根据偏移重组成完整的ICMP数据包。 最后,我们来计算一下该数据包的长度: - 默认的mtu
1.IP+ICMP+DATA = 1500字节
2.ping size指定的是data的大小. 第一个数据包的总长度为1500字节,减去IP头部长度20字节,减去ICMP头部长度8字节,即1500-20-8=1472字节;
第二个数据包的总长度为548字节,减去IP头部长度20字节,即548-20=528字节,两个数据包的净载荷1472+528=2000,正好是我们发送的数据长度。

参考

identification字段:

  • 每发一个包增加1:

  • 产生ip分片的数据包id相同.

附:MTU和MSS

首先说明:数据报的分段和分片确实发生,分段发生在传输层,分片发生在网络层。但是对于分段来说,这是经常发生在UDP传输层协议上的情况,对于传输层使用TCP协议的通道来说,这种事情很少发生。

TCP层的分段和IP层的分片之间的关系 & MTU和MSS之间的关系

IP难点之ip分片

一个以太帧最大为1518字节 (14字节以太首部,20字节IP首部,UDP8/TCP20,因此IP包每次最大为1500==MTU。去掉协议头UDP有效数据1472字节,TCP为1460字节。还有最后的4字节CRC),但是一个IP数据报则可能会有8192字节,超过以太帧的最大限制,那么这时就需要IP分片,分批进行传输。

发送方会在IP层将要发送的数据分成多个数据包分批发送,而接收方则将数据按照顺序再从新组织起来,等接收到一个完整的数据报之后,然后再提交给上一层传输层。

注意,TCP协议为可靠的传输协议,它避免了IP分片的发生,它会在TCP层对数据进行处理,
对数据进行分段(不在详述),IP分片用的多的在UDP协议

[na]IP分片抓包实验的更多相关文章

  1. 针对Quizii的基本抓包实验(Fiddler)

    本实验仅限于了解POST和GET几种常规数据获取方案的学习.简单的来说,POST就是向服务器发送数据,GET会向服务器请求数据.可以参考https://www.zhihu.com/question/2 ...

  2. [TCP/IP] 网络层-抓包分析IP数据包首部

    ip数据包的结构:首部+数据部分 1.版本(v4或者v6)+首部长度(固定的20字节,所以就没有)+区分服务优先级(我的例子是 assured forwarding 31 0x1a 26,保证转发) ...

  3. [na]ip数据包格式

    IP Datagram Structure 字段名 解释 版本 IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6. 首部长度 IP报头的长度.固定部分的长度(20字节)和可变部分的长 ...

  4. 网络协议抓包分析——IP互联网协议

    前言 IP协议是位于OSI模型的第三层协议,其主要目的就是使得网络间可以相互通信.在这一层上运行的协议不止IP协议,但是使用最为广泛的就是互联网协议. 什么是IP数据报 TCP/IP协议定义了一个在因 ...

  5. 转:tcpdump抓包分析(强烈推荐)

    转自:https://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666539134&idx=1&sn=5166f0aac71 ...

  6. Wireshark数据抓包分析——网络协议篇

                   Wireshark数据抓包分析--网络协议篇     watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...

  7. OpenFlow1.3协议wireshark抓包分析

    OpenFlow v1.0 v1.0协议消息列表如下: 分为三类消息:Controller-to-switch,asynchronous和symmertric. v1.0(包含至少一个流表,每个流表包 ...

  8. Tcpdump命令抓包详细分析

    1 起因 前段时间,一直在调线上的一个问题:线上应用接受POST请求,请求body中的参数获取不全,存在丢失的状况.这个问题是偶发性的,大概发生的几率为5%-10%左右,这个概率已经相当高了.在排查问 ...

  9. 聊聊tcpdump与Wireshark抓包分析

    1 起因# 前段时间,一直在调线上的一个问题:线上应用接受POST请求,请求body中的参数获取不全,存在丢失的状况.这个问题是偶发性的,大概发生的几率为5%-10%左右,这个概率已经相当高了.在排查 ...

随机推荐

  1. SQL Manager Lite可视化工具部分中英对照

    .Refresh //刷新表数据 .compile,//提交数据. .connect to host //链接到服务器 .disconnect from all databases //断开链接 . ...

  2. dom4j 输出UTF-8 XML时中文乱码

    使用DOM4J的XMLWriter输出UTF-8编码的XML文件时,出现乱码 public static void writToXml(Document document) throws IOExce ...

  3. 转 php安装错误configure: error: Please reinstall the libcurl distribu

    今天配置一台server的php支持curl的时候, 出现如下报错 checking for cURL in default path... not foundconfigure: error: Pl ...

  4. docker-machine为节点安装指定版本的docker-ce的思路

    对于指定版本的问题,翻遍官网文档和github上的issue,始终没有一个好的回答,而且该产品的开发人员不知道为什么总不正面提供方法,也许是为了推广新版本, 但是这样真的好吗?docker swarm ...

  5. (原)torch,caffe,python中读入数据的默认范围

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6554388.html 之前torch(image.load).caffe(默认的).python(使用 ...

  6. 五年屌丝运维工作shell精华

    屌丝运维常用shell列出你最常用的10条shellhistory | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | so ...

  7. 树莓派进阶之路 (010) - 树莓派raspi-config配置(转)

    经过前面两步我们的树莓派已经正常的工作起来了,但是在真正用它开发之前还需要进行一些列的配置以及软件的安装,这样开发起来才会得心应手,下面我们介绍一下常用的软件和服务 1.配置选项: 树莓派第一次使用的 ...

  8. IDEA使用笔记(五)——*.properties中文乱码的修正

    问题:我的IDEA已经将文件的字符集设置成了UTF-8,但是中文在*.properties文件中还是会出现乱码,后来经同事指点修改了一项配置就ok了!话不多说,看下面的对比就清楚了. 设置前: 设置后 ...

  9. 【Algorithm】堆排序

    堆是一种完全二叉树结构,并且其满足一种性质:父节点存储值大于(或小于)其孩子节点存储值,分别称为大顶堆.小顶堆.堆一般采用数组进行存储(从下标为0开始).则父节点位置为i,那么其左孩子为2*i + 1 ...

  10. @property与@synthesize的差别

    上一篇文章我有讲到self.与_的差别,往往和这个问题相伴随的是我困惑的问题是"@property与@synthesize的差别" @property的使用方法 @interfac ...