news 2026/4/24 9:52:19

从一次网页访问,看懂Wireshark如何抓取完整的TCP三次握手、HTTP请求与DNS解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从一次网页访问,看懂Wireshark如何抓取完整的TCP三次握手、HTTP请求与DNS解析

从一次网页访问,看懂Wireshark如何抓取完整的TCP三次握手、HTTP请求与DNS解析

当你在浏览器中输入一个网址并按下回车时,背后隐藏着一系列精密的网络通信过程。本文将带你使用Wireshark这款强大的网络协议分析工具,像侦探一样追踪从输入网址到页面显示的全过程。我们将重点关注TCP三次握手、HTTP请求与响应、DNS解析等关键环节,通过实际操作演示如何捕获和分析这些数据包。

1. 准备工作与环境搭建

在开始抓包之前,我们需要确保Wireshark已正确安装并配置。Wireshark支持Windows、macOS和Linux三大主流操作系统,安装过程相对简单。建议从官网下载最新稳定版本,以获得最佳兼容性和功能支持。

安装完成后,首次启动Wireshark时需要选择正确的网络接口。对于大多数笔记本电脑用户,选择Wi-Fi接口即可;如果是台式机通过有线连接上网,则选择以太网接口。可以通过观察接口活动指示灯(闪烁频率)来判断哪个接口正在处理网络流量。

推荐配置调整:

  • 在"Capture"→"Options"中启用"Update list of packets in real time"
  • 设置"Display"为"Resolve network addresses"以显示域名而非纯IP
  • 调整"Capture Filter"为"tcp port 80 or udp port 53"可初步过滤HTTP和DNS流量

注意:在公共场所或公司网络中使用Wireshark可能涉及隐私政策问题,建议在自己的家庭网络环境下进行实验。

2. 捕获DNS解析过程

DNS(域名系统)是将人类可读的域名转换为机器可读的IP地址的服务。当我们访问qige.io时,首先发生的就是DNS查询。

典型DNS查询流程:

  1. 浏览器检查本地缓存是否有该域名的IP记录
  2. 若无缓存,向操作系统配置的DNS服务器发送查询请求
  3. DNS服务器可能进行递归查询,最终返回IP地址

在Wireshark中捕获DNS流量的步骤:

# 首先清除本地DNS缓存 ipconfig /flushdns # Windows sudo dscacheutil -flushcache # macOS

启动Wireshark捕获后,在浏览器中访问qige.io。使用显示过滤器dns可以只显示DNS相关的数据包。你会看到类似以下的查询过程:

数据包类型源地址目的地址协议详细信息
标准查询本地IPDNS服务器UDP查询qige.io的A记录
查询响应DNS服务器本地IPUDP返回qige.io的IP地址

DNS数据包关键字段解析:

  • Transaction ID:用于匹配查询与响应
  • Flags:指示查询/响应、递归是否可用等
  • Questions:查询的问题数量
  • Answer RRs:回答的资源记录数量
  • Authority RRs:权威名称服务器的数量
  • Additional RRs:额外记录的数量

3. 分析TCP三次握手

获取到目标服务器的IP地址后,浏览器会通过TCP协议建立可靠连接。TCP三次握手是这一过程的核心。

TCP三次握手详细过程:

  1. SYN(同步序列编号)

    • 客户端发送SYN=1的包,初始序列号为随机值X
    • 这是客户端说:"我想和你建立连接,我的初始序列号是X"
  2. SYN-ACK(同步确认)

    • 服务器回应SYN=1,ACK=1的包
    • 确认号为X+1,同时发送自己的初始序列号Y
    • 服务器说:"我收到你的请求了,同意建立连接,我的初始序列号是Y"
  3. ACK(确认)

    • 客户端发送ACK=1的包
    • 确认号为Y+1,序列号为X+1
    • 客户端说:"好的,我知道你准备好了,我们可以开始通信了"

在Wireshark中观察这一过程:

# 使用显示过滤器 tcp.stream eq <流编号> # 跟踪完整TCP流 tcp.flags.syn==1 and tcp.flags.ack==0 # 仅显示SYN包 tcp.flags.syn==1 and tcp.flags.ack==1 # 仅显示SYN-ACK包

关键TCP标志位说明:

  • SYN:同步序列号,用于建立连接
  • ACK:确认字段有效
  • FIN:发送方完成数据发送,用于关闭连接
  • RST:重置连接
  • PSH:接收方应尽快将数据交给应用层
  • URG:紧急指针字段有效

4. HTTP请求与响应分析

TCP连接建立后,浏览器会通过HTTP协议获取网页内容。现代浏览器通常使用HTTP/1.1或HTTP/2协议。

典型HTTP GET请求流程:

  1. 浏览器发送HTTP GET请求
  2. 服务器响应HTTP状态码和内容
  3. 浏览器解析HTML并加载相关资源(CSS、JS、图片等)

在Wireshark中分析HTTP流量:

http.request.method=="GET" # 过滤所有GET请求 http.response.code==200 # 过滤状态码为200的响应

HTTP请求关键字段:

  • Host:请求的目标主机名
  • User-Agent:客户端浏览器信息
  • Accept:客户端可接受的内容类型
  • Connection:控制连接是否保持活动状态
  • Cookie:发送给服务器的cookie数据

HTTP响应关键字段:

  • Server:服务器软件信息
  • Content-Type:响应体的MIME类型
  • Content-Length:响应体的长度
  • Set-Cookie:服务器设置的cookie
  • Cache-Control:缓存控制指令

5. TCP连接释放与四次挥手

当页面加载完成后,TCP连接会被关闭。这个过程称为四次挥手。

TCP四次挥手详细过程:

  1. FIN(客户端→服务器)

    • 客户端发送FIN=1的包,序列号为M
    • 客户端说:"我的数据发完了,准备关闭连接"
  2. ACK(服务器→客户端)

    • 服务器发送ACK=1的包,确认号为M+1
    • 服务器说:"我知道你要关闭了,等我处理完剩余数据"
  3. FIN(服务器→客户端)

    • 服务器发送FIN=1的包,序列号为N
    • 服务器说:"我也准备好了,可以关闭连接了"
  4. ACK(客户端→服务器)

    • 客户端发送ACK=1的包,确认号为N+1
    • 客户端说:"好的,连接可以关闭了"

在Wireshark中观察这一过程:

tcp.flags.fin==1 # 过滤FIN包 tcp.flags.fin==1 and tcp.flags.ack==1 # 过滤FIN-ACK包

6. 高级技巧与实战建议

掌握了基本抓包技能后,下面是一些提升效率的高级技巧:

1. 显示过滤器进阶用法:

# 组合条件过滤 (ip.src==192.168.1.100 or ip.dst==192.168.1.100) and tcp.port==80 # 过滤特定域名的HTTP流量 http.host contains "qige.io" # 过滤重传包 tcp.analysis.retransmission

2. 实用统计功能:

  • "Statistics"→"Protocol Hierarchy":查看各协议流量占比
  • "Statistics"→"Conversations":分析主机间的通信情况
  • "Statistics"→"IO Graph":绘制流量变化趋势图

3. 常见问题排查思路:

  • 连接失败:检查是否有SYN包发出,是否有RST响应
  • 响应缓慢:分析TCP窗口大小、是否有重传、ACK延迟
  • 内容错误:检查HTTP请求头、响应状态码

4. 性能优化建议表:

问题现象可能原因Wireshark过滤条件解决方案
页面加载慢DNS查询延迟dns检查DNS服务器响应时间
连接建立失败防火墙拦截tcp.flags.reset==1检查防火墙规则
数据传输慢TCP窗口太小tcp.window_size < 8192调整TCP窗口参数
频繁重传网络丢包tcp.analysis.retransmission检查网络质量

在实际网络问题排查中,Wireshark配合这些技巧能快速定位问题根源。例如,当发现大量TCP重传包时,可能表明网络存在丢包或拥塞问题;而如果看到很多DNS查询但响应缓慢,则可能需要更换DNS服务器。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 9:49:17

从标准库迁移到HAL库:STM32F429 TIM ETR配置避坑指南(附CubeMX流程)

从标准库迁移到HAL库&#xff1a;STM32F429 TIM ETR配置避坑指南&#xff08;附CubeMX流程&#xff09; 在嵌入式开发领域&#xff0c;STM32系列微控制器因其强大的性能和丰富的外设资源而广受欢迎。随着开发工具的不断演进&#xff0c;越来越多的开发者正从传统的标准外设库&a…

作者头像 李华
网站建设 2026/4/24 9:42:20

3DS游戏格式转换终极指南:5分钟从.3ds到CIA的完整教程

3DS游戏格式转换终极指南&#xff1a;5分钟从.3ds到CIA的完整教程 【免费下载链接】3dsconv Python script to convert Nintendo 3DS CCI (".cci", ".3ds") files to the CIA format 项目地址: https://gitcode.com/gh_mirrors/3d/3dsconv 你是否曾…

作者头像 李华