流量分析基础回顾:OSI模型与TCP/IP协议栈
说实话,每次带新人入门流量分析,我都要先问一个问题:你清楚数据从你的浏览器到服务器,中间经历了什么吗? 很多人上来就抓包,看到一堆乱码就懵了。其实,搞懂OSI模型和TCP/IP协议栈,就像拿到了地图——你才知道自己站在哪一层。
OSI七层模型 vs TCP/IP四层模型
OSI模型是个理想化的参考框架,一共七层。但实际互联网用的是TCP/IP模型,它把七层压缩成了四层。我个人的习惯是,把OSI当作「理论课本」,把TCP/IP当作「实战手册」。
| OSI七层 | TCP/IP四层 | 典型协议 | 我关注的点 |
|---|---|---|---|
| 应用层 | 应用层 | HTTP, DNS, TLS | 这里最容易出异常,比如恶意请求 |
| 表示层 | SSL/TLS加密 | 加密流量分析,嗯,这里是个难点 | |
| 会话层 | NetBIOS, RPC | 会话劫持经常发生在这层 | |
| 传输层 | 传输层 | TCP, UDP | 端口扫描、SYN洪水,都在这层 |
| 网络层 | 网络层 | IP, ICMP | IP欺骗、路由攻击,我踩过坑 |
| 数据链路层 | 网络接口层 | Ethernet, ARP | ARP欺骗,局域网里的老把戏 |
| 物理层 | 网线、信号 | 物理层出问题,抓包都抓不到 |
数据包封装与解封装过程
你想想看,你在浏览器里点了一下「发送」,数据是怎么变成一堆0101的?这个过程就是封装。反过来,服务器收到数据后,一层层剥开,就是解封装。
封装过程(发送端):
- 应用层: 原始数据,比如HTTP请求的JSON体。
- 传输层: 加上TCP头部(源端口、目的端口、序列号)。
- 网络层: 加上IP头部(源IP、目的IP)。
- 数据链路层: 加上以太网头部(源MAC、目的MAC),尾部还有FCS校验。
- 物理层: 变成比特流,通过网线发出去。
解封装过程(接收端): 反过来,从物理层开始,一层层剥掉头部,直到拿到原始数据。
常见网络协议流量特征
做流量分析,你得认识几个「老朋友」。它们的流量特征,就像人的指纹一样,各有不同。
HTTP流量特征
- 明文传输: 所有请求和响应都是明文,包括URL、Cookie、表单数据。
- 请求方法: GET、POST、PUT、DELETE等。异常流量里,POST和GET最常见。
- 状态码: 200(正常)、404(未找到)、500(服务器错误)。如果突然出现大量404,可能是扫描行为。
- 头部信息: User-Agent、Referer、Cookie。我见过很多爬虫伪造User-Agent,但Referer往往露馅。
DNS流量特征
- 基于UDP(通常): 端口53。查询和响应都很短小。
- 递归查询 vs 迭代查询: 客户端一般发递归查询,DNS服务器之间用迭代查询。
- 异常特征: 大量相同域名的查询(可能是DNS劫持)、超长域名(可能是DNS隧道)。
TLS流量特征
- 加密传输: 握手阶段是明文,之后所有数据加密。
- 握手过程: Client Hello → Server Hello → 证书交换 → 密钥协商 → 加密通信。
- 异常特征: 证书过期、自签名证书、TLS版本过低(如TLS 1.0)、密码套件异常。
说白了,TLS流量分析的核心就是看握手阶段。一旦握手完成,你就只能看到一堆乱码了。但别慌,我们可以通过流量大小、连接时长等元数据来推断。
Wireshark基础操作与过滤语法
Wireshark是流量分析的神器。我刚开始用的时候,也被满屏的包吓到过。但掌握几个过滤语法,你就能快速定位问题。
基础操作
- 选择网卡: 启动时选对网卡,别抓到回环接口去了。
- 开始/停止抓包: 快捷键 Ctrl+E 开始,Ctrl+E 停止。
- 保存抓包文件: 保存为 .pcapng 格式,方便后续分析。
- 着色规则: 默认就有,比如TCP SYN包是红色,RST包是黑色。你可以自定义。
常用过滤语法
过滤语法分两种:抓包过滤器(抓之前用)和显示过滤器(抓之后用)。我建议用显示过滤器,更灵活。
# 显示过滤器示例
# 只看HTTP流量
http
# 只看特定IP
ip.addr == 192.168.1.1
# 只看TCP端口80
tcp.port == 80
# 只看DNS查询
dns.qry.name contains "example.com"
# 只看TLS握手
tls.handshake.type == 1 # 1 是 Client Hello
# 组合过滤
http and ip.src == 10.0.0.1
http.request or tls.handshake.type == 1 来快速定位「谁在发起连接」。然后再用 tcp.analysis.flags 看有没有重传或丢包。
追踪流功能
Wireshark有个很实用的功能叫「Follow TCP Stream」。选中一个TCP包,右键 → Follow → TCP Stream。它会帮你把整个会话的原始数据拼出来。对于HTTP明文流量,你甚至能看到完整的请求和响应。
好了,基础回顾就到这里。这些内容看似简单,但却是后续所有高阶技巧的基石。你想想看,如果连数据包怎么封装、HTTP和DNS长什么样都搞不清,那分析异常流量就像盲人摸象。我个人建议,把Wireshark的过滤语法练熟,最好能闭着眼睛写出常用的几条。这样在实战中,你才能快速从海量流量里揪出那个「害群之马」。