Asio流媒体-使用SSL/TLS加密的低速



我使用Asio(非Boost(创建了一个简单的服务器客户端,并使用它来测试数据传输速度。

服务器:

  • 创建缓冲区(4MB(
  • 客户端连接时(从async_accept回调(
    1. 启动计时器
    2. 向客户端发送缓冲区(async_write(
    3. 等待客户端的响应(来自async_read的回调(
    4. 重复步骤2-3 100次
    5. 停止计时器
    6. 计算传输速度(100*缓冲区大小*8/次(

客户端

  • 连接到服务器
    1. 等待来自服务器的数据(来自async_read的回调(
    2. 将单个字节发送回服务器(async_write(
    3. 重复

我在使用和不使用SSL/TLS加密的情况下都实现了这一点。非安全版本通过localhost的速度约为15.0 Gbps,但加密版本的速度慢到约0.3 Gbps。

这是意料之中的事吗?如果没有,有什么想法可能导致这种情况吗?

任务已绑定CPU。您可以使用任务管理器轻松验证这一点。

并与netcatopenssl s_server/s_client进行比较,得出相同的效果。例如,对于data.bin是32MiB的随机数据,我得到:

$ for a in {1..100}; do cat data.bin; done | pv | openssl enc -e -kfile server.pem -pass test -out data.bin.crypt
3,12GiB 0:00:08 [ 392MiB/s]

这只是服务器端加密数据所需的时间。

这是预期的吗?

否。TLS在足够长的传输时间内不小于明文速度的1/3。十多年前,我对它进行了广泛的测试,从那时起,计算机的速度大大加快了。

如果没有,有什么想法可能导致这种情况吗?

您可能在应用程序和TLS层之间使用了不足的缓冲。例如,如果您一次向TLS发送一个字节,那么这里的数据可能会爆炸45次。

最新更新