我在家用 Windows 计算机上用于连接到公司服务器的 VPN 是 Cisco 客户端。客户端配置为使用“IPSec over UDP (NAT/PAT)”。
为什么要使用 UDP(一种“不可靠”的协议)来建立安全隧道?当UDP数据包被丢弃时,协议的不可靠性会不会导致问题?
还是协议使用 UDP 但在应用层增加了可靠性?
sys*_*138 15
它使用 UDP 来通过最少功能的 NAT 设备。这里发生的事情是实际的 IPSec 流量被封装在 UDP(IP 协议17)中。本机 IPSec 数据包的 IP 协议标头值为 50。由于 50 既不是 UDP (17) 也不是 TCP (6),简单的 NAT 网关将丢弃数据包而不是通过它。
其次,由于 IPSec 既不是 TCP 也不是 UDP,它没有端口号。因此,如果您正在参加一个非常大型的会议,并且您的八位同事也将参加,那么您中只有一个人可以随时启动您的 VPN,因为 VPN 集中器只进行 IP 级别的消歧。通过封装在 UDP 数据包内部,它允许一个 NAT 设备后面有多个 VPN 端点。
至于为什么是UDP?这在RFC 3715 中有描述。第 2.1.b 节:
校验和与 NAT 之间的不兼容。通过在计算中包含“伪标头”,TCP 和 UDP 校验和依赖于 IP 源地址和目标地址。因此,在接收时计算和检查校验和的情况下,它们将通过通过 NAT 或反向 NAT 设备而无效。
因此,如果不涉及 TCP/UDP 协议(如在 IPsec 隧道模式或 IPsec 保护的 GRE 中)或不计算校验和(如 IPv4 UDP )。如 [RFC793] 中所述,IPv4 中需要 TCP 校验和计算和验证。IPv6 中需要 UDP/TCP 校验和计算和验证。
这可能发生,因为 IPSec 堆栈本身具有完整性检查功能,因此使用“不可靠”的协议来传输网络不会对功能造成严重破坏。如果数据包在传输过程中被加扰,它将无法正确解封装,IPSec 协议将正确处理这种情况。
有些客户端确实支持 TCP 模式,但 Cisco 不是其中之一。