- 「サーバ/クライアントモデル」: 通信しあうノードについて、「サーバ(server)」と「クライアント(client)」の役割分担を行う。
- サーバ:常に通信を監視していて相手の接続やサービス要求を待ち受ける。
- クライアント:サーバに対して接続やサービス要求を送りつける。
- 例:URL資源へのアクセス → Javaプログラム実行側はクライアント、DNSサーバやWebサーバはサーバ。
- サーバ側実装上の注意点: 1つのサーバに対して複数のクライアントが接続する。サーバ側のプログラム設計にはリエントラント、マルチスレッド化など種々の注意が必要である。
- ソケット: 直感的には、仮想の通信ケーブルを接続するための「コンセントの口」。プログラムの側から見たソケットとは、 TCPネットワーク層へのインターフェースを、ハードウェアに依存しない形で「標準化」したものになる。
- ファイルや入出力デバイスと同様、ネットワークに対してストリームの入出力を行うことが可能になる。
- Javaでは、java.netパッケージの中に Socket クラスが提供されている。
- ポート: TCP/IPの通信では「ポート番号」値(16bit)を、クライアント/サーバの双方で、あらかじめ取り決めておく必要がある。
- ポート番号には物理的な意味はない。通信の相手サービスを「特定」するための番号である。
- ソケット+ポート番号によってネットワークコネクションが確立し、かつ、通信サービスのpeerが識別される。
- 通信し合うプログラムが共通するポート番号を持つことで、現実の回線を擬似的に「多重化」して利用できる(#extで多重化した内線電話のようなもの?)。
- アプリケーションごとに固定されている予約済みポート番号:一般には0番〜1024番までの番号はUNIXシステムで予約済み。ユーザプログラムはそれより上位を利用する。
- 例:httpdプロトコルは TCPポート80番を予約している。80番以外で同様のサービスを行いたい(たとえばproxyなど)場合、8080番ポートを用いることがよくある。
- 新しい通信プログラムが何番のポートを用いるかは自由。しかし、既存のアプリケーションのポート番号と衝突しないような注意(工夫)が必要。(ポートをオープンする際に、既に使われていないかどうかチェックする必要あり)
2003年10月22日 4:29 更新