前回はIP(internet protocol)ヘッダーの構造から,ネットワーク層のプロトコルの役割を見てみました。今回はネットワーク層の上位で,アプリケーションのデータを受け取ってIPに渡す役割をするトランスポート層プロトコルについて見ていきましょう。

IPだけではアプリケーション・プログラムに届かない

 前回お話したIPは,いくつものネットワークを経由してパケットを通信相手のコンピュータに届ける機能を持っていました。IPのパケットはネットワーク同士を接続する装置(ルーター)で中継され,相手のネットワークに到達します。

 IPの仕事はパケットをコンピュータからコンピュータへ届けるところまでです。しかし,これではまだ不完全です。なぜなら,そもそもパケットを送受信するのは,コンピュータの内部で動作するアプリケーション・プログラムだからです。

 例えば,みなさんのコンピュータで動いているWebブラウザは,あて先コンピュータのWebサーバー・プログラムとパケットをやりとりして,HTMLテキストや画像のデータを取得します。別のアプリケーション・プログラム(例えばメール・サーバー・プログラム)とやりとりしても目的のデータは得られません。

 コンピュータの内部では通常,いくつかのアプリケーション・プログラムが同時に動いています。ですからIPによって目的のコンピュータに届いたパケットを何らかの方法で目的のアプリケーション・プログラムに届ける必要があります。この役割を果たすのがトランスポート層です。コンピュータ内で動作するアプリケーション・プログラムとIPの仲立ちをして,送信元コンピュータのプログラムがあて先コンピュータのプログラムと正しく通信できるようにします。

トランスポート層プロトコルは2種類ある


Pict1.二つのトランスポート層プロトコル
[画像のクリックで拡大表示]

 インターネットで使われている代表的なトランスポート層プロトコルには,TCP(transmission control protocol)とUDP(user datagram protocol)の二つがあります(pict.1[拡大表示])。両者の一番大きな違いは処理の重さと信頼性です。

 UDPはトランスポート層として最低限の仕事だけをこなすプロトコルです。仕事は二つしかありません。一つは,IPがあて先コンピュータまで運んだパケットを目的のプログラムに届けること。もう一つは,パケットが途中で壊れていないかを検出し,壊れていたら破棄することです。この二つしかしないので,UDPには処理が軽いという特徴があります。通信の準備をせず,すぐに送信が始められたり,同時に多数の受信者へ送信してもさほどコンピュータに負担をかけません。

 一方のTCPは信頼性を重視したトランスポート層プロトコルです。UDPと同じ仕事に加え,TCPではコネクションという考え方を使って,信頼性の高いデータ通信をアプリケーション・プログラムに提供します。コネクションとは,送信者と受信者との間にできる仮想的な通信回線のことです。TCPがパケットのやりとりを管理して,できる限り高信頼な通信を実現します。

 IPは転送途中の信頼性を保障しません。そのためパケットの順序が途中で入れ替わったり,途中のパケットが抜けてコンピュータに届くことがあります。UDPではこのように届いたパケットを,そのままアプリケーション・プログラムに渡します。一方のTCPはコネクションを管理することでパケットを元の順序どおりに並べ直したり,紛失したパケットの再送を送信元に要求して,完全な形でパケットをアプリケーション・プログラムに渡します。私たちがWebブラウザなどを使っているときに,文章が抜けたり,順番が違ったりしないのは,Webの通信がTCPを使っているからです。

 こうしたメリットがある一方,TCPは通信の処理がUDPに比べて重いという欠点があります。通信を始める前にコネクションを作ったり,通信が終わるまでコネクションを維持する必要があるからです。このため,TCPを使う通信が多くなると,コンピュータに負担がかかります。


●筆者:水野 忠則(みずの ただのり)氏
静岡大学創造科学技術大学院 大学院長・教授。情報処理学会フェロー,監事。現在の研究分野はモバイル&ユビキタス・コンピューティング,情報ネットワークなど。
●筆者:佐藤 文明(さとうふみあき)氏
東邦大学理学部情報科学科教授。東北大学大学院工学研究科修了。現在の専門分野は通信ソフトウエアの開発方法,分散処理システムなど。
●イラストレータ:なかがわ みさこ
日経NETWORK誌掲載のイラストを,創刊号以来担当している。ホームページはhttp://creator-m.com/misako/