カーネルソースをすぐに掘り下げることなく、できる限り多くの調査を行いました。この件に関しては大量の偽情報/不正確な情報があるようですので、これが私や他の人たちの質問に答えてくれることを願っています。
厳密に言えばIPv4と言えば、ポートの枯渇は実際に可能ですか?説明させてください:
- 使用可能な65535のポートがあるようです。0は使用できません。
- ポートの枯渇には(src ip、src port、dst ip、dst port)タプルが一意である必要があることを読みました。
- 明確にするために、sysctl net.ipv4.ip_local_port_range設定を介してエフェメラルポートを100%使用できると仮定します。
そしてこれが問題です:これはどのように機能するのですか?
- 127.0.0.1:(x)から127.0.0.1:80への65k接続が可能
- 127.0.0.1:(x)から127.0.0.1:555への65k接続が可能です
- 基本的にもう一度、質問は(srcip、srcport、dstip、dstport)は一意である必要がありますか?
- 私は以上の65000個の接続開くことができませんでしたから IPへのIP「A」「B」、ポート「N」を
- 同様に、単一のIPはxxxx:80で私のWebサーバーへの65kを超える接続を開くことができませんでしたが、異なるソースIPからのものである限り、全体で65kを超える接続をサポートできますか?
最後に、(発信)一時ポートと待機している着信ポートについて少し混乱しています。接続が確立されると、接続の両側がピアであり、同等であることに気付きますが、それが起こる前に:
たとえば、実際に(srcip、srcport、dstip、dstport)タプルが一意である必要がある場合、なぜ有効にすると次のようになります。
net.ipv4.ip_local_port_range = 1024 65535
これにより、1024〜65535のエフェメラルポートを使用できるようになります。ポート3306(mySQLなど)にバインドするサービスがある場合、ポートが使用中であるため、サービスが開始できないことがあります。
これは次の事実に関連していますか?(そしてこれは私が検証されることを求めている声明です):
- (srcip、srcport、dstip、dstport)は、ポート範囲が1〜65535の接続ごとに一意である必要があります(OSの一時ポートの使用に注意を払っていません)
- ただし、バインドするソケットの場合、(srcip、srcport、*、*)と見なすことができます。または別の言い方をすると、バインドするために何らかの理由でIPがそのポートを使用してはいけませんか?
上記の動作を確認できます。つまり、上記の正確なsysctl行を使用します。そのため、OSがそのポートを使用していると想定しているため、まれに再起動に失敗するため、mySQLを1024未満のポートに移動しました(3306)一時的なポートの場合。