Lors du debugging d'un comportement étrange avec un équilibreur de charge Azure, j'ai remarqué que ma stack locale Debian Stretch TCP établissait uniquement des connections TCP avec un port pair. Je ne démarre pas un protocole TCP avec un port source impair. Est-ce voulu?
C'est pour réduire la contention entre connect()
et bind()
(apparu sous Linux 4.2, Jessie a 3.16 et Stretch a 4.9):
commit 07f4c90062f8fc7c8c26f8f95324cbe8fa3145a5 Auteur: Eric Dumazet Date: Sun May 24 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 servers occupés est le petit port TCP disponible range (/ 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 less un stream, et les tentatives suivantes de binding (0) échouent ou doivent parsingr une grande partie de espace pour find une fente. Dans ce patch, j'ai changé le sharepoint départ dans __inet_hash_connect () de sorte que nous essayons de favoriser même les ports [1], en laissant des ports impairs pour bind () users. Nous effectuons toujours une search 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 gamme, time d'abaissement pour connect () et bind () pour find un slot. Cette stratégie ne fonctionne correctement 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, la valeur par défaut / proc / sys / net / ipv4 / ip_local_port_range a été changée 32768 - 60999 (au lieu de 32768 - 61000) Il n'y a pas de changement sur les aspects de security ici, seulement un mauvais hachage les régimes pourraient être éventuellement affectés par ce changement. [1]: La propriété impaire / paire dépend de la valeur ip_local_port_range parité
Vous voudrez peut-être également voir le suivi commit 1580ab63fc9a03593072cc5656167a75c4f1d173 .