一、协议基础与抓包环境搭建

各位同学好,我是老周。做网络协议分析这行十几年了,今天咱们聊聊最基础的东西——OSI模型、TCP/IP模型,还有怎么把Wireshark这个利器装好、配好。

说实话,很多人觉得协议模型是理论课,抓包才是实战。但我见过太多人,抓了一堆包却看不懂,就是因为对协议分层没概念。你想想看,没有地图就开车,能开到哪去?

1.1 OSI七层模型:理想中的完美分层

OSI七层模型,全称是开放系统互连参考模型。1984年由ISO提出,说白了就是给网络通信画了个标准蓝图。

我个人习惯把这七层分成两组:上面四层(应用层、表示层、会话层、传输层)处理数据内容,下面三层(网络层、数据链路层、物理层)处理数据传输。

层级 名称 核心职责 常见协议/设备
7 应用层 为用户应用提供网络服务 HTTP、FTP、SMTP、DNS
6 表示层 数据格式转换、加密、压缩 SSL/TLS、JPEG、ASCII
5 会话层 建立、管理、终止会话 NetBIOS、RPC
4 传输层 端到端可靠传输、流量控制 TCP、UDP
3 网络层 路由选择、逻辑寻址 IP、ICMP、ARP
2 数据链路层 帧封装、介质访问控制 以太网、PPP、交换机
1 物理层 比特流传输、电气特性 网线、光纤、集线器
我的经验: 实际工作中,你很少会用到表示层和会话层这两个概念。它们的功能被融入了应用层协议里。但面试时考官爱问,所以还是得记住。

1.2 TCP/IP四层模型:实战中的王者

OSI模型太理想化了,七层分得太细。TCP/IP模型就务实得多,只有四层。我当年刚入行时,师傅就跟我说:「别管OSI那七层,先把TCP/IP的四层搞明白,你就能干活了。」

TCP/IP四层模型:应用层、传输层、网络层、网络接口层。它把OSI的上三层合并为应用层,下两层合并为网络接口层。

核心区别: OSI是「理论模型」,TCP/IP是「事实标准」。互联网就是跑在TCP/IP上的,你抓的包99%都是TCP/IP协议栈的产物。

为什么会这样?因为TCP/IP是伴随着ARPANET(互联网前身)发展起来的,经过了几十年的实战检验。OSI虽然设计得漂亮,但等它标准定完,TCP/IP已经占领天下了。

1.3 协议分层与数据封装

数据从应用层往下走,每一层都会加上自己的头部信息。这个过程叫封装。抓包时你看到的每个数据包,其实就是一层层头部叠起来的。

我记得有一次帮客户排查一个视频卡顿问题。对方说「网络没问题,带宽够」。我抓包一看,MTU设置不对,导致IP层分片太多,重传率高达15%。这就是典型的「上层表现异常,根在下层」——不懂分层,你根本想不到去查MTU。

数据封装过程(发送端视角) 应用层数据(HTTP请求体 / JSON / 文件内容) TCP/UDP头部(源端口、目的端口、序号) + 应用层数据 IP头部(源IP、目的IP、TTL) + TCP头部 + 应用层数据 以太网头部(源MAC、目的MAC、类型) + IP头部 + TCP头部 + 应用层数据 比特流(010101...)通过网线/光纤传输 每经过一层,数据包就「胖」一圈 抓包时看到的「帧」= 以太网头部 + IP头部 + TCP头部 + 应用层数据

1.4 Wireshark安装与配置

好,理论讲完了,咱们来点实在的。Wireshark是目前最强大的开源抓包工具,没有之一。我用了十几年,从它还叫Ethereal的时候就开始用了。

1.4.1 安装步骤

  1. 下载: 去官网 wireshark.org 下载对应操作系统的版本。Windows选64位安装包,macOS选.dmg,Linux用apt或yum。
  2. 安装: 一路Next就行。但注意——安装过程中会提示安装Npcap(Windows)或ChmodBPF(macOS),一定要勾选。这是抓包的底层驱动,没有它你抓不到包。
  3. 验证: 安装完成后打开Wireshark,能看到网卡列表就说明成功了。
我曾经踩过的坑: 有一次给客户远程装Wireshark,对方说「装好了但抓不到包」。我远程一看,Npcap没装。他以为那个弹窗是广告,直接跳过了。嗯,这个坑我替你们踩过了。

1.4.2 基础配置

装好之后,我建议你先做三件事:

  • 配置时间显示格式: 菜单栏 → View → Time Display Format → Seconds Since Beginning of Capture。这样看时间差更直观。
  • 开启自动滚动: 菜单栏 → Capture → Options → 勾选「Update list of packets in real time」和「Automatically scroll during live capture」。
  • 配置着色规则: Wireshark默认就有着色规则,但我习惯把TCP重传包标成红色,把HTTP包标成绿色。菜单栏 → View → Coloring Rules 可以自定义。

1.5 抓包过滤器与显示过滤器

这是Wireshark最核心的两个功能。很多新手搞混,我一句话说清楚:

  • 抓包过滤器(Capture Filter): 在抓包之前设置,只抓符合条件的包。抓不到的包就永远丢了。
  • 显示过滤器(Display Filter): 在抓包之后设置,从已经抓到的包里筛选显示。原始数据还在,只是隐藏了不符合条件的包。

1.5.1 抓包过滤器语法

抓包过滤器用的是BPF(Berkeley Packet Filter)语法。说白了就是三段式:协议 + 方向 + 条件。

示例 含义
host 192.168.1.1 只抓与192.168.1.1通信的包
port 80 只抓80端口的包(HTTP)
tcp 只抓TCP协议的包
src host 10.0.0.1 and dst port 443 抓源IP为10.0.0.1且目的端口为443的包
not arp 排除ARP包
我的习惯: 抓包过滤器尽量少用。除非你明确知道要抓什么,否则我建议先全量抓,再用显示过滤器筛选。因为「抓了就没了」,但「没抓就真的没了」。

1.5.2 显示过滤器语法

显示过滤器是Wireshark的杀手锏。语法比抓包过滤器丰富得多,支持协议字段级别的筛选。

# 基础用法
ip.addr == 192.168.1.1          # 筛选IP地址
tcp.port == 443                 # 筛选TCP端口
http.request.method == "GET"    # 筛选HTTP GET请求
dns.qry.name contains "google"  # 筛选包含google的DNS查询

# 组合用法
ip.src == 10.0.0.1 and tcp.dstport == 80
http.response.code >= 400
tcp.analysis.retransmission     # 筛选所有TCP重传包(这个超实用)

我记得有一次排查一个「网页加载慢」的问题。用户说「网络没问题,测速正常」。我抓了30秒的包,用 tcp.analysis.retransmission 一筛,好家伙,重传率超过8%。再一看,是某个中间设备的MTU不匹配导致的。没有显示过滤器,你得从几千个包里一个个翻,那得翻到什么时候?

1.5.3 两者对比

对比项 抓包过滤器 显示过滤器
时机 抓包前 抓包后
语法 BPF(简单) Wireshark专用(强大)
是否丢数据 是(不符合条件的直接丢弃) 否(只是隐藏)
适用场景 高流量环境、磁盘空间有限 日常分析、问题排查
示例 port 80 http.response.code == 200
一句话总结: 抓包过滤器是「安检门」,不符合条件的进不来;显示过滤器是「搜索框」,进来了再按条件查。

好了,这一章的内容就到这。协议模型是地基,Wireshark是工具,过滤器是钥匙。地基打牢了,工具用熟了,钥匙拿对了,后面的实战才能游刃有余。