Что [PSH, ACK] делает во время моего подключения к серверу глобального каталога?

14

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

Майк Б
источник

Ответы:

24

PSHявляется push-флагом: http://ask.wireshark.org/questions/20423/pshack-wireshark-capture

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

Флажок Push обычно означает, что данные были отправлены, в то же время переопределяя встроенную задержку эффективности TCP, такую ​​как алгоритм Nagle или Delayed Acknowledgements .

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

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

Темная Луна
источник
5

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

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

karyhead
источник