Les SYN Retry ont été repoussés à Firefox 6, suite à problème de stabilité. (En d'autres termes, ils sont retirés d'Aurora et laissés dans Nightly)
Comme je n'en avais pas parlé jusqu'à présent, j'en profite.
Le problème
Dans un réseau ayant des pertes de paquets (packet loss) sur la couche de transport (TCP dans notre cas), il peut y avoir des temps importants d'établissement de la connexion.
Prenons l'exemple d'un réseau avec un taux de pertes de paquets de 0.5 % (ce qui peut paraître peu). Cela signifie qu'1 paquet sur 200 est perdu. Or, lors de chaque établissement d'une connexion, qui comporte l'échange de 5-6 messages, si le message SYN est perdu (ce qui arrive 1 fois toutes les 200 connexions, soit toutes les 30-40 sites au maximum) le partie opposée n'y répondra pas. L'émetteur attendra qu'un certain temps (un
timeout) ait eu lieu avant de le renvoyer. Ce timeout est fixé par le système (qui contrôle la pile TCP/IP et donc la couche du protocole) et est de l'ordre de… 3 secondes.
Ainsi, dans un tel réseau, une fois toutes les 200 connexions, soit tous les 30-40 sites, il faut plus de 3 secondes pour ouvrir la page. Autant dire une éternité.
La solution
L'idée est d'ouvrir 2 connexions vers le site et de prendre la première qui est prête. Dans notre réseau à 0.5 % de pertes, on passe d'1 connexion sur 200 qui prend 3 s à 1 connexion sur 40'000, soit tous les 900-1600 sites sur lesquels on se rend, ce qui est plus acceptable.
C'est, en très gros, ce que fait le patch. Il reste encore quelques soucis de stabilité, rien de grave, mais le temps restant avant le passage de Firefox 5 en mode bêta imposait de s'octroyer un peu de temps supplémentaire.
Bug 623948 — Re-Implement HTTP Connection Acceleration (i.e. Syn Retry)
Bug 651635 — Security Review of SYN retry
Bug 654201 — ASSERTION: Invalid start index: 'count == 0 || start < Length()' browser_bug581076.js browser_searching.js browser_bug618502.js browser_uninstalling.js (
le bug problématique)
Bug 655190 — Backout syn retry from aurora-5