Asio流式传输-SSL / TLS加密速度较慢

时间:2018-07-13 17:39:03

标签: ssl network-programming boost-asio tls1.2

我使用Asio(非增强版)创建了一个简单的服务器客户端,并将其用于简单的数据传输速度测试。

服务器:

  • 创建缓冲区(4 MB)
  • 客户端连接时(从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的速度。

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

2 个答案:

答案 0 :(得分:1)

任务已绑定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]

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

答案 1 :(得分:1)

  

这是预期的吗?

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

  

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

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