Bonjour,

J'ai un échange TCP entre 2 machines qui passe au travers d'un firewall. Dans 99% des cas, l'échange se passe bien mais parfois (1%), cela se passe mal lors l'ouverture de la session TCP.

Les traces faites avec snoop (j'ai juste maquillé les adresses IP) sur HOST_B (le serveur TCP sur le port 8082)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
#1 HOST_A -> HOST_B TCP D=8082 S=62947 Syn Seq=3031676240 Len=0 Win=5840 Options=<mss 1380,sackOK,tstamp 1807742446 0,nop,wscale 7>
#2 HOST_A -> HOST_B TCP D=8082 S=62947 Syn Seq=3031676240 Len=0 Win=5840 Options=<mss 1380,sackOK,tstamp 1807745446 0,nop,wscale 7>
#3 HOST_B -> HOST_A TCP D=62947 S=8082 Ack=3031676241 Seq=933815720 Len=0 Win=49248 Options=<nop,nop,tstamp 804453167 1807742446>
#4 HOST_B -> HOST_A TCP D=62947 S=8082 Syn Ack=3031676241 Seq=933815719 Len=0 Win=49248 Options=<nop,nop,tstamp 804453206 1807742446,mss 1460,nop,wscale 0,nop,nop,sackOK>
Quelques explications au sujet de ces 4 paquets :
  • Le paquet #1 (ouverture de session TCP) envoyé par HOST_A n’est pas acquitté par HOST_B
  • Le paquet #2 est renvoyé par le HOST_A (3 secondes après #1) suite à un timeout de non acquittement
  • Le paquet #3 est envoyé par HOST_B à HOST_A (immédiatement après #2)
  • Le paquet #4 (d’acquittement) est envoyé par HOST_B à HOST_A (immédiatement après #3) mais ne traverse pas le firewall. Il est bien sur l'interface d'entrée du firewall mais pas sur l'interface de sortie du firewall (confirmé avec des traces réseau).


Maintenant, la grosse question, cet échange est il valide ?
Je me pose des questions au sujet des SEQ number et ACK number ?
Je me demande aussi l'intérêt du paquet #3, quel est son rôle ?

  • Si cet échange est valide, le firewall placé entre HOST_A et HOST_B n'a pas le droit de dropper le paquet #4 et il y a probablement un bug dans le firewall
  • Si cet échange est invalide, il y a un bug dans la pile IP de HOST_B


Si quelqu'un a des idées, je suis preneur, merci d'avance.