これはばかげた質問かもしれませんが、私と数人の仲間がTCPの潜在的な制限について議論しています。クライアントをリッスンし(ゲートウェイのように)、単一の接続されたkafkaパブリッシャーを介してすべての接続されたクライアントデータを1つのトピックにルーティングするアプリケーションがあります。
私の仲間の1人は、TCPが送信するすべてのメッセージに対して新しい接続を確立するため、このゲートウェイにとって問題になると言っています(kafkaではなく、基礎となるトランスポートプロトコル自体が問題です)、毎回新しいポートが必要です。これらのクライアントメッセージ(ギガバイト)を送信するレートで、kafkaは読み込むポートを使い果たしますか?
私は数年にわたって開発を行ってきましたが、これについては聞いたことがないので、TCPがどのように機能するかについてのより低いレベルの理解を得たいと思っています。私の理解では、TCP接続を確立すると、その接続はアプリケーションによってタイムアウトになるか、サーバーまたはクライアントによって強制的に閉じられるまで開いたままになります。この接続を介して送信されるデータはストリームであり、3 V(ボリューム、速度、種類)に関係なく新しい接続を開いたり閉じたりしません。
ポートに関する限り、1つのポートがブロードキャストに使用され、内部ファイル記述子ポートは、個々のクライアントの読み取り/書き込みのためにアプリケーションが管理するものです。TCPが書き込むすべてのパケットに対して新しい接続を確立することを理解していません。
この質問が直接的なものではないか、あいまいすぎる場合は、事前におaび申し上げます。私は本当に困惑していて、誰かが私の同僚が言っていることに対して、より多くの文脈を提供できることを望んでいますか?
SO_REUSEADDR
ソケットをより速く閉じるために使用する、一時ポートの範囲を増やすなど。さらにTCP_FASTOPEN
、いくつかのOSレベルのトグルを使用して、TCPの他のよく知られている制限を回避できます。いずれにせよ、テスト対象のワークロードがない場合でも、TCPの制限について議論する意味はありません。