新しいTCP接続を作成するのが高価であると見なされるのはなぜですか?


9

新しいTCP接続の作成が高価なタスクと見なされる理由がわかりません。基本的に、新しい接続のセットアップとは、TCPの3ウェイハンドシェイクを実行することを指します。つまり、2つのパケットを送信し、1つを受信して​​います。数千の(データ)パケットが続くことを考えると、ハンドシェイクは高価な部分にはなり得ません。それをできる?


おそらく、接続のCPUとメモリの使用が原因ですか?
joeqwerty 2012

@joeqwerty新しいTCP接続は通常、サーバーなどに新しいプロセス/スレッドを作成することも意味しますが、それはTCPが原因ではなく、アプリケーションが原因です。

場合は、データパケットの数千人は、次のとおりhandshaksは高価な部分ではありません。しかし、各データチャンクに新しいTCP接続を使用しないのはなぜですか?新しいTCP接続の作成にはコストがかかるためです。そのため、1つの接続を確立し、それを数千のデータのチャンクに使用します。
David Schwartz、

1
また、新しい接続の作成がTCPハンドシェイクだけに限定されない場合があることも考慮してください。たとえば、SSLはさらに、認証と暗号化の詳細に関する多くのネゴシエーションを追加します。
Zoredache 2012

回答:


10

一般的に言えば、TCP接続を開くことは、開いたままにしておくことで既に開いている接続を再利用する機能と比較すると、コストがかかると考えられています。正解です。接続を開くには3パケット/ターンしかかかりませんが、その時間-RTTの3倍-は、すでに開いている接続を再利用するコストをはるかに超えています。これは、0にはるかに近いためです。接続を頻繁に開いたり閉じたりしています。

あなたは確かに正しいですが、アプリケーションが「それをする」ことで表示されるターン数と比較すると、これらの3つのパケットはかなり小さいように見えますが、オプションの比較方法によって異なります。アプリケーションの動作/接続を開く予定の回数。

編集 ただし、UDPとTCPの場合、ここでのCheekaleekは100%正解です。UDPのコネクションレス型操作と比較すると、オーバーヘッドは長期的には非常に大きいです。


1
パケットトレースで見た良い例:再利用されたMySQL接続は、クエリを2〜5ミリ秒で処理できます。一連のElasticSearchクエリは、クエリを17〜25ミリ秒で方向転換します。そのほとんどの時間は、接続設定(初期DNSルックアップを含む)でした。
sysadmin1138

2

確かに、UDPパケットを送信するよりもオーバーヘッドが多く、その後に何が起こるか気にしない。

TCPにはさらに多くのヘッダーデータが付属しており、リソースを消費する接続状態を維持します。

つまり、UDPと比較して、TCPはより高価ですが、高価というのは相対的な用語です。

「TCP接続は女の子の親友ですか???」


5
"TCP connections are a girl's best friend???" いいえ、そうではないです。私は女の子に彼女の誕生日のために何千もの女の子をもらいました、そして彼女がしたことは私のメールを返すのをやめることだけでした。:(
HopelessN00b

2

単にパケットを送受信するだけではありません。追加のメモリを割り当て、セッションが確立されるまで、各ステップで少なくともネットワーク状態テーブルを更新する必要があります。実行される可能性のある追加のセキュリティチェック(ルートスプーフィング保護など)は言うまでもありません。

確立されたセッションのパケットのCPUコストが1ユニットの場合、(特定のオペレーティングシステムについて話しているわけではないため)いくつかの例の数値を使用すると、新しいセッションのコストは、数のコストの10倍または100倍になる場合があります。実行された操作。私が使用したほとんどのハードウェアファイアウォールは、確立されたセッションを処理できるよりも、1秒あたりの桁数が少ない新しい接続を処理できます。

特にSYN-SYN / ACK-ACKはミリ秒単位で発生するため、それほど大きな問題ではありませんが、多くの顧客を抱える大規模なシステムでは、新しいセッションが大きなオーバーヘッドになる可能性があります。


2

トラフィックの量またはタイプは、実際にメモリを割り当てることに関連するコードおよび関連する状態情報の追跡よりもはるかに重要ではありません。これが何を意味するのかを大まかに把握したい場合は、TCPに関連付けられているLinuxカーネルとUDPまたはICMPに関連付けられているコードの量を見てください。信じられないほど大まかな比較では、TCPはUDPで見つかったコードの行数の10倍の値を必要としています。

IPネットワーキングでは、必要な状態維持の量が、スケーラビリティの最も重要な決定要因の1つです。TCPの場合など、管理およびQoSアクションをバッファリングするためのFSMの複雑チェックアウト、これはSYN / ACKにもスライド式窓、シーケンス番号の継続的なメンテナンスだけではなく表現されているエンドポイントのTCPとUDPの同じの固有の欠如を考えます...

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