O que [PSH, ACK] está fazendo durante minha conexão com um servidor de catálogo global?

14

Um servidor linux meu está tentando estabelecer uma conexão LDAPS com um servidor de catálogo global e a conexão está sendo descartada (presumivelmente pelo lado do GC).

Para fins de discussão, digamos que 1.1.1.1 é o servidor Linux e 1.2.3.4 é o servidor de catálogo global.

Se eu tentar usar telnetna caixa do Linux, vejo:

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

Não há atraso entre a quarta e a quinta linhas. Ele simplesmente interrompe a conexão imediatamente.

Eu pensei que os telnetresultados poderiam ser um pouco enganadores (já que não é realmente apropriado para qualquer tipo de comunicação segura), então coletei uma captura de pacotes da tentativa de conexão real do dispositivo (usando o programa atual que requer LDAPS).

Aqui está o que eu vejo (novamente, IPs e portas de origem foram renomeados para proteger os inocentes):

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

Estou um pouco enferrujado com o TCP / IP, então, perdoe minha ignorância ... Vejo o aperto de mão de três vias nos pacotes 1-3. Isso faz sentido. O que está acontecendo no pacote nº 4? O que [PSH, ACK]significa isso ? Parece um reconhecimento redundante desnecessário. Os dados reais estão sendo enviados neste quarto pacote? Ou isso é alguma continuação estranha do aperto de mão?

Mike B
fonte

Respostas:

24

PSHé um sinalizador Push: http://ask.wireshark.org/questions/20423/pshack-wireshark-capture

O sinalizador Push informa à pilha de rede do receptor para "enviar" os dados diretamente ao soquete receptor e não esperar mais pacotes antes de fazê-lo.

O sinalizador Push geralmente significa que os dados foram enviados, substituindo um atraso de eficiência TCP incorporado, como o Algoritmo de Nagle ou Agradecimentos Atrasados .

Esses atrasos tornam a rede TCP mais eficiente ao custo de alguma latência (geralmente em torno de algumas dezenas de milissegundos). Um aplicativo sensível à latência não deseja esperar pelos atrasos na eficiência do TCP, de modo que o aplicativo os desabilite normalmente, fazendo com que os dados sejam enviados o mais rápido possível com um conjunto de sinalizadores Push.

No Linux, isso é feito com os setsockopt()sinalizadores TCP_QUICKACKe TCP_NODELAY. Veja man 7 socketpara mais informações.

Lua Negra
fonte
5

O @DarkMoon explicou o que significa a bandeira PSH. Com relação aos seus dados, o estabelecimento da conexão é concluído (handshake de três vias); então, sim, o cliente enviou 194 bytes de dados ao servidor (Len=194 ). O servidor não gostou dos dados e fechou a conexão. Potencialmente, o cliente não está configurado corretamente para se comunicar com o servidor ou vice-versa, por exemplo, uma incompatibilidade SSL / TLS.

Se você tiver acesso, sugiro examinar os logs no servidor para ver se ele registrou o que não gostou nos dados do cliente.

karyhead
fonte