- 共通するのはポート番号でアプリケーションを見分けるしくみだけ
- TCPは信頼性が高く,相手に確実にデータを送り届けるアプリケーション向け
- UDPは信頼性は低いが,処理の軽さを生かしてリアルタイム通信に使われる
インターネットなどのIPネットワークでは,IPパケットにデータを詰めて通信相手まで送られる。しかし,IPの役割はここまで。パソコン上で動くアプリケーションにデータを受け渡したり,ネットワーク上で行方不明になったIPパケットを送りなおしてもらうといった処理は,IPの上位プロトコルの仕事になる。
その上位プロトコルがTCP注1) とUDP注2) だ。TCPとUDPで共通するしくみにポート番号がある。これは,受け取ったデータをパソコンやサーバーの上で動いているどのアプリケーションへ渡したらいいのかを指定するもの。80番のポート番号ならWebサーバー,25番のポート番号ならメール・サーバーといった具合にデータを引き渡す。
注1)TCP transfer control protocolの略。
注2)UDP user datagram protocolの略。
通信路を作ってからデータを送るTCP
ポート番号のようにTCPとUDPには共通した機能があるものの,両者はまったく異なるプロトコル。そこでまず,TCPのしくみから見ていこう。
TCPは,信頼性の高い通信を実現するためのプロトコルだ。多くの通信アプリケーションは,確実に相手にデータを送り届ける機能が不可欠。そうした機能を共通化してプロトコルとして規定したのがTCPである。
TCPは,(1)通信相手との間にパケットをキャッチボールするための通り道を作り(写真1[拡大表示]),(2)その通り道の中で相手が確実にデータを受け取れるようにスピードをコントロールしながらデータを送り,(3)送り終えたら通り道を切断する――という手順で通信する。では,それぞれの手順を具体的に見ていこう。
まず通り道。これは,TCPコネクションと呼ばれる。最初に,3WAY(ウエイ)ハンドシェーク注3)と呼ぶ手順で送信側と受信側があいさつを交わして,TCPコネクションを確立する(図1[拡大表示])。ちなみに通信が終わったときにも,あいさつしてからコネクションを切る。
注3)3WAYハンドシェーク 接続時にパケットを3回やりとりするところからこう呼ばれる。
Webブラウザを起動してWebサーバーにアクセスすると,このTCPコネクションが1本できあがる。違うWebサーバーにアクセスしたら,また別のTCPコネクションを作る(写真1)。
相手の受信容量を超えて送らない
TCPは確実にデータを送り届けるプロトコルだが,送ったパケットが相手にきちんと届いたことを確認してから次のパケットを送ると無駄が多い。
そこでTCPは,スピードを調整するウインドウ制御というしくみを使い,確認メッセージ(ACK(アック))を受け取る前にパケットをどんどん送り出してしまう。ウインドウとは,まとめてデータを受け取れるように,受信側が用意しておくバッファ・メモリーのこと。このウインドウの大きさを最初に送信側に伝えておき,この範囲に収まる量であれば確認メッセージを受け取る前でもパケットを送ってしまう(図1)。
ただし,相手側のウインドウ・サイズ分のデータを送ってしまったら,いったん送信を止める。これ以上送ると相手が受け取れなくなるかもしれないからだ。送信を再開するのは,1個目のパケットを受け取ったというACKが戻ってきてからになる。
消えたパケットはもう一度送る
送信側が送ったパケットは,ネットワークの途中で捨てられたりして,受信側に届かないこともある。こういう場合は,送信側がパケットを送り直す。受信側から一定時間内にACKが返ってこなければそのパケットが相手に届かなかった可能性が高いので,パケットを送り直すのである。
また,IPネットではパケットの順番が前後して相手に届くこともあり得る。こうしたときにパケットを順番どおりに並べるのもTCPの仕事。TCPはこのように,確実に相手のアプリケーションまでデータを送り届けるのだ。
処理の軽さがUDPのウリ
UDPは,ここまで見てきたTCPとは大きく異なるプロトコルである。UDPには3WAYハンドシェークのような手順はなく,いきなりパケットを送り出す(図1)。受信側の状態を気にせず,どんどんパケットを送り続ける。受信側に届かないパケットがあっても,あきらめるしかない。