ssl - Asio 流式传输 - 使用 SSL/TLS 加密的速度较慢

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

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

服务器:

  • 创建缓冲区 (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 加密的情况下实现了这一点。非安全版本通过本地主机达到大约 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]

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

关于ssl - Asio 流式传输 - 使用 SSL/TLS 加密的速度较慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51330301/

相关文章:

linux - 我可以只使用几台服务器来获得大量网络连接吗?

c++ - 使用 boost::asio 发送 Protobuf 消息

ssl - RSA 和 pkcs8 的区别

ssl - NGINX SSL 转发代理配置

c - 直接连接bittorrent转C或Ruby libtorrent

java - 我的 Java 应用程序的互联网连接

c++ - 使用 Boost.Asio 只读取所需的字节数

c++ - 我向 HTTP 服务器发送 TCP 请求 - 但没有任何响应

performance - Perl方式快速创建套接字(1000+)

apache - Centos7 启用 SSL - 连接超时