当前位置: 首页 > news >正文

案例分析-DNS+tcpdump+wireshark

网络优化,实际上包含了整 个网络协议栈的所有层的优化。

DNS解析速度不稳定

DNS(Domain Name System) 域名系统,提供 域名和 IP 地址之间映射关系的查询服务。动态服务发现和全局 负载均衡(Global Server Load Balance,GSLB)的机制。这样,DNS 就可以选择离用户 最近的 IP 来提供服务。即使后端服务的 IP 地址发生变化,用户依然可以用相同域名来访 问。

域名。位置越靠后,层级越高。

com 是顶级域名, yuque 是二级域名

域名解析服务 (DNS),而对应的服务器就是域名服务器,网络协议则是 DNS 协议。DNS 协议在 TCP/IP 栈中属于应用层,不过实际传输还是基于 UDP 或者 TCP 协议(UDP 居多) ,并且域名服务器一般监听在端口 53 上。

在配置 Linux 系统的网络时,需要给它配置 DNS 服务器,这样它才可以通过域名来访问外部服务。

另外,DNS 服务通过资源记录的方式,来管理所有数据,它支持 A、CNAME、MX、 NS、PTR 等多种类型的记录。比如:

  • A 记录,用来把域名转换成 IP 地址;
  • CNAME 记录,用来创建别名;
  • 而 NS 记录,则表示该域名对应的域名服务器地址。

访问某个网址时,就需要通过 DNS 的 A 记录,查询该域名对应的 IP 地址来访问 Web 服务。

nslookup

nslookup 命令,可以查询到域名的 A 记录

dig +trace +nodnssec

另外一个常用的 DNS 解析工具 dig ,就提供了 trace 功能,可以展 示递归查询的整个过程。

+trace 表示开启跟踪查询

+nodnssec 表示禁止 DNS 安全扩展

1625662692414-d718ff51-91cf-4d9f-af6d-96d361e8ec27.png

1625662774327-9f705742-311c-447c-8f13-d3ce8f5a9277.png

第一部分,是从 114.114.114.114 查到的一些根域名服务器(.)的 NS 记录

第二部分,是从 NS 记录结果中选一个(h.root-servers.net),并查询顶级域名 org. 的 NS 记录。

第三部分,是从 org. 的 NS 记录中选择一个(b0.org.afilias-nst.org),并查询二级域 名 geekbang.org. 的 NS 服务器。

最后一部分,就是从 geekbang.org. 的 NS 服务器(dns10.hichina.com)查询最终主 机 time.geekbang.org. 的 A 记录。

这个输出里展示的各级域名的 NS 记录,其实就是各级域名服务器的地址,可以让你更清楚 DNS 解析的过程。 1625662948980-439f8416-4603-45bb-93b4-201f01a8d567.png

在内网中,搭建自定义的 DNS 服务器,专门用来解析内网中的域名。

内 网 DNS 服务器,一般还会设置一个或多个上游 DNS 服务器,用来解析外网的域名。

DNS 解析失败

nslookup -debug time.geekbang.org 查看失败的过程:

nslookup 连接环回地址(127.0.0.1 和 ::1)的 53 端口失败。 为什么会去连接环回地址,而不是114.114.114.114 呢?可能是因为容器中没有配置 DNS 服务器cat /etc/resolv.conf,果然没有

echo "nameserver 114.114.114.114" > /etc/resolv.conf

配置之后重新执行,即可。!!!

DNS 解析不稳定

DNS 解析的结 果不但比较慢,而且还会发生超时失败的情况。DNS 解析,说白了就是客户端与服务器交互的过程, 并且这个过程还使用了 UDP 协议。

  • DNS 服务器本身有问题,响应慢并且不稳定;
    • nslookup 的输出,你可以看到,现在客户端连接的 DNS 是 8.8.8.8,这是 Google 提供的 DNS 服务。不可能不稳定
  • 客户端到 DNS 服务器的网络延迟比较大;
    • ping 可以用来测试服务器的延迟。发现丢包,使用延迟更小的 DNS 服务器,如电信提供的 114.114.114.114。ping -c3 114.114.114.114
    • echo "nameserver 114.114.114.114" > /etc/resolv.conf
  • DNS 请求或者响应包,在某些情况下被链路中的网络设备弄丢了。

使用dnsmasq 作为缓存

想要为系统开启 DNS 缓存,就需要你做额外的配置。比如,最简单的方法,就是使 用 dnsmasq。dnsmasq 是最常用的 DNS 缓存服务之一,还经常作为 DHCP 服务来使用。它的安装和配 置都比较简单,性能也可以满足绝大多数应用程序对 DNS 缓存的需求。

/etc/init.d/dnsmasq start

修改 /etc/resolv.conf,将 DNS 服务器改为 dnsmasq 的监听地址,这儿是 127.0.0.1。接着,重新执行多次 nslookup 命令

echo nameserver 127.0.0.1 > /etc/resolv.conf
time nslookup yuque.com 

DNS 优化思路

  • 缓存
  • 浏览器提前解析
  • 基于 DNS 的全局负载均衡(GSLB)。这不仅为服务提供了负载均衡和高可用的功能, 还可以根据用户的位置,返回距离最近的 IP 地址。

tcpdump 和 Wireshark 分析网络流量

tcpdump 和 Wireshark 就是最常用的网络抓包和分析工具,更是分析网络性能必不可少 的利器。


在实际分析网络性能时,先用 tcpdump 抓包,后用 Wireshark 分析,也是一种常 用的方法。

ping总时间过长,单个请求时间不长

  • ping -c3 geektime.org 发现每次ttl小,但是最后的time 11049ms 很大,延迟并不大,而 ping 命令本身却很慢
    • 怀疑是域名解析的问题
  • time nslookup geektime.org 输出执行时间,并不长
  • tcpdump -nn udp port 53 or host 35.190.27.188 抓包,查看 ping 在收发 哪些网络包。
    • 用 tcpdump 不加任何参数来抓包,但那样的话,就可能抓取到很多不相 干的包。由于我们已经执行过 ping 命令,知道了 geekbang.org 的 IP 地址是 35.190.27.188,也知道 ping 命令会执行 DNS 查询。所以,上面这条命令,就是基于这 个规则进行过滤。
    • -nn ,表示不解析抓包中的域名(即不反向解析)、协议以及端口号。
    • udp port 53 ,表示只显示 UDP 协议的端口号(包括源端口和目的端口)为 53 的包。
    • host 35.190.27.188 ,表示只显示 IP 地址(包括源地址和目的地址)为 35.190.27.188 的包。

在这个 tcpdump 的输出中,

36909+ 表示查询标识值,它也会出现在响应中,加号表示启用递归查询。

A? 表示查询 A 记录。

geektime.org. 表示待查询的域名。

30 表示报文长度。

接下来的一条,则是从 114.114.114.114 发送回来的 DNS 响应——域名 geektime.org. 的 A 记录值为 35.190.27.188。 第三条和第四条,是 ICMP echo request 和 ICMP echo reply,响应包的时间戳 14:02:31.539667,减去请求包的时间戳 14:02:31.508164 ,就可以得到,这次 ICMP 所 用时间为 30ms。这看起来并没有问题。

但随后的两条反向地址解析 PTR 请求,就比较可疑了。因为我们只看到了请求包,却没有 应答包。仔细观察它们的时间,你会发现,这两条记录都是发出后 5s 才出现下一个网络 包,两条 PTR 记录就消耗了 10s。

再往下看,最后的四个包,则是两次正常的 ICMP 请求和响应,根据时间戳计算其延迟, 也是 30ms。

到这里,其实我们也就找到了 ping 缓慢的根源,正是两次 PTR 请求没有得到响应而超时 导致的PTR 反向地址解析的目的,是从 IP 地址反查出域名,但事实上,并非所有 IP 地 址都会定义 PTR 记录,所以 PTR 查询很可能会失败。

根据 IP 地址反查域名、根据端口号反查协议名称,是很多网络工具默认的行为, 而这往往会导致性能工具的工作缓慢

只要禁止 PTR 就可以。执行 man ping 命令,查询使用手册,即加上 -n 选项禁止名称解析。

tcpdump

基于 libpcap ,利用内核中的 AF_PACKET 套接字,抓取网络接口中传输的网络包;并提供了强大的过滤规则,帮你从大 量的网络包中,挑出最想关注的信息。

tcpdump [选 项] [过滤表达式]

  • **输出格式:时间戳 协议 源地址.源端口 > 目的地址. 目的端口 网络包详细信息 **

选项放在中括号里,就说明 这是一个可选选项。这时候就要留意一下,这些选项是不是有默认值。

tcpdump 提供了大量的选 项以及各式各样的过滤表达式。

1625664972100-97191f48-c986-4900-aada-be939c4ef5a2.png

1625665013059-6c183395-6877-4b52-8d10-ad61b9cd8a1e.png

wireshark

把抓取的网络包保存到 ping.pcap 文件中:

tcpdump -nn udp port 53 or host 35.190.27.188 -w ping.pcap

1625665266779-c71ae3b9-ab67-46ef-ae8d-0bc81c96f1d0.png

从 Wireshark 的界面里,你可以发现,它不仅以更规整的格式,展示了各个网络包的头部 信息;还用了不同颜色,展示 DNS 和 ICMP 这两种不同的协议。你也可以一眼看出,中间 的两条 PTR 查询并没有响应包。

在网络包列表中选择某一个网络包后,在其下方的网络包详情中,你还可以看到,这 个包在协议栈各层的详细信息。比如,以编号为 5 的 PTR 包为例: 你可以看到,IP 层(Internet Protocol)的源地址和目的地址、传输层的 UDP 协议 (Uder Datagram Protocol)、应用层的 DNS 协议(Domain Name System)的概要 信息。

1625665309955-eb336426-eac1-4525-babb-c03589ee9ccc.png

继续点击每层左边的箭头,就可以看到该层协议头的所有信息。比如点击 DNS 后,就可以 看到 Transaction ID、Flags、Queries 等 DNS 协议各个字段的数值以及含义。

TCP 三次握手和四次挥手

首先 查出 example.com 的 IP。

然后,执行 tcpdump 命令,过滤得到的 IP 地址,并将结果保 存到 web.pcap 中。

1625665603950-0950d823-709a-4d60-8b79-1323a75eb877.png

1625665613660-635a9c17-19b2-4ba0-862e-d89a4a6a87d5.png

1625665639786-30d7a48c-3a1d-4f37-aa34-c1b50b153cac.png

按下 Ctrl+C 停止 tcpdump,并把得到的 web.pcap 拷贝出来。

使用 Wireshark 打开 web.pcap 后

1625665655358-7eeb73f1-9667-4118-8650-4c00ff52197f.png

由于 HTTP 基于 TCP ,所以你最先看到的三个包,分别是 TCP 三次握手的包。

中间的才是 HTTP 请求和响应包,而最后的三个包,则是 TCP 连接断开时的三次挥手包。

1625665706390-1ad697d8-9567-48d4-b04e-8675d300da4f.png

1625665799730-5a5c32b4-b71c-4710-9c35-a45fdcb0cd5e.png

之所以有三个包,是因为服务器端收到客户端的 FIN 后,服务器端同时也要关闭连 接,这样就可以把 ACK 和 FIN 合并到一起发送,节省了一个包,变成了“三次挥手”。 而通常情况下,服务器端收到客户端的 FIN 后,很可能还没发送完数据,所以就会先回复 客户端一个 ACK 包。稍等一会儿,完成所有数据包的发送后,才会发送 FIN 包。这也就是 四次挥手了。

1625665842068-abf45a7f-7caf-48de-9a1b-17a40e2355f4.png

http://www.hskmm.com/?act=detail&tid=29601

相关文章:

  • 2025 年卧式离心机厂家 TOP 企业品牌推荐排行榜,LW250/LW350/LW450/LW530/LW540 / 专业卧式离心机推荐这十家公司!
  • 2025 年水泥管厂家最新推荐排行榜,国标水泥管,二级水泥管,钢筋混凝土水泥管,大口径水泥管,平口水泥管公司推荐!
  • Day1 经典Holle word
  • 内存知识总结
  • 2025 年金属复合板厂家推荐广东粤洋建材科技有限公司,实力产能与定制服务全景解析金属复合板公司推荐
  • 2025 年铝蜂窝板厂家最新推荐排行榜,铝蜂窝板,铝蜂窝吊顶,铝蜂窝墙面板,微孔吸音板,防火A级铝复合板公司推荐
  • 读书笔记:关于Oracle里的“老古董”:LONG类型
  • 致技术社区的英雄们:一场关于文明未来的建造邀请
  • AI图片生成思路
  • SCP/NOIP 复习:插板法
  • 内存泄漏与SWAP
  • 今天开通自己的博客啦,加油加油!成为合格的牛马! - Irving11
  • 2025安全光栅厂家最新权威推荐榜:精准防护与高效性能的工业
  • 分块学习笔记
  • 2025年10月精加工车间恒温恒湿系统厂家推荐:精准控温与高效节能首
  • 977. 有序数组的平方 双指针
  • 完整教程:iSCSI服务器
  • 深入解析:数据库视图:虚拟表的强大应用
  • agc001_c题解
  • 【IMU】6轴数据校准算法
  • 2025 年 MES 服务商 TOP 平台机构推荐排行榜,mes 系统 /mes 软件 /mes 制造执行系统 /mes 生产制造执行系统 /mes 生产管理系统公司推荐
  • 2025 年10月 WMS 服务商最新推荐榜单,wms系统 wms软件,wms仓库管理软件,wms仓库管理系统软件公司推荐
  • 【仿生机器人】核心采购清单 (仿生机器人头方案)
  • CF数据结构题做题记录-1
  • 完整教程:安宝特产品丨FME Realize:重构数据与现实的边界,让空间计算赋能现场决策
  • 尝试对音频功率放大器芯片的噪声基底特性进行测量与计算:以纳芯威NS4268为例
  • 3.1 策略梯度方法(Policy Gradient Methods)
  • perl语言中的三目运算符和do代码块
  • CCPC2023女生专场 游记(VP)
  • 2.5 分布式学习(Distributed Learning)