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

11

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 seja o servidor Linux e 1.2.3.4 seja o servidor de catálogo global.

Se eu tentar usar telnet da 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 as linhas 4 e 5. Apenas imediatamente cai a conexão.

Achei que telnet dos resultados pode ser um pouco enganador (já que não é apropriado para qualquer tipo de comunicação segura), então coletei uma captura de pacote da tentativa real de conexão do appliance (usando o programa que exige LDAPS) .

Veja o que vejo (novamente, os IPs e as 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, por favor, perdoe minha ignorância ... Eu vejo o aperto de mão de três vias ocorrendo nos pacotes 1-3. Isso faz sentido. O que está acontecendo no pacote # 4 embora? O que significa [PSH, ACK] ? Isso parece um reconhecimento redundante desnecessário. Os dados reais estão sendo enviados neste quarto pacote? Ou isso é uma continuação estranha do aperto de mão?

    
por Mike B 22.07.2014 / 19:34

2 respostas

22

PSH é um sinalizador de push: link

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

O sinalizador de envio geralmente significa que os dados foram enviados enquanto substitui um atraso de eficiência do TCP embutido, como o Algoritmo de Nagle ou Agradecimentos atrasados .

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

No Linux, isso é feito com setsockopt() flags TCP_QUICKACK e TCP_NODELAY . Veja man 7 socket para mais informações.

    
por 22.07.2014 / 22:47
4

@DarkMoon explicou o que significa o sinalizador PSH. Em relação aos seus dados, o estabelecimento da conexão é concluído (handshake de 3 vias) e, em seguida, sim, o cliente enviou 194 bytes de dados para o 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. uma incompatibilidade de SSL / TLS.

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

    
por 25.07.2014 / 00:15

Tags