ネットワークはLANやIPだけじゃない。相手との通信を成り立たせるには,TCPやUDPが不可欠だ。むしろ,Webブラウザや電子メール・ソフトなどのネットワーク・アプリケーションにとって,TCPとUDPはなくてはならない基盤的な存在である。Part1では,TCPとUDPの概要を示す。

 インターネットなどTCP/IPを使ったネットワークでは,データをIPパケットという単位でやりとりする。このIPパケットには,通信相手の住所を表すIPアドレスが書かれており,ルーターがこのIPアドレスを見て転送する。ここまでは,知っている人が多いだろう。

 しかし,これだけでは通信は成り立たない。Webアクセスやメールの送受信など,ほどんどのインターネット・アプリケーションが動かないのだ。

 その理由の一つは,IPアドレスは単に相手のコンピュータを特定するだけだからだ。パケットを受信してもコンピュータはそのデータをどのアプリケーション(サーバー・ソフト)に渡せばいいか判断できない。つまり,住所で,家や会社までは荷物が届くが,氏名や部署名がないとだれに荷物を渡せばいいかわからないというわけだ。

 またルーターは,配送の途中でIPパケットがなくなろうが,遅れて届こうがまったく気にしない。それどころか,一度に大量のIPパケットを受信すると,処理しきれずにパケットを捨ててしまうことさえある。

 もし,こんな信用できない宅配業者があったら,そのままではだれも使わないだろう。きちんと配達してくれるほかの業者を選ぶか,携帯電話などを使って相手に荷物が届いたかを確認するはずだ。

 IPパケットを使って通信する場合も,氏名や部署名に相当する情報から適切なアプリケーションへデータを渡したり,送達確認などをしてくれる仲介役が必要になる。それが「TCP」と「UDP」だ(図1)。これらのプロトコルのおかげで,Webブラウザ,電子メール・ソフト,FTPクライアントなどが動く。

図1●インターネット・アプリケーションはTCPかUDPがないと動かない
図1●インターネット・アプリケーションはTCPかUDPがないと動かない
[画像のクリックで拡大表示]

TCPとUDPは用途が違う

 TCPとUDPはアプリケーションとIPパケットの仲介役という点では同じだが,アプリケーションに提供する機能は大きく違う。

 TCPは,日常的に利用するWebブラウザや電子メール・ソフト,FTPクライアントなどが使い,送達確認や送受信スピードの調整をする。したがって,TCPを利用するアプリケーションは,相手にデータが届いたかどうかといったことを気にしないで済む。

 一方のUDPは,TCPが持っている送達確認やスピード調整機能などをバッサリと捨て,アプリケーションにほとんどの処理を任せる。こうした機能が必要な場合はアプリケーションが独自に用意する必要があるが,これらの処理をアプリケーションが好き勝手に追加・削除できるという利点もある。代表的なアプリケーションは,ドメイン名からIPアドレスを調べるときなどに使うDNS,クライアントにIPアドレスなどを自動的に割り当てるDHCP,ネットワーク機器をリモートから管理するためのSNMPなどがある。

実際は教科書とは違う

 実は,TCPやUDPの詳細を記述した解説書は,ちまたにあふれかえっている。大もとの技術文書であるRFCもある。このRFCを読めば基本的なしくみはすべてわかるようになっている。

 ただ,こうしたRFCや解説書には,世の中で動いているTCPやUDPの実際の動きが書かれていない。TCPやUDPは20年以上も前に決められたため,今では使っていない機能があったりするのだ。また,RFCには,TCPの通信状態を『状態遷移図』という流れ図で示しているが,実際にこれを基にTCPプログラムを開発しようとすると,ある状態でこうなったらどうするかという,例外的な処理がキチンと書かれていなかったりする。つまり,RFCの仕様にも,思いがけない抜け穴があったりするのだ。このため,実際のTCP/IPソフトはOSなどによって,パラメータやオプションの扱いで違う部分がある。

 そこで,TCP編UDP編に構成を分け,それぞれの基本を押さえながら,実際の動きを探っていこう。TCP編では,通信相手のアプリケーションへデータを確実かつ効率よく届けるしくみを追っていく。そうすれば,ブロードバンド・ルーターやファイアウォールの設定で登場してくる「ポート番号」やフィルタリングの意味が理解できるようになるだろう。さらに,「ブロードバンド・サービスを導入したのに,FTPでのダウンロード速度が思っていたほど速くならない」,「Webブラウザを一度に複数立ち上げてもそれぞれが正しくデータを受信してページを表示できるのはなぜか」――といった理由もわかる。

 それに続くUDP編では,TCPにはある機能が,UDPでなぜ削られているのかを考え,UDPを使うアプリケーションの姿を浮き彫りにする。