メインコンテンツに移動

名前(アドレス)

通信の基本要素を説明します.

名前

多数の機器が通信を行う場合,お互いを識別する名前が必要です.例えば航空機の機体内の機器の通信を行う場合,各機器に番号1,2,...,nを設定し, 通信相手を特定することになります.

世界規模のネットワークを構築する場合,数桁の整数では制御できません.

電話機の場合

電話番号という多数の桁を持つ数値「8190534653」とか「282345623」といった番号が割り振られており,番号を指定することで特定のデバイス間の通信が可能になります.この桁は次のように分割して考えることができます:

  • 最初の0は国内通信.それ以外の場合,国番号(USA:1 UK:44 JP:81等)
  • 50ならIP電話,70, 80, 90: 携帯電話など.それ以外は都市域(京都75, 福岡92等)
  • 次の3桁あるいは2桁で,細かい地域を指定
  • 最後の4桁でデバイスを識別

はっきりさせるために, 81.75.383.3772 という風に記述することもあります.

TCP/IP4(俗にインターネット)の場合

8ビット数(0-255)の数字を4個組み合わせた32ビットでデバイスを特定します.これをIP-ADDRESSと言います.電話番号とは異なり,個体識別に利用する桁数を自由に選べるように

ネットマスク

と組み合わせて利用します.具体的には,ネットマスクが24の場合, 最初の24bitが組織を表すネットワーク部分で,残りの8bitでデバイスを識別します.IPアドレスが10.249.229.222でネットマスク24の場合, 二進法で表して

10            . 249         .229          .222                    IPアドレス
00001010.11111001.11100101.11011110
255          .255          .255          .0                        netmask
11111111.11111111.11111111.00000000

となっていますので,結局 10.249.229 がネットワーク,222がデバイスを表すことになります.面倒なので,この場合, 10.249.229.222/24 と書くこともあります.

IPアドレスには,いくつかのルールがあります:

  • 最初のbitが0のもの(0.0.0.0-127.255.255.255)は「クラスA」,netmaskは8である. 
    • 世界の中で127組織は, それぞれ16777216台のデバイスを持つことができる
  • 最初のbitが10のもの(128.0.0.0-191.255.255.255)は「クラスB」でnetmaskは16.
    • 世界の中で65409社は,それぞれ65536台のデバイスを持てる
  • 最初のbitが110のもの(192.0.0.0-223.255.255.255)は「クラスC」でnetmask24.
    • 世界の残りの4294901504社は,社内のPCの数の上限は128台

作り方があまりにもテキトーだったんで,大変困ったことになりました.「インターネット」の創始者たちは,まさか,インターネットを世界中の人が使うとは予想できなかったのです.具体的問題点は

  • いかに大きな会社でも,16777216台のPCを持つ組織は存在しなかった
  • ちょっとした会社でも,社内のPCの数は128台を超えていた

大変困ったことになったので,2つの対策が取られました.

  • 32bitを128bitに変更した,全く異なるTCP/IP Version6システムを作る
    • だめですねこれ.互換性がないものは,だめなんですよ
    • なんで192.254.254.254なら続く64bitもアドレス,と拡張にしなかったのか?
  • 社内では「プライベートアドレス」を用いる

プライベートアドレスは,内線電話と同じく,世界とは切り離された「社内システム」です.以下のアドレスがプライベートアドレス専用に割り当てられています:

  • 10.0.0.0-10.255.255.255         社内デバイス総数が65536台以上の組織が使います
  • 172.16.0.0-172.31.255.255      社内デバイス総数が128台以上の組織が使います
  • 192.168.0.0-192.168.255.255  ご家庭で使います

例えば京大桂キャンパスでは 10.X.X.X というアドレスを利用していますが,これはCLASS-Aのプライベートアドレスであることがわかります.ご家庭のPCで「IPアドレス」を調べれば, NTTでもKDDIでもSoftbankでも,192.168.X.X のアドレスになっているはずです.

プライベートアドレスは,内線番号ですから,組織外部とは通信できません.電話機の場合,次のような方法をとっています:

  • 0をダイヤルすると,電話交換手に接続されますので,そこで「ええっと,東京大学に接続してください」などと交渉して接続してもらいます.すると相手の電話交換手が出るので,そこで「XX先生をお願いします」と言って,相手の内線に接続してもらう.(「となりのトトロ」での電話のかけ方ですね)
  • 人件費が嵩む現代では,0をダイヤルすると外線に接続されるので,そこから通常の電話番号をダイヤルすることで代行しています.

インターネットでも同じ方法を採用します.

  • 各PCは,外線に接続したくなったら,proxyサーバーというマシンに接続し,「ええっと 130.54.23.333にをお願いします」と交渉します(噛んだ〜).
  • proxyサーバーが接続した先が相手のproxyであれば,まあその内部で適当に処理されます.

気をつけなければいけないのは,proxyサーバーに内線番号を聞くと,動作しないことです.具体的には,研究室内部のPC 10.249.229.43 が, 隣のサーバー 10.249.229.222 に通信したい場合に,proxyサーバーに

「10.249.229.222に繋いで〜」

と頼んでも

「いいです・・・っと?それ内線番号じゃん?どこの会社の内線か知らねーし,ねぐったろ」

となり,通信できません.proxyは外線ですから,隣のサーバーへの電話には使いません.隣へは,直接電話すれば良いのです.そこで,ソフトウェアによっては

特定のネットマスクやIPアドレスについては,proxyサーバーを利用しない

という設定が可能になっている場合があります.

ネームサーバー

IPアドレス 10.249.229.222 とか電話番号 81.75.383.3772 などの数字の羅列は, 非常に覚えにくく使いにくいものです.そこで,文字列で表現することを可能にする仕組みがあります.「ネームサーバー」です.これは,数字の羅列であるIPアドレスと,ドメイン名という文字列の写像を定義するものです.

MacおよびLinuxでは,ネームサーバーに直接問い合わせができるコマンド dig が用意されています. 使い方は簡単で, dig 名前 です.例えば www.yahoo.co.jp を調べると:

digは, DomainNameService(DNS)サーバーに問い合わせ,その結果, www.yahoo.co.jp の別名(CNAME)が edge12.g.yimg.jp であり, それはクラスBアドレス 183.79.250.251 であることがわかります.(edge12 にCNAMEされているのは,負荷を分散させるためです). なお, DNSサーバーがどこにいるかも表示されます:

なお, こういったコンピュータの名前「ホスト名」のうち, 最初の edge12 が本当の「ホスト名」であり,後ろの g.yimg.jp を「ドメイン名」といいます.京都大学の学内ネットワークでは, DNSサーバーは

  • 10.224.253.1  idns-1.kuins.net
  • 10.224.254.1  idns-2.kuins.net

を利用することになっていますので,これらを設定するケースがちょくちょくあります.流体力学研究室にもDNSサーバーはあります:

  • 10.249.229.246 sun0.229.249.10.1016485.vlan.kuins.net
  • 10.249.229.111 sun1.229.249.10.1016485.vlan.kuins.net
  • 10.249.229.223 ib2007-1.229.249.10.1016485.vlan.kuins.net (Core2Duoのゴミ.そのうち消える)
  • 10.249.229.225 ib2007-3.229.249.10.1016485.vlan.kuins.net (Core2Duoのゴミ.そのうち消える) 

一つ一つのネームサーバーは,しかしながら,世界中の全ての「名前」を知っているわけではありません.上記京都大学のネームサーバーが知っているのは,*.kyoto-u.ac.jp のマシンと,自分の親,つまり *.ac.jp を管理するネームサーバーだけです.そこで,自分が知らない名前は,おとうちゃんに聞けば良い.おとうちゃんが知らない名前は,当然,おじいちゃん(*.jp)に聞きに行きます.それでわからないってのは,おじいちゃんの兄弟(フランス人 *.fr とか, アメリカ人 *.com, *.edu, *.gov とか)に聞けば,順にわかるはず.例えば, www.egr.msu.eduの場合, *.eduに聞けば, *.msu.eduの詳細がわかり,*.egr.msu.edu に聞けば,www.egr.msu.edu がわかるわけです.これで,世界中の名前を解決できます.

DNSサーバーを利用することにより,

  • ユーザーは, Yahoo検索を183.79.250.251と覚えず, www.yahoo.co.jp と覚えれば良い.この方が圧倒的に覚えやすい
  • 183.79.250.251のマシンが暴走しても,www.yahoo.co.jp の割り振り先を瞬時に切り替えることによって,サービスを停止させずに済む

という利点が生まれます.欠点は

  • DNSサーバーを制圧すれば,ネットワークの改竄が思いのまま

になるところですね.