当我连接到全局目录服务器时,[PSH, ACK] 在做什么?

当我连接到全局目录服务器时,[PSH, ACK] 在做什么?

我的 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_NODELAYman 7 socket有关更多信息,请参阅。

答案2

@DarkMoon 解释了 PSH 标志的含义。关于您的数据,连接建立完成(三次握手),然后,是的,客户端向服务器发送了 194 字节的数据(Len=194)。服务器不喜欢该数据并关闭了连接。客户端可能未正确配置以与服务器通信,反之亦然,例如 SSL/TLS 不匹配。

如果您有访问权限,我建议您检查服务器上的日志,看看它是否记录了它不喜欢的客户端数据。

相关内容