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

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

 

今回は、コネクションの管理から、ネットワークのいろいろな制御の話になります。

 

f:id:thmat:20200726174018j:plain

 

コネクション管理

ネットワークって。。。#19でも述べましたが、TCPはコネクション型の通信です。

コネクション型通信っていうのは、データの通信を始める前に準備(コネクションを確立)をし、データ通信を終える際には、後始末(コネクションを切断)を行います。

 

具体的には、コネクションの確立は、

  1. クライアント→SYN→サーバ    コネクション確率要求
  2. クライアント←ACK、SYN←サーバ 確認応答、コネクション確率要求
  3. クライアント→ACK→サーバ    確認応答

の順で、行われます。 

ちなみに、この手順は、スリーウェイハンドシェイクって呼ばれてます。

 

また、コネクション切断は、

  1. クライアント→FIN→サーバ  コネクション切断要求
  2. クライアント←ACK←サーバ 確認応答
  3. クライアント←FIN←サーバ  コネクション切断要求
  4. クライアント→ACK→サーバ 確認応答

 で行われます。

 

これに対し、UDPは、コネクションレス型の通信のため、準備も後始末も行いません。

 

まあ、何事に対しても、きっちりやるときは、準備が必要で、終わる時は、完了の手続きが必要って事です。

で、まずはとにかくやってみようっていうのが、UDPって感じです。。。

 

 

セグメント

前回も述べましたが、TCPでの通信はセグメントっていう単位で行われています。

で、TCPでは、コネクションの確立時にこのセグメントの最大の長さ(最大セグメント長:MSS[Maximum Segument Size])っていうのを決めます。

 

引越しの際に、複数のダンボールに分けて、そん中で一番大きいダンボールの大きさみたいなもんです。。。 

 

クライアントとサーバがスリーウェイハンドシェイクの際に、お互いに、データ送信できる長さは最大でこんだけって知らせ合います。。。

で、小さい方が、最大セグメント長として採用されます。

 

 

ウィンドウ制御

前章で、TCPでの通信はセグメントっていう単位で行われていますと述べましたが、1セグメントごとに応答を待って、応答が返ってきたら次のセグメントを送信してたら、もしネットワークが混んでて、往復時間が長くなると、通信性能が著しく低下する可能性があります。

 

そこで、TCPでは、ウィンドウという概念を取り入れて、1セグメントを送っても応答を待たずに次のセグメントを送信できる仕組みを提供しています。

応答を待つまで、何セグメント送信できるかという、応答を待つまで送信できるサイズをウィンドウサイズと呼びます。

 

引越し屋さんが、一度に運べるダンボールの数みたいなもんですね。。。多分笑 

 

で、例えば、ウィンドウサイズが4セグメントとなった場合、4つのセグメントを送って、1つ目の応答が返ってきたら、送信側は、5つ目のセグメントを送ることができます。

つまりは、応答待ちは4つまでってことで、1つ応答が返ってきたら、1つ送れるし、2つ返ってきたら、2つ送れます。

これをスライディングウィンドウ制御っていいます。

 

引越し屋さんが、ダンボール4つ運んでて、1つを誰かが手伝ったら、別のダンボール1つを乗っけて運ぶみたいな。。。これも多分笑

 

 

再送制御

ウィンドウ制御によって、もし確認応答が失われても再送する必要がなくなりました。

では、再送する必要がある場合っていうのは、どういう時?

前回述べた、シーケンス番号。。。

確認応答の中に、次は、1001番を頂戴みたいなものが含まれています。

送ったはずの1001番のデータに対し、頂戴って3回送られてきたら、そこで再送処理が行われます。

 

1回目、2回目は様子見。。。3度目の正直って感じでしょうか?笑

 

 

フロー制御(流量制御)

で、ネットワーク通信はウィンドウサイズをもとに、送受信が行われるわけですが、もし、受信側がそのウィンドウサイズに耐えれなくなったら、、、

受信側は、送信側に対し、「ごめん、ウィンドウサイズこれに変更して」って頼むことができるんです。(ウィンドウ更新通知)

 

例えば、外国人と会話する時に、、、

Please speak more slowly...

みたいな感じです笑

 

 

輻輳(ふくそう)制御

 

これは服装。。。笑

 

ネットワークって、自分だけが使ってるわけではないので、混雑状況もその時々によって変わってきます。

そこらへんも考慮してか、TCP通信では、スロースタートで、まずは、ウィンドウサイズを1セグメントに設定して開始します。

で、徐々に送れるセグメント の数を増やしていきます。

もしタイムアウト等が発生したら、もう一度、1セグメントにリセットして、送信します。

 

車を運転していても、急発進はとても危険ですよね笑

 

 

まとめ

  1. コネクション型通信は、コネクションを確立処理(スリーウェイハンドシェイク)、コネクションを切断処理を行う。
  2. TCPでは、コネクションの確立時に最大セグメント長:MSS(Maximum Segument Size)を決定する。
  3. 応答を待つまで、何セグメント送信できるかという、応答を待つまで送信できるサイズをウィンドウサイズと呼び、1つ応答が帰ってくると次の1つのセグメントを送信(スライディングウィンドウ制御)することができる。
  4. TCPでは、同一の回答応答電文が、3回送られてきたら、そこで再送処理が行われる。
  5. 受信側は送信側に対し、通信の状況によって、ウィンドウサイズ変更(ウィンドウ更新通知)を依頼することができる。
  6. TCP通信では、スロースタートで、まずは、ウィンドウサイズを1セグメントに設定して開始する。

 

 

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

 

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

 

 

【参考書籍】

 

 

 

     

 

 

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

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

 
人気ブログランキングへ