西山 健二 NTTデータ関西テクシス ソリューションマーケティンググループ テクニカルサポート担当

ポート番号によってアプリケーションを区別

 TCPとUDPの違いについては,とりあえずはこの程度の知識で良い。ただ,両者に共通する重要な役割として,「ポート番号」を知っておきたい。

 例えばWWWサーバーとメール・サーバーを同じマシンで稼働させるなど,1台のサーバーに複数のTCP/IP(またはUDP/IP)アプリケーションを動かすことは多い。どのアプリケーションに対する通信も同じIPアドレスで行われるわけだが*22,ここで問題が発生する。サーバーが受け取ったIPパケットは,WWWサーバー・アプリケーションに対する送信なのか,メール・サーバー・アプリケーションに対するものなのかがIPアドレスだけでは判断できない。住所で手紙を届けても,その住所に複数の住人が住んでいたら,住所だけでは誰あての手紙かが分からないのである。

図7●ポート番号によってアプリケーションを区別する
 ポート番号は,この問題を解決してくれる。TCPもUDPもポート番号という識別番号を備えている。アプリケーションごとにポート番号を変えることで,IPパケットを渡すべきアプリケーションを判断できるのである。例えばWWWサーバー・アプリケーションのポート番号は80,メール・サーバー・アプリケーションのポート番号は25と決めることで,複数のIPアプリケーションが同時に動作できる(図7[拡大表示])。

 主なアプリケーションのポート番号は決められており,通常はそのポート番号を利用する*23。ユーザーが作成したIPアプリケーションなどでは,割り当てられている以外の場所を使用する仕組みとなっている。

 なお,サーバー側だけでなく,クライアント側でもポート番号が用いられる。クライアントから送信するIPパケットには,あて先(サーバー側)のポート番号だけではなく,送信元(クライアント側)のポート番号も指定するのだ。これは,クライアント側でも電子メールのクライアント・ソフトとWWWブラウザを同時に使うなど,複数のTCP/IP(UDP/IP)アプリケーションが稼働しているからである。なお,サーバー側では主なアプリケーションのポート番号は決まっていると説明したが,クライアントからの送信元ポート番号はユーザーが作成したアプリケーションのポート番号同様,割り当て以外(1024~65535)の場所を利用する。

ポート番号を使って1対多の変換を実現

 実は,前回の最後に説明したIPマスカレード*24は,このポート番号を利用することでグローバル・アドレスプライベート・アドレスの1対多変換を実現している。

 簡単におさらいすると,グローバル・アドレスは,NIC(Network Information Center)などの公的機関が割り振る,インターネットの世界で正式に通用するIPアドレスのこと。しかしグローバル・アドレスは数が限られている。そのため,社内LANに接続されたクライアント・パソコンなど,外部からアクセスされることのないホストにはプライベート・アドレスという組織に閉じたネットワーク内だけで自由に利用できるIPアドレスを割り振る。ただ,プライベート・アドレスが設定された社内のパソコンからもインターネット上のホストへ通信したい。そこでNAT(Network Address Transfer)やIPマスカレードといったアドレス変換技術を利用する。

 NATは,社内と社外の境にあるルーターやファイアウオールで,1対1でプライベート・アドレスとグローバル・アドレスを変換する。しかしこれでは,同時に変換できるのはグローバル・アドレスの数までとなってしまう。

図8●IPマスカレードの仕組み
 一方のIPマスカレードは,IPアドレスの変換と同時にポート番号をも変換する。前述したようにポート番号はアプリケーションを特定するために使うものだが,このポート番号の空いている領域を使うことで複数のプライベート・アドレスをグローバル・アドレスに割り当ててしまうのである。図8[拡大表示]に,その例を示した。図8では,ルーターやファイアウオールでの変換で送信元(プライベート・アドレス側)のポート番号も変換している。この情報をテーブルに保存しておくことで,そのポート番号に対して返ってきたデータは,どのプライベート・アドレス(のどのIPアプリケーション)に返すべきかが判断できるのである。

 グローバル・アドレスを有効に使用できるIPマスカレードはとても便利な機能ではあるが,問題点も存在する。送信元(プライベート・アドレス側)で固定のポート番号を使うアプリケーションではうまく変換できないのだ。IPマスカレードではグローバル・アドレスを共有する仕組みとしてポート番号を使用しているため,送信元(プライベート・アドレス側)のポート番号が固定されるようなアプリケーションは使用できない*25