我的一个linux服务器正试图build立到全局编录服务器的LDAPS连接,并且连接正在下降(大概是由GC端)。
为了讨论的目的,假设1.1.1.1是Linux服务器,1.2.3.4是全局编录服务器。
如果我尝试从Linux中使用telnet ,我看到:
[root@foobox ~]# telnet gcfoo.exampleAD.local 3269 Trying 1.2.3.4... Connected to gcfoo.examplead.local. Escape character is '^]'. Connection closed by foreign host.
第四和第五行之间没有任何延迟。 它只是立即断开连接。
我以为telnet结果可能有点误导(因为它实际上不适合于任何types的安全通信),所以我收集了来自设备的实际连接尝试的数据包捕获(使用需要LDAPS的实际程序)。
以下是我所看到的(同样,IP和源端口已经重新命名以保护无辜):
No. Time Source Destination Protocol Length Info 1 0.000000 1.1.1.1 1.2.3.4 TCP 66 27246 > msft-gc-ssl [SYN] Seq=0 Win=5840 Len=0 MSS=1460 SAC_PERM=1 WS=128 2 0.000162 1.2.3.4 1.1.1.1 TCP 62 msft-gc-ssl > 27246 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460 SACK_PERM=1 3 0.000209 1.1.1.1 1.2.3.4 TCP 54 27246 > msft-gc-ssl [ACK] Seq=1 Ack=1 Win=5840 Len=0 4 0.003462 1.1.1.1 1.2.3.4 TCP 248 27246 > msft-gc-ssl [PSH, ACK] Seq=1 Ack=1 Win=5840 Len=194 5 0.007264 1.2.3.4 1.1.1.1 TCP 60 msft-gc-ssl > 27246 [RST] Seq=1 Win=64046 Len=0
我有点生锈的TCP / IP,所以请原谅我的无知…我看到三方握手发生在数据包1-3。 这就说得通了。 包#4发生了什么? [PSH, ACK]是什么意思? 这似乎是多余的承认,这是不必要的。 实际数据是在第四个数据包中发送的吗? 或者这是一个奇怪的握手延续?
PSH是一个Push标志: http : //ask.wireshark.org/questions/20423/pshack-wireshark-capture
Push标志告诉接收者的networking堆栈把数据直接“推”到接收套接字,而不是在这之前等待更多的数据包。
Push标志通常意味着数据已被发送,同时覆盖了内置的TCP效率延迟,如Naglealgorithm或延迟确认(Delayed Acknowledgments) 。
这些延迟使得TCPnetworking以一些延迟(通常大约几十毫秒)为代价更高效。 对延迟敏感的应用程序不希望等待TCP的效率延迟,因此应用程序通常会禁用它们,导致数据以尽可能快的速度发送,同时设置一个Push标志。
在Linux上,这是通过setsockopt()标志TCP_QUICKACK和TCP_NODELAY 。 请参阅man 7 socket了解更多信息。
@DarkMoon解释了PSH旗帜的含义。 关于你的数据,连接build立完成(三次握手),那么,是的,客户端发送了194个字节的数据到服务器( Len=194 )。 服务器不喜欢数据并closures连接。 可能客户端configuration不正确与服务器通信,反之亦然,例如SSL / TLS不匹配。
如果你有访问权限,我build议检查服务器上的日志,看它是否logging了不喜欢客户端数据的内容。