IPsec,全称 Internet Protocol Security,是一套在 IP 层提供安全通信的协议族。它不是单一协议,而是由多个子协议和机制构成的一个完整安全框架。要理解 IPsec 存在的必要性,必须从 IP 协议本身的设计缺陷出发。IPv4 在设计之初完全没有考虑安全需求——IP 数据包的源地址可以被任意伪造(IP 欺骗攻击),数据包的内容在传输路径上可以被任意窃听和篡改(中间人攻击),接收方无法验证数据包是否真的来自声称的发送方(身份冒充)。在互联网早期,这些安全问题并不突出,因为网络规模小、用户群体相对封闭。但到了今天,任何未加密的 IP 通信都随时面临被窃听和篡改的风险,IPsec 正是针对 IP 层这些原生安全缺陷而设计的标准化解决方案。
IPsec 提供的安全服务可以归纳为五个方面。第一,数据源认证——接收方可以验证数据包是否真的来自合法的发送方,防止 IP 地址伪造。第二,数据完整性——接收方可以检测数据包在传输过程中是否被篡改,任何修改都会导致完整性校验失败。第三,数据机密性——通过加密使得窃听者即使截获了数据包也无法理解其内容。第四,防重放攻击——通过序列号机制防止攻击者录制并重放之前捕获的合法数据包,具体做法是接收方维护一个滑动窗口,凡是序列号落在窗口之外或已经出现过的数据包一律丢弃。第五,有限的流量保密性——在隧道模式下可以隐藏原始数据包的源和目的 IP 地址,外部只能看到隧道端点的 IP。在软考的语境中,前三项(源认证、完整性、机密性)是考查的重点,也是最容易被混淆的地方。
与人们熟知的 TLS(Transport Layer Security,传输层安全协议)不同,IPsec 工作在 OSI 模型的第三层(网络层),TLS 工作在第四层(传输层)之上。这个层级差异带来的影响是:TLS 只能保护基于 TCP 的应用层协议(如 HTTPS),而 IPsec 可以保护任何运行在 IP 之上的协议——TCP、UDP、ICMP 乃至路由协议全部囊括。打个比方,TLS 像是给快递箱子上的封条,只保证箱内物品不被偷看和篡改;IPsec 则像是把整辆运输卡车装进了一个装甲护罩——管你车内运的是什么货、走的是哪条路线,统统在保护范围之内。正是这种与上层协议无关的透明性,加上对传输层和应用层的完全不可见,使得 IPsec 成为构建虚拟专用网络(VPN)的首选技术方案。
AH,全称 Authentication Header,即认证头协议,IP 协议号为 51。AH 提供三种安全服务:数据源认证、数据完整性校验和防重放攻击。注意这其中的一个关键限定——AH 不提供数据机密性,也就是 AH 不对数据负载进行加密。如果你用 Wireshark 抓取 AH 保护的 IP 数据包,数据内容依然是明文可见的,但你无法篡改它而不被发现。
AH 的工作原理是在原始 IP 数据包中插入一个认证头,该认证头包含安全参数索引(Security Parameter Index,SPI)、序列号和一个完整性校验值(Integrity Check Value,ICV)。ICV 的计算范围覆盖了整个 IP 数据包中在传输过程中不会改变的字段——包括 IP 头中除了 TTL、校验和等可变字段之外的全部内容,以及 AH 自身和上层协议数据。为什么要排除 TTL 和校验和?因为数据包每经过一个路由器,TTL 就会减一、IP 头校验和就会重新计算,这些字段在逐跳转发过程中必然改变。如果 AH 把它们也纳入 ICV 的计算范围,那么数据包在每一跳之后 ICV 都会失效,AH 就完全失去了实用价值。这种"选择性覆盖"是 AH 协议设计中一个非常重要且精巧的细节,也是软考命题人偶尔涉及的知识点。
ESP,全称 Encapsulating Security Payload,即封装安全载荷协议,IP 协议号为 50。ESP 提供的安全服务比 AH 更加全面:在 AH 的数据源认证、数据完整性和防重放之外,ESP 额外提供了数据机密性——也就是加密。但这里有一个容易被忽略的细节:ESP 的认证功能是可选的,而加密功能是强制的。实际上,ESP 既可以同时启用加密和认证(最安全的模式),也可以仅启用加密不启用认证(存在安全隐患,实际部署中不推荐),但绝不能仅启用认证不启用加密——只认证不加密的场景应该由 AH 来承担。
ESP 的数据包结构比 AH 复杂得多。它包含 SPI、序列号、载荷数据(加密后的原始 IP 数据包或传输层数据)、填充字段、填充长度、下一头部字段,以及可选的认证数据(ICV)。加密的范围是"从载荷数据到下一头部字段"这一整段,认证的范围是"从 SPI 到下一头部字段"这一整段——注意加密范围和认证范围不完全重合,认证多覆盖了 SPI 和序列号,这保证了攻击者无法在不被察觉的情况下修改 SPI 或重放数据包。填充字段的存在有两个目的:一是将明文数据补齐到加密算法要求的分组长度(如 AES 要求 16 字节对齐),二是在一定程度上隐藏真实数据长度,增加流量分析的难度。下一头部字段则指明了加密载荷内部的协议类型(如 TCP、UDP 或原始 IP),以便解密后正确交给上层处理。
在实际网络设计和软考题目中,AH 和 ESP 的选择遵循一个简单的逻辑:如果需要加密,必须用 ESP(因为 AH 根本不提供加密);如果只需要认证且网络环境中存在 NAT(网络地址转换),优先用 ESP 的仅认证模式,而不是 AH。为什么 NAT 会影响 AH?因为 AH 的 ICV 计算覆盖了 IP 头中的源和目的 IP 地址字段,而 NAT 设备恰恰会修改这些字段——源 IP 会被 NAT 设备替换为公网 IP,导致接收方验证 ICV 时发现不匹配,数据包被丢弃。ESP 则不受此影响,因为 ESP 的认证范围不包含外层 IP 头。这个 NAT 兼容性问题在实践中非常重要,软考网络相关科目的选择题中也有出现。
在 IPsec 体系中,安全关联(Security Association,SA)是一个基础性概念,理解 SA 是理解 IPsec 全部工作机制的前提。SA 是一个单向的逻辑连接,定义了通信双方之间的一组安全参数。一个 SA 由三个要素唯一标识:安全参数索引(SPI)、目的 IP 地址和安全协议标识符(AH 或 ESP)。这个三元组构成了 SA 的"身份证"。SPI 是一个 32 位的值,存在于 AH 和 ESP 的头部中,接收方根据 SPI 快速查找到对应的 SA 并获取解密和验证所需的所有参数——包括加密算法、密钥、认证算法、SA 生存期等。
需要注意 SA 的单向性:如果两台主机之间需要双向安全通信(这才是通常的情况),就需要建立两个 SA——一个用于 A 到 B 的发送方向,一个用于 B 到 A 的发送方向。这种单向 SA 的设计看似麻烦,但实际上是合理的:两个方向可以使用不同的加密算法、不同的密钥甚至不同的安全协议——比如去程用 ESP 加密认证,回程也用 ESP 但使用不同的会话密钥,这提升了安全性。
安全策略数据库(Security Policy Database,SPD)和 SA 数据库(SAD)是 IPsec 实现中的两个核心数据结构。SPD 定义了"哪些流量需要 IPsec 保护、哪些可以旁路、哪些必须丢弃",它是一个策略匹配表。SAD 存储了所有已建立的 SA 的参数。当 IPsec 处理一个数据包时,首先查询 SPD 确定该数据包的安全策略,然后查询 SAD 找到对应的 SA,最后根据 SA 中的参数执行加密或认证操作。软考中偶尔会出现"三元组"的考点——问 SA 由哪三个要素唯一标识,答案是 SPI、目的 IP 地址和安全协议标识符,缺一不可。
IPsec 定义了两种工作模式:传输模式和隧道模式。这两种模式的区别在于保护的范围不同,适用场景也不同。
传输模式下,AH 或 ESP 头部被插入到原始 IP 头部之后、传输层头部之前。保护的范围是 IP 数据包的载荷部分(即传输层及以上),原始 IP 头部不受到保护。传输模式适用于端到端的通信场景——两台主机直接通信,彼此就是 IPsec 隧道的起点和终点。典型的应用场景是同一企业内部网络中两台服务器之间的加密通信、或者系统管理员通过 IPsec 安全连接到数据库服务器。传输模式的优点是开销小(只增加了一个 AH 或 ESP 头部),不需要额外的 IP 地址,但缺点是原始 IP 地址暴露在外,无法隐藏通信双方的网络拓扑信息。
隧道模式下,整个原始 IP 数据包(包括原始 IP 头部)被作为载荷封装到一个新的 IP 数据包中,AH 或 ESP 头部插入到新的外层 IP 头部和原始 IP 数据包之间。保护的范围是原始 IP 数据包的全部内容——包括原始 IP 头部和载荷。隧道模式适用于站点到站点(Site-to-Site)的通信场景——两个网络的网关之间建立 IPsec 隧道,各自内部的主机不需要支持 IPsec,所有安全处理都由网关代劳。典型的应用场景是公司总部和分部之间通过互联网建立安全的虚拟专用网络,两个站点的网关设备各配置一条 IPsec 隧道,内部员工完全无感知——他们访问对方网络的体验就像在同一个局域网内一样。隧道模式的优点是隐藏了内部网络拓扑(外部只能看到网关的 IP),但开销更大——额外增加了一个完整的 IP 头部。
一道典型的软考选择题可能会这样考查:两个分公司通过互联网建立 VPN,应该选择哪种 IPsec 模式?答案是隧道模式,因为隧道模式支持网关到网关的通信,且能隐藏内部网络结构。而两台内部服务器之间互相备份数据库,则应选
本篇完!