从零开始学安全(四十三)●Wireshark分析ICMP(IP)协议
存活时间与IP分片
这里我们首先来研究一下关于IP协议的两个非常重要的概念:存活时间与IP分片。存活时间(TTL,Time to Live)用于定义数据包的生存周期,也就是在该数据包被丢弃之前,所能够经历的时间,或者能够经过的最大路由数目。这个值是在数据包被创建的时候设置的,而且通常在每次发往一个路由器的时候会实现自减一的操作。一旦TTL的值变为了0,那么这个数据包就会被丢弃。由于TTL的值在技术上是基于时间的,那么一个非常繁忙的路由器可能会将TTL的值减去不止1,但是一般来说,我们还是可以认为一个路由设备在多数情况下只会将TTL的值减去1

这个捕获文件中包含有两个ICMP(Internet Control Message Protocol,Internet控制报文协议)数据包,它使用了IP协议进行数据包的传递,我们可以利用Packet Details面板来展开IP的头部信息进行分析。
在这里可以看到,IP的版本号为4,IP头的长度是20字节,总长度是60字节,并且TTL的值是128。其实这个捕获文件是从IP地址为10.10.0.3的设备将一个ICMP请求发往了IP地址为192.168.0.128的设备上。也就是使用了ping来测试设备之间的通信。而这个捕获文件就是在源主机上被创建的。

可以发现,这里的TTL值变成了127,比原来的TTL少了1。就算我们不知道这个网络的结构,那么也可以由TTL值推断出这两台设备之间是有一个路由器的,正是由于有一个路由器,才使得TTL的值减少了1。
接下来我们研究一下IP分片。IP数据包的分片指的是将一个数据流分为更小的片段,是IP用于解决跨越不同类型的网络时可靠传输的一个特性。数据包的分片主要基于OSI模型第二层的数据链路层协议所使用的最大传输单元(MTU,Maximum Transmission Unit)的大小,以及使用这些第二层协议的设备配置情况。在多数情况下,第二层所使用的数据链路层协议是以太网。而以太网的默认MTU是1500,那么以太网的网络上所能传输的最大数据包的大小就是1500字节,注意这里面并不包括14字节大小的以太网头部本身。
当一个设备准备传输一个IP数据包时,会首先将这个数据包的大小和将要把这个数据包传出去的网络接口的MTU进行比较,从而确定是否需要将这个数据包分片。如果数据包的大小大于MTU,那么这个数据包就会被分片。步骤如下:
(1)设备将数据分为若干个可以成功进行传输的数据包。
(2)每个IP头的总长度域(Total Length)会被设置为每个分片的片段长度。
(3)更多分片标志(More fragments)将会在数据流的所有数据包中设置为1,最后一个数据包则为0(not set)。
(4)IP头中分片部分的分片偏移将会被设置。
(5)数据包被发送出去。

这里我们重点关注的是更多分片标志(More fragments)以及分片偏移(Fragment offset)。由于说在这个数据包中,更多分片标志被设置为了1,意味着这是一个分片数据包,并且接收设备还需要等待接收序列中的另一个数据包。而分片偏移被设置为了0,说明这个数据包是一系列分片偏移中的第一个。接下来查看一下第二个数据包的IP头:

这个数据包同样被设置了更多分片标志,而接下来的分片偏移的值是1480,这是因为前一个分片是1500字节,但是其中包含有20字节的IP头,因此到这里分片偏移就成了1480。再看一下第3个数据包:

这个数据包并没有设定更多分片标志位,说明这是整个数据流的最后一个分片。并且其分片偏移被设定为2960,也就是1480加上1480的结果。这三个分片之所以会被认为来自于同一个数据序列,是因为在Identification中,这三个数据包的值都是0x7474。

从零开始学安全(四十三)●Wireshark分析ICMP(IP)协议的更多相关文章
- [转]使用wireshark分析TCP/IP协议中TCP包头的格式
本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述 TCP是面向连接的可靠传输协议,两个进程互发数 ...
- wireshark抓包分析——TCP/IP协议
本文来自网易云社区 当我们需要跟踪网络有关的信息时,经常会说"抓包".这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通 ...
- Mina、Netty、Twisted一起学(四):定制自己的协议
在前面的博文中,介绍一些消息分割的方案,以及MINA.Netty.Twisted针对这些方案提供的相关API.例如MINA的TextLineCodecFactory.PrefixedStringCod ...
- 从零开始学安全(四十一)●初识Wireshark
wireshark:Beyond Compare是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与 ...
- 2.wireshark分析之TCP协议(一)
(1) TCP是怎么样的协议? TCP是一种面向连接(连接导向)的.可靠的基于字节流的传输层通信协议.TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认.对失序的数据重新排 ...
- 从零开始学安全(四十二)●利用Wireshark分析ARP协议数据包
wireshark:是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换,是目前 ...
- 从零开始学安全(四十四)●TCP三次握手四次挥手
wireshark:Beyond Compare是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wireshark使用WinPCAP作为接口,直接与 ...
- 使用 WireShark 分析 TCP/IP 三次握手 和 四次挥手
TCP 三次握手 示意图 Wireshark 抓包注意事项 为了演示一个TCP三次握手建立连接的过程,我们通过 Chrome 访问一个网页. 已知 HTTP 协议就是建立在TCP链接上的 比如访问以下 ...
- 从零开始学安全(四)●Vmware CentOS 7 添加静态ip联网
一.虚拟网络编辑器配置 1.VMnet8设置(不需要改动) 2.NAT设置(不需要改动) 3.DHCP设置(CentOS IP地址段设置,不需要改动) 二.虚拟机设置(网络适配器选择NAT模式) 三. ...
随机推荐
- i春秋----Misc
好久没有写 博客今天更新多了一些 解题思路:题目做多了,自然能够想到是凯撒解密: 查看得到答案; flag{4c850c5b3b2756e67a91bad8e046dda} 2: 解题思路:是我想太多 ...
- python——在文件存放路径下自动创建文件夹!
1.a.py文件存放的路径下为(D:\Auto\eclipse\workspace\Testhtml\Test) 2.通过os.getcwd()获取的路径为:D:\Auto\eclipse\works ...
- 鸟哥的Linux私房菜笔记第四章
前言 对着<鸟哥的Linux私房菜-基础版>做了简化笔记.不想让自己知其然而不知其所然.所以写个博客让自己好好巩固一下,当然不可能把书中的内容全部写下来.在这里就简化一点把命令写下来. 让 ...
- 大数据技术之_19_Spark学习_03_Spark SQL 应用解析小结
========== Spark SQL ==========1.Spark SQL 是 Spark 的一个模块,可以和 RDD 进行混合编程.支持标准的数据源.可以集成和替代 Hive.可以提供 J ...
- 使用NSSM把.Net Core部署至 Windows 服务
为什么部署至Windows Services 在很多情况下,很少会把.Net Core项目部署至Windows服务中,特别是Asp.net Core就更少了.一般情况下,Asp.net Core会部署 ...
- 补习系列(18)-springboot H2 迷你数据库
目录 关于 H2 一.H2 用作本地数据库 1. 引入依赖: 2. 配置文件 3. 样例数据 二.H2 用于单元测试 1. 依赖包 2. 测试配置 3. 测试代码 小结 关于 H2 H2 数据库是一个 ...
- if条件、while循环、for循环 相关练习
1.实现用户输入用户名和密码,当用户名为 seven 且 密码为 123 时,显示登陆成功,否则登陆失败! while True: name = input('请输入用户名:') psw = inpu ...
- Java虚拟机二:使用jvisualvm工具远程监控tomcat内存
jdk中自带了很多工具可以用于性能分析,位于jdk的bin目录下,jvisualvm工具可以以图形化的方式更加直观的监控本地以及远程的java进程的内存占用,线程状态等信息. 一.配置tomcat 在 ...
- solr搭建(linux)
Solr版本:7.4.0 Tomcat版本:8.5 Jdk版本:1.8 最好在root用户下进行操作,为了更方便初学者理解,选用ubuntu操作,当然用命令操作过程是一样的,会命令操作的话看懂图形化操 ...
- Redis- 简单操作命令
1.进入. 退出 redis-cli exit 2.五种类型: 字符串: 字符串基本操作: 设置: SET key value 获取: GET key 多重赋值: MSET k1 v1 k2 v2 . ...