TCPにおける通信

TCP(Transmission Control Protocol)は、トランスポート層プロトコルです。

<特徴>

TCPは、信頼性のある通信を実現しています。
トランスポート層にはUDP(User Datagram Protocol)というプロトコルもありますが
こちらは信頼性は保障されません。
シンプルな処理により高速な通信を実現しています。

<通信方法>

通信方法について説明します。
f:id:mrKomanetin:20210627130915p:plain

コネクションの確立

TCPでは、コネクションを確立してから通信を開始します。
コネクションの確立は以下の手順で行います。
①SYN(コネクション確立要求)を送信
②ACK(確認応答)を返却
③SYN(コネクション確立要求)を送信
④ACK(確認応答)を返却

簡単に言うと
①A「送信してもいい?」
②B「いいよー」
③B「送信してもいい?」
④A「いいよー」
ということですね。
この手順のことを3ウェイハンドシェイクといいます。
ちなみに。。
SYN はSynchronize(同期する)
ACKはAcknowledge(認める)
の略です。

データの送受信

データは、1オクテッドごとにシーケンス番号というものが付けられています。
データ送信時には、この番号も併せて送信し、
受信側では、次に受信すべき番号を確認応答として返します。
このように、確認応答とシーケンス番号によって、再送制御、重複制御を実現しています。
詳細は次項で説明します。

コネクションの切断

コネクションの切断も、確立時と同じような方法となります。

<再送制御、重複制御について>

データのシーケンス番号、確認応答により、再送制御、重複制御を実現しています。

再送制御

確認応答をしないとしたら、
例えばデータ(1~1000)がホストBに届く前に喪失した場合に、
データ1~1000を再送するべきか次のデータを送信するべきか、判断がつきません。
確認応答により再送するべきかどうかの判断をしています。

重複制御

送信されるデータにシーケンス番号がないとしたら、
例えばデータ(1~1000)がホストBに届けられ、
直後の確認応答がホストAに届かなかったとします。
この時、ホストAは確認応答が返ってこなかったため、データ1~1000を再送します。
ホストBでは、データ1~1000を重複して受信することになりますが、
シーケンス番号がないと重複しているかどうかがわかりません。
このように、シーケンス番号により重複してデータを受信しないように制御しています。
ちなみに、重複して受信した場合は後からきたデータを破棄する仕組みとなっています。