では、今回は信頼性のある通信を確立させる「TCP」についてです。
よくネットワークで重要なプロトコルとして、TCP/IPなどと言われたりしますが、その「TCP」のことです。つまり、とっても重要なので必ず理解しておく必要があります。
ちなみに、「TCP」は「Transmission Control Protocol」の略で、トランスポート層(Layer4)のプロトコルです。
(OSI参照モデルについてはコチラ → OSI参照モデル )
ただ、トランスポート層と言うのは重要な問題ではありません。TCPの役割を理解することが重要です。ただし、「TCP」と並んでトランスポート層に「UDP」というプロトコルもあることは覚えておきましょう。
(「UDP」についての説明は最後にリンクを載せておきます。)
最大の役割は最初に書きました「通信に信頼性を持たせる」ということです。
そのために、大きく2つのことを行っています。
・コネクションの確立
・制御機能
では、まず「コネクションの確立」から説明していきます。
「コネクションの確立」とは、通信を始める前に事前にパケットが相手に届くかを確認しておくことを言います。その手法を「3ウェイハンドシェイク」と呼びます。
文字で説明するよりも画像で確認するほうが理解しやすいでしょう。
SYNとは「通信開始してよいですか?」という確認みたいなものですね。
ACKとは「はい(返事)」という意味のものです。
つまり、
① 「通信開始してよいですか?」
② 「いいですよ。こちらも通信開始していいですか?」
③ 「はい、いいですよ。」
と言った事前の会話みたいなものが「3ウェイハンドシェイク」といえます。
次、「制御機能」についてです。
この機能はおもに以下があげられます。
・確認応答とエラー回復機能
・ウインドウ制御とフロー制御
まずは、「確認応答とエラー回復機能」から。
「確認応答」というのは、データが送られてきた際に「受け取りました。」というACK応答を返すということです。
これにより、何かの問題でデータが届かなかったときに、データの送信者は応答が帰ってこない(=データが宛先に届いていない)ということがわかります。
そのため、そのデータの再送を行います。これが「エラー回復機能」ということになります。
ただ、データ(パケット)を一つ送るたびに確認応答を待つのでは時間がかかりすぎます。
そのため、なるべく早くデータを送るために、2つ目の機能である「ウインドウ制御とフロー制御」という機能が用意されています。
ウインドウ制御は“送信側”の機能、フロー制御は“受信側“の機能です。
送信側では、TCPヘッダにある「ウィンドウサイズ」というフィールドを利用します。
「ウィンドウサイズ」は確認応答を待たずに送信できるデータ量のことを指します。
下図のような感じですね。
ただ、これだけだと受信側がウィンドウサイズ分のデータがいっきに送られてきたら、対応できなくなって、パケットが破棄されてしまうケースもあります。
他の機器からもパケットが送られてきているので一時的にバッファメモリがあふれる可能性があるのは容易に考えられます。
そのため、受信側は「フロー制御」という機能を持ち合わせています。
つまり、バッファがいっぱいになったときにそれを相手に知らせる機能と、受信することが再び可能になったときにそれを知らせる機能です。
以上のように、TCPはデータを確実かつ、できるだけ早く相手に届けるためのプロトコルといえます。
========関連プロトコルのリンク集=============================
コメント