我的 Linux 服务器正在尝试建立与全局目录服务器的 LDAPS 连接,但该连接正在断开(可能是由 GC 端导致的)。
为了讨论的目的,我们假设 1.1.1.1 是 Linux 服务器,而 1.2.3.4 是全局目录服务器。
如果我尝试telnet
从 Linux 机器上使用,我会看到:
[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.
第 4 行和第 5 行之间没有延迟。它只是立即断开连接。
我认为telnet
结果可能有点误导(因为它实际上并不适合任何类型的安全通信)所以我从设备收集了实际连接尝试的数据包捕获(使用需要 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]
意思?这似乎是一个不必要的冗余确认。实际数据是否正在第 4 个数据包中发送?或者这是握手的某种奇怪的延续?
答案1
PSH
是一个 Push 标志:http://ask.wireshark.org/questions/20423/pshack-wireshark-capture
推送标志告诉接收器的网络堆栈将数据直接“推送”到接收套接字,而不是等待更多数据包。
Push 标志通常意味着数据已发送,同时覆盖了内置的 TCP 效率延迟,例如Nagle 算法或者延迟确认。
这些延迟使 TCP 网络更加高效,但代价是延迟(通常约为几十毫秒)。对延迟敏感的应用程序不想等待 TCP 的效率延迟,因此应用程序通常会禁用它们,从而通过设置 Push 标志尽快发送数据。
在 Linux 上,这是通过标志setsockopt()
和TCP_QUICKACK
来完成的TCP_NODELAY
。man 7 socket
有关更多信息,请参阅。
答案2
@DarkMoon 解释了 PSH 标志的含义。关于您的数据,连接建立完成(三次握手),然后,是的,客户端向服务器发送了 194 字节的数据(Len=194
)。服务器不喜欢该数据并关闭了连接。客户端可能未正确配置以与服务器通信,反之亦然,例如 SSL/TLS 不匹配。
如果您有访问权限,我建议您检查服务器上的日志,看看它是否记录了它不喜欢的客户端数据。