Wireshark TS | DNS 案例分析之外的思考

前言

承接之前一篇《Packet Challenge 之 DNS 案例分析》,在数据包跟踪文件 dnsing.pcapng 中,关于第 4 题(What is the largest DNS response time seen in this trace file? )的分析过程中曾经碰到一个小问题,主要是数据包中存在部分 DNS 查询数据包重传的现象,因此对于 DNS 响应时间的计算可能就有一点不同的见解。

问题

譬如 No.1-4 数据包,No.1 为起始 DNS 查询,No.2 为 DNS 查询的第一次重传,No.3 为 DNS 查询的第二次重传,No.4 为 DNS 响应,那么 DNS 响应时间是 No.4 和 No.1 的差值?还是 No.4 和 No.3 的差值?

关于上述问题的场景,实际上类似 TCP 超时重传中关于 RTO、RTT 如何选取的问题,如下图。

image.png

重传时间的选择是 TCP 最复杂的问题之一,本篇不再展开。

而对于像 dns.timehttp.time 等这些关乎应用性能指标的字段值,倒是没有那么讲究。在 Wireshark 中这样的类似字段,以 [ ] 标注的,实际上并不是数据包本身的实际字段。对比数据包 DNS 响应中的 Transaction IDFlags 等真实字段,可以看到如下:

  1. [Request In: 7] Wireshark 根据上下文提示该 DNS 响应数据包所对应的请求在 No.7 数据包;
  2. [Time:0.037583000 seconds] Wireshark 根据上下文计算出该 DNS 响应数据包和请求数据包之间的时间间隔为 0.037583000 秒。

image.png

分析

再回到 DNS 这个案例上,Wireshark 根据 Transaction ID0x0f39 对应出 No.7-9 为一组 DNS 请求和响应,其中 No.7 为第一次查询,No.8 为第二次查询(也就是重传,Wireshark 会标记提示为 DNS 查询重传,原始请求在 No.7),No.9 为查询响应。

Wireshark 对于 dns.time的取值是 0.037583000 秒,这个是 No.9 和 No.7 的时间间隔,也就是 0.015479000 加上 0.022104000 的结果,因此 Wireshark dns.time 的算法是第一次查询以及响应数据包之间的间隔时间

image.png

其次根据显示过滤表达式,可过滤出和域名相关的所有 DNS 请求和响应,如下。

dns.qry.name == "www.paypal.com"

包括 6 次完整请求和响应,且每次均有重传请求,其中第 5 次还包含有两次请求重传,因此 dns.time 时间较长,超过了 1 秒。

image.png

在 Statistics -> DNS 中,也可以看到相关请求-响应时间,最小 36.8ms 至最长 1041.9ms,平均 212.63ms。

image.png

通过 tshark 也可以输出相关 dns 字段值。

λ tshark -r dnsing.pcapng -Y 'dns.qry.name == "www.paypal.com"' -T fields -e frame.number -e dns.id -e dns.flags.response -e dns.time
7       0x0f39  0
8       0x0f39  0
9       0x0f39  1       0.037583000
10      0x5644  0
11      0x5644  0
12      0x5644  1       0.036807000
40      0x4fa0  0
41      0x4fa0  0
42      0x4fa0  1       0.039575000
88      0x7964  0
89      0x7964  0
90      0x7964  1       0.042819000
110     0xaf9f  0
111     0xaf9f  0
112     0xaf9f  0
113     0xaf9f  1       1.041903000
119     0xc8c8  0
122     0xc8c8  0
125     0xc8c8  1       0.077093000

深入

实际上,对于 DNS 请求和响应的关联,我更愿理解是最后一次 DNS 重传请求和响应之间是对应关系,这样所计算出来的 dns.time 会更小,理论上应该也更精确。

因此对于 DNS Transaction ID 值 0x0f39 的一组,计算 No.8 和 No.9 的间隔时间,也就是 dns.time 的值 22ms

image.png

以上都是手工计算,那么对于整个数据包跟踪文件中,存在很多 DNS 请求响应对的,如何得出所有的 dns.time,可通过如下方式输出相关过滤后的数据包。

tshark -r dnsing.pcapng -w test1.pcapng -Y `tshark -r dnsing.pcapng -Y 'dns.qry.name == "www.paypal.com"' -T fields -e frame.number -e dns.id -e dns.flags.response | sort -rn  | uniq -f 1 | sort -n | awk '{printf("%sframe.number==%d",sep,$1);sep="||"}'`

image.png

通过 tshark 也可以输出相关 dns 字段值。

λ tshark -r test1.pcapng -T fields -e frame.number -e dns.id -e dns.flags.response -e dns.time
1       0x0f39  0
2       0x0f39  1       0.022104000
3       0x5644  0
4       0x5644  1       0.021225000
5       0x4fa0  0
6       0x4fa0  1       0.023975000
7       0x7964  0
8       0x7964  1       0.027038000
9       0xaf9f  0
10      0xaf9f  1       0.026070000
11      0xc8c8  0
12      0xc8c8  1       0.061571000

进阶

在上述分析章节中说到,Wireshark dns.time 的算法是第一次查询以及响应数据包之间的间隔时间,也就是说默认没有考虑有重传请求的存在。

但终究 Wireshark 还是考虑到了这样的场景,在 Perferences -> Protocols -> DNS 中,有如下的选项可以使用:

image.png

也就是说重传之间允许的秒数,该选项默认是 5s,也就是 5s 以内的相同请求,都算成是重传请求,而如果全是重传请求的话,则 dns.time 就是第一次查询以及响应数据包之间的间隔时间。

如下,默认 5s 的情况,No.112 在 2s 之内,所以仍是重传请求,dns.time 值 No.113 和 No.110 的间隔时间为 1.041s

image.png

如果选项 Number of seconds allowed between retransmissions 值改为 1s 呢,那么结果如下,No.112 在 1s 之外,所以不再是重传请求,因此 dns.time 值就变成 No.113 和 No.112 的间隔时间为 0.026s

image.png

那么再如果选项 Number of seconds allowed between retransmissions 值改为 0 呢,那么结果如下,自然也就不存在所谓的重传请求,这样也就直接达到了深入章节中的脚本效果。

image.png

image.png

总结

以上就是在之前 DNS 案例分析中延伸出来的一点思考,选项 Number of seconds allowed between retransmissions 供参考使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/485042.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[BT]BUUCTF刷题第6天(3.24)

第6天 Web [极客大挑战 2019]PHP Payload: O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}这道题考点是网站源码备份文件泄露和PHP反序列化,有篇介…

【WEEK4】 【DAY5】AJAX - Part Two【English Version】

2024.3.22 Friday Following the previous article 【WEEK4】 【DAY4】AJAX - Part One【English Version】 Contents 8.4. Ajax Asynchronous Data Loading8.4.1. Create User.java8.4.2. Add lombok and jackson support in pom.xml8.4.3. Change Tomcat Settings8.4.4. Mo…

HTML5和CSS3新特性

Html新增属性 1.新增语义化标签 <header>&#xff1a;头部标签 <nav>&#xff1a;导航标签 <article>&#xff1a;内容标签 <section>&#xff1a;定义文档某个区域 <aside>&#xff1a;侧边栏标签 <footer>&#xff1a;尾部标签 2.…

【深度学习】pytorch,MNIST手写数字分类

efficientnet_b0的迁移学习 import torch import torch.nn as nn import torch.optim as optim import torchvision.transforms as transforms from torchvision.datasets import MNIST from torch.utils.data import DataLoader from torchvision import models import matplo…

C语言——sizeof与strlen的对比

一.sizeof 我们在学习操作符的时候&#xff0c;就了解到了sizeof操作符&#xff0c;它的作用是求参数所占内存空间的大小&#xff0c;单位是字节。如果参数是一个类型&#xff0c;那就返回参数所占的字节数。 #include <stdio.h>int main() {int a 10;size_t b sizeo…

【机器学习300问】48、如何绘制ROC曲线?

ROC曲线&#xff08;受试者工作特征曲线&#xff09;是一种用于可视化评估二分类模型性能的指标。特别是在不同阈值情况下模型对正类和负类的区分能力。那么“阈值”到底是个什么呢&#xff1f;ROC曲线中的每一个点到底是什么意思&#xff1f; 一、ROC曲线的绘制【理论】 二分…

LeetCode Python - 72. 编辑距离

目录 题目描述解法运行结果 题目描述 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 示例 1&#xff1a; 输入&#xff1a;word1 “h…

Linux的介绍以及其发展历史

文章目录 前言一、技术是推动社会发展的基本动力1.人为什么能成为万物之长呢&#xff1f;2.人为什么要发明工具&#xff0c;进行进化呢&#xff1f;3.人是如何发明工具的&#xff1f;4.为什么要有不同的岗位和行业&#xff1f; 二、计算机(操作系统)发展的基本脉络1.第一台计算…

Google ScreenAI代表了一款先进的视觉语言模型,专为用户界面(UI)和视觉情境下的语言理解而设计

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

二次开发Flink-coGroup算子支持迟到数据通过测输出流提取

1.背景 coGroup算子开窗到时间关闭之后&#xff0c;迟到数据无法通过测输出流提取&#xff0c;intervalJoin算子提供了api&#xff0c;因为join算子底层就是coGroup算子&#xff0c;所以Join算子也不行。 flink版本 v1.17.1 2.coGroup算子源码分析 2.1完成的coGroup算子调用流…

QT(C++)-error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”

1、项目场景&#xff1a; 在VS中采用QT&#xff08;C&#xff09;调试时&#xff0c;出现error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”错误 2、解决方案&#xff1a; 在“解决方案资源管理器”中选中出现此类BUG的项目&#xff0c;右键-…

jenkins介绍,帮助你从安装到使用jenkins

Jenkins 概述 官网地址&#xff1a;https://www.jenkins.io/zh/ 什么是 Jenkins Jenkins是一款开源 CI&CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测试和部署软件。它提供了一个易于使用的图形化界面&#xff0c;可以通过配置简单的任务来实现自动化构…

javaSSM游泳馆日常管理系统IDEA开发mysql数据库web结构计算机java编程maven项目

一、源码特点 IDEA开发SSM游泳馆日常管理系统是一套完善的完整企业内部系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;MAVEN方式加载&#xff0c;系统具有完整的源代码和…

Vue 3 里的 onMounted 怎么用?

疑问 最近&#xff0c;一直在学习 Vue 3&#xff0c;此前我不懂前端&#xff0c;也没写过 Vue 2&#xff0c;所以是从 0 开始学习 Vue 3 的。很多对普通人不是疑问的&#xff0c;在我这里也会不太清楚。 我在写项目的时候&#xff0c;常见的一种场景是这样的&#xff1a;页面…

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别

分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别 目录 分类预测 | Matlab实现MTF-CNN-Mutilhead-Attention马尔可夫转移场卷积网络多头注意力机制多特征分类预测/故障识别分类效果基本介绍模型描述程序设计参考…

基于SSM非遗视域下喀什旅游网站

ssm非遗视域下喀什旅游网站的设计与实现 摘要 我们的生活水平正在不断的提高&#xff0c;然而提高的一个重要的侧面表现就是更加注重我们的娱乐生活。旅行是我们都喜欢的一种娱乐方式&#xff0c;各式各样的旅行经历给我们带来的喜悦也是大不相同的。带来快乐的同时也因为其复…

IntelliJ IDE 插件开发 | (七)PSI 入门及实战(实现 MyBatis 插件的跳转功能)

系列文章 IntelliJ IDE 插件开发 |&#xff08;一&#xff09;快速入门IntelliJ IDE 插件开发 |&#xff08;二&#xff09;UI 界面与数据持久化IntelliJ IDE 插件开发 |&#xff08;三&#xff09;消息通知与事件监听IntelliJ IDE 插件开发 |&#xff08;四&#xff09;来查收…

MongoDB高可用架构涉及常用功能整理

MongoDB高可用架构涉及常用功能整理 1. mongo架构和相关组件1.1. Master-Slave主从模式1.2. Replica Set 副本集模式1.3. Sharding 分片模式 2. Sharding 分片模式2.1. Hashed Sharding方式2.2. Range Sharding方式 3. 事务性4. 疑问和思考4.1. 怎么保证数据的高可靠&#xff1…

常用中间件redis,kafka及其测试方法

常用消息中间件及其测试方法 一、中间件的使用场景引入中间件的目的一般有两个&#xff1a;1、提升性能常用的中间件&#xff1a;1) 高速缓存&#xff1a;redis2) 全文检索&#xff1a;ES3) 存日志&#xff1a;ELK架构4) 流量削峰&#xff1a;kafka 2、提升可用性产品架构中高可…

Web前端—浏览器渲染原理

浏览器渲染原理 浏览器渲染原理渲染时间点渲染流水线1. 解析HTML—Parse HTML2. 样式计算—Recalculate Style3. 布局—Layout4. 分层—Layer5. 绘制—Paint6. 分块—Tiling7. 光栅化—Raster8. 画—Draw完整过程 面试题1. 浏览器是如何渲染页面的&#xff1f;2. 什么是 reflow…