40←  home  →42
41 2000年2月10日

サブネットマスクの謎
 

(べつにNEC98+VZ+Atok8で書かなくてもいいようなものだが・・)

熊さん:ねえねえご隠居。ウルトラしょ〜もないこと聞いてもいいっすかね?

ご隠居:まあ言ってみなさい。

熊さん:あの、なんて言うんでしたっけ、Uなんとか?え〜UCCじゃなし、URCでもなし、え〜〜え〜

ご隠居:これこれ、URCって40歳以上には意味不明じゃろうが!

熊さん:いえいえご隠居、CDも復刻されて若い人でもマニアは知ってますぜ!

ご隠居:そ、そうかのう。ま、な、何のことじゃったかのう。

熊さん:あのネット・サーフィンをするのに使うあのwww.なんとかどっと混んでいたっていう、あの・・・

ご隠居:お、あれかのう。あれはURLと言ってじゃのう、Universal Resource Locatorの略じゃな。訳すと「全世界的資源位置特定機能」とでもなるのかのう?分かり易く訳せば「どこにある資源でも見つけまっせ」じゃな。もっと平たく言えば「資源の住所」と言ってもよかろう。それがどうかしたかのう
熊さん:あれってWWWで始まらないのもあるんすねぇ?例えばKさんとこなんかww3じゃないっすかあ?中にはrokkets.comたらいう、妙にあっさりして楽ちんっていうか拍子抜けっていうか、もあるじゃないですかあ?

ご隠居:ほっほっほ。いやいや、嬉しい質問じゃな。しかし、う〜む。どのレベルで答えればいいかのう?

熊さん:ど、どのレベル???

ご隠居:そうそう松竹梅と各種あるがのう?

熊さん:え、その、一番手短な奴で、おねげえしますだ。

ご隠居:なら、答えてしんぜよう。熊は、げえこくの住所の書き方を知っておるかの?

熊さん:まあ、何でも、狭めえ所が先に来て、広れえ所が後に来るんでげしょ?

ご隠居:そう、That's rightじゃ。

熊さん:あ〜文体、ご無体〜

ご隠居:このページの作者が文章力というか、一貫した声色を続けるのが下手というか、根性がないというか、そこが問題の核心であるのだが、許せ、熊。儂にはどうしようもならぬ。

熊さん:ええ、文体なんぞ、この際どうでもよろしゅうござんす。本題を〜

ご隠居:すまんの。短く言えばじゃな、例えばじゃ。このページのURLはww3.tiki.ne.jpじゃ。でな、tiki.ne.jpがネットワークの名前じゃ。その前のww3がこのネットワークにつながれているコンピュータの名前じゃ。分かったかの?

熊さん:いえ、ちょっと短かすぎて。。。

ご隠居:何じゃね、熊さん。熊さんが手短にと申したから簡単に言ったのじゃぞ。

熊さん:では一つ回りくどく、おねげえします。

ご隠居:そうか、では、ことの起こりは、あ、え、う・・・

熊さん:ご、ご隠居、どうなさった!?!?

ご隠居:ネタ本が見つからんのじゃよ。あ、あれがなくては正確な引用が。。。

熊さん:じゃ記憶の範囲で適当に。
 

(なぜか、ここからNECのキューハチ+Windows3.1+WZで書いている。)
 

ご隠居:すまないねえ。じゃ、経験的に言わせてもらうとしよう。うちのパソコンがLANで結ばれたのは知っておるかの?

 熊さん:そりゃ、前回の雑記、読ませて貰いましたから・・。

 ご隠居:それなら話が早い。で、じゃ。家庭内LANを組むにはイーサネットボードを入れて、それからじゃな・・・

熊さん:あの〜、お手短に・・・

ご隠居:そうか。仕方ないのう。では、はしょって、コンピュータ同士を結んだとしよう。次にはコンピュータに名前をつけてやらねばならぬの。

熊さん:そういうもんでげすか?

ご隠居:そりゃ熊さん、パソコンが2台なら、「自分と他ひとつ」じゃから自分じゃないのは「他」じゃ。別に名前をつけんでも相手は一つじゃ。
けど、パソコンが3台あると、自分じゃないものは「他の2つ」じゃ。そのどちら宛に手紙を出すのか、名前がいろうが。

熊さん:そりゃそうでげす。でも、別に番号でもいいのじゃないっすか?

ご隠居:おお!!!!!!その通りじゃ。偉いのう、熊さんは。名前と言っても基本的には番号をつけるのじゃ。

熊さん:でへへ。自分が1番で、それから2番3番とか?

ご隠居:そりゃ、熊さんが自分でプログラム作るのなら熊さんの好き勝手にすれがよろしかろう。

熊さん:め、めっそうもない。あたしなんぞ人様が汗水流して作ったものをありがたくお頂戴して使わせていただくだけでごぜーます。

ご隠居:ということで、世界標準のTCP/IPを使うことになるな。

熊さん:左様で。。。で、どうもコンピューターって横文字、記号ばっかでヤでげすな。

ご隠居:仕方あるまい。世の習いじゃ。そもそもパソコンなんぞ、アルファベットと数字しかない言語のもとでしか生まれなかったかもしれんぞ。未だにUNIXでは「日本語をいかに使うか」が問題になっておる。一冊の本にもなっておるな。WindowsやMacでは考えられないことじゃがの。

熊さん:そうなんでげすか?

ご隠居:そうじゃネスケでもじゃな。あれは日本の有志が無理矢理日本語化したもので本家のネットスケープ社は日本語版は出しておらんそうじゃ。

熊さん:で?

ご隠居:お、また脱線し始めたの。年寄りはくどくていかんのう。

熊さん:分かってんなら改善しよう。

ご隠居:なんか言ったかの? で、このTCP/IPじゃがの。これもそれだけで1冊が書ける、現に本屋で見た、という奥深い世界じゃそうじゃがのう。とりあえず使うのは、まあ、それほどでもない。教えに従ってじゃな、たとえば、じゃ、

マシン1 192.168.0.2
マシン2 192.168.0.3
マシン3 192.168.0.4
マシン4 192.168.0.5

というように番号をつければいい。

で、じゃ。なんでこうなるか、というとじゃな、TCP/IPとはな、Transmission Control Protocol / Internet Protocol。の略じゃ。protocolとは前にも解説したがの、「礼儀作法・議定書」みたいな意味じゃ。日本人がネーミングしたら「規格」ぐらいになったであろうか?
Transmittion Control Protocolは「伝達制御規格」であろうか。ここら辺は理系の人にはスリリングかも知らないが、とりあえず、番号の謎とは関係がないな。次がInternet Protocolじゃ。熊さんや。

熊さん:へえ。

ご隠居:TCP/IPを自分の家庭で使っておるわけじゃ。それで「インターネット」じゃ。変とは思わんか?

熊さん:まあ、そう言われてみれば・・・。

ご隠居:で、見つからない本じゃ。インターネットとはな、もともとは「どこぞの大学」と「どこぞの機関」にあったネットワークを結んだから「インターネット」なのじゃ。WWWができたのは1990年のことじゃ。前にも書いたがNeXTマシン上じゃった。世間での「インターネット」はそれ以降じゃが、本来の「インターネット」は、この時まで遡るわけじゃ。

熊さん:。。。。

ご隠居:感心してくれんのか?

熊さん:へえ、別に・・・。

ご隠居:つまらんなあ。もう教えんぞ。

熊さん:そんな。でも何時になったら、www以外のアドレスの謎にたどり着くんで?

ご隠居:次の更新まで待たねばなるまいな。

熊さん:え”〜。・・・・帰ろうかなあ。

ご隠居:う”。お茶はいらんか、熊さん。何か口に入れるものはないかな。(ごそごそ)

熊さん:いや、そうですかあ。じゃ、遠慮なく。

ご隠居:しかし、話が前に進まんのう。
 
 

@@@@




ということでIPアドレス、サブネットマスクの謎について調べてきました。

パソコン本というかLANの本読むと、だいたい家庭でLAN組むには
 

マシン1 192.168.0.2
マシン2 192.168.0.3
マシン3 192.168.0.4
マシン4 192.168.0.5

のような番号つけて、「サブネットマスク」を255.255.255.0にすればいいのですが、なんでそうなっているのかがよく分かりません。
「手短な」説明は書いてあったりするのですが、読んでも分かりません。難しめの本を読んで大体分かった気分になったので研究発表ですが、そんでも分からないです。確かに分からなくても一応動くので、「手短に」すませるのも分かります。

一番よく分からないのが、サブネットマスクですが、それは後のお楽しみとして、熊さんの何で「192.168」か?という疑問はとりあえず「そう議定書で決まっているから」です。

0.0.0.0〜255.255.255.255までを「IPアドレス」と呼びます。「インターネット・プロトコル・アドレス」です。
 

これは、個人が無申請で使える「プライベート・アドレス」と、日本ではJPNICという組織に申請するといただける(プロバイダが申請代行したり、一括取得したアドレスをばら売りしてるそうですが)「グローバル・アドレス」に分かれます。

アドレスはクラスに分かれます。(下のxには0〜255までの数字が入ります)

クラスAは、1.x.x.x〜126.x.x.xまでの126のネットワークになり、各々のネットワークに、0.0.1〜255.255.254までの16,777,214のコンピューターがぶら下がることが出来ます。
 このうち、10.x.x.xがプライベートアドレス。それ意外がグローバル・アドレス。

クラスBは、128.1.x.x〜191.254.x.xまでの16,382のネットワークになり、各々に、0.1〜255.254までの65,534のコンピューターがぶら下がる。
 このうち、172.16.x.xから172.31.x.xがプライベート。

クラスCは、192.0.1.x〜223.255.254.xまでの2,097,150のネットワークになり、各々に1〜254までの254のコンピューターがぶら下がる。
 このうち、192.168.x.xがプライベートアドレス。

何か、違和感が残りますよね。

(今度はiMacのComposer+Atok11で書いています。何遊んでるんでしょうね。)
 

違和感はマシン用の2進法表記を人間用の10進法表記で説明しているから、でしょう。

コンピュータにとっては、2進法ですから、192は、11000000となります。きれいですね。168は10101000となり、これもまずまずきれいです。223は11011111となりきれいじゃないですが。。。(ウインドウズ付属の電卓で2進法と10進法の変換しました。)(あ、コンピュータでは、1,2,3,4ではなく、0,1,2,3,4とゼロから数え始めます。これも違和感の一つでしょう)

で、2進法の一桁、0と1がビットでした。8ビットは、00000000〜11111111までで、256になります。ゼロから数え始めるので、0〜255です。IPアドレスは8ビットをセグメント(区切り)としてそれを4つ、計32ビット使います。人間にはそれをだら〜と10100010110011001000002101000と32個ちゃんとキーをたたいたかどうか数え直すのもイヤだという扱いにくいてたまらない表記になりますので、セグメントをピリオドで切って、おのおの10進法表示。

で、たとえばクラスCでは、0〜255が使えるのですが、これは、その8ビットが00000000〜11111111まで使えるということで2進法ではとってもきれいです。なお、最初の00000000はそのネットワーク自体を表すものとして開けておくのだそうです。最後の11111111はそのネットワークにつないであるコンピューター全部に情報を流すために使うので、実質コンピュータは、1〜254の計254台つなげます。なお、ルータなどがデフォルトで1の番号を振られていることが多いらしく、私はISDNする予定は全くないにも関わらず、1も開けて2から始めました。

(おおばっぱに説明です。さらに詳しいことが知りたかったら、私が参考にした「図解で分かるサーバのすべて」(日本実業出版社2500円)を読んで下さい。)

さて、ま、そんなもんかな、と分かったような気になったところに、謎のサブネットマスクである。
 
 

サブネットマスクとは、たとえば

マシン1 192.168.0.2
マシン2 192.168.0.3
マシン3 192.168.0.4
マシン4 192.168.0.5

のネットワークがあったとすると、サブネットマスク、255.255.255.0を指定するのである。

そうすると、最後のセグメントがマスクされて、192.168.0.0が取り出されるのだそうである。
 

謎だ・・・。
 
 

謎その1:仕掛け。

これも10進法では全く理解不能になる。2進法表現をすると、255.255.255.0は、11111111.11111111.11111111.00000000である。ある本の説明によると、「同なじ桁同士でかけ算をする」のだそうである。つまり、192.168.0.2は2進法で、11000000.10101000.00000000.00000010となるから、
 

11000000.10101000.00000000.00000010
11111111.11111111.11111111.00000000

を同じ桁でかけ算すると、1の部分はすべてもとの情報と同じとなるわけである。

「なあるほど」なのであるが、「かけ算」と説明してるのは1冊で他の2冊は「論理演算する」という説明なのであって、これが分からんのである。

なんでも、「Linux怒濤のQ&A」(ぱぱんだ著エーアイ出版2800円)(あの「ぱぱんだ国国王」の著書であらせられます。お勧め)によると

 
何かの値を入力して、出力を行う関数を考えます。数式で記述すると、

f(X) = Z
g(X,Y) = Z

となります。X,Y,Zをビットとするものを論理演算と呼びます。主な論理演算には、AND, OR, NOT があります。


とあって、まあ、NOT(0) = 1とか、NOT(1) = 0とかは、当たり前っていうことでいいんですが、

AND (0,0) = 0
AND (0,1) = 0
AND (1,0) = 0
AND (1,1) = 1

と言われても、分からない! 0と1をANDすれば、それは1じゃないのお?ということで、理解するのを諦めました。(「数学」なの?)

ま、とりあえず、論理演算のANDを使えば、後ろの数字が0の場合は前が何であろうと0になり、1なら前の数字がそのまま引き継がれる訳です。
 
 
 

なぞ、その2

何でそんなの使うのお?
 

である。255.255.255.0を使うと、255の部分は2進法で11111111であるから、元の情報が取り出すことが出来る。この場合は最初から3つのセグメントの情報が取り出される。

そんなこと言ったって、ああた!クラスCってのは、最初の3セグメントがネットワークを表し、最後のセグメントがそのネットワークにぶら下がっているコンピュータを表すんでしょ。最初から3セグメントって分かっているのに、何でわざわざサブネットマスクをかけて取り出す必要があるの?
そりゃ、オリンピックみたいに、「女です」って言っても本当かどうか分からないのでセックスチェックというのは理解できるが、ここでは「192.168.0」です、って結果が分かっているのに、何でサブネットマスクかけて「192.168.0」を取り出すの?

分からない〜!

「アドレスを無駄にしないため」とか「有効に使うため」とか書いてあってもピンとこなかったのですが、次の記述で氷解。

CIDR (Classless Inter-Domain Routing ) IPアドレスの不足から考えられた短期的なアドレス拡張案。ネットワークアドレスとサブネットマスクの対によってIPアドレスを表現し、現状のアドレスクラスの概念を取り払うことで、ネットワーク規模に準じた規模のネットワークアドレスを表現することを可能にしている。
な〜んだ、そうならそうと分かりやすく言ってよう〜!
 

多分、こういうことでしょう。(違っていたら誰か指摘して下さいね)
 

これも2進法で考えた方が理解しやすい、です。

2進法で、00000000.00000000.00000000.00000000〜11111111.11111111.11111111.11111111でした。
 

最初A,B,Cのクラス分け。

クラスAは、最初の1セグメントがネットワークアドレス。後ろの3セグメントがそのネットワークにぶらさがるコンピュータ(ホストアドレスと言う)。
クラスBは、最初の2セグメントがネットワークアドレス。後ろの2セグメントが〜(以下同文)。
クラスCは、最初の3セグメントがネットワークアドレス。後ろの1セグメントが〜。

綺麗ですね。(あと、クラスDという「マルチキャスト通信」とやらに使うアドレスがあるそうな)
 

つまり最初、ネットワークアドレスは「セグメント単位」で割り当てられていたのである。(簡略表現です。本当はもっとややこしいらしい)

でネットワークが少ないときは問題なかった。しかし増えるは増えるはネットワーク。いずれ破綻するぞい、という恐れがでてきた。

でもこの「セグメント単位」の切り方では、たとえばクラスCでいうと、最後の8ビット。256(マイナス2台)もコンピューターぶら下げるネットワークがどれほどあるじゃろかい? である。8ビット(8桁)で256。7ビット(7桁)だと128。最初と最後は前に述べた理由で使えないが、それでも126台つなげれる。6ビットなら64。これでも62台つなげれる。(電卓便利!)(ゼロから数える作法不慣れ:ややこしや、やこし)。5ビットでも31だから32になって2引いて30台つなげれる! 4ビットなら14台、3ビットなら6台。おお2ビットでも2台!

これは使わない手はない、ということで、最後の8ビットのうち、たとえば、最初の4ビットをネットワークアドレスに振って、残りの4ビットで14台で我慢してもらう、と仮定しよう。で、たとえば、10101010というアドレスを貰ったコンピューターがあったとする。

従来のCクラスで考えると、最後のセグメントは「ホストアドレス」であるからして、10101010=170というのがこのコンピュータの番号になるはずである。いや現に、例えば、192.168.45.170というアドレスを貰うのである。

しかし、最後のセグメントの上4ビットは「ネットワークアドレス」に振り分けたわけで、それを取り出さなければならない。11110000をAND処理すれば上4ビットが取り出せるから、11110000=240であるからして、君のサブネットマスクは255.255.255.240と教える訳ですな。

君のIPアドレスは、192.168.45.170。サブネットマスクは255.255.255.240。これを処理すると、「ネットワークアドレス」は192.168.45.160、「ホストアドレス」は、最下位の4ビットだから、1010=10ということになるわけです。同じIPアドレスでも、サブネットマスクが255.255.255.0の場合とは結果が異なる。

つまりそういうことでしょう。クラスCを使うということなら、192.168.45.170の「ネットワークアドレス」は、192.168.45.0に決まっていますが、アドレスの数を増やすために、現状のアドレスクラスの概念を取り払うことにした。それを実現するのが、サブネットマスクである。サブネットマスクが、255.255.255.0の場合は本来のCクラスと一致するが、サブネットマスクを、上の例のように、例えば255.255.255.240とすると、あらまあ不思議、他の住所に化けるのであった。
 
 

@@@@





ご隠居:と、まあそういう訳じゃ。
熊さん:それであのどっと混むの謎は?
ご隠居:だから言ったじゃろう、次回じゃ次回。
 
 



     


 
 

追記:前回の課題は解決しました。su - と-つきでrootになると完全ルートになります。ということで、今ウインドウズで書いていますがこの間。ibmマシンは、電源を入れられ切られただけでその役目を果たしました。うい奴よのう。

40←  home  →42