我们有一个 Java LDAP 客户端与 AD 建立 SSL 连接。有时连接会挂起,客户端和服务器会重新传输客户端密钥交换和确认如下所示,数据包不断传输,最终在大约 5 分钟后超时。对此行为有任何可能的解释和解决方案吗?
client ------ Client Key Exchange ----------------------> Server
client ------ Client Key Exchange(Re-transmission)------> Server
client <----- ACK --------------------------------------- Server
client ------ Client Key Exchange(Re-transmission)------> Server
client <------ Dup ACK --------------------------------- Server
client ------ Client Key Exchange(Re-transmission)------> Server
client <------ Dup ACK --------------------------------- Server
WireShark 截图:http://img59.imageshack.us/img59/6431/p63e.png
答案1
因此,假设您正确地认为 ACK 处于 TCP 级别:
如果向客户端发送了 TCP ACK,但继续重新发送已确认的内容,则说明服务器已接收并注册了内容,但客户端尚未接收并注册 ACK。
您在交换机的哪里收集数据?在客户端、服务器或两者之间。您可能应该在两端收集数据,并且尽可能靠近两端,这样您就可以比较它们以验证问题是否出在网络中(这似乎很有可能)。
根据您告诉我们的情况,包括 ACK 长时间无法发送,这不太可能是简单的数据包丢失。我会仔细检查所涉及的任何 SSL 隧道或防火墙的配置。
您能从连接的每一端收集并共享 tcpdump 输出吗?