ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

TCP/IP四层模型:从抓包到安全分析的实战指南

TCP/IP四层模型:从抓包到安全分析的实战指南 先把话放在前面如果你以为 TCP/IP 四层模型只是面试前背一背、考试前突击一下的理论题那你后面搞网络分析、搞安全事件排查一定会被现实狠狠教育。我见过太多人拿着一张抓包文件盯着十六进制流一脸茫然明明信息都在眼前就是不知道看什么。根源只有一个脑子里没有建立“层”的概念。所谓网络渗透的底层核心原理说白了就是把一次通信过程拆开看清楚每一个环节是谁在说话、都说了什么、哪些地方可以被伪装、被篡改、被异常放大。网络协议栈就是整个安全分析的主干框架——不理解每一层封装的逻辑不理解每一层字段的含义后面你学再多工具都只是背命令而已。这篇文章我会完全站在实际分析的角度把四层模型拆开揉碎结合抓包、监控、排查这些真实场景讲清楚每一层到底做了什么、怎么观察、怎么判断异常。适合正在学网络基础、准备做安全分析或运维排障的读者也适合那些已经会用工具但始终觉得隔了一层窗户纸的人。1. 先建立坐标系四层模型在安全分析里到底“分”的是什么1.1 从七层到四层的“浓缩逻辑”学校里喜欢讲 OSI 七层模型但实际操作环境中真正跟上打交道的是 TCP/IP 四层模型。原因很简单OSI 七层理论太“细”实际协议栈并没有严格按七层来实现。TCP/IP 把功能收敛成更贴近工程的四层——链路层、网络层、传输层、应用层。平时常说的“协议栈”“协议簇”指的就是这四层协议的组合。这里有个关键认知每一层都在给数据“加包装”。我用寄快递来类比。你写了一段话要发给朋友这段话相当于应用层数据。你把话装进信封写上门牌号和收件人名相当于传输层的端口信息比如 HTTP 的 80 端口、HTTPS 的 443 端口。再在外面套一个快递面单写上省市区和街道门牌相当于网络层的 IP 地址。最后快递袋子上还要有快递公司的条码、网点编号相当于链路层的 MAC 地址和帧信息。四层模型本质上是四套“包装逻辑”每一层只关心自己负责的那部分寻址和交付。链路层管同一条链路内的交付网络层管跨网络的寻址和路由传输层管端到端的会话和数据完整性应用层管数据本身的内容和语义。理解了这个分层逻辑再看抓包文件里的数据就不会一头雾水。1.2 封装与解封装数据包实际上长什么样数据从应用层往下走每一层都会加上自己的头部信息。以浏览器访问一个 HTTPS 网站为例层级处理动作新增/产生的头部叠加后的数据单位应用层准备 HTTP 请求内容HTTP 头 body报文(message)传输层封装源端口和目标端口TCP 头报文段(segment)网络层封装源 IP 和目标 IPIP 头数据包(packet)链路层封装源 MAC 和目标 MACEthernet 帧头/尾帧(frame)接收方则是反向的拆包装过程网卡收到帧剥开链路层看到网络层数据包网络层剥开 IP 头把剩下的交给传输层传输层处理完 TCP 头把实际数据交给应用层。所谓“抓包”就是在这个过程中的不同节点上把这些带头部信息的数据完整或部分地截获下来。理解了封装顺序你才知道为什么 Wireshark 或者 tcpdump 里能看到那么多“层叠”的信息。一个数据包在解析面板里既有源 MAC又有源 IP还有源端口这并不复杂因为它们是不同协议层依次叠加上去的。后面我会按每一层分别展开把每个头部字段到底代表什么、分析时该怎么利用一次讲透。2. 链路层一切流量“着陆”的地方先于 IP 的视线盲区2.1 MAC、ARP 与帧的实质很多人排查问题喜欢从 IP 开始这其实跳过了一层关键信息。链路层是数据最底层的“地面交通”所有的数据包最终都要封装成帧通过物理网卡发到线缆或空气里。链路层的核心寻址方式是 MAC 地址。MAC 是设备出厂时烧录在网卡上的硬件标识理论上全球唯一。Ethernet 帧的头部结构很简单目标 MAC、源 MAC、类型字段后面跟着载荷数据最后是校验序列。抓包时帧头写着这台设备当时和谁在“直接对话”。这里必须说一下 ARP地址解析协议。IP 地址是逻辑地址但同一局域网内真正让数据从一个网卡送达另一个网卡的是 MAC 地址。当一台主机知道对方 IP 却不知道对方 MAC 时就要发送 ARP 广播问一句“谁的 IP 是 x.x.x.x请把 MAC 告诉我。”被问到的设备回应自己的 MAC 地址发起方把这个映射关系放进 ARP 缓存表。在 Wireshark 里你会看到大量Who has 192.168.1.1? Tell 192.168.1.100这样的 ARP 请求以及对应的 ARP 回复。如果是正常办公网络这种请求会有但频率不高。如果你在抓包里看到同样一个 IP 在短时间内被反复询问 MAC或者在非正常时间段出现大量 ARP 广播就要多留个心眼。2.2 局域网里真正的风险点交换环境下流量可见性与地址欺骗早期多人共享一个冲突域时所有人的流量在物理层上都是“互相可见”的网卡只要设置成混杂模式就能抓到别人通信的内容。现在主流网络都是交换环境交换机会根据 MAC 地址表决定把帧转发到哪个特定端口普通主机默认看不到不属于自己的流量这在无形中提升了一定的隔离性。但这不意味着链路层就绝对安全。局域网内最经典的隐患是 ARP 欺骗攻击者在局域网上发送伪造的 ARP 应答把某个 IP 对应的 MAC 指向自己的设备导致原本发给网关的流量被中间截取。站在防御角度我经常强调几条落地做法交换机上开启动态 ARP 检测对非法的 ARP 报文直接丢弃重要服务器的 IP-MAC 绑定用端口安全限制交换机端口上的 MAC 数量。链路层的异常监控重点不是盯着某个 IP而是关注“映射关系”是否被篡改。比如你arp -a看到网关 IP 对应了一个从未见过的 MAC那基本可以断定有问题了。再比如抓包中发现同一 MAC 地址频繁出现在不同的交换机端口上这同样值得警惕。2.3 链路层观察动作先看帧再看包实际抓包分析时链路层最容易被忽略但往往能带来额外信息。三个值得一提的观察点源 MAC 是否等于实际网卡的 OUI 前缀。OUI 是 MAC 前 24 位对应网卡厂商。有些攻击工具会随机伪造 MACOUI 查不到归属或反复变化这都是特征。帧类型字段。常见的是 0x0800IPv4、0x0806ARP、0x86DDIPv6。如果看到一个不常见的 EtherType说明这根本不是正常 IP 通信可能是某些私有协议或隧道流量。广播帧与组播帧的比例。正常业务里 STP、LLDP、DHCP 之类会有周期性的链路层报文如果广播风暴出现配合 CPU 占用上升通常说明链路层有环路或异常配置。很多人拿 tcpdump 抓包后只盯着-nn参数打印出来的 IP 看这没错但如果你需要做完整的链路层分析建议用 Wireshark 打开 pcap在帧头部看 MAC 变化。链路层是流量“落地”的第一环这里出问题上层分析得再精细也是白搭。3. 网络层数据包的导航系统也是流量画像的起点3.1 IP 头部的关键字段网络层解决的核心问题只有一个这个数据包要去哪、从哪来、中间怎么走。IPv4 头部是最常见的分析对象各个字段都有实际意义不是摆设。字段含义分析中的价值源 IP / 目标 IP通信两端逻辑地址最基础的身份判断流量该往哪去协议号上层协议类型(6TCP,17UDP,1ICMP)判断这个包携带的是什么通信TTL每经过一个路由器减 1判断距离和跳数异常值反映代理或伪造标识/标志/片偏移管理 IP 分片分片异常往往和规避检测有关TOS/DSCP服务类型看是否被标记为高优先级流量总长度IP 包总长度结合 MTU 判断是否异常实际排查中最容易被忽略的是 TTL。Windows 默认 TTL 通常是 128Linux 默认一般是 64很多网络设备默认 255。如果你抓到来自某台服务器的流量 TTL 只有 50 左右说明中间经过了多次路由跳转这本身没问题但如果同一个 IP 的流量 TTL 在短时间内剧烈波动就要留神——很可能不是一台真实主机而是经过多层转发或隧道封装的结果。还有一点老练的分析员会直接看目标 IP 的“体面程度”——比如常见的云厂商 IP 段、动态拨号 IP 段、数据中心 IP 段这些信息能辅助判断对方是普通用户、代理节点还是自动化扫描源。这种 IP 画像本身不在协议栈里但离开了 IP 层信息就无从谈起。3.2 异常 IP 行为的三个典型场景1. TTL 异常与伪装有些工具为了让流量看起来“来自本地”会把源 IP 伪造成内网地址。但数据包伪造者哪怕把 IP 改了也常常忽略 TTL 的合理值。真实的同网段主机访问你TTL 变化范围很小一个远在海外的主机却说自己是 192.168.x.xTTL 还只剩下十几跳那基本可以认定是伪造流量。2. 分片行为一个 IP 包如果大于路径上的 MTU就可能被分片。分片机制本身是正常的但攻击场景里经常用极端分片来干扰防火墙和应用层检测。比如把 TCP 头部拆到多个分片里或者故意构造重叠分片使得重组后的内容和单个分片的可见内容不一致。防御侧的做法是先重组再检测同时也要留意那些异常微小分片、分片不完整滞留等异常。3. IP 选项字段IPv4 头部还有一个容易被忽略的“选项字段”。正常的互联网流量几乎不会携带 IP 选项如果你在抓包里看到源路由、记录路由这类选项基本可以断定不是普通应用产生的流量。这类报文在边界设备上拦截的成本很低很多安全设备也默认丢弃带 IP 选项的包。3.3 在实际抓包文件里建立“网络层画像”看一个抓包文件时我会问自己三个问题这个包里有哪些源 IP 和目的 IP它们是否属于同一个网段IP 头部字段是否规整有源 IP 相同但 TTL 差异很大的情况吗数据包的流向是否符合正常业务比如一个内网主机突然向大量外网 IP 发起连接这通常不是好兆头。tcpdump 里想按 IP 看流量分布可以直接tcpdump -nn -r capture.pcap ip | awk {print $3} | cut -d. -f1-4 | sort | uniq -c | sort -nrWireshark 的统计功能更直观Statistics - Conversations能直接列出所有 IP 对之间的流量量。还有Statistics - IPv4 Statistics - All Addresses可以快速看出哪些 IP 是流量大户。别小看这一步所有上层分析最终都要落到 IP 层的数据流向上。4. 传输层端口、会话与连接状态——排查和监控的核心旋转轴4.1 TCP 三次握手与状态机不只是背流程TCP 是面向连接的可靠传输协议。它要解决的问题是让双方确认“你准备好了”“我也准备好了”“咱们开始传数据”。三次握手是熟悉到不能再熟悉的流程第一次客户端发 SYN携带初始序列号告诉服务器“我想建立连接这是我的起始序列号”。 第二次服务器回 SYNACK告诉客户端“我收到了你的请求这是我的起始序列号同时确认你的序列号”。 第三次客户端回 ACK确认服务器的序列号连接建立。这套机制不仅是连接控制流程也是分析连接是否正常的重要依据。TCP 连接有完整的状态机LISTEN、SYN-SENT、SYN-RECEIVED、ESTABLISHED、FIN-WAIT、CLOSE-WAIT、TIME-WAIT、LAST-ACK、CLOSED。实际运维和安全分析中netstat或ss看连接状态是最基础的手段。比如一台服务器上出现大量 SYN_RECEIVED也叫 SYN_RECV状态的连接可能意味着有人大量发送 SYN 但不再继续完成握手意图是占满连接队列。如果出现大量 TIME_WAIT 连接通常是因为短连接请求频率太高本身不一定危险但会造成端口资源紧张。4.2 TCP 头部的观察要点TCP 头部的关键字段同样在分析中频繁使用字段含义分析价值源端口/目的端口标识应用通信判断流量对应什么服务序列号本报文段数据的起始序号排查重传、乱序等问题确认号期望收到对方的下一个序列号结合 ACK 判断连接状态标志位SYN、ACK、FIN、RST、PSH、URG判断连接建立、断开或异常重置窗口大小接收端愿意接收的字节数结合吞吐量分析网络质量RST 标志尤其值得关注。RST 用来强制终止连接正常情况下很少出现。如果一个连接刚建立就被 RST 掉可能是服务器根本没有对应服务也可能是防火墙主动拦截并回 RST。如果客户端发了个 SYN服务器回的是 RST 而不是 SYNACK说明这个端口大概率是关闭的——这正是端口探测的基本原理。UDP 则相对简单直接无连接不需要握手发就完了。也正因为无连接UDP 层不容易做状态追踪很多业务和攻击都会选择 UDP 通道来规避状态检测。看到某个内网主机频繁向外网固定端口发送 UDP 小包别急着忽略结合应用层内容判断一下是否有隧道行为。4.3 用五元组视角看待可疑连接传输层分析有一个核心抓手五元组——源 IP、目的 IP、源端口、目的端口、传输层协议。安全分析中几乎所有连接记录都以五元组为基准单位。判断扫描行为的逻辑很简单正常业务访问目标端口是集中且重复的而扫描工具为了覆盖范围往往会在短时间内对多个目的 IP 或端口发起少量连接。抓包时如果看到同一源 IP 对同一网段的大量不同目标端口发送 SYN三次握手全部没有完成这基本可以锁定是一次端口探测行为。反之大量不同源 IP 同时向同一个目标端口发起 SYN则可能是分布式攻击。日常监控中我强烈建议把服务器端口的连接状态做长期基线。比如某台 Web 服务器通常 ESTABLISHED 连接数在 100 左右某天突然飙到 2000排除业务大促因素就要立刻抓包看这些连接从哪里来、在什么端口上。4.4 传输层观察的常用命令Linux 下查看实时连接状态ss -tunap抓包时只想看 TCP 标志位tcpdump -nn -i eth0 tcp[tcpflags] tcp-syn ! 0Wireshark 中快速定位握手异常可以看 TCP 分析助手提示的 “TCP Retransmission”“TCP Dup ACK”“RST 后重建”这些都是传输层问题的最直观信号。5. 应用层从“传输”到“语义”的关键一跳5.1 为什么只看 IP 和端口远远不够网络层告诉了你“谁和谁在说话”传输层告诉了你“它们用什么方式说话”但真正决定通信性质的是应用层。端口只能提供粗线索不能完全代表应用——80 端口不一定就是 Web 服务443 端口也不一定就是 HTTPS只要管理员愿意任何端口都能跑任意服务。应用层才是流量内容真正意义上的“解码层”。这里面的数据往往带有强烈的特征信息请求方法、路径、UA、域名、证书、协议关键字甚至在加密流量中TLS 握手阶段的明文元数据也足够做很多判断。5.2 HTTP、DNS、TLS 三大高频协议的分析重点HTTPHTTP 明文协议抓包信息非常丰富。分析时重点看请求行方法GET、POST、PUT 等、路径、协议版本。Host 头访问的是哪个域名这比 IP 更能反映业务身份。User-Agent客户端自称是什么。UA 异常是识别自动化脚本的常见突破口。状态码200 正常301/302 跳转403 被拒绝500 服务异常。状态码分布突变往往对应业务或攻击行为。Referer请求来源分析请求链路的辅助线索。一个从没出现过的 UA、路径访问了一堆不存在的 .php/.asp 页面、返回了一串 404——这种就是典型的自动化探测流量。DNSDNS 是互联网的“翻译官”把域名转成 IP。DNS 请求的体量很小但信息浓度极高。分析注意几点查询类型A、AAAA、MX、TXT、CNAME 等。TXT 记录如果出现在不正常的域名上可能是某些隐蔽通道在传递指令。查询域名连续尝试大量随机子域名很可能是域名生成算法DGA的行为特征。查询频率正常客户端会缓存 DNS一个主机每秒钟发出大量相同域名的请求要么是配置问题要么是别有用心。在 Wireshark 里要看某个主机的 DNS 查询可以用dns.qry.name contains example.comTLSTLS 的作用是加密传输内容但 TLS 本身握手阶段的几个字段是明文可见的用于安全分析依然有大量可挖掘的信息ClientHello 中的 SNI 字段客户端告诉服务器自己要访问的域名。即使后续内容加密这个域名是暴露的。证书信息服务器下发的证书里包含域名、颁发机构、有效期。证书指纹也是情报收集的重要素材。加密套件列表客户端支持的加密算法组合。异常古老的套件列表可能说明客户端版本过旧也可能是在配合某个特定服务器。被动流量分析里有个术语叫“加密流量元数据”指的就是握手阶段这些可见信息。不需要解密只要统计好这些元数据就能识别出大部分恶意加密流量。5.3 “流量画像”的落地思路应用层信息最大的价值在于建立画像。比起单包分析我更推荐把一定时间窗口内的应用层特征做聚合哪些域名被频繁访问、哪些 UA 类型占比最高、TLS 证书指纹出现过几次、DNS 查询频率有没有突然变化。这些特征组合起来就形成了一套“正常基线”。之后任何偏离基线的流量都会自动浮出水面。比如一个办公网络平时只访问常见网站某天突然出现大量对陌生域名的加密连接且连接对象 IP 分布在多个国家——这种即使无法解密内容也值得上报并进一步排查。6. 把四层串起来一个实际连接的数据包级分析6.1 场景设定现在我们从一张抓包文件出发完整走一遍分层分析流程。假设你负责的一台服务器出现异常连接你在服务器上执行了tcpdump -i eth0 host 10.0.0.8 and port 443 -w suspicious.pcap抓了约 10 分钟。用 Wireshark 打开文件后不能从头到尾乱翻要按层逐段拆。6.2 逐层拆解步骤第一步链路层观察先看帧信息。Wireshark 的 Packet Details 面板最上面就是 Frame 和 Ethernet II。确认源 MAC 是不是服务器网卡的 MAC目标 MAC 是不是网关的 MAC。如果服务器和远端通信帧头目标 MAC 通常指向网关。这一步还能确认抓包点是否在正确的网卡上。第二步网络层画像切入到 IP 层直接看Statistics - IPv4 Statistics - All Addresses列出流量排名。正常情况下目标服务器的访问来源应该比较分散。如果排第一的源 IP 占了 90% 以上的连接数说明流量高度集中这个 IP 一定有特殊性。再抽查几个包的 TTL 值看是否稳定。一个源 IP 如果 TTL 在 64 和 128 之间反复跳说明可能不是直接通信而是经过了负载均衡或多层代理每一层转发都会改写 TTL。第三步传输层状态判断这个是重点。在 Wireshark 显示过滤里输入tcp.flags.syn1 tcp.flags.ack0看看有多少 SYN 包是“只发不收”。如果大量 SYN 包没有对应的 SYNACK说明目标根本没响应该端口或者中途被防火墙拦截。继续看 RST 包tcp.flags.rst1如果连接建立后立即出现 RST配合时间顺序能看出是谁先断开的。服务器主动发 RST通常是应用层认为请求非法主动拒绝客户端发 RST通常是客户端取消请求或收到异常数据。再打开Statistics - Conversations看 TCP 会话里哪些连接只有 1 个包或 2 个包。正常业务连接至少会有握手三个包如果一个连接只有一个 SYN 就没有后续大概率是探测行为。第四步应用层语义确认HTTP 流量直接看http.requestDNS 流量看dns.flags.response 0TLS 流量看tls.handshake.type 1结合前面定位到的可疑源 IP过滤出该 IP 的所有应用层请求去看它到底访问了什么路径、什么域名、带什么 UA。到这里四层信息全部凑齐你就能说清楚有个 IP 在什么时间、从哪个 MAC 链路接入、向服务器的哪个端口发起大量半开连接应用层尝试访问哪些路径——这份数据足以支撑下一步处置决策。6.3 实践中常用的一组抓包命令再补充几个我在排查时反复使用的命令# 抓取某个 IP 和端口的完整流量 tcpdump -i eth0 -nn host 10.0.0.8 and port 443 -w web.pcap # 只看 SYN 包快速确认连接建立频率 tcpdump -i eth0 -nn tcp[tcpflags] tcp-syn ! 0 and tcp[tcpflags] tcp-ack 0 # 抓取 DNS 请求 tcpdump -i eth0 -nn udp port 53 # 抓取 HTTP 明文请求 tcpdump -i eth0 -nn tcp port 80 and (((ip[2:2] - ((ip[0]0xf)2)) - ((tcp[12]0xf0)2)) ! 0)最后一条命令的原理是计算 TCP 载荷长度只抓有实际数据的 HTTP 包避免大量确认包干扰视线。7. 基于四层思维的监控与加固落地清单7.1 每层放什么“关卡”构建防御和监控体系时我习惯把措施按层摆好而不是一把抓。以下是一张我自己常用的落地清单层级核心风险推荐监控和加固动作链路层ARP 欺骗、MAC 伪造、DHCP 异常、广播风暴交换机端口安全、DAI 动态 ARP 检测、DHCP Snooping、 802.1X 准入控制网络层伪造源 IP、异常 TTL、分片攻击、路由篡改边界 ACL 过滤私有源 IP、开启分片重组检测、对 IP 选项丢弃、部署子网隔离传输层端口扫描、半开连接、异常连接状态、UDP 隧道防火墙端口白名单、异常状态连接告警、五元组流量基线、对 UDP 出口做审计应用层恶意请求、漏洞利用、数据外带、加密隧道WAF 规则、代理审计、DNS 日志留存、TLS 元数据采集、域名信誉库别小看链路层那些交换机配置它们往往是最容易忽视但成本最低的防护。很多内网渗透事件的起点就是链路层信任过度一旦有人接入内网不需要任何高级手段就能嗅探、欺骗、横向移动。把链路层的准入和映射关系管住了等于先撤掉了一片攻击立足点。7.2 从“看包”到“建规则”的进阶路径当你习惯用四层思维看流量后可以进一步把分析经验固化成自动规则。IDS比如 Suricata、Snort规则本质上就是在不同协议层提取特征做判断。举几个简化的例子链路层规则可以基于 ARP 请求频率做阈值判断单位时间内某一 MAC 发出大量异常 ARP 包大概率是地址欺骗探测。网络层规则可以针对 IP 分片特征所有分片包中单个分片偏移量为 0 且 MF 标志位持续为 1 的长连接流触发告警。传输层规则最常见的是将“同一时间窗口内、同一源 IP、大量 SYN、少 ACK”作为扫描或攻击信号。应用层规则更直接匹配请求路径包含常见敏感文件、UA 匹配已知扫描器特征、TLS SNI 匹配威胁情报域名。我自己在搭监控时经验是先把日志和抓包数据统一格式化成五元组加应用层摘要再写规则。没有统一的数据结构后面的规则和告警都是空中楼阁。7.3 给新人的一条建议学四层模型最忌讳的是只背东西不亲手拆包。我的建议是找一个晚上在自己的电脑上装个 Wireshark开着它访问几个网站、ping 一下网关、做一次 nslookup然后回头看每一层头部是怎么变化的。用tcpdump抓完文件后导出成 pcap逐层展开看清楚一个完整 HTTP 请求从 ARP 解析到 TCP 握手、再到 HTTP 正文的全过程。只要亲手走完这一遍后面分析什么流量都不会发怵。协议栈这东西看着是理论用起来全是基本功。希望这篇文章能帮你把四层模型从一个考试名词变成手里真正能用的分析工具。
返回列表