web-dev-qa-db-fra.com

Que fait [PSH, ACK] pendant ma connexion à un serveur de catalogue global?

Un de mes serveurs Linux essaie d'établir une connexion LDAPS à un serveur de catalogue global et la connexion est abandonnée (probablement par le côté GC).

Pour les besoins de la discussion, disons que 1.1.1.1 est le serveur Linux et 1.2.3.4 est le serveur de catalogue global.

Si j'essaie d'utiliser telnet depuis la boîte Linux, je vois:

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

Il n'y a pas de délai entre les 4e et 5e lignes. Il abandonne immédiatement la connexion.

Je pensais que les résultats de telnet pouvaient être un peu trompeurs (car ils n'étaient en fait pas appropriés pour tout type de communication sécurisée), j'ai donc collecté une capture de paquets de la tentative de connexion réelle de l'appliance (en utilisant le programme réel nécessitant LDAPS) .

Voici ce que je vois (encore une fois, les adresses IP et les ports source ont été renommés pour protéger les innocents):

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

Je suis un peu rouillé avec TCP/IP, alors pardonnez mon ignorance ... Je vois la prise de contact à trois avec les paquets 1 à 3. Ça a du sens. Mais que se passe-t-il dans le paquet n ° 4? Qu'est-ce que [PSH, ACK] signifier? Cela semble être une reconnaissance redondante inutile. Les données réelles sont-elles envoyées dans ce 4e paquet? Ou est-ce une étrange continuation de la poignée de main?

15
Mike B

PSH est un indicateur Push: http://ask.wireshark.org/questions/20423/pshack-wireshark-capture

L'indicateur Push indique à la pile réseau du récepteur de "pousser" les données directement vers le socket de réception, et de ne plus attendre de paquets avant de le faire.

L'indicateur Push signifie généralement que des données ont été envoyées tout en remplaçant un délai d'efficacité intégré TCP, tel que Algorithme de Nagle ou Remerciements différés .

Ces retards rendent TCP la mise en réseau plus efficace au prix d'une certaine latence (généralement autour de quelques dizaines de millisecondes). Une application sensible à la latence ne veut pas attendre les retards d'efficacité de TCP, donc l'application les désactivera généralement, provoquant l'envoi des données le plus rapidement possible avec un ensemble d'indicateurs Push.

Sous Linux, cela se fait avec la setsockopt() drapeaux TCP_QUICKACK et TCP_NODELAY. Voir man 7 socket pour plus d'informations.

24
DarkMoon

@DarkMoon a expliqué ce que signifie le drapeau PSH. En ce qui concerne vos données, l'établissement de la connexion se termine (prise de contact à 3 voies), puis, oui, le client a envoyé 194 octets de données au serveur (Len=194). Le serveur n'a pas aimé les données et a fermé la connexion. Potentiellement, le client n'est pas configuré correctement pour communiquer avec le serveur ou vice versa, par exemple une incompatibilité SSL/TLS.

Si vous y avez accès, je suggère d'examiner les journaux sur le serveur pour voir s'il enregistre ce qu'il n'a pas aimé des données du client.

5
karyhead