MajiMeM

- 備忘録 -

【要約】Javaネットワークプログラミングの真髄 第2章 「IPの基礎」

第2章 IPの基礎

IP

  • RFC791によるIPの定義:「インターネットプロトコルは,パケット交換方式による複数のコンピュータ通信ネットワークを互いに接続するためのプロトコルである」
  • IPは次の三つの部分から成り立っている
    • ホストのアドレスを決めたり知るためのシステム
    • パケットの形の定義
    • プロトコル本体(パケット送受信時のルールの集まり)
  • IPのバージョンは二つ

ネットワークのアドレスを決めるシステム

ネットワークインタフェイス
  • ネットワークインタフェイスはコンピュータ本体に挿入するカードの形をしたハードウェア
  • ネットワークインタフェイスコントローラ(network interface controller),略してNIC(ニック)
  • NICには複数のIPアドレスを付けることができる
IPアドレス
  • インターネットホストは”IPアドレス”により識別
  • IPアドレスは,そのホストが属するローカルなネットワークを指定する”サブネット”部分と,サブネットワークの中の個々のホストを個々に指定する”ホスト”部分から成る
  • IPv4
    • 32ビット
    • 8ビットずつドットで区切った形で表す(例:192.168.1.24)
  • IPv6
    • 128ビット
    • 8ビットずつコロンで区切った形で表す(例:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:1)
    • コロンを二つ並べると”そこまではすべて0”を意味する(例:::1)
ドメインネーム
ポート
  • ポートは,そのホスト内の個々のネットワーキングサービスを表す数値
  • サイズは16ビット(1~65535)
  • ポート番号はパケットのヘッダ部分に記載
  • パケットの行き先サービス(アプリケーション)を指定
  • 1~1023番まではすでにサービスの割り当てが決まっている”規定ポート(well-known ports)”
  • 1024~49151までは”登録ポート(registered port)”(OSにより使用の際に管理者権限が必要)
  • ある特定のホスト上の特定のサービスを(IPアドレス,ポート番号)というペアの値(ソケットアドレス)で指定
  • IPアドレスはホストを特定し,ポート番号はホスト上のサービス(ネットワークアプリケーション)を特定する.
ソケット
  • ホスト上の各通信サービスと外部を結ぶ通信接点(endpoint,端点)のことを,ソケットという抽象的な概念で呼ぶ
  • ソケットには,ローカルホスト(そのホスト自身)のIPアドレスとサービスを表すポート番号が結びついている
  • Javaによるソケットの表現
    • Socketクラス
    • ServerSocketクラス
    • DatagramSocketクラス
    • MulticastSocketクラス
ネットワークアドレスを表すクラス
  • InetAddressクラス
    • IPアドレスまたはそれを”解決”したホストネームを表す
    • リモートアドレスを指定するために使う
  • InetSocketAddressクラス
    • IPアドレス,ポート}または{ホストネーム,ポート}というペアを表す
  • NetworkInterfaceクラス
    • ローカルのネットワークインタフェイスを表現する
    • インタフェイスの名前(例:'leo')とインタフェイスに結びついているIPアドレスのリストで表現される
    • マルチキャストにおいて,ローカルインタフェイスを識別するために使う
特別なIPアドレス

マルチホーミング

  • 複数のIPアドレスを持つホストを,マルチホームホスト(multi-homed host)と呼ぶ
  • ホストがサポートしているアクセス可能なIPアドレスを列挙するコード
Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements) {
    NetworkInterface intf = (NetworkInterface)interfaces.nextElement();
    Enumeration addresses = intf.getInetAddresses();
    while (addresses.hasMoreElements()) {
        InetAddress address = (InetAddress)addresses.nextElement();
        // …
    }
}

IPv6

Javaでプログラミングするときの違い
  • プログラマはほとんど意識しなくてよい
  • 現在使っているソケットが,IPv4IPv6かを確認するコード
if (socket.getLocaladdress() instanceof Inet6Address)
    ; // IPv6のソケットを使っている
else
    ; // IPv4のソケットを使っている
Related Posts Plugin for WordPress, Blogger...