1. TCP/IP
現在のインターネットはTCP/IPと呼ばれるプロトコルに従って通信が行われています。Javaに限らず、ネットワークプログラミングを行うためにはTCP/IPに関する基本的な理解が不可欠です。本節ではTCP/IPに関して、ネットワークプログラミングのために最小限必要となる事項を解説します。
1.1. TCP/IP (Transmission Control Protocol / Internet Protocol )
TCP/IPとはインターネットで通信を行うための複数のプロトコルの集まりです。TCP/IPという言葉は、TCPとIPという2つのプロトコルのことだけを指すのではなく、TCPやIPを中心とした複数のプロトコルの集合のことを指し示すのが一般的です。TCP/IPには、TCPとIP以外にもUDPやFTPなどの多くのプロトコルが含まれています。このような関連したプロトコルの集合のことを、プロトコルスイートと呼びます。
1.2. プロトコルの階層化
TCP/IPなどのネットワークプロトコルスイートは階層化されています。階層化とはどういうことでしょうか。郵便の例で考えてみましょう。
郵便の仕組みは、おおまかに階層化すると次の3つの階層に分けることができます。
- 利用者層—手紙の内容に関して取り決めています。
- 郵便局層—郵便番号や住所に従って郵便物を目的地に配送する方法を取り決めています。
- 輸送手段層—郵便物の物理的な運送手段を取り決めています。車や電車、飛行機などがあります。
階層には上下関係があります。階層の上位はサービスを利用する側、下位層はサービスを提供する側です。利用者は郵便局を利用しますし、郵便局は輸送手段を「利用します」。
それぞれの階層は独立しています。利用者は郵便局がどのような手順で郵便物を配送するか知らなくても構いません。宛先を書いて郵便局に渡せば、あとは郵便局が目的地まで配送してくれます。郵便局の視点から見るとどうでしょうか。郵便局の郵便局は封筒の中身の文章を読む必要がありません(読まれたら困りますね!)。封筒の表に書いてある宛先に従って配送の処理を行うだけです。輸送手段層との関係を見ても、郵便局員は自動車や電車がどのような仕組みで動いているのかを知っている必要はありません。
階層の処理は、送信側では上位層から下位層に向かって行われます。受信側では逆に下位層から上位層に向かって処理が行われます。郵便を送るときは、まず利用者が文章を書き、封筒が郵便局に渡されます。郵便局は郵便物をまとめて輸送手段(例えばトラック)に積み込みます。受け取る側では、郵便局はトラックから郵便物を取り出します。封筒を受け取った人は、封筒から中身を取り出して文章を読みます。上位層から下位層への処理は、情報をある入れ物に入れる処理であり、下位層から上位層への処理は、情報を入れ物から取り出す処理であると考えることもできます。