ネットワークって。。。#24(TCPとUDP)
前々回、前回に引き続き、今回も、またまたTCPの話。。。
今回は、ネットワーク利用効率を高める仕組みについて。
今回で、一旦TCPの話は終わりです。。。
Nagleアルゴリズム
TCPでは、送信側に送信すべきデータがあったとしても、そのデータ量が少ない場合、送信を遅らせるという事をします。
これが、Nagleアルゴリズムと呼ばれる処理になります。
具体的には、以下の状態にならないと、データを送信しません。
- すべての送信済データに対し、確認応答が返ってきている場合
- データ量が、最大セグメント長に達した場合
ちなみに、最大セグメント長については、前回のネットワークって。。。#23を参照してくださいね。
つまりは。。。
引越しの例でいうと、
に、引越し屋さんにダンボールを運んでもらうってイメージです。
これって、一見、無駄がなくなって、ネットワークの利用効率が向上するように思えますが、状況によっては、通信の遅延時間が発生することになります。
なので、リアルタイム性を求める処理などについては、このNagleアルゴリズムを無効に設定することができます。
まあ、引越しで、これを無効にしたら、スカスカのダンボールだらけになってしまいますが。。。笑
遅延確認応答
前回のネットワークって。。。#23で、TCPで1回に送信する単位はセグメントっていう単位で、確認応答を待たずに遅れるセグメントの数(サイズ)をウィンドウサイズと呼ぶってことを説明しました。
実は、受信側もこの確認応答をセグメントごとに応答するのではなく、確認応答のタイミングを遅らせる方法がとられています。
具体的には、
- 最大セグメント長の2倍のデータを受信したタイミング
- 0.2秒待っても、次のデータが送られてこない
場合に、確認応答をするというものです。
引越しをした方なら経験があるかもしれませんが、いくつものダンボールを見分けるために、ダンボールに番号を付けて。。。それを一覧化して。。。(私だけかも笑)
で、引越し先に荷物を入れる時に、何番のダンボールが入ったかを一覧でチェックして。。。
でも、このチェック作業、ダンボール1つ入れるたびに、チェックしてたら、効率悪いし、いくつか入ってから、まとめてチェックしますよね。普通は。。。
そんなイメージです。。。多分笑
ピギーバック
これは、キャディバッグ笑
これは、ピギーバック。。。
あれ???笑
実は、↑のピギーバック、全然関係ないわけではないんです。。。
ピギーバックって、背中に乗せるとか、おんぶするとかいう意味があるそうです。
アプリケーションによっては、送信したメッセージに対して、処理をしてその結果を返すものがあります。
例えば、今ご覧になっているこのページ。。。
ブラウザのURL欄(アドレス入力する上の部分)に、http://thmat.hatenablog.com/entry/...
みたいな、URLが入力されていますが、
内部的には、ブラウザが、thmat.hatenablog.comという、Webサーバに対して、
「GET /entry/...」
みたいなコマンドを投げていて、それに対し、Webサーバが、
確認応答に加えて、
「200 OK」
みたいなメッセージを送信しています。
確認応答が、「200 OK」をおんぶしているような感じで。。。笑
これが、ピギーバックと呼ばれるものです。
まとめ
- Nagleアルゴリズムは、送信するデータ量が少ない場合、送信を遅らせる処理。
- 遅延確認応答は、データ受信ごとに確認応答を送信するのではなく、送信タイミングを遅らせる処理。
- ピギーバックは、確認応答に加え、別メッセージを一緒に送信する仕組み。
今回は、以上になります。
最後まで読んで頂き、ありがとうございました。
【参考書籍】