虚拟专用网(VPNs)通过公共网络提供跨远程站点的安全链接。VPN协议通常会以无缝专用网络的形式呈现。然而,在处理大数据包时,会出现一些已知的问题,这些问题通常发生在大文件传输和数据流期间,如虹科ThinkRF实时频谱分析仪(RTSA)。
本应用指南重点介绍VPN隧道的最大传输单元(MTU)和路径MTU方面,并提供一种解决方案,以减少MTU的方式处理受网络影响的大数据包。
虚拟专用网络(VPNs)用于通过不可信的公共网络连接到远程网络。为了安全起见,对这些链接(VPN隧道)进行了身份验证和加密。从路由器的角度来看,隧道类似于物理网络接口,但由于隧道的开销,其容量略有减少。
通常,数据通过大小不同的IP数据报在网络上传输。最大IP数据报的大小取决于源和目标之间具有的最小最大传输单元(MTU)的链路。此MTU称为路径MTU(PMTU)。
下图是两个远程站点通过VPN隧道连接在一起的典型情况。VPN路由器上的LAN和WAN端口是以太网接口。VPN隧道使用诸如IPsec之类的协议来对两个远程子网之间的数据进行加密和封装。
IP协议被设计为对连接设备透明,而这些设备对LAN外部的网络拓扑没有先验知识。此外,网络条件可以动态更改,因此协议还被设计为在整个连接周期内都是自适应的。
对于专用LAN内的事务,此MTU通常为1500字节,这是传统以太网的有效负载限制。对于跨越更广泛和更多样化网络的事务,数据路径可能会与其他较低的MTUs链路交叉(如无线电链路,串行线路等),从而影响整个PMTU。在上图中,如果PC1连接到名为R5500的虹科RTSA,则PMTU为1500,但如果PC2连接到R5500,则PMTU是低一些的任意数字。
IPsec是在IP协议之上分层的协议,该协议允许在公共网络上路由加密的IP数据报。它需占用可用PMTU的额外58-73个开销字节。其他分层协议,如PPPoE,进一步增加了开销。源VPN路由器处理来自本地LAN的传入IP数据报,并准备将其通过公共网络发送。添加了具有公共IP地址的新IP标头,以允许其被公共路由。目标VPN路由器将反向处理,从WAN接收传入的IPsec数据报,并准备将其发送到远程LAN。
由于开销的原因,通常能够满足1500字节限制的大型数据报将不再满足要求。在这种情况下,将需要进行分片化和重组。根据配置和/或应用,VPN路由器可根据数据报大小执行以下操作之一:
a) 无分片
对于大多数数据包而言,不需要分片,且IPsec处理非常简单:
b) IPsec加密之前的预分片
但是,对于大小接近MTU的数据包,IPsec处理变得更加复杂。VPN路由器可在IP层上对原始IP数据报进行预分片,然后对各个IP分片进行加密:
c) IPsec分片化之前的IPsec加密
对原始IP数据报进行加密,然后在IPsec层对经过加密的数据进行分片
路径MTU发现(PMTUD)是主机用来确定到给定目的地的PMTU的机制。因其计算成本高,故其目的是避免IP分片。它与Internet控制报文协议(ICMP)结合使用,后者是用于在网络节点(路由器和主机)之间发送错误和诊断信息的一组信息。
IP数据报具有一个可选的“不分片”(DF)标志,该标志让路由器了解是否允许IP分片。源主机通过尝试发送设有DF标志的大型IP数据报,以发现PMTU。当中间路由器接收到这样的数据报,而该中间报文由于下一跳较低的MTU无法转发而无法进行分片时,它将发送ICMP消息“目标不可达-需分片但未设置分片”(ICMP类型3 /代码4 )返回给源。然后,源使用逐渐变小的数据报重新发送,直到成功为止,并设置相应的PMTU。
如果网络拓扑发生变化,PMTUD将动态运行;它将尝试通过增加PMTU以周期性(每隔几分钟)重新发现PMTU,直到传输再次开始失败。
PMTUD用于发现路由器之间的WAN端口链接的PMTU发现以及通过VPN隧道本身路径的PMTU,PMTUD的这种嵌套使用是有问题的。
出于安全原因,许多网络防火墙设置为拒绝来自WAN端口的ICMP信息。充分这样做的话会使PMTUD在整个公共网络中失效。大型数据报可能会于无声中消失,从而形成IP“黑洞”。仅当多次尝试重新传输丢失的数据报也失败时,才在IP层上发现。
VPN隧道和PMTUs之间的交互已被详细记录。数据报可能会在没有警告的情况下丢失,从而导致重新传输并最终导致连接失败。
避免这些问题的一种方法是人为地减少本地以太网接口本身的MTU,以使PMTU不再依赖于外部因素。
MTU值的选取取决于您的特定网络。至少应减少MTU以应对IPsec开销。其他可能影响MTU选择的因素包括:
运行PPPoE的DSL连接
系统管理员减少WAN MTU,以解决WAN链路上的PMTUD问题
虚拟局域网(VLANs)
选择MTU值最方便的方法是反复试验。请注意,将MTU降低到超出所需范围会对总体吞吐量产生影响。虹科实时频谱分析仪允许使用以下SCPI命令配置其以太网接口MTU:
:SYSTEM:COMMUNICATE:LAN:MTU
更多相关的详细信息,请参阅RTSA的《程序员指南》。