VPN IPSec 客户端为什么使用 UDP?

VPN IPSec 客户端为什么使用 UDP?

我家用 Windows 电脑连接到公司服务器时使用的 VPN 是 Cisco 客户端。客户端配置为使用“IPSec over UDP (NAT/PAT)”。

为什么要使用 UDP(一种“不可靠”的协议)来建立安全隧道?当 UDP 数据包丢失时,协议的不可靠性是否会导致问题?

或者该协议使用 UDP 但在应用层增加了可靠性?

答案1

它使用 UDP 穿越功能最少的 NAT 设备。这里发生的情况是,实际的 IPSec 流量被封装在 UDP 中(IP 协议17) 本机 IPSec 数据包的 IP 协议标头值为 50。由于 50 既不是 UDP (17) 也不是 TCP (6),因此简单的 NAT 网关将丢弃该数据包而不是传递它。

其次,由于 IPSec 既不是 TCP 也不是 UDP,因此它没有端口号。因此,如果您参加的会议规模非常大,并且您的 8 位同事也同时参加,那么只有一个人可以随时启用 VPN,因为 VPN 集中器仅进行 IP 级歧义消除。通过封装在 UDP 数据包内,它允许在 NAT 设备后面有多个 VPN 端点。

至于为什么是 UDP?这在RFC 3715.2.1.b节:

校验和与 NAT 不兼容。TCP 和 UDP 校验和依赖于 IP 源地址和目标地址,因为在计算时会包含“伪报头”。因此,如果在接收时计算并检查校验和,则在通过 NAT 或反向 NAT 设备时,校验和将失效。

因此,IPsec 封装安全负载 (ESP) 只有在未涉及 TCP/UDP 协议(​​如 IPsec 隧道模式或 IPsec 保护的 GRE)或未计算校验和(如 IPv4 UDP 中可能)的情况下才会畅通无阻地通过 NAT。如 [RFC793] 中所述,IPv4 中需要计算和验证 TCP 校验和。IPv6 中需要计算和验证 UDP/TCP 校验和。

这种情况之所以会发生,是因为 IPSec 堆栈本身具有完整性检查功能,因此使用“不可靠”协议传输网络不会对功能造成严重破坏。如果数据包在传输过程中被扰乱,它将无法正确解封装,而 IPSec 协议将正确处理这种情况。

一些客户端确实支持 TCP 模式,但思科不是其中之一。

相关内容