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

我在家用Windows计算机上使用的VPN连接到我公司的服务器是Cisco客户端。 客户端configuration为使用“IPSec over UDP(NAT / PAT)”。

为什么你会使用UDP,一个“不可靠”的协议,为一个安全的隧道? 当UDP数据包丢失时,协议的不可靠性会不会导致问题?

还是使用UDP的协议,但在应用层增加可靠性?

它使用UDP来通过愚蠢的NAT设备。 这里发生的事情是实际的IPSecstream量被封装在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中),则IPsec封装安全有效载荷(ESP)将仅通过NAT畅通无阻,或者不计算校验和(如IPv4 UDP )。 如[RFC793]中所述,IPv4中需要TCP校验和计算和validation。 在IPv6中需要UDP / TCP校验和计算和validation。

由于IPSec协议栈本身具有完整性检查function,因此可能发生这种情况,因此在传输networking中使用“不可靠”的协议不会导致function严重损坏。 如果一个数据包在传输过程中被encryption,它将不会被正确解除封装,IPSec协议将正确处理这种情况。

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