C'est pour réduire les conflits entre connect()
et bind()
(apparu dans Linux 4.2; Jessie a 3.16 et Stretch a 4.9):
commit 07f4c90062f8fc7c8c26f8f95324cbe8fa3145a5
Auteur: Eric Dumazet
Date: dim.24 mai 14:49:35 2015 -0700
tcp / dccp: essayez de ne pas épuiser ip_local_port_range dans connect ()
Un problème de longue date sur les serveurs occupés est le minuscule port TCP disponible
plage (/ proc / sys / net / ipv4 / ip_local_port_range) et la valeur par défaut
allocation séquentielle des ports source dans l'appel système connect ().
Si un hôte a beaucoup de sessions TCP actives, les chances sont
très élevé que tous les ports sont utilisés par au moins un flux,
et les tentatives de liaison (0) suivantes échouent ou doivent analyser une grande partie de
espace pour trouver un emplacement.
Dans ce patch, j'ai changé le point de départ dans __inet_hash_connect ()
de sorte que nous essayons de favoriser les ports pairs [1], en laissant les ports impairs pour bind ()
utilisateurs.
Nous effectuons toujours une recherche séquentielle, il n'y a donc aucune garantie, mais
si les cibles connect () sont très différentes, le résultat final est que nous quittons
plus de ports disponibles pour bind (), et nous les répartissons sur toute la plage,
réduction du temps pour connect () et bind () pour trouver un emplacement.
Cette stratégie ne fonctionne bien que si / proc / sys / net / ipv4 / ip_local_port_range
est pair, c'est-à-dire si les valeurs de début / fin ont une parité différente.
Par conséquent, par défaut / proc / sys / net / ipv4 / ip_local_port_range a été remplacé par
32768 - 60999 (au lieu de 32768 - 61000)
Il n'y a aucun changement sur les aspects de sécurité ici, seulement un mauvais hachage
les régimes pourraient éventuellement être touchés par ce changement.
[1]: La propriété impair / pair dépend de la parité des valeurs ip_local_port_range
Vous pouvez également souhaiter voir la validation de suivi 1580ab63fc9a03593072cc5656167a75c4f1d173 .