Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance SSL会带来多少开销?_Performance_Sockets_Ssl_Overhead - Fatal编程技术网

Performance SSL会带来多少开销?

Performance SSL会带来多少开销?,performance,sockets,ssl,overhead,Performance,Sockets,Ssl,Overhead,我知道没有一个简单而快速的答案,但是对于SSL与未加密套接字通信的加密开销,是否有一个通用的数量级估计近似值?我所说的只是通信处理和连线时间,不包括应用程序级处理 更新 有,但我有兴趣在堆栈中查找较低的部分 (为了避免混淆,我替换了“数量级”一词;我将其用作非正式术语,而不是正式的CompSci含义。当然,如果我是正式的意思,作为一个真正的极客,我会想到二进制而不是十进制!) 更新 根据注释中的每个请求,假设我们讨论的是通过持久连接的大小良好的消息(范围为1k-10k)。因此,连接设置和数据包开

我知道没有一个简单而快速的答案,但是对于SSL与未加密套接字通信的加密开销,是否有一个通用的数量级估计近似值?我所说的只是通信处理和连线时间,不包括应用程序级处理

更新

有,但我有兴趣在堆栈中查找较低的部分

(为了避免混淆,我替换了“数量级”一词;我将其用作非正式术语,而不是正式的CompSci含义。当然,如果我是正式的意思,作为一个真正的极客,我会想到二进制而不是十进制!)

更新


根据注释中的每个请求,假设我们讨论的是通过持久连接的大小良好的消息(范围为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:几乎没有

如何“为HTTPS服务启用SSL会话”?了解这方面的好资源是什么?@Bart van Heukelom--Keep alive将有助于使套接字(和SSL连接)保持更长时间的打开,这很有帮助。但是SSL会话会导致协商的加密参数在套接字之间被“记住”。因此,HTTP keep alive对于加载包含引用内容的单个网页非常有用,但几秒钟后,该连接将关闭。三分钟后,例如,当获取另一个页面时,SSL会话允许在不重复完整握手的情况下重新建立SSL连接。特别是,可以跳过使用公钥加密的缓慢密钥交换。@Tony您是否有任何TLS增加超过百分之几开销的真实示例?我的回答和问题一样笼统。如果你有不同的想法,请分享。@Tony我见过普通套接字在每次写入一个字节时,在空间方面比SSL套接字高出42倍,这是最糟糕的情况。从未见过250x。我在互联网上用1700个数据点做了一个广泛的实验,一般结果是明文套接字的速度不超过SSL的三倍,使用的编程并不比缓冲和刷新更复杂。JSSE,考虑到实验日期,可能是Java5