Hai due domande principali qui:
1.
In senso stretto IPv4, è effettivamente possibile l'esaurimento delle porte?
Sì. Prendiamo, ad esempio, un router di bilanciamento del carico che invia tutte le connessioni a un indirizzo IP NAT. È probabile che ciò accada quando hai molti SRC IP
è connettersi al collo di bottiglia di un singolo DST IP
.
Ciò significa che il tuo server web potrebbe avere una serie di connessioni come:
[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
e va benissimo. Tuttavia, se tutti gli "indirizzi esterni" fossero uguali, ciò potrebbe causare un problema (ad es. "grande router che esegue NAT <---> server con un indirizzo IP").
Se dovessi postulare il motivo per cui l'esaurimento temporaneo delle porte non è un problema comune, suggerirei che è perché ogni porta richiede un servizio di ascolto e risorse sufficienti per rispondere:un'altra risorsa (memoria, CPU) è normalmente un collo di bottiglia prima.
Tuttavia, personalmente ho riscontrato alcuni problemi di esaurimento delle porte quando lavoravo presso un'azienda di bilanciamento del carico.
2. Perché una porta utilizzata può presentare un problema per un servizio in ascolto?
"Il che consente l'uso di porte temporanee da 1024-65535, che se ho servizi che si collegano alla porta 3306 (mySQL, per esempio), a volte non si avviano perché la porta è in uso."
Il server mySQL non può collegarsi a quella porta se è in uso, ad esempio da localhost:3306 o su tutte le interfacce. Ad esempio, vedi la riga 0.0.0.0:80 nel seguente netstat
uscita?
[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
Ciò significa che la porta 80 è in ascolto su tutti interfacce locali al server. Se un altro processo contiene la porta 80 prima del mio nginx
il server si avvia, nginx
non sarà in grado di assumere il controllo di quella porta e probabilmente fallirà la procedura di avvio.
Normalmente, la porta 3306 va bene perché i servizi di ascolto hanno porte (o intervalli) predefiniti richiesti dalla macchina host, ad es. porta 80 e 443 per i server web.