PR

 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では通信を終了するときも同じような手順でコネクションを切断します。接続・切断の手順はやりとりするデータの量に関係なく行われます。そのため、少ししかデータを送らないときは通信のほとんどがコネクションの確立と切断処理に費やされ、効率が悪くなります。

拡大表示
 TCPではデータの交換を始める前に,通信を行う相手との間でコネクションを確立します。コネクションの確立は3段階の手順を踏んで行われるので3ウェイ・ハンドシェークと呼ばれます。
 3ウェイ・ハンドシェークの役割は双方で接続が可能かどうか確認し,信頼性のある通信が可能なように双方の通信条件をやりとりすることです。最初に送られてくる荷物の番号や一度に受け取れる分量をあらかじめ通知し合います。こうすることで実際の通信が始まった後に,1回の分量が多すぎて相手が受け取れないといった事故を防ぎます。
 ただ,こうしたしくみなので通信を始めたり終わったりするためにいちいち手間がかかります。やりとりすべきデータが少ない場合は通信時間のほとんどがコネクションの確立/切断に使われることになり,効率が悪くなります。