・TCP/IPは,IP,TCP,UDPの三つに大きく分けられ,
 通常ソフトウエアで実現されている。
・IPはアプリケーション・データを適当な大きさに分割し,
 あて先IPアドレスなどを付加して組み立てたパケットをネットワークへ送出する。
・TCPが提供する信頼性の高い通信機能により,
 アプリケーションは伝送路の特性を気にしないで済む。

 TCP/IPは,インターネットのもっとも基本的なプロトコルである。インターネットで取り扱うデータの最小単位であるIPパケットを組み立てて送り出すIP,その上位でアプリケーション・ソフトがデータをやりとりするための基本的な通信機能を提供するTCP,およびUDPから構成されている。

 これらは,通常ソフトウエアで実現されており,「TCP/IPプロトコル・スタック」と呼ばれる。

データをパケットにして送るIP

図 TCP/IPの主な役割
TCP/IPによって,インターネットのように信頼性の低いネットワークを介しても,アプリケーションはデータの大きさや送信速度などを気にすることなく,正確にあて先へデータを送信できる。TCPは,あて先のアプリケーションと正しく接続し,データを正確に届ける役目を果たす。そのために,送信パケットの順番,再送,送信間隔時間などを制御する。そして,IPがパケットを組み立てて正しいあて先のコンピュータへパケットを届ける。
 まずはIPの役割から見ていこう。TCPはアプリケーションから受け取ったデータを自分自身で適当な大きさに分割する。一方,UDPはアプリケーションから届いたデータをそのまま分割せずにIPへ渡す。IPが受け取ったこのデータは,インターネットへそのまま流すには大きすぎることがある。このとき,IPはインターネットへ流すことができる適当なサイズにデータを細かく分割する([拡大表示])。

 次に,このデータの先頭部分に,「IPヘッダー」と呼ぶ制御情報を付加する。IPヘッダーの中にあるもっとも重要な情報は,パケットのあて先などを識別するための「IP アドレス」である。IPパケットを送出した自分のアドレスを示す送信元IPアドレス,相手を示すあて先IPアドレスが入る。

 そして,IPパケットをネットワークへ送り出す。LANボードが複数枚装着されているときには,どのLANボードへ送出するかも判断する。この判断基準はルーター編(pp.104-105)で詳しく解説するが,ルーティング・テーブルを見て決める。

ポート番号でソフトを識別

 では,TCPとUDPの話へ移ろう。TCPでもUDPでも,上位のアプリケーション・ソフトを判別する機能がある。

 1台のパソコンやサーバー上では,複数のアプリケーションが同時に動作しているのが普通だ。このため,IPアドレスを指定してあて先のパソコンにIPパケットが届いても,そのIPパケットをどのアプリケーションへ渡せばいいのか判断できない。

 そこでアプリケーションを区別するのに「ポート番号」と呼ぶ識別情報を使う。これは,TCPやUDPのヘッダー情報に入っている。

 各アプリケーションは,どのポート番号のパケットが来たら自分に渡してほしいかをTCPまたはUDPにあらかじめ指定しておく。TCPやUDPは受信パケットのあて先ポート番号をチェックし,適切なソフトに引き渡す。

信頼性の高い通信を実現するTCP

 次にTCP特有の機能を説明しよう。インターネットで使われる主なアプリケーションのほとんどが,このTCPを使って通信する。Webページを見るHTTP,ファイルを転送するFTPなどがその代表である。TCPの役割は,信頼性を保証しないIPの上で,高い信頼性を提供することにある。

 その一つがコネクション(通信路)の確立だ。コネクション確立とは,通信を始める前に,あて先の状態を確認して,受信状態になった時点で仮想的な通信路を確保することである。

 そして,コネクションが設定されると,本格的にIPパケットをどんどん送るのだが,送信中になんらかのトラブルで連続する送信パケットのいずれかが喪失したら,喪失したパケットを送信し直す。これが「再送制御」である。

 また,パケットを送信した順番とは違う順番であて先に届くと,順番を正しく入れ換える。インターネットには無数のルーターが存在し,あて先へ届くまでの経路も一つではない。このため,順序よくパケットを送信しても,受信側では順番通りに届くとはかぎらない。これを回避することができるのだ。

 さらにTCPは,回線の特性に応じて,パケットの送信速度を調整し,最適なパフォーマンスを出そうとする。

 このしくみは,回線から直接情報を得るのではなく,送信元とあて先のパソコンから入手できる情報だけを頼りに調整する。具体的には,連続して送出するパケット数の上限値を徐々に大きくしながら,通信を始める。そして,通信中にパケットが失われると,回線の転送能力を上回ってしまったと見なして,上限値を調整するのである。

 こうしたTCPの機能により,アプリケーションは実際の伝送路がどんな状態になっているかを,まったく気にすることなく,データを送受信できる。

 なお,UDPはTCPのような信頼性を保証する機能はないプロトコルである。ただ,単純なので処理の負荷は軽い。

高橋 健太郎,三輪 芳久