¿Qué está haciendo [PSH, ACK] durante mi conexión a un servidor de catálogo global?

14

Un servidor Linux mío está tratando de establecer una conexión LDAPS con un servidor de catálogo global y la conexión se está cayendo (presumiblemente por el lado del GC).

Para fines de discusión, digamos que 1.1.1.1 es el servidor Linux y 1.2.3.4 es el servidor de catálogo global.

Si trato de usar telnetdesde el cuadro de Linux, veo:

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

No hay demora entre las líneas 4 y 5. Simplemente cae inmediatamente la conexión.

Pensé que los telnetresultados podrían ser un poco engañosos (ya que en realidad no es apropiado para ningún tipo de comunicación segura), así que recopilé una captura de paquetes del intento de conexión real del dispositivo (usando el programa real que requiere LDAPS).

Esto es lo que veo (nuevamente, las direcciones IP y los puertos de origen han sido renombrados para proteger a los 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

Estoy un poco oxidado con TCP / IP, así que perdone mi ignorancia ... Veo el apretón de manos de tres vías en los paquetes 1-3. Eso tiene sentido. ¿Qué está pasando en el paquete # 4? Que [PSH, ACK]significa Esto parece un reconocimiento redundante que es innecesario. ¿Se están enviando datos reales en este cuarto paquete? ¿O es esta una continuación extraña del apretón de manos?

Mike B
fuente

Respuestas:

24

PSHes una bandera de inserción: http://ask.wireshark.org/questions/20423/pshack-wireshark-capture

El indicador Push le dice a la pila de red del receptor que "envíe" los datos directamente al socket receptor y que no espere más paquetes antes de hacerlo.

El indicador Push generalmente significa que los datos se han enviado al anular un retraso de eficiencia TCP incorporado, como el Algoritmo de Nagle o los Agradecimientos retrasados .

Estos retrasos hacen que las redes TCP sean más eficientes a costa de cierta latencia (generalmente alrededor de unas pocas decenas de milisegundos). Una aplicación sensible a la latencia no quiere esperar los retrasos de eficiencia de TCP, por lo que la aplicación generalmente los deshabilitará, haciendo que los datos se envíen lo más rápido posible con un conjunto de indicadores Push.

En Linux, esto se hace con las setsockopt()banderas TCP_QUICKACKy TCP_NODELAY. Ver man 7 socketpara más información.

Luna oscura
fuente
5

@DarkMoon explicó lo que significa la bandera PSH. Con respecto a sus datos, se completa el establecimiento de la conexión (protocolo de enlace de 3 vías), luego, sí, el cliente envió 194 bytes de datos al servidor ( Len=194). Al servidor no le gustaron los datos y cerró la conexión. Potencialmente, el cliente no está configurado correctamente para comunicarse con el servidor o viceversa, por ejemplo, un desajuste SSL / TLS.

Si tiene acceso, le sugiero que examine los registros en el servidor para ver si registró lo que no le gustó de los datos del cliente.

karyhead
fuente