百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

抓包神器 Wireshark,帮你快速定位线上网络故障(3)

csdh11 2025-03-02 16:51 53 浏览

回顾:TCP 三次握手&四次挥手

正式分享之前,先简单回顾一下 TCP 的三次握手、四次挥手。

Wireshark:窥探 HTTP 的协议包

HTTP 的工作方式其实很简单,首先由客户端向服务端发起一个请求,然后再由服务端回复一个响应。依据不同的场景,客户端发送的请求会用到不同方法,有 GET、POST、PUT 和 HEAD 等。

接下来将结合 Wireshark 抓到的包,来窥探一下 HTTP 是如何工作的。

如上图所示,抓取了从 10.1.1.101 访问 http://10.1.1.1:80/ 时的协议包。

由于 HTTP 协议基于 TCP 实现,一次完整的 HTTP 请求响应主要分三次握手、数据传输(请求&响应)、四次挥手三个阶段,我们一层一层拨开了去看。

阶段一:三次握手(建立连接)

由于 HTTP 协议基于 TCP,所以上来要进行三次握手,并且能够看出客户端地址为 10.1.1.101,端口为 3177,服务端地址为 10.1.1.1,端口为 80,通过三次握手建立连接后,便可以向服务端发送请求传输内容了。

阶段二:请求&响应(数据传输)

上面截图中的 4 号包是客户端向服务端发送“GET / HTTP/1.1”请求,即通过 1.1 版的 HTTP 协议发送请求,协议包内容如下。

通过上面抓包,能够清晰看出请求方式为 GET,以及客户端的一些环境信息,请求相关的信息,清晰可见。这里多关注一下 Response in frame:6,告诉请求对应的响应包是 6 号包,接下来打开 6 号包看一下响应内容。

6 号包是服务端对客户端请求的响应,即把响应页面内容发给客户端,通过上图能够看出响应的是一个 HTML 页面,内容清晰可见。

阶段三:四次挥手(断开连接)

如上图示意,可以看到四次断开的挥手包,编号分别为 7、8、9 和11。从 Info 列可以看到这四个包的标志位分别为 FIN,ACK、ACK、FIN,ACK 和 ACK。下面依次分析 TCP 的四次断开连接数据包。

第一次挥手:

源端口 80 向目标端口 3177,发送 FIN 数据报,序列号为 436,确认序列号为 477。从 Flags 分支中可以看到该报文的标志位为 FIN,ACK。其中,ACK 和 FIN 标志位值为 1,其它标志位都为 0。

第二次挥手:

如上图所示,从 TCP 协议层可以看到,源端口为 3177,目标端口为 80,序列号为 477,确认号为 437。从 Flags 分支中可以看到,当前报文的标志位为 ACK。其中 ACK 标志位值为 1,其他标志位都为 0。

第三次挥手:

如上图所示,从 IP 协议层可以看到,地址为 10.1.1.101,目标 IP 地址为 10.1.1.1。从 TCP 协议层可以看到,源端口为 3177,目标端口为 80,序列号为 477,确认号为 437。从 Flags 分支中可以看到该报文的标志位为 FIN,ACK。其中 ACK 和 FIN 标志位值为 1,其它标志位都为 0。

第四次挥手:

如上图所示,可以看到源端口为 80,目标端口为 3177,序列号为437,确认号为 478。从 Flags 分支中可以看到该报文的标志位为ACK。其中 ACK 标志位值为 1,其它标志位都为 0。

到这,虽然只分析了一个简单 HTTP 请求,但是结合 Wirkeshark 细细去想,整个通信过程确实还挺复杂,不过整个过程确实是一览无遗,那么试想一下平时的聊天记录,是否会被(BOSS)发现?很不幸,答案是肯定的。

Wireshark:HTTP 响应分析

借助 Wireshark 的“显示分组字节”功能,很容易就能看到 HTTP 的响应内容。

例如1:从服务端下载文件

上面截图是通过 Wireshark 分析下载图片的数据包,借助 Wireshark 的“显示分组字节”功能,便可轻松看到图片内容。

例如2:服务端响应 HTML

借助 Wireshark 的“显示分组字节”功能,很轻松看到服务端响应给客户端的 HTML 内容。

感兴趣的老铁,纸上得来终觉浅,希望能亲自通过 Wireshark 好好去体验体验。

写在最后

本次 Wireshark 分享就写到这里,为了能够让分享不出现纰漏,查阅了很多文档、书籍以及官方资料,归纳汇总一下给老铁,希望对老铁能有所帮助。

资料分享:

经典例子:https://gitlab.com/wireshark/wireshark/-/wikis/SampleCaptures
官方文档:https://www.wireshark.org/docs/wsug_html_chunked/

文章分享的数据包可以从这里 get 到:

https://gitlab.com/wireshark/wireshark/-/wikis/uploads/__moin_import__/attachments/SampleCaptures/http_with_jpegs.cap.gz 
https://gitlab.com/wireshark/wireshark/-/wikis/uploads/__moin_import__/attachments/SampleCaptures/200722_tcp_anon.pcapng

参考书籍:

《从实践中学习Wireshark数据分析》

《Wireshark网络分析就是这么简单》

一起聊技术、谈业务、架构,少走弯路,不踩大坑。会持续输出精彩分享,敬请期待!

历史推文:

抓包神器 Wireshark,帮你快速定位线上网络故障(1)

抓包神器 Wireshark,帮你快速定位线上网络故障(2)

相关推荐

OKHttp原理解析(okhttp的作用)

Okhttp应该是Android目前非常流行的第三方网络库,尝试讲解他的使用以及原理分析,分成几个部分:...

快速教会你优雅的解决TCP客户端端口耗尽的问题

Hello,我是Henry,相信各位开发老爷在使用大并发网络连接的时候,可能都遇到过TCP客户端端口耗尽的问题,这是一个常见问题,以下是系统性的解决方案及技术细节:1.理解端口限制的本质...

这3个接口基础知识,产品经理需要知道

产品经理在工作中,避免不了要阅读接口文档,希望本文能够帮助大家更好的了解接口。接口,即客户端(浏览器)向服务器提交请求,服务器向客户端返回响应。本质就是数据的传输与接收。本文主要介绍接口相关的基础知识...

Java 11新特性对开发者的影响:让编程更高效、更自由

Java11新特性对开发者的影响:让编程更高效、更自由在这个瞬息万变的编程世界里,每一代Java的更新都承载着无数开发者对性能优化、生产力提升以及代码美感追求的期望。作为继Java8之后的首个长期...

干货-okHttp的优点-收藏了(okhttp的好处)

OkHttp相较于其它的实现有以下的优点.支持SPDY,允许连接同一主机的所有请求分享一个socket。如果SPDY不可用,会使用连接池减少请求延迟。使用GZIP压缩下载内容,且压缩操作对用...

如何在 Java 项目中集成 DeepSeek

一、使用官方SDK基础集成1.添加依赖(Maven)<dependency><groupId>com.deepseek</groupId>...

spring cloud gateway 性能优化思路

SpringCloudGateway是一个高性能的API网关,但在实际的生产环境中,可能会遇到一些性能瓶颈。以下是一些SpringCloudGateway的性能优化方面:调整线程池...

你对Android中的okHttp的使用真的了解吗

框架下载地址:https://github.com/square/okhttp今天给大家讲解下网络框架okhttp的使用,这个框架非常强大,很多框架都用它来加载网络资源,目前很多开发者还在用As...

京东大佬问我,Nginx并发连接如何设置?详细说明

京东大佬问我,Nginx并发连接如何设置?详细说明首先,我需要回忆一下Nginx的并发模型。Nginx是基于事件驱动的异步架构,所以它的并发处理能力和配置参数有很大关系。主要的参数应该包括worker...

如何实现一个连接池?一文带你深入浅出,彻底搞懂

-前言-【2w1h】是技术领域中一种非常有效的思考和学习方式,即What、Why和How;坚持【2w1h】,可以快速提升我们的深度思考能力。...

Golang 网络编程(golang 系统编程)

TCP网络编程存在的问题:拆包:对发送端来说应用程序写入的数据远大于socket缓冲区大小,不能一次性将这些数据发送到server端就会出现拆包的情况。通过网络传输的数据包最大是1500字节,当TCP...

Spring6|Spring Boot3有哪些HTTP客户端可以选择

个人博客:无奈何杨(wnhyang)个人语雀:wnhyang...

10. 常用标准库(标准库有哪些)

本章深入解析Go语言核心标准库的关键功能与生产级应用技巧,结合性能优化与安全实践,提供高效开发指南。10.1fmt/io/os10.1.1fmt高级格式化...

Nginx之连接池(nginx 长连接 连接复用)

我们知道Nginx利用连接池来增加它对资源的利用率。下面我们一起来看看Nginx是如何使用连接池的。从上一节模块开始已经慢慢会接触一些Nginx的源码部分来。每个worker进程都有一个独立的ngx...

开发者必备的Android开发资源之OkHttp

小编在这里给各位Android开发者介绍的资源包括工具、库和网站等。有效地利用它们,将有助于减轻我们的工作量,提高我们的工作效率。为什么需要一个HTTP库Android系统提供了两种HTTP通信类,H...