在使用SD-WAN进行组网时,很多客户都会不禁有一个疑问,那就是SD-WAN带宽和互联网带宽之间的比例关系是什么样的?当然,我们可以不负责任地告诉客户,两者的带宽大致相等,但是这也太不负责任了。
那负责任地讲,比例应该是多少呢?
首先,我们大致知道了一般的SD-WAN底层主要都是通过IPsec VPN来实现的,封装后的报文尺寸通常由业务数据大小和报文封装大小组成,报文封装通常以太网封装、IP报文头和协议封装等组成。
以IPsec为例,封装协议可能包含AH、ESP或者AH-ESP,使用的加密算法和认证算法在SA中均可查看,但是在ESP报文中无法直接查看;而且,如果ESP使用的加密算法不同,ESP校验尾部填充报文长度也不同。从上图来看,最长的报文封装长度可能会超过124字节。
在测试设备转发性能时,所有测试都应该在多个报文尺寸下执行。具体来说,报文尺寸应该包括被测介质上被测协议所允许的最大和最小合法大小,以及介于两者之间的足够大小,以便能够获得DUT(devices under test,被测设备)性能的完整表征。适用于以太网测试的常用报文尺寸共7种,分别为64字节、128字节、256字节、512字节、1024字节、1280字节和1518字节。
其实,对这里的1518字节应该持怀疑态度。现在一般的链路MTU多为1500字节,这里的1500字节一般是加了报文头封装之后的报文长度,比如ICMP报文,如果强制不分片,最大可发送业务报文长度为1472字节,缺少的28字节分别为8字节的ICMP报文头和20字节的IP报文头。所以,正常发送1518字节的报文肯定会触发分片的。
除非另有说明,每个测试条件至少应测试五种报文尺寸。通常使用长度为64字节的最小包来测试包转发速率(pps),用最大包来测试最大转发带宽(bps),用包含前述所有长度报文的混合包来测试综合转发性能。理论上,以均匀分布理论报文速率的方式分布报文大小将是理想的。
我们在Linux下进行测试时,可以使用-s命令来指定报文尺寸。
可以看到,我们指定报文长度为128字节时,实际的报文长度反而为136字节,自动计算了8字节的ICMP报文头长度。
而如果我们从线路上抓包来看,又是另外一番景象。
可以看到,实际的数据长度又成了120字节,报文总长度为170字节。
而当我们测试报文长度为1518字节时,可以看到报文出现了分片。第一个分片的长度为1514字节,数据长度为1480字节,没有ICMP的报文头封装。
第二个分片的长度为80字节,减掉14字节的最外层封装、减掉20字节的IP报文头封装、减掉8字节的ICMP报文头封装,还剩38字节。加上第一个分片的1480字节,正好是1518字节。
以我们前面测试的VPP为例(VPP配置指南:穿越NAT的IPsec VPN配置及性能测试),在封装IPsec时,报文加密主要为ESP封装,当在终端之间进行打流测试时,一般会增加60字节的报文长度,也就是IPsec的封装开销。以ICMP报文为例,报文本身会增加42字节的封装,在IPsec封装之后,不同报文尺寸的开销情况如下:
注意,这里说的带宽增长比例是指IPsec封装引入的60字节长度相比于原始报文整体大小所占的比例,带宽可用比例指的是实际业务报文占IPsec封装后总长度的比例,当互联网带宽达到极限时,这也是业务报文能达到的最大比例。
可以看出,在报文尺寸为64字节时,SD-WAN带宽相比于互联网带宽的利用率最低,为38.6 %;在报文尺寸为1518字节时,利用率最高,为93.7 %;当采用7种报文尺寸同比例的混合包时,利用率为75.2 %;报文尺寸越大,封装引入的带宽开销越小,反之亦然。
如果我们把1518字节替换为可封装的最大长度,应该是1514-60-42=1412 字节,那么上表就变成了下面这样:
可以看到,最小的带宽整张比例为4.1 %,带宽可用比例最高为93.3 %,相比于前一张表有些细微差异,综合更准确一些。
所以对于IPsec封装的SD-WAN组网,或者就是使用IPsec VPN直接组网,建议配置互联网带宽至少为SD-WAN带宽或期望传输带宽的1.2倍,以尽量接近理想转发速率。当然,这仅仅是参考测试规范得到的典型值,具体业务还是要具体分析的。