Co robi [PSH, ACK] podczas mojego połączenia z serwerem wykazu globalnego?

14

Mój serwer linux próbuje ustanowić połączenie LDAPS z serwerem wykazu globalnego i połączenie zostaje zerwane (prawdopodobnie po stronie GC).

Na potrzeby dyskusji powiedzmy, że 1.1.1.1 to serwer Linux, a 1.2.3.4 to serwer wykazu globalnego.

Jeśli spróbuję użyć telnetz Linux-a, zobaczę:

[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.

Między czwartą a piątą linią nie ma opóźnienia. Po prostu natychmiast zrywa połączenie.

Pomyślałem, że telnetwyniki mogą być nieco mylące (ponieważ w rzeczywistości nie są odpowiednie dla żadnego rodzaju bezpiecznej komunikacji), więc zebrałem przechwytywanie pakietów rzeczywistej próby połączenia z urządzeniem (używając rzeczywistego programu wymagającego LDAPS).

Oto, co widzę (ponownie, adresy IP i porty źródłowe zostały przemianowane, aby chronić niewinnych):

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

Jestem trochę zardzewiały z TCP / IP, więc proszę wybacz moją ignorancję ... Widzę trójdrożny uścisk dłoni w pakietach 1-3. To ma sens. Co się dzieje w pakiecie nr 4? Co [PSH, ACK]znaczy Wydaje się to zbędnym potwierdzeniem, które nie jest konieczne. Czy rzeczywiste dane są wysyłane w tym czwartym pakiecie? A może to dziwna kontynuacja uścisku dłoni?

Mike B.
źródło

Odpowiedzi:

24

PSHjest flagą Push: http://ask.wireshark.org/questions/20423/pshack-wireshark-capture

Flaga Push informuje stos sieciowy odbiornika, aby „przepychał” dane bezpośrednio do gniazda odbiorczego i aby nie czekał na kolejne pakiety.

Flaga Push zwykle oznacza, że ​​dane zostały wysłane, zastępując wbudowane opóźnienie wydajności TCP, takie jak algorytm Nagle'a lub opóźnione potwierdzenia .

Opóźnienia te zwiększają wydajność sieci TCP kosztem pewnego opóźnienia (zwykle około kilkudziesięciu milisekund). Aplikacja wrażliwa na opóźnienia nie chce czekać na opóźnienia wydajności TCP, więc aplikacja zwykle je wyłącza, powodując, że dane są wysyłane tak szybko, jak to możliwe, z ustawioną flagą Push.

W systemie Linux odbywa się to za pomocą setsockopt()flag TCP_QUICKACKi TCP_NODELAY. Zobacz man 7 socketpo więcej informacji.

Ciemny Księżyc
źródło
5

@DarkMoon wyjaśnił, co oznacza flaga PSH. W odniesieniu do twoich danych ustanowienie połączenia zostaje zakończone (3-drożny uścisk dłoni), a następnie tak, klient wysłał 194 bajtów danych na serwer ( Len=194). Serwer nie polubił danych i zamknął połączenie. Potencjalnie klient nie jest poprawnie skonfigurowany do komunikacji z serwerem lub odwrotnie, np. Niedopasowanie SSL / TLS.

Jeśli masz dostęp, sugeruję sprawdzenie dzienników na serwerze, aby sprawdzić, czy zarejestrował to, co nie podoba się w danych klienta.

karyhead
źródło