IPの上位でデータを運ぶプロトコルとしてはTCPとUDPがあります。TCPはおもに信頼性を重視した通信で使われます。今回はTCPがどうやって信頼性を確保するか見ていきましょう。
通信の前に入念な準備を行う
TCPはIPの上で、信頼性を確保した論理的な全2重通信路を提供します。全2重通信は電話のように、通信する双方が同時に送受信を行える通信形態のことです。通信の信頼性とはデータの紛失や順序の乱れが起こらないことを意味します。TCPが通信の信頼性を保証するので、TCPを利用するアプリケーションは、信頼性を保証するしくみを自身で持つ必要がありません。
TCPは通信を始める前にまず相手と通信が可能かを確かめ、相手が求める通信の条件を確認します。入念な準備を行い通信路を確保してから実際の通信を始めるのです。こうして作られる仮想的な通信路をコネクションと呼び、TCPはコネクション型のプロトコルと呼ばれます。
TCPの通信はコネクションの確立から始まります。接続を行う側がまず、受け付ける側に接続の開始を求める(SYNシン)パケットを送ります。受け付けた側はそれを確認する応答(SYN-ACK:シン・アック)パケットを返します。接続を行う側はSYN-ACKパケットを受け取るとコネクションが確立されたとみなし、さらに確認(ACK:アック)パケットを送ってから、データの送信を開始します(pict.1)。メッセージが全部で3回やりとりされるので、3ウェイ・ハンドシェークと呼ばれます。
TCPでは通信を終了するときも同じような手順でコネクションを切断します。接続・切断の手順はやりとりするデータの量に関係なく行われます。そのため、少ししかデータを送らないときは通信のほとんどがコネクションの確立と切断処理に費やされ、効率が悪くなります。