◆TCPの制御(フロー制御・ウィンドウサイズ)その1※ネットワークの学習は、TCP/IPを学ぶことから始めることをオススメします。TCP/IPは、今日のLANやインターネットを支えている重要な技術になっています。ここでは、これからネットワークを学ぼうとする方に必要なネットワークの用語やテクノロジーの紹介、そして、TCP/IPプロトコルの基礎知識を中心に説明してゆきます。◆TCPの制御(フロー制御・ウィンドウサイズ)その1TCPによる通信では、送信側がセグメントを送信し、そのセグメントを受信側が受信すると必ずACKの応答を返すようになっています。受信側の応答には、期待する次のシーケンス番号(受信したセグメントのシーケンス番号+1)を返すようになっています。「今までの分は、ちゃんと受信できているので、次のセグメントを送って下さい。」という意味になります。TCPにおけるフロー制御は、ウィンドウサイズで実現しています。ウィンドウサイズによって一度に送信できるセグメントの数が決まります。TCPでは、一度に送受信するセグメントの数をコントロールすることで、フロー制御を行っています。詳しく説明すると、ウィンドウサイズは、通信相手のバッファ量を指します。受け取ったデータは、一時的にバッファに溜められます。データ転送が早いと、すぐにバッファは一杯になり、溢れ出してしまいます。パケットは破棄されることになります。ウィンドウサイズまでのデータは、一度に送っても相手はオーバフローしないことになります。他に、ウィンドウサイズ(自分のバッファのサイズ)やMSSもお互いに教え合っています。この教えられたウィンドウサイズとMSSから、一度に送信できるセグメント数を求めることができます。TCPでは、一度に送受信するセグメントの数をコントロールすることで、フロー制御を行っています。一度に送ることが可能なセグメント数が「1」の時のフロー制御を説明してゆきます。1000の場合、一度に送ることが可能なセグメント数は、「1」になります。上の図を見れば分かるように、1セグメントを送信する度に、確認応答を行っています。個々のパケットに対してACKの応答を待ってからでないと、次のセグメントを送信できません。これだと、確かに確実に相手に届けることができますが、手間がかかりすぎてオーバヘッドが高くなってしまいます。効率よく送信しないと時間がかかり過ぎてしまいます。効率よく送信するには、個々のセグメントの対するACKの応答を待ってから次のセグメントを送信するのではなく、ACKの応答を待たないで一度に複数のセグメントが送信できるようになっています。次の「TCPの制御(フロー制御・ウィンドウサイズ)その2」では、一度に複数のセグメントを送信する場合におけるやり取りの流れを説明してゆきます。