Es ist, um Konflikte zwischen connect()
und zu reduzieren bind()
(erschien in Linux 4.2; Jessie hat 3.16 und Stretch hat 4.9):
Commit 07f4c90062f8fc7c8c26f8f95324cbe8fa3145a5
Verfasser: Eric Dumazet
Datum: So 24. Mai 14:49:35 2015 -0700
tcp / dccp: versuche ip_local_port_range in connect () nicht zu erschöpfen
Ein langjähriges Problem auf ausgelasteten Servern ist der winzige verfügbare TCP-Port
Bereich (/ proc / sys / net / ipv4 / ip_local_port_range) und die Standardeinstellung
Sequentielle Zuweisung von Quellports im Systemaufruf connect ().
Wenn ein Host viele aktive TCP-Sitzungen hat, sind die Chancen groß
sehr hoch, dass alle Ports von mindestens einem Fluss verwendet werden,
und nachfolgende Bindungsversuche (0) schlagen fehl oder müssen einen großen Teil von scannen
Platz, um einen Steckplatz zu finden.
In diesem Patch habe ich den Startpunkt in __inet_hash_connect () geändert.
so dass wir versuchen, gerade [1] Ports zu bevorzugen und ungerade Ports für bind () zu lassen
Benutzer.
Wir führen immer noch eine sequentielle Suche durch, daher gibt es aber keine Garantie
Wenn die Ziele von connect () sehr unterschiedlich sind, verlassen wir sie
Weitere Ports stehen für bind () zur Verfügung, und wir verteilen sie über den gesamten Bereich.
Verringern der Zeit für connect () und bind (), um einen Steckplatz zu finden.
Diese Strategie funktioniert nur gut, wenn / proc / sys / net / ipv4 / ip_local_port_range
ist gerade, dh wenn Start- / Endwerte unterschiedliche Parität haben.
Daher wurde der Standardwert / proc / sys / net / ipv4 / ip_local_port_range in geändert
32768 - 60999 (anstelle von 32768 - 61000)
An Sicherheitsaspekten ändert sich hier nichts, nur ein schlechtes Hashing
Systeme könnten letztendlich von dieser Änderung betroffen sein.
[1]: Die ungerade / gerade Eigenschaft hängt von der Parität der ip_local_port_range-Werte ab
Möglicherweise möchten Sie auch das Follow-up- Commit 1580ab63fc9a03593072cc5656167a75c4f1d173 sehen .