背景介绍
客户企业是一家300人左右规模的衣服零售单位,总部在深圳、分部在海口,为了打通总、分之间内网互联,企业购买了一条100M企业专线,并在出口某J路由器上做IPSEC VPN以打通两端内网。大致拓扑如下图所示:
(1) 典型拓扑
(2) 目前问题
总分之间拷文件的速度仅有20Mbps吃不满专线百兆的带宽。而咨询了某J路由器的厂商IPSEC VPN吞吐能力可达200Mbps,不存在设备瓶颈问题。
排障分析
第一步:确认问题现象
通过FTP或者SMB2,总部PC1去拉取分支PC2的文件速率:
拷文件确实是20M上下,吃不满百兆专线。下一步看看是不是PC自己的问题,即总-分两边自己的内网拷贝测试。
第二步:确认总-分自己内网传输是否正常
总-分本地局域网拷贝的情况如下:
可以看到总-分部全千兆局域网中FTP或者SMB2拷贝是能达千兆的,两端PC确认均无问题。但我想说的是,其实局域网跑流和跨IPSEC跑流是有本质区别的:
- 局域网交换机跑流是硬件转发,有加速;
- IPSEC隧道保留是隧道封装CPU软件转发,无加速。
CPU转发的跑流问题一般和会话数有关,会话数越高能跑的总吞吐也就越高,因为会话流会基于不同CPU核多线程处理。而硬件转发则是高速转发,无需多会话整体吞吐量也能跑上去。下一步看下SMB2流会话数。
第三步:确认拷文件SMB2的数据流
抓取总-分通过VPN隧道传文件流并分析会话数:
可以看到拷文件只有1条会话流,由于IPSEC隧道是经出口路由器封装后的CPU转发,所以会话数太少吞吐量就起不来。对此下一步通过IPerf3跑流测试。
第四步:IPerf3多会话跑流测试
拓扑依然是总-分两台PC,一端作为IPerf3服务器一端为客户端,互跑TCP流测试如下:
方向 | 会话数 | 吞吐量 |
总部—>分支 | 1 | 20Mbps上下 |
总部—>分支 | 5 | 60Mbps左右 |
总部—>分支 | 10 | 100Mbps打满专线 |
总部<—分支 | 1 | 20Mbps上下 |
总部<—分支 | 5 | 60Mbps左右 |
总部<—分支 | 10 | 100Mbps打满专线 |
可以看到10条TCP流同时跑的情况下是可以吃满百兆专线带宽的。
总结及解决方案
(1) 小结如下
由于总-分拷文件会话数只有1条,经由IPSEC VPN隧道转发吞吐量低符合预期,多会话流同时跑才会打到更高的性能瓶颈。
(2) 解决方案
无问题无需解决,要想跑满专线带宽,多台PC同时传文件就可以了,一对一是不行的。