与任何覆盖网络一样,VMware 在穿过网络的流量上添加额外的开销。本节先介绍在传统 IPsec 网络中增加的开销以及它与 VMware 之间的比较,然后介绍这种增加的开销与网络中的 MTU 和数据包分段行为之间的关系。
IPsec 隧道开销
- 填充
- AES 以 16 字节块(称为“块”大小)形式加密数据。
- 如果数据包正文小于块大小,或不能被块大小整除,则填充数据包以与块大小匹配。
- 示例:
- 1 字节的数据包将变为 16 字节,填充内容为 15 字节。
- 1400 字节的数据包将变为 1408 字节,填充内容为 8 字节。
- 64 字节的数据包不需要进行任何填充。
- IPsec 标头和结尾:
- 用于 NAT 穿越 (NAT-T) 的 UDP 标头。
- 用于 IPsec 隧道模式的 IP 标头。
- ESP 标头和结尾。
元素 | 大小(以字节为单位) |
---|---|
IP 标头 | 20 |
UDP 标头 | 8 |
IPsec 序列号 | 4 |
IPsec SPI | 4 |
初始化向量 | 16 |
填充 | 0 - 15 |
填充长度 | 1 |
下一标头 | 1 |
身份验证数据 | 12 |
总计 | 66-81 |
VMware 隧道开销
为了支持 Dynamic Multipath Optimization™ (DMPO),VMware 在称为 VeloCloud 多路径协议 (VeloCloud Multipath Protocol, VCMP) 的协议中封装数据包。VCMP 为用户数据包添加 31 字节的开销,以便在单个隧道中支持重新排列、纠错、网络分析和网络分段。VCMP 在 IANA 注册的端口 UDP 2426 上运行。为了确保在所有潜在的场景(未加密、已加密并位于 NAT 后面,已加密但不位于 NAT 后面)中具有一致的行为,将使用传输模式 IPsec 对 VCMP 进行加密,强制将 NAT-T 设置为 true 并使用特殊的 NAT-T 端口 2426。
默认情况下,不会加密通过 SD-WAN 网关发送到 Internet 的数据包,因为这些数据包在离开网关时进入开放 Internet。因此,Internet 多路径流量的开销小于 VPN 流量。
VPN 流量
元素 | 大小(以字节为单位) |
---|---|
IP 标头 | 20 |
UDP 标头 | 8 |
IPsec 序列号 | 4 |
IPsec SPI | 4 |
VCMP 标头 | 23 |
VCMP 数据标头 | 8 |
初始化向量 | 16 |
填充 | 0 - 15 |
填充长度 | 1 |
下一标头 | 1 |
身份验证数据 | 12 |
总计 | 97 - 112 |
Internet 多路径流量
元素 | 大小(以字节为单位) |
---|---|
IP 标头 | 20 |
UDP 标头 | 8 |
VCMP 标头 | 23 |
VCMP 数据标头 | 8 |
总计 | 59 |
路径 MTU 发现 (Path MTU Discovery)
在确定将应用多少开销后,SD-WAN 网关必须发现允许的最大 MTU 以计算客户数据包的有效 MTU。要查找允许的最大 MTU,Edge 执行路径 MTU 发现:
- 对于公用 Internet WAN 链路:
- 对所有网关执行路径 MTU 发现。
- 所有隧道的 MTU 将设置为发现的最小 MTU。
- 对于专用 WAN 链路:
- 对客户网络中的所有其他 Edge 执行路径 MTU 发现。
- 每个隧道的 MTU 是根据路径 MTU 发现结果设置的。
Edge 先尝试 RFC 1191 路径 MTU 发现,它将具有当前已知链路 MTU(默认值:1500 字节)的数据包发送到对等体,并在 IP 标头中设置“不分段”(DF) 位。如果在远程 Edge 或网关上收到该数据包,则会将具有相同大小的确认数据包返回到 Edge。如果数据包由于 MTU 限制而无法到达远程 Edge 或网关,中间设备将会发送“无法到达 ICMP 目标(需要分段)”消息。在 Edge 收到“无法到达 ICMP”消息时,它验证该消息(以确保报告的 MTU 值正确无误),并在验证后调整 MTU。然后,重复执行该过程,直到发现 MTU 为止。
在某些情况下(例如,存在 USB LTE 加密狗),中间设备不会发送“无法到达 ICMP”消息,即使数据包过大也是如此。如果 RFC 1191 失败(Edge 未收到确认或无法到达 ICMP),它将改用 RFC 4821 打包层路径 MTU 发现。Edge 尝试执行二进制搜索以发现 MTU。
在发现对等体的 MTU 时,到该对等体的所有隧道将设置为相同的 MTU。这意味着,如果 Edge 的一个链路的 MTU 为 1400 字节,另一个链路的 MTU 为 1500 字节,则所有隧道将使用 1400 字节的 MTU。这会确保可以随时使用相同的 MTU 在任何隧道上发送数据包。我们将其称为有效的 Edge MTU。根据目标(VPN 或 Internet 多路径),将减去上述开销以计算有效的数据包 MTU。对于直接 Internet 或其他底层网络流量,开销为 0 字节,由于不需要链路故障切换,有效的数据包 MTU 与发现的 WAN 链路 MTU 相同。
VPN 流量和 MTU
现在,SD-WAN 网关已发现 MTU 并计算了开销,因此,可以为客户端流量计算出有效的 MTU。对于可能收到的各种类型的流量,Edge 尝试尽可能高效地实施该 MTU。
TCP 流量
Edge 自动为收到的 TCP 数据包执行 TCP MSS(最大分段大小)调整。在 SYN 和 SYN|ACK 数据包穿越 Edge 时,将根据有效的数据包 MTU 重写 MSS。
未设置 DF 位的非 TCP 流量
如果数据包大于有效的数据包 MTU,Edge 将根据 RFC 791 自动执行 IP 分段。
设置了 DF 位的非 TCP 流量
如果数据包大于有效的数据包 MTU:
- 第一次收到该流的数据包(IP 5 元组)时,Edge 丢弃数据包,并根据 RFC 791 发送“无法到达 ICMP 目标(需要分段)”。
- 如果为同一流收到的后续数据包仍然太大,则会将这些数据包拆分为多个 VCMP 数据包,并在远端交付之前以透明方式进行重组。