别再只会ping了!用Wireshark亲手抓个包,看看你的网络请求到底说了啥

张开发
2026/4/12 22:04:38 15 分钟阅读

分享文章

别再只会ping了!用Wireshark亲手抓个包,看看你的网络请求到底说了啥
从零开始用Wireshark解剖网络数据包一次真实的网络侦探之旅每次点击网页或发送消息时你的设备都在与远方服务器进行着复杂的对话。这些对话被封装成数据包像信件一样在网络中传递。但你是否好奇过这些信件里究竟写了什么今天我们就用Wireshark这把手术刀亲手解剖一个最常见的ping数据包看看网络通信的底层秘密。1. 准备工作搭建你的网络实验室在开始解剖之前我们需要准备好工具和环境。就像外科医生需要无菌手术室一样网络侦探也需要一个干净的分析环境。1.1 安装WiresharkWireshark是开源的网络协议分析工具支持Windows、macOS和Linux。安装过程非常简单# 在Ubuntu/Debian上安装 sudo apt update sudo apt install wireshark # 在CentOS/RHEL上安装 sudo yum install wireshark # macOS用户可以通过Homebrew安装 brew install --cask wireshark注意安装过程中可能会提示是否允许非超级用户捕获数据包。建议选择是这样可以避免每次都需要sudo权限运行。1.2 基础网络知识准备理解数据包之前我们需要了解几个关键概念MAC地址设备的物理地址就像你的身份证号码IP地址设备在网络中的逻辑地址类似邮寄地址协议通信双方约定的规则比如IPv4、ICMP2. 捕获第一个数据包像侦探一样设伏现在让我们开始捕获真实的网络流量。我们将以最简单的ping命令为例看看这个看似简单的操作背后发生了什么。2.1 设置捕获过滤器为了避免捕获过多无关数据我们可以设置捕获过滤器打开Wireshark选择正确的网络接口通常是Wi-Fi或有线网卡在捕获过滤器中输入icmp只捕获ICMP协议数据包点击开始按钮开始捕获2.2 生成目标流量打开终端执行一个简单的ping命令ping -c 1 www.example.com这个命令会向example.com发送一个ICMP回显请求ping并等待一个回复。3. 解剖数据包逐层揭开网络协议的面纱捕获到数据包后我们终于可以开始解剖了。Wireshark的界面分为三个主要部分数据包列表显示捕获的所有数据包协议树显示选中数据包的协议层次结构原始字节显示数据包的二进制形式3.1 以太网帧数据包的信封点击我们捕获的ping数据包首先看到的是以太网帧层字段值说明目的MAC58:b3:8f:dd:70:02数据包要发送到的设备物理地址源MAC10:3d:1c:46:7a:80发送数据包的设备物理地址类型0x0800表示载荷是IPv4数据包这就像信封上的寄件人和收件人地址确保数据包能在本地网络中正确传递。3.2 IPv4头部网络层的导航系统展开IPv4部分我们会看到更多关键信息Internet Protocol Version 4, Src: 10.0.237.92, Dst: 93.184.216.34 0100 .... Version: 4 .... 0101 Header Length: 20 bytes (5) Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT) Total Length: 60 Identification: 0x17e5 (6117) Flags: 0x00 Time to Live: 64 Protocol: ICMP (1) Header checksum: 0x7a5d [validation disabled] Source Address: 10.0.237.92 Destination Address: 93.184.216.34几个关键字段解释TTL(Time to Live): 数据包最多能经过多少跳路由器每经过一个减1到0则丢弃源/目的IP: 通信的起点和终点协议字段: 指示载荷是哪种协议这里是ICMP3.3 ICMP内容ping的核心协议最后是ICMP协议部分这是我们ping命令的核心Internet Control Message Protocol Type: 8 (Echo (ping) request) Code: 0 Checksum: 0x4d4a [correct] Identifier (BE): 1 (0x0001) Identifier (LE): 256 (0x0100) Sequence number (BE): 17 (0x0011) Sequence number (LE): 4352 (0x1100) Data (32 bytes)ICMP是网络中的信使负责传递各种控制消息。在ping中它主要用来测试连通性。4. 实战应用用Wireshark解决真实网络问题理解了数据包结构后我们来看看如何用这些知识解决实际问题。4.1 诊断网络延迟问题假设你的应用偶尔响应很慢可以捕获应用通信时的数据包关注TCP重传分析-专家信息检查DNS查询时间观察TCP握手和挥手过程常见延迟原因包括DNS查询慢TCP连接建立时间长中间网络设备性能问题应用服务器响应慢4.2 分析数据包丢失通过Wireshark可以发现重复的ACK可能表示数据包丢失零窗口大小说明接收方处理不过来大量RST标志可能意味着连接问题4.3 高级过滤技巧Wireshark支持强大的显示过滤器# 只显示特定IP的流量 ip.addr 192.168.1.1 # 显示HTTP请求 http.request # 显示重传的数据包 tcp.analysis.retransmission # 显示慢速网络迹象 tcp.analysis.window_update or tcp.analysis.zero_window5. 深入理解网络协议的交互过程让我们更深入地看看几个关键协议如何协同工作。5.1 ARP地址解析协议在发送IP数据包前设备需要知道目标IP对应的MAC地址。这就是ARP的工作发送ARP请求谁有192.168.1.1请告诉192.168.1.2目标设备回复192.168.1.1在MAC地址xx:xx:xx:xx:xx:xx在Wireshark中过滤arp可以看到这个过程。5.2 TCP三次握手可靠的TCP连接需要三次握手客户端发送SYN服务端回复SYN-ACK客户端发送ACK在Wireshark中可以用tcp.flags.syn1 and tcp.flags.ack0过滤SYN包。5.3 DNS查询域名到IP的转换过程客户端发送DNS查询DNS服务器回复答案过滤dns可以看到这些请求和响应。6. Wireshark高级功能探索除了基本分析Wireshark还提供许多强大功能。6.1 流量统计和分析通过统计菜单可以查看会话列表Conversations分析协议分层Protocol Hierarchy生成流量图IO Graph6.2 自定义着色规则可以根据条件给数据包着色点击视图-着色规则添加新规则如将重传数据包设为红色保存规则供以后使用6.3 导出特定数据可以从捕获文件中导出特定数据导出特定会话的所有数据包导出HTTP对象如图片、文档导出分组字节为原始文件7. 安全分析与注意事项使用Wireshark时需要注意一些安全事项。7.1 隐私考虑网络捕获可能包含敏感信息登录凭证特别是HTTP明文传输个人数据商业机密建议只在受控环境中捕获不分享包含敏感信息的捕获文件使用SSL/TLS加密敏感通信7.2 性能影响长时间捕获大量流量可能消耗大量内存占用磁盘空间影响网络性能可以使用环形缓冲区限制捕获大小点击捕获-选项在输出选项卡中设置环形缓冲区定义文件数量和最大大小8. 真实案例解决间歇性连接问题去年我在排查一个奇怪的问题时用户报告应用偶尔会卡住几秒。通过Wireshark捕获我发现每隔约30秒就有一次TCP零窗口事件进一步分析发现是防火墙的过于激进的流量整形调整防火墙设置后问题解决这个案例展示了Wireshark在实际排障中的价值——它能揭示肉眼不可见的网络行为。

更多文章