网络流量基础:TCP/IP协议栈回顾、五元组概念、流量采集方法

各位好,我是老周。做威胁狩猎这些年,我最大的体会就是——流量里藏着一切真相。僵尸主机再怎么隐藏,它总得跟C2服务器通信吧?总得发心跳包吧?这些痕迹,全在流量里。

这一章,咱们把基础打牢。别嫌枯燥,我见过太多人拿着PCAP文件两眼一抹黑,就是因为底层的TCP/IP没吃透。咱们从协议栈开始,一步步讲到怎么把流量抓到手里。

TCP/IP协议栈:数据包的一生

你想想看,你在浏览器里敲了个网址,回车。这背后发生了什么?

数据从你的应用层出发,一路向下,每经过一层就被包上一层“信封”。到了对端,再一层层拆开。这就是封装与解封装。

核心记忆点:每一层只关心自己的事。应用层不管路由,网络层不管端口。这种分层设计,让网络变得灵活——但也给攻击者留下了藏身空间。

我习惯把这四层记成一句话:“应用传数据,传输管连接,网络找路径,链路送比特”。

层级 核心协议 在威胁狩猎中的价值
应用层 HTTP, DNS, SMTP, FTP 分析恶意域名、C2通信内容、数据外泄
传输层 TCP, UDP 检测异常端口、非标准Flag组合、心跳间隔
网络层 IP, ICMP 追踪源/目的IP、检测扫描行为、异常ICMP隧道
链路层 Ethernet, ARP 识别MAC地址欺骗、ARP投毒

嗯,这里要注意:僵尸网络最喜欢在应用层和传输层搞小动作。比如DNS隧道,就是把数据藏在DNS查询里。你光看IP层,啥也看不出来。

五元组:网络世界的“身份证”

说白了,五元组就是唯一标识一条网络连接的五个字段。我经常跟团队说:你只要能说清楚五元组,就能说清楚任何一条流量。

哪五个?

  1. 源IP —— 谁发的?
  2. 目的IP —— 发给谁?
  3. 源端口 —— 从哪个门出来?
  4. 目的端口 —— 进哪个门?
  5. 传输层协议 —— TCP还是UDP?

实战小技巧:我在做威胁狩猎时,经常用五元组做“流量归并”。把相同五元组的包归到一起,就能还原出一条完整的会话。僵尸主机的C2通信,往往在五元组上有固定模式——比如固定的目的端口、固定的协议类型。

举个例子。你看到一条告警:内网主机10.10.1.100:49152 → 外网45.33.32.156:443,协议TCP。五元组一展开,你就知道:这是一台内网机器在访问一个外网HTTPS服务器。如果这个外网IP是已知的恶意IP,那这条流量就有问题了。

我曾经遇到过一个案例:某台服务器每隔5分钟就向外发一个SYN包,目的端口是8888,但从不完成三次握手。五元组一分析,发现源端口每次都变,但目的IP和端口固定。这就是典型的心跳探测行为——后来确认是挖矿木马在等C2指令。

流量采集方法:NetFlow、sFlow、PCAP

好,理论讲完了。问题来了:流量怎么拿到手?

目前主流的有三种方法。我按自己的使用经验,给你排个序:PCAP最全但最重,NetFlow最轻但信息有限,sFlow介于中间。

PCAP:全量数据,一个不落

PCAP就是把网线上跑的所有比特都录下来。你想想看,这得有多大?一个千兆口,满速跑一小时,大概能产生400GB的数据。

但好处也明显:你能看到应用层载荷。比如HTTP请求里的URL、POST数据、甚至恶意文件本身。

# 用tcpdump抓取80端口的流量,保存为PCAP文件
tcpdump -i eth0 -w capture.pcap port 80

# 用tshark读取PCAP,按五元组统计会话
tshark -r capture.pcap -q -z conv,tcp

注意:PCAP不能长期全量存。我见过有人把全量PCAP存了三个月,结果磁盘爆了,生产系统挂了。建议:全量抓短时间(比如1小时),长期存元数据(NetFlow)。

NetFlow:会话级摘要,轻量高效

NetFlow是Cisco发明的。它不记录每个包,而是记录每条流的元数据。一条流就是一组五元组相同的连续包。

一条NetFlow记录大概包含:

  • 五元组(源/目的IP、端口、协议)
  • 起始时间、结束时间
  • 包数量、字节数
  • TCP Flag汇总

我个人的习惯是:用NetFlow做长期基线。比如你发现某台主机平时每天产生100条流,今天突然变成10000条——那肯定有问题。

sFlow:基于采样的统计

sFlow跟NetFlow最大的区别是:它采样。比如每1024个包采一个,然后按比例推算整体情况。

好处是性能开销极低,适合超高速网络(比如10Gbps以上)。坏处是——你可能会漏掉关键包。比如攻击者只发了3个探测包,采样率1:1024,很可能一个都没采到。

特性 PCAP NetFlow sFlow
数据粒度 全量包 流摘要 采样包
存储开销 极大 小 极小
是否可见载荷 是 否 部分(采样到的包)
适用场景 取证分析、深度检测 流量监控、基线建立 高速网络、性能敏感环境
典型工具 tcpdump, Wireshark nfdump, SiLK sFlow-RT, InMon

知识体系总览

下面这张图,把本章的核心逻辑串起来了。从TCP/IP协议栈出发,到五元组作为连接标识,再到三种采集方法如何获取数据——这就是你后续做威胁狩猎的数据基础。

网络流量基础:知识体系总览 TCP/IP协议栈(四层模型) 应用层 (HTTP/DNS) 传输层 (TCP/UDP) 网络层 (IP/ICMP) 链路层 (Ethernet) 五元组:唯一标识一条网络连接 源IP 目的IP 源端口 目的端口 传输协议 流量采集方法 PCAP(全量包) 取证分析、深度检测 NetFlow(流摘要) 流量监控、基线建立 sFlow(采样统计) 高速网络、性能敏感 核心逻辑:协议栈 → 五元组标识连接 → 不同采集方法获取数据 → 威胁狩猎分析 PCAP最全但最重,NetFlow最轻但信息有限,sFlow介于中间

选型建议:我该用哪个?

这个问题,我几乎每次培训都会被问到。我的回答是:看你的场景。

  • 做应急响应、取证分析 → 必须用PCAP。没有载荷数据,你根本没法确认是不是真的被入侵了。
  • 做日常监控、异常检测 → NetFlow就够了。我团队现在每天处理数十亿条NetFlow记录,用来建基线、发现异常,效果很好。
  • 监控10Gbps以上的核心网络 → 上sFlow。PCAP扛不住,NetFlow在高速环境下也有性能瓶颈。

我的经验:很多团队一开始就上PCAP,结果存储爆了、分析工具跑不动。我建议先跑NetFlow跑一个月,把基线建好。等真出了安全事件,再针对性地抓PCAP做深度分析。这样既省钱,又高效。