主な質問が 2 つあります:
1.
<ブロック引用>厳密にIPv4で言えば、実際にポートの枯渇はありえますか?
はい。たとえば、すべての接続を NAT IP アドレスに送信する負荷分散ルーターを考えてみましょう。これは、 SRC IP
が多い場合に発生する可能性があります 単一の DST IP
のボトルネックに接続している .
これは、ウェブサーバーが次のような接続を多数持つ可能性があることを意味します:
[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
それはまったく問題ありません。ただし、すべての「外部アドレス」が同じである場合、問題が発生する可能性があります (たとえば、「NAT を実行する大きなルーター <---> 1 つの IP アドレスを持つサーバー」)。
一時的なポートの枯渇が一般的な問題ではない理由を仮定する必要がある場合は、すべてのポートがリッスン サービスと応答するのに十分なリソースを必要とするためだと思います。通常、別のリソース (メモリ、CPU) が最初にボトルネックになります。
ただし、負荷分散会社で働いているときに、個人的にいくつかのポートの枯渇の問題に遭遇しました。
2.使用中のポートがリスニング サービスに問題を引き起こすのはなぜですか?
<ブロック引用>「これにより、1024 ~ 65535 のエフェメラル ポートを使用できるため、ポート 3306 (たとえば、mySQL) でバインドするサービスがある場合、ポートが使用中であるために起動に失敗することがあります。」
使用中の場合、mySQL サーバーはそのポートにバインドできません (たとえば、localhost:3306 またはすべてのインターフェイスで)。たとえば、次の netstat
の 0.0.0.0:80 行を参照してください。 出力?
[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
これは、ポート 80 が すべて でリッスンしていることを意味します サーバーに対してローカルなインターフェイス。 nginx
の前に別のプロセスがポート 80 を保持している場合 サーバーの起動、nginx
はそのポートを制御できず、起動手順に失敗する可能性があります。
通常、リスニング サービスには、ホスト マシンから要求される定義済みのポート (または範囲) があるため、ポート 3306 で問題ありません。ポート 80 と 443 は Web サーバー用です。