Linuxでは65536を超えるTCP接続


11

Linux(RedHat5)ボックスから65536を超える発信TCP接続をセットアップしようとするのに行き詰まっています。

十分なファイル記述子を許可するために、送信ボックスと受け入れボックスの両方をすでに構成しています。

受け入れ側に問題があるとは思いません-複数のターゲットボックスがあり、それぞれに複数のIPアドレスがあり、複数のポートを使用しています。

発信側で、IPアドレスごとの制限に達しているとは思わない-複数のIPアドレスとポートを使用しています(複数のIPアドレスごとにポート30,000〜60,000から接続を開いています)。

Linuxカーネルの調整可能なパラメーターが不足していますか?または、TCPの基本的な制限はありますか?

失敗は、接続を開くための私のアプリがconnect()コールでハングしていることです。

NickB助けてくれてありがとう


あなたはどの限界を打ちましたか?その制限に達したときのエラーは何でしたか?
番号

connect()がハングします。
NickB

1
ソースIPと宛先IPの間には何がありますか?一部のデバイスのNATテーブルがいっぱいになる可能性がありますか?

回答:


10

これは、誰かがボックスから1,000,000を超えるアウトバウンドを受け取ったブログです。

  • Richard Jones、MetaBrew.com、2008年11月4日、Mochiwebを使用した100万ユーザーのCometアプリケーション、パート3、セクション100万までここにアーカイブされています。)

パート1では、範囲を「1024 65535」に設定します。つまり、65535-1024 = 64511の非特権ポートが使用可能であることを意味します。それらの一部は他のプロセスによって使用されますが、ポートが不足するため、64511クライアント接続を超えることはありません。

...

それでは、それぞれから62,000の接続を作成することを目的として、17の新しいIPアドレスを起動して、合計で1,054,000の接続を取得します


ありがとう!それは私にとってはうまくいきます。具体的には、からのsysctl seetings metabrew.com/article/...は 65,536 TCP接続上のセットアップに私を可能にしました。
NickB 2010

1

TCPプロトコルは、宛先ポートと送信元ポートの両方に16ビットのみを使用します。Linuxであっても、一度に65536を超えるポートを開く方法はありません。


3
これは、単一のIPアドレスにのみ当てはまります。複数使用する場合、各IPアドレスは65536個のポートを開くことができる必要があります。
ジョブ

1
正解です。発信接続ごとにローカルポートが必要です。IIRC、すでに使用中のポートはこれらの接続に使用できません。したがって、たとえば、telnet / ftp / httpを実行している場合、21/23/80の番号が付いたポートはローカルポートとして使用できません。
KevinDTimm、

1
同じポートに複数の接続を持つこともできます。
gtrak

@ジョブ-はい、TCPはIPの上にスタックされているので、私は1つのIPアドレスについてのみ話します。

4
各接続は、リモートアドレスとポート、およびローカルアドレスとポートで構成されるタプルによって識別されます。したがって、異なるリモートホストから65536を超えるインバウンド接続が可能です。>ホスト上の単一インターフェースからの65536アウトバウンド接続は不可能であり、常にいくつかのポートが使用されているため、とにかくそれよりもいくらか少なく制限されます。
Len Holgate、2010

0

このコンテキストでは、「単一のインターフェース」とは、単一のIPアドレスが割り当てられた単一のネットワークケアを意味します。各送信TCP接続は別々のポートにバインドされているため、この例は不可能です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.