Java SSLSocket :: startHandshake导致过度延迟

时间:2014-12-18 22:13:53

标签: java c sockets ssl network-programming

我们有一个产品,其中客户端连接到服务器客户端 C 中实施,并使用 OpenSSL ,而服务器则使用 Java 实施代码包含 BufferedInputStream BufferedOutputStream 。以下是我的观察:

  1. 应用程序级数据传输速度非常慢,存在“过度的”#34;连接建立期间的延迟。
  2. 使用 ssldump ,发现来自服务器的SSL握手响应占用大部分时间。其余的应用程序数据传输和处理几乎不需要几分之一秒。在客户端发送初始响应后的2到13秒之后,服务器的SSL握手响应发生。
  3. 对代码的后续分析表明,它是第一个采用"过度"的缓冲读/写。时间量。
  4. 了解SSL连接完成后第一个缓冲读/写挂起,我介绍了 SSLConnect :: startHandshake(),以便我可以明确地看到问题所在。据观察,现在 startHandshake()被阻止了与第一次读/写相同的时间。此外,没有任何读/写调用阻塞,并且几乎立即返回数据。
  5. 我想了解为什么 startHandshake()花了这么长时间。我知道这是一个异步调用,但IMO的时间延迟仍然太长。是否与使用的套接字配置/密码/加密有关?使用 ssldump 我发现在发送客户端的hello请求和服务器的后续响应之间绝对没有数据传输,所以显然 startHandshake()一直是忙着做什么或者什么都不做 - 我不知道。 FWIW,这不是网络延迟问题,1)所有盒子都在同一网络上,2)所有其他数据传输合并时间不到0.4秒。

    有人可以建议可能出现的问题或可以采取哪些措施来解决这个问题?可能是一些套接字或SSL设置,使用的加密/密码,还是其他什么?

0 个答案:

没有答案