Назад | Перейти на главную страницу

Что делает [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-м пакете? Или это какое-то странное продолжение рукопожатия?

PSH это флаг Push: http://ask.wireshark.org/questions/20423/pshack-wireshark-capture

Флаг Push сообщает сетевому стеку получателя «протолкнуть» данные прямо в принимающий сокет, а не ждать дополнительных пакетов, прежде чем это сделать.

Флаг Push обычно означает, что данные были отправлены, но при этом была отменена встроенная задержка эффективности TCP, например Алгоритм Нэгла или Задержанные подтверждения.

Эти задержки делают сеть TCP более эффективной за счет некоторой задержки (обычно около нескольких десятков миллисекунд). Приложение, чувствительное к задержкам, не хочет ждать задержек эффективности TCP, поэтому приложение обычно отключает их, заставляя данные отправляться как можно быстрее с установленным флагом Push.

В Linux это делается с помощью setsockopt() флаги TCP_QUICKACK и TCP_NODELAY. Видеть man 7 socket Чтобы получить больше информации.

@DarkMoon объяснил, что означает флаг PSH. Что касается ваших данных, установка соединения завершается (трехстороннее рукопожатие), затем, да, клиент отправил на сервер 194 байта данных (Len=194). Серверу не понравились данные, и он закрыл соединение. Возможно, клиент не настроен должным образом для связи с сервером или наоборот, например несоответствие SSL / TLS.

Если у вас есть доступ, я бы посоветовал изучить журналы на сервере, чтобы убедиться, что он записал то, что ему не понравилось в данных клиента.