為什麼 VPN IPSec 客戶端使用 UDP?
我在家用 Windows 電腦上用來連接公司伺服器的 VPN 是 Cisco 客戶端。客戶端配置為使用“IPSec over UDP (NAT/PAT)”。
為什麼要使用“不可靠”協議 UDP 作為安全隧道?當UDP數據包被丟棄時,協議的不可靠性會不會導致問題?
還是該協議使用 UDP 但在應用層增加了可靠性?
它使用 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 不是其中之一。