Sie haben hier zwei Hauptfragen:
1.
Ist die Port-Erschöpfung im strengen Sinne von IPv4 tatsächlich möglich?
Ja. Nehmen Sie zum Beispiel einen Load-Balancing-Router, der alle Verbindungen an eine NAT-IP-Adresse sendet. Dies ist wahrscheinlich der Fall, wenn Sie viele SRC IP
haben s Verbindung zum Engpass eines einzelnen DST IP
.
Das bedeutet, dass Ihr Webserver eine Reihe von Verbindungen haben könnte wie:
[email protected]:~# netstat -pnt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 173.200.1.18:80 10.100.1.100:49923 ESTABLISHED 13939/nginx: worker
tcp 0 0 173.200.1.18:80 10.200.1.200:10155 ESTABLISHED 13939/nginx: worker
tcp 0 0 173.200.1.18:80 10.10.1.10:14400 ESTABLISHED 13939/nginx: worker
tcp 0 0 173.200.1.18:80 10.10.1.10:50652 ESTABLISHED 13939/nginx: worker
tcp 0 0 173.200.1.18:80 10.20.1.20:57554 ESTABLISHED 13939/nginx: worker
und das ist vollkommen in Ordnung. Wenn jedoch alle „Fremdadressen“ gleich sind, kann dies ein Problem verursachen (z. B. „großer Router, der NAT ausführt <---> Server mit einer IP-Adresse“).
Wenn ich postulieren müsste, warum kurzlebige Porterschöpfung kein häufiges Problem ist, würde ich vorschlagen, dass dies daran liegt, dass jeder Port einen lauschenden Dienst und genügend Ressourcen zum Antworten benötigt – eine andere Ressource (Speicher, CPU) ist normalerweise zuerst ein Engpass.
Allerdings bin ich persönlich auf ein paar Port-Erschöpfungsprobleme gestoßen, als ich bei einem Load-Balancing-Unternehmen gearbeitet habe.
2. Warum kann ein verwendeter Port ein Problem für einen Überwachungsdienst darstellen?
"Was die Verwendung von ephemeren Ports von 1024-65535 zulässt, dass, wenn ich Dienste habe, die an Port 3306 gebunden sind (z. B. mySQL), sie manchmal nicht gestartet werden können, weil der Port verwendet wird."
Der mySQL-Server kann sich nicht an diesen Port binden, wenn er verwendet wird - beispielsweise von localhost:3306 oder auf allen Schnittstellen. Siehe beispielsweise die Zeile 0.0.0.0:80 im folgenden netstat
Ausgabe?
[email protected]:~# netstat -lnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 964/php-fpm.conf)
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1660/mysqld
tcp 0 0 0.0.0.0:842 0.0.0.0:* LISTEN 1317/inetd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13938/nginx
Das bedeutet, dass Port 80 alle überwacht lokale Schnittstellen zum Server. Wenn ein anderer Prozess Port 80 vor meinem nginx
hält Server startet, nginx
wird nicht in der Lage sein, die Kontrolle über diesen Port zu übernehmen und wird wahrscheinlich beim Startvorgang fehlschlagen.
Normalerweise ist Port 3306 in Ordnung, da Listening-Dienste vordefinierte Ports (oder Bereiche) haben, die von der Hostmaschine angefordert werden – z. Port 80 und 443 für Webserver.