IPv4アドレス


アドレス/データ

Study

TCP/IP

IPv4について

  • ネットワーク層のプロトコルで用いられる識別子

アドレスの表記

  • 32bitの2進数で表現されるので最大でも43億個
    • アドレス32bitを8bitずつのオクテット(octet)に分けて考える
      11000000.10101010.00000000.00000000
    • 表記は分かりやすいように10進数表記法(ドット表記法)
      192.168.1.192
    • 8bit=1Byte=1octet
      • ただし、1Byteは状況によっては8bitではない場合があるので注意

管理団体

  • 世界的にIPアドレスを管理している
  • 世界を5つの地域に分けて大元を振り分けた
    • 北米 ARIN
    • ヨーロッパ RIPE NCC
    • アジア太平洋 APNIC
      • 日本 JPNIC
      • 韓国 KRNIC
    • 南米・カリブ海 LACNIC
    • アフリカ AfriNIC

ネットワーク部とホスト部

  • IPアドレス1つに対して,次の2つの情報が含まれる
    • ネットワーク部(どのネットワークに所属してるか)
    • ホスト部(その中の,どのホストか)
  • その境目が、基本的にはクラスとして決まっている
    • 一応、目安の分け方であって、実際はサブネットマスクでその分かれ方は可変
    • ネットワーク部にたくさんbit数が使われるクラス
      • 多くのネットワークが表せるが、1つ1つのネットワークにはホストは少ない
    • ネットワーク部よりもホスト部にたくさんbit数が使われるクラス
      • ネットワークの数は少ないが、その代わり1つのネットワークには多くのホストが収容

クラス

  • ネットワーク・ホストの数の割合が適したアドレスを使用する
    • 大きな組織ならクラスAで、小さな家庭ならクラスCとか
      • クラスによってネットワークの規模が分かる
    • 先頭の何ビットかが固定なので、それでどのクラスか分かる

クラスA

  • ネットワーク部が1Byte、ホスト部が3Byte
    • ネットワークアドレスは「0〜127」(10進数の第1オクテット)
      • 2の7乗が128だから1octet(Byte)で表せる10進数は127まで
    • つまり第1octet部の数字が同じマシンは、同じネットワーク内にいるってこと
      • 先頭1bitが「0」で固定
  • ネットワークは128個、ホストが約1600万台
  • アドレス空間全体の1/2を占める

クラスB

  • ネットワーク部が2Byte、ホスト部が2Byte
    • ネットワークアドレスは「128.0〜191.255」(10進数の第2オクテットまで)
    • つまり、第2octetまでの数字が同じアドレスのマシンは、同じネットワーク内
      • 先頭2bitが「10」で固定
  • ネットワークは約16000個、ホストは約65000台
  • アドレス空間全体の1/4を占める

クラスC

  • ネットワーク部が3Byte、ホスト部が1Byte
    • ネットワークアドレスは「192.0.0〜223.255.255」(10進数の第3オクテットまで)
      • 第3octetまでの数字が同じアドレスのマシンは、同じネットワーク内
      • 先頭3bitが「110」で固定
  • ネットワークが約200万個、ホストは250台
  • アドレス空間全体の1/8を占める

クラスD

  • マルチキャスト通信に使われる
    • 先頭4bitが「1110」で固定
  • アドレス空間全体の1/16を占める

クラスE

  • 未使用
    • 先頭4bitが「1111」で固定

サブネット・マスク

  • 決められたクラス分けでなく、ネットワーク部のbit数でも指定出来る(クラスレス)
    • より細かいネットワーク(サブネット)に分けられる
    • IPv4アドレスの枯渇を先送りする手段
      • 割り当てられるネットワークが増える
  • IPアドレスの,ネットワーク部を取り出すためのマスク
    • 先頭のネットワークアドレス部だけの数値が欲しいとき、欲しい部分だけ1を掛け算して残す
      11000000.10101000.00000001.11111110(元のIPアドレス 192.168.1.254)
      11111111.11111111.11111111.11000000(サブネットマスク先頭26bit 255.255.255.192)
      11000000.10101000.00000001.11000000(ネットワーク部のみのアドレス 192.168.1.192)
    • ネットワーク部分が先頭の何bitかをプリフィックス値と呼び,次のように表現する
      • (IPアドレス)/(プリフィックス値)
        192.168.1.254(元のIPアドレス)
        192.168.1.192/26(サブネット・マスクかけて取り出したネットワークアドレス)
      • これをCIDR*3表記という
  • ネットワークの規模の仕組み
    • ネットワーク部の中に,さらに細かいサブネットワーク部が含まれる
      • どんどんネットワーク部のbitを多くすると、より多くのネットワークが表現出来るから
      • 例えば、ネットワーク部を2bit分増やすと、より細かいサブネットワークが4つ出来る
      • その代わり、ホスト部にあてるアドレスが少なくなるのでネットワーク内のアドレス数が少なくなる
        192.168.1.240/28(ネットワーク部を2bit増やした)
        00と01と10と11(増やした2bitで出来るネットワークのパターン)
    • ネットワークの入れ子(階層化)が管理しやすくなるので、プロバイダに振り分けるのもラク
      • ビジネスの問題
  • 通信を行うための識別番号表記
    • 「IPアドレス」と「サブネットマスク」両方とも設定する必要がある
      • IPアドレス単体だと意味を成さない
  • クラスA〜Cのサブネットマスクとプリフィックス
    • 規定のクラス分けの場合、通常はCIDR表記はしない
    • クラスA
      255.0.0.0 /8
    • クラスB
      255.255.0.0 /16
    • クラスC
      255.255.255.0 /24

アドレス変換

  • 最大でも43億個のアドレスしかないIPv4では,アドレスの枯渇が心配されるようになった
  • その為に,2つのアドレスの種類を決めた

アドレスの種類

グローバルIPアドレス(gIP)

  • インターネットで使う(接続する)ことを許されたアドレス
    • NIC*4から正式に割り当てられる

プライベートIPアドレス(pIP)

  • インターネットには直接つながらないマシンのアドレス
    • 常時外部への接続が必要ない組織内のネットワークアドレス
  • 通常はルータのDHCP*5によって割り当てられる
  • プライベートで利用できるアドレスは決まっている
    • クラスによってpIPアドレスに用意された数が変わる
      • クラスA:10.X.X.X
      • クラスB:172.16〜31.X.X
      • クラスC:192.168.X.X
    • 逆に言えば、これらに当てはまらないアドレスがgIP
      • 最初の10進数が、「10,172(イナニ),192.168(イクニイロハ)」だったらpIPっぽくなる

変換方法

  • gIPアドレスと,pIPアドレスを変換する
  • pIPアドレスしか持たないマシンはルータでgIPアドレスに変換してインターネットへ接続する
  • インターネットへ直接接続するルータなどが,アドレス変換テーブルを管理
    • 変換する際に,パケットフィルタリングを行うことによりセキュリティの機能もある(ファイアウォールみたいな)

NAT*6

  • 1:1で,接続したいpIPアドレスをgIPアドレスへと変換する
  • gIPアドレスが1つしかない場合,インターネット接続をしているpIPアドレスのマシンしか通信できない

NAPT*7

  • 1:多。接続したい多くのpIPアドレスと、1つのgIPアドレスも対応できる
    • 現在はこのNAPTが主流
  • gIP+「ポート番号」を用いることで,複数のpIPアドレスや利用目的別に別々のgIPアドレスを対応させられる
    • 例.アドレス198.18.8.31、ポート番号5436の場合の表記
      198.18.8.31:5436
  • メーカーによっては別の呼び方もしていた
    • IPマスカレード:Linux上でのネットワークアドレス変換
    • ENAT(拡張NAT)
  • インターネットからLAN内へのアクセス
    • ポート番号を他ルータの対応表にあらかじめ手動で対応付けしておく
      • 自分側のアドレス:ポート番号と、外側のアドレス:ポート番号
    • そのポート番号と一緒にルータのgIPを指定すれば通信が可能
  • ソケット
    • IPアドレスとポート番号も合わせたものを「ソケット」という
      • 宛先のIPアドレスと、どのアプリケーション宛なのかを示すポート番号
    • コマンドプロンプトで「netstat」と打てば見られる
      • 特に、「netstat -na」で全ての開放ポートと数値アドレス表示
    • 電球のソケットから来ている、うまくはまらないと明かりがつかないイメージ
    • いわゆるトンネリング
      • そのままだと通信できないから、上位のプロトコルを利用してそのデータの形で他の機器と通信を行うこと
      • この場合だと、ソケットとソケットをつなぐ、みたいな

特別なIPアドレス

ループバックアドレス

127.0.0.1
  • 手元のホスト(localhost)を示す
    • TCP/IPがちゃんと動くかなどの確認などに使われる

ブロードキャストアドレス

ディレクテッド・ブロードキャストアドレス

192.168.1.255
  • 自分と同一のネットワーク内のマシン全てにブロードキャスト

リミテッド・ブロードキャストアドレス

255.255.255.255
  • つまりは2進法で全て1のアドレス
  • 同一ネットワーク内の全てのホストにパケットが送られる
    • ただし、接続したばかりでネットワークアドレスを認識してないマシンのみ用いるアドレス

ネットワークアドレス

0.0.0.0
  • ネットワーク全体を示し,ホストを示さないアドレス

IPアドレスの割り当て


DHCP*8

  • マシンが最初にネットワークに接続するとき、どのようなIPアドレスを用いるかを設定するしくみ
    • DHCPクライアント
      • マシン側のしくみ
    • DHCPサーバ
      • IPアドレスを管理するサーバ
  • 手順
    • DHCPディスカバー
      • マシンから設定情報を要求するブロードキャストを行う
      • まだIPアドレスは決まってないのでアドレスは「0.0.0.0」
    • DHCPオファー
      • 受け取った複数のDHCPサーバからそれぞれ割り当てる設定情報候補を返信する
      • この時はユニキャスト、宛先はLANフレームから参照されるMACアドレス
    • DHCPリクエスト
      • 設定情報が決まったことをまたブロードキャストする
      • 選ばれたDHCPサーバに設定情報を要求するメッセージを含む
    • DHCPアック
      • 改めて、DHCPサーバからクライアントへ確定を返信する

リース

  • リース期間
    • 動的に割り当てられるIPアドレスは、DHCPサーバ側で割り当てのリース期間がある
      • コマンドプロンプトでLease Obtainedなどの項目で見られる
        ipconfig /all
      • でも、なるべく同じアドレスを使い続けたい
    • リース期間の延長
      • リース期間の半分になったら、クライアントからサーバへDHCPリクエストを送信する
      • それを受けてサーバは、リース期間の延長をクライアントへ返信で通知する
  • 再起動して異なるネットワークだった場合
    • 移動して再起動した場合はクライアントはブロードキャストでDHCPリクエストを送信する
      • 異なるネットワークへいって、今までのDHCPサーバがいるとは限らないから
    • 実際に、違うDHCPサーバだったらそのアドレスが無い事をユニキャストで返信する
      • DCHPナック
    • そしたら、通常のDHCPディスカバーから設定手順をスタート

オプション

  • IPアドレス以外の設定情報
    • DHCPメッセージではIPアドレスしか設定出来ない
    • DHCPメッセージ本体とは別に、DHCPのオプションフィールドに設定が出来る
    • 100種類以上あるが、よく使うのは数種類
      • ipconfig /allで出てくる情報(サブネットマスクとかゲートウェイとかの情報)
  • オプションコード
    • 1
      • サブネットマスク
    • 3
      • デフォルトゲートウェイ
    • 6
      • DNSサーバアドレス
    • 15
      • ドメイン名
    • 51
      • リース期間
    • ベンダオプション
      • 各ベンダ独自のオプション
      • Internet Explorer用のプロキシ・サーバなど

リレー・エージェント

  • 他のネットワークのDHCPサーバから設定情報を受け取るための技術
    • ネットワーク間のルータに備わっている
  • ブロードキャストで受け取ったDHCPリクエスト
    • 向こう側のネットワークのDHCPサーバにユニキャストで直接届けてくれる

DNS*9

  • IPアドレスと、人間に分かりやすいドメイン名を結びつけるシステム
    • 「DNSサーバ」によって名前解決が行われる

リゾルバ

  • ユーザがドメイン名を打ち込むと、名前解決のためにアクセスされるDNSクライアント
  • ドメイン名に対応するIPアドレスを解決して教える
    • 対応表である「ゾーン情報」を参照する
    • これらの手順に使うメッセージは1つのパケットに収まるのでUDPで送る
  • ユーザは受け取ったIPアドレスに直接アクセスを行う

DNSサーバの階層化

  • ドメイン名はまず最初に「ルート・サーバ」のDNSサーバに聞かれる
  • 大元の階層の方を管理するDNSサーバを紹介していき、どんどんと細かい範囲のDNSサーバへと移っていく
  • 例、aaa.jpのドメインを指定したとき
    • ローカルサーバ
      • 一度、ここを経由する
    • ルートサーバ
    • jpドメインのDNSサーバ
    • aaa.jpドメインのサーバ
  • 独自ドメインを登録するとき
    • ゾーン情報を最終的なDNSサーバに登録するだけではだめ
    • 上の階層のサーバにも、最終的なDNSサーバまでの情報を登録する必要がある
  • 短縮手順
    • ローカルサーバのキャッシュにあった場合はすぐにIPアドレスを返す
    • ルートサーバに聞かなくても、ドメイン名から最終的なDNSサーバが予想できればそこに聞く

ドメイン名の利点

  • Webサーバ等が移動すると、IPアドレスは変わってしまう
    • IPアドレスは、固定回線であれば物理的な位置によって決まってくる
  • 引っ越しても、DNSサーバのドメイン名に対応するIPアドレスを変更するだけで良い

*1 The Internet Corporation for Assigned Names and Numbers assignedは割り当ての意味
*2 Internet Assigned Numbers Authority
*3 Classless Inter-Domain Routing
*4 Network Information Center
*5 Dynamic Host Configuration Protocol
*6 Network Address Translation
*7 Network Address and Port Translation
*8 Dynamic Host Configuration Protocol
*9 Domain Name System