4

エフェメラル ポートの数を 2 倍にして、16 ビットの制限を回避する方法はありますか? eth0 を介して仮想イーサネット インターフェイスを作成しようとしましたが、それによって制限が解除されることを願っています。アプリケーションはアウトバウンド トラフィックで新しい仮想 IP を利用していますが、依然として同じエフェメラル ポート制限に達しているようです。仮想ポートには、物理​​インターフェイスのポートへの 1 対 1 のマッピングがあると思います。

ifconfig eth0:1 10.10.10.210 ネットマスク 255.255.255.192 ifconfig eht0:2 10.10.10.211 ネットマスク 255.255.255.192

追加の NIC を追加せずに、Linux のエフェメラル ポートの総数を 2 倍にする方法を教えてください。

(参考までに、ulimit/max open file を増やし、ポート範囲を変更し、tcp リサイクル/タイムスタンプを有効にし、tcp fin タイムアウトを減らしてみました...このプロキシ マシンには 65k 以上のポートが必要だと思います。)

4

4 に答える 4

1

これは、ネットワーク プロトコルの制限です。たとえば、TCP と UDP の両方に 16 ビットの送信元ポートと宛先ポートがあります。ポートの数を増やすことができたとしても、誰もそれらに対処できません。

于 2013-09-09T15:08:51.137 に答える
0

方法はあるようですが、無料ではありません。「接続前にバインド」と呼ばれます。この短いが内容の濃い記事を参照してください。非常にうまくまとめられています。

複数の仮想 IP を持つことは始まりにすぎません。リンクされた記事を引用:

Linux では、エフェメラル ポート範囲はグローバル リソースであり、IP アドレスに対してローカルな特定の設定ではありません。

それは悪いことであり、適切な設定をほとんど行わずに開始位置を改善し (ほとんどの設定はすでに見つけています)、巧妙なソケット割り当て手法を使用してグローバル制限を回避する必要があります。その結果、すべての発信 IP を手動で制御することになります。これは、従来の「接続」方法を使用するシステム上の他のアプリにもうまく対応していないようです。

于 2015-03-23T20:24:06.867 に答える
0

65535 の制限を超えたい場合、エフェメラル ポートのバインドに 0 を使用できないことが判明しました。代わりに、明示的なポート番号を使用する必要があります。

また、オンにtcp_tw_reuseすると役立つ場合があります: http://krenel.org/tcp-time_wait-and-ephemeral-ports-bad-friends.html

于 2014-06-20T10:01:05.467 に答える