【要約】Javaネットワークプログラミングの真髄 第2章 「IPの基礎」
第2章 IPの基礎
IP
- RFC791によるIPの定義:「インターネットプロトコルは,パケット交換方式による複数のコンピュータ通信ネットワークを互いに接続するためのプロトコルである」
- IPは次の三つの部分から成り立っている
- ホストのアドレスを決めたり知るためのシステム
- パケットの形の定義
- プロトコル本体(パケット送受信時のルールの集まり)
- IPのバージョンは二つ
ネットワークのアドレスを決めるシステム
ネットワークインタフェイス
ドメインネーム
ポート
- ポートは,そのホスト内の個々のネットワーキングサービスを表す数値
- サイズは16ビット(1~65535)
- ポート番号はパケットのヘッダ部分に記載
- パケットの行き先サービス(アプリケーション)を指定
- 1~1023番まではすでにサービスの割り当てが決まっている”規定ポート(well-known ports)”
- 1024~49151までは”登録ポート(registered port)”(OSにより使用の際に管理者権限が必要)
- ある特定のホスト上の特定のサービスを(IPアドレス,ポート番号)というペアの値(ソケットアドレス)で指定
- IPアドレスはホストを特定し,ポート番号はホスト上のサービス(ネットワークアプリケーション)を特定する.
ソケット
ネットワークアドレスを表すクラス
特別なIPアドレス
- ループバックアドレス(IPv4:127.0.0.1,IPv6:::1)
- 1台のホストの内部だけで通信を行うような場合(ネットワークアプリケーションの試験時など)に使用
- ワイルドカードアドレス(IPv4:0.0.0.0,IPv6:::0)
- ソケットを作るときに,それを特定のアドレスではなく”すべてのローカルIPアドレス”にバインド(bind,結びつける)するために指定
- 普通の状態(Javaではnullまたは不在のInetAddressで表す)
- InetAddressクラスにはアドレスの属性を知るためのメソッドがいくつかある(参考:InetAddress (Java Platform SE 6))
マルチホーミング
Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); while (interfaces.hasMoreElements) { NetworkInterface intf = (NetworkInterface)interfaces.nextElement(); Enumeration addresses = intf.getInetAddresses(); while (addresses.hasMoreElements()) { InetAddress address = (InetAddress)addresses.nextElement(); // … } }