[解決済み] TCP_NODELAYとTCP_CORKはいつ使うべきですか?
質問
どちらもNagleのアルゴリズムを無効化するものだと理解しました。
それぞれどのような場合に使うべきですか・使ってはいけないですか?
どのように解決するのですか?
まず、両方ともNagleのアルゴリズムを無効にしないことです。
Nagleのアルゴリズムは、ワイヤ上の小さなネットワークパケットをより多く削減するためのものです。そのアルゴリズムは、データが制限値(通常はMSS)より小さい場合、以前に送信したパケットのACKを受信するまで待ち、その間にユーザからのデータを蓄積します。そして、蓄積されたデータを送信します。
if [ data > MSS ]
send(data)
else
wait until ACK for previously sent data and accumulate data in send buffer (data)
And after receiving the ACK send(data)
これは、telnetのようなアプリケーションで役に立ちます。しかし、ACKを待つことは、ストリーミングデータを送信する際にレイテンシーを増加させるかもしれません。さらに、受信者が「遅延ACKポリシー」を実装している場合、一時的なデッドロックの状況を引き起こします。このような場合、Nagleのアルゴリズムを無効にすることがより良い選択肢となります。
そのため、TCP_NODELAYはNagleのアルゴリズムを無効にするために使用されます。
TCP_CORK は積極的にデータを蓄積します。ソケットでTCP_CORKが有効な場合、バッファが一定量に達するまでデータを送信しません。Nagleのアルゴリズムと同様に、ユーザーからのデータを蓄積しますが、ACKを受信するまでではなく、バッファが一定量に達するまで蓄積します。これは、複数のデータブロックを送信するときに便利です。しかし、TCP_CORKを使用している間は、より注意する必要があります。
2.6 カーネルまでは、これらのオプションは互いに排他的でした。
2.6カーネルまでは、これらのオプションは相互に排他的ですが、それ以降のカーネルでは、これら両方が一緒に存在することができます。この場合、TCP_CORKがより優先されます。
参照
関連
-
Linux Mintのシステムバージョン情報はどこにありますか? Linux Mint のシステム情報を見るためのヒント
-
ubuntu 12.04 eclipse でプログラム g++ がパスに見つからなかったと報告される。
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?
-
[解決済み] フォルダとそのサブフォルダ/ファイルのパーミッションを一括で変更する方法
-
[解決済み] Linux で grep を使ってファイル名だけを表示するにはどうしたらいいですか?
-
[解決済み] php.iniはどこにありますか?
-
[解決済み] プッシュするたびにGitがユーザー名を尋ねてくる
-
[解決済み】Dockerコンテナのファイルシステムを調査する
-
[解決済み】straceはどのように使うべきですか?
-
[解決済み】SO_REUSEADDRとSO_REUSEPORTはどう違うのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
deepin20のサブネットマスクはどこですか?deepinのサブネットマスクを表示するためのヒント
-
Linuxでファイルパーミッションを与えるには?Linuxでファイルに実行可能なパーミッションを追加するためのヒント
-
deepinシステムのバージョン番号を見るには?deepinシステムのバージョン情報を見るコツ
-
Linux Mint システムの背景画像を変更する方法は? Linuxでデスクトップの背景を変更するためのヒント
-
Linux Mintで入力メソッドを削除する方法は?Linux Mintで冗長な入力メソッドを削除するためのヒント
-
LinuxでJenkinsプラグインのインストールが遅い場合の解決策
-
Kali Linuxのマウスを左利き用に設定する方法は?Linuxマウス左利き操作選択方法
-
Apache の一般的な設定エラー
-
[解決済み] ビーコン待ちでハングアップしたリーバー
-
[解決済み] libstdc++.so.5: 共有オブジェクトファイルを開くことができない - しかしライブラリはインストールされており最新である