Performance SSL会带来多少开销?
我知道没有一个简单而快速的答案,但是对于SSL与未加密套接字通信的加密开销,是否有一个通用的数量级估计近似值?我所说的只是通信处理和连线时间,不包括应用程序级处理 更新 有,但我有兴趣在堆栈中查找较低的部分 (为了避免混淆,我替换了“数量级”一词;我将其用作非正式术语,而不是正式的CompSci含义。当然,如果我是正式的意思,作为一个真正的极客,我会想到二进制而不是十进制!) 更新Performance SSL会带来多少开销?,performance,sockets,ssl,overhead,Performance,Sockets,Ssl,Overhead,我知道没有一个简单而快速的答案,但是对于SSL与未加密套接字通信的加密开销,是否有一个通用的数量级估计近似值?我所说的只是通信处理和连线时间,不包括应用程序级处理 更新 有,但我有兴趣在堆栈中查找较低的部分 (为了避免混淆,我替换了“数量级”一词;我将其用作非正式术语,而不是正式的CompSci含义。当然,如果我是正式的意思,作为一个真正的极客,我会想到二进制而不是十进制!) 更新 根据注释中的每个请求,假设我们讨论的是通过持久连接的大小良好的消息(范围为1k-10k)。因此,连接设置和数据包开
根据注释中的每个请求,假设我们讨论的是通过持久连接的大小良好的消息(范围为1k-10k)。因此,连接设置和数据包开销不是什么大问题。数量级:零 换句话说,当您添加TLS时,您不会看到吞吐量减少一半或类似的情况。答案主要集中在应用程序性能上,以及与SSL开销的比较。这个问题专门排除了应用程序处理,并试图将非SSL与仅SSL进行比较。虽然在优化时从全局角度考虑性能是有意义的,但这并不是这个问题所要问的 SSL的主要开销是握手。这就是昂贵的非对称加密技术发生的地方。经过协商,使用了相对有效的对称密码。这就是为什么为HTTPS服务启用SSL会话非常有用的原因,在HTTPS服务中可以建立许多连接。对于一个长期存在的连接,这种“结束效应”没有那么重要,会话也没有那么有用
当谷歌将Gmail改为使用HTTPS时,不需要额外的资源;没有网络硬件,没有新主机。它只增加了大约1%的CPU负载。1秒@erickson:纯数据传输速度的损失可以忽略不计。现代CPU的加密/AES吞吐量达到数百MBit/s。所以,除非您使用的是资源受限的系统(移动电话),否则TLS/SSL的速度足以传输数据 但请记住,加密使缓存和负载平衡变得更加困难。这可能会导致巨大的性能损失 但对于许多应用程序来说,连接设置实际上是一个阻碍因素。在低带宽、高数据包丢失、高延迟连接(农村的移动设备)上,TLS所需的额外往返可能会使某些慢的东西变得不可用
例如,我们不得不放弃访问某些内部web应用程序的加密要求——如果从中国使用,这些应用程序几乎不可用。假设您不计算连接设置(如您在更新中所述),这在很大程度上取决于所选的密码。网络开销(就带宽而言)可以忽略不计。CPU开销将由加密控制。在我的移动核心i5上,我可以在单个核心上使用RC4每秒加密250 MB左右。(为了获得最佳性能,您应该选择RC4。)AES速度较慢,“仅”提供大约50MB/s的速度。所以,如果您选择了正确的密码,即使您有一条充分利用的1Gbit线路,您也无法让一个当前内核忙于加密开销。[编辑:不应使用RC4,因为它不再安全。但是,现在许多CPU中都有AES硬件支持,这使得AES加密在此类平台上非常快速。] 然而,连接的建立是不同的。根据实施情况(例如,支持TLS假启动),它将增加往返行程,这可能导致明显的延迟。此外,昂贵的加密发生在第一次连接建立时(如果愚蠢地使用4096位密钥,上述CPU每秒只能接受14个连接,如果使用2048位密钥,则只能接受100个连接)。在随后的连接上,以前的会话经常被重用,从而避免了昂贵的加密 因此,总结一下: 在建立连接时传输:
- 延迟:几乎没有
- CPU:可忽略不计
- 带宽:可忽略不计
- 延误:额外往返
- 带宽:几千字节(证书)
- 客户端上的CPU:中等
- 服务器上的CPU:高
- 延迟:额外的往返(不确定是一次还是多次,可能取决于实施)
- 带宽:可忽略不计
- CPU:几乎没有