ネットワークって。。。#24(TCPとUDP)

前々回、前回に引き続き、今回も、またまたTCPの話。。。

 

今回は、ネットワーク利用効率を高める仕組みについて。

今回で、一旦TCPの話は終わりです。。。

 

f:id:thmat:20200801143037j:plain



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」をおんぶしているような感じで。。。笑

 

これが、ピギーバックと呼ばれるものです。

 

 

まとめ

  1. Nagleアルゴリズムは、送信するデータ量が少ない場合、送信を遅らせる処理。
  2. 遅延確認応答は、データ受信ごとに確認応答を送信するのではなく、送信タイミングを遅らせる処理。
  3. ピギーバックは、確認応答に加え、別メッセージを一緒に送信する仕組み。

 

 

今回は、以上になります。 

 

最後まで読んで頂き、ありがとうございました。

 

 

【参考書籍】

 

 

 

     

 

 

すまっとネット - にほんブログ村

にほんブログ村 教育ブログ プログラミング教育へ にほんブログ村 IT技術ブログ IT技術メモへ
PVアクセスランキング にほんブログ村
にほんブログ村

 
人気ブログランキングへ