名字 | 验证头部协议 | 封装安全载荷协议 |
IP协议封装的协议 | 是 | 是 |
IP协议字段 | 51 | 50 |
下一头部 | 在最开始的8位,指明载荷类型(TCP\UDP\IP\IPSec) | ESP尾部,8位,语义与AH一致 |
载荷长度 | 8比特,表示以32比特为单位的AH头部长度减2 | 无此字段 |
保留字段 | 16bits,默认0,为保留用 | 无此字段 |
SPI | 32比特,用于标识有相同IP地址和相同安全协议的不同SA。由SA的创建者定义,只有逻辑意义 | ESP头部,32位,语义与AH一致 |
序列号 | 32比特,一个单项递增的计数器,用于防止重放攻击,SA建立之初初始化为0,序列号不允许重复 | ESP头部,32位,语义与AH一致 |
认证数据 | 摘要或者指纹,用于认证,由SA初始化时指定的算法来计算,长度=整数倍32位比特,变长(通信双方必须采用相同的HMAC算法和密钥,认证数据是HMAC算法结果,被称为数据报的完整性校验值ICV,) | ESP验证数据,可选,选择ESP验证服务时使用,语义和AH一致(但具体验证区域不同) |
载荷数据 | 紧跟AH头部的载荷,变长,明文 | 可变长字段,包含实际的载荷数据,根据是否需要加密,该字段可以是密文或者明文 |
填充和填充长度 | 无 | 填充字段,0-255字节,大多数加密算法要求输入数据包含整数个分组,因此需要填充。填充长度,8bits,填充字段的长度。 |
报文格式 | AH头部+AH载荷 | ESP头部+ESP净荷+ESP尾部(填充、填充长度和下一个头字段)+ESP验证数据(可选) |
传输模式 | 保护IP载荷 | 保护IP载荷 |
传输模式验证区域 | IP头部+AH头部+TCP/UDP头部+数据(可变字段除外) | ESP头部+ TCP/UDP头部+数据+ESP尾部 |
传输模式加密区域 | 无 | ESP净荷+ESP尾部 |
隧道模式 | 保护整个IP包 | 保护整个IP包 |
隧道模式验证区域 | 新IP头部+AH头部+ IP头部+ TCP/UDP头部+数据(可变字段除外) | ESP头部+IP头部+TCP/UDP头部+数据+ESP尾部 |
隧道模式加密区域 | 无 | ESP净荷+ESP尾部 |
外出处理 | 查询SAD,产生或增加序列号,计算完整性校验值(ICV) | 如果验证,则和AH相同;如果进行加密,则还会加密分组;如果加密+验证,则计算ICV和加密都有 |
进入处理 | 重组分片,查询SAD并操作,查询SPD并检查,检查序列号(抗重放功能),认证检查数据完整性 | 如果验证,则和AH相同;如果加密,则还需解密操作;如果验证+加密,则计算ICV比较和解密都有 |
算法 | 验证 | 验证、加密(至少有一种) |
服务 | 无连接的数据完整性:通过哈希函数产生的校验来保证 数据源身份认证:通过计算校验码时加入一个共享密钥实现 防止重放攻击:AH报头的序列号可以防止重放攻击 | 除了AH已有的三种服务之外(可选),还提供数据包加密和数据流加密 |
与NAT的联系 | NAT会对IP头进行修改导致AH协议下的IPsec不能穿越NAT | 如果是NAT对IP头进行修改,ESP能适用于NAT。但如果NAT为IP地址映射+端口映射(端口改变),则ESP协议下的IPSec都不能适用NAT(考虑NAT-T) |