Hatena::ブログ(Diary)

inucaraの日記

2008-01-07 インターネットってどういう仕組みで動いているの?

インターネットってどういう仕組みで動いているの?

何度か行われる今年入社予定社員の事前研修で毎回好き勝手喋っていいことになったので、最終的なウェブ・リテラシーの向上を目標にインターネット周りの基本的な技術 (ネットワーク、HTTP リクエスト、XHTML + CSS + JavaScript など) や情報収集の手法 (フィードリーダや SBM) について話そうと思う。

もちろん最終的には梅田望夫氏がいうウェブ・リテラシーを身に付けることができればいいのだけど、教えるほうも教えられるほうもレベル的に厳しいので、本当に基本的な技術から苦にならないように教えていくことにする。

で、とりあえず話す内容を思いつくままに書いていってみる。

  1. みんなインターネットってするよね? じゃあそのインターネットってどういう仕組みで動いているか分かるかな?
  2. 例えばブラウザのアドレスバーに http://www.yahoo.co.jp/ って入力したら Yahoo! のページが表示されるよね? これってどういうことだろう?
    • ここで分からないようだったら「ブラウザ」って言葉の意味の簡単な説明。FirefoxOpera だって話はまた今度。
    • あと「ホームページ」じゃなく「ウェブサイト」や「ウェブページ」と言おうっていう話も。それぞれの言葉の定義と、こういう仕事をしていると「ホームページ」って言うだけで何も分かってないやつだと烙印を押すような人もいるので気をつけよう、みたいな話。
  3. その前にみんな「サーバ」って言葉は聞いたことある? サーバ。
  4. 実はみんなが普段見ているヤフーもグーグルもミクシィも全部それぞれのサーバというものがあるんだよ。イメージできる?
  5. サーバって言っても基本的にはみんなが普段使っているのと何ら変わらないパソコンなんだけど、それがヤフーやミクシィだったら日本のサイトだから東京かな? グーグルだったらアメリカ、って具合に各サイトごとにいろんなところにあるのね。
    • 「何ら変わらない」ってのは言い過ぎかもしれないけど、ここでは仕組みを理解してもらうためにとりあえずこのままで。
    • 著作権法の問題で検索エンジンのサーバは日本に置けないとかいう話は置いといて。
    • あとグーグルのサーバなんて世界中にあるけど細かいことは気にしない。
  6. そして、このサーバの中にそのサイトのデータが全部保存されてるの。
  7. 例えばブラウザのアドレスバーに http://www.yahoo.co.jp/ と入力してエンターキーを押したとき何をしてるかっていうと、裏ではブラウザがヤフーのサーバに接続しにいって「トップページのデータちょうだい!」って言ってるの。
  8. そしたらヤフーのサーバは「いいよ!」って答えてヤフーのトップページのデータを送ってきてくれるから、ブラウザはそれを表示してる。
  9. 新しいページのリンクをクリックしたときや、画像を表示するときも同じね。裏では「ヤフーニュースのデータちょうだい!」「いいよ!」「この画像ちょうだい!」「いいよ!」って常にやってるの。
  10. さらにこれは欲しいデータがどこかのページでも画像でも動画でもプログラムでも全く同じ仕組みなんだよ。ブラウザが「これちょうだい!」って言ったらサーバが「いいよ!」って応えてそのデータを送ってきてくれるだけで、そのデータが何であろうと関係なく全く同じことをしているだけなの。仕組みはすごく単純。
  11. この「これちょうだい!」「いいよ!」って仕組みのことを HTTP って言って、よく聞く http://www.yahoo.co.jp/ の http はこれのことなんだよ。
    • さっきから HTML という言葉を使わずに説明しているけど、このくらいは使っても良いかもね。
    • HTTP リクエストの詳細もいずれ説明したい。
  12. で、ここでひとつ疑問が出てくると思うけど、サーバは日本だったりアメリカだったりいろんな国のいろんな場所にあるのに、どうして接続しに行けるんだろう? サーバがどこにあるってどうやって分かるんだろう?
  13. この疑問に答えるのが IP アドレス。
  14. 実はインターネットにつながってる機器であれば、みんなのパソコンやサーバ関係なく全てに IP アドレスっていう番号が割り振られているんだよ。
    • NAT 云々の話はもちろんしない。混乱するだけだからね。
  15. そしてこの IP アドレスは世界中で同じものが 2 つと存在しなく、IP アドレスを指定するだけでもうそのコンピュータがどこにあるか特定できるの。アドレスっていうぐらいだから住所をイメージしてくれれば分かりやすいかも。北海道札幌市白石区○○1-1って言ったとき、ちゃんとその家を特定できるよね。
    • ちょっと乱暴な説明。ルーティングの話もいずれ。
  16. (コマンドラインから nslookup や ping コマンドとかで Yahoo! の IP アドレスを調べたりして) これがヤフーの IP アドレス。http://203.216.231.160/ って入力すればほら、ヤフーが表示されたでしょ。
    • ここでちょっと余談的に2進数の計算方法を教えて、IPv4 アドレスが全部で何個あるか計算してもらって、んで枯渇が問題になってて IPv6 ってものが出てきたって話もしておこうかな。
  17. で、ここでまた疑問が出てくると思うけど、http://www.yahoo.co.jp/http://203.216.231.160/ では何が違うんだろうね。全く同じヤフーが表示されるけど。
  18. 実は 2 つは同じことで、もともとは IP アドレスの http://203.216.231.160/ なんだけど、それじゃあ覚えるの大変だってことで、覚えやすい yahoo.co.jp とか mixi.jp って名前を付けることにしたの。そしてこの名前のことを「ドメイン」って言うの。よく聞くでしょ、ドメインって。
    • よく com や co.jp の co を企業を意味する company の意味だっていう人いるけどそれは間違いで、商用を意味する commerce の略だよ、みたいなトリビアも交えつつ。
      • あってるよね? commercial だっけ? それだと形容詞でおかしいよね?
  19. でも世の中は上手く行かないもので、覚えやすい名前を付けたらまた新たな問題が発生しちゃった。名前と住所の対応を覚えなきゃいけない。
  20. 例えば yahoo.co.jp は 203.216.231.160、google.co.jp は 72.14.203.104 って名前と住所の対応を知らないと、名前だけ分かっても実際にその住所に行くことができないよね。「時計台」って建物の名前は知ってても時計台が「札幌市中央区北1条西2丁目」にあるって知らないと実際に行けないのと同じことで。
  21. そして対応を全部覚えておくのは大変だ。世の中にはいくつのウェブサイトがあるのかな? 何億とかあるのかな? パソコンから携帯電話からインターネットにつながる全ての機器がそれを全部覚えておくのは不可能。
  22. 毎日新しいウェブサイトが誕生してるし、本当の住所と同じで引っ越して IP アドレスが変わったよってこともあるしね。
  23. そこでどうするかっていうと、代表して名前と住所の対応表を管理するサーバを用意しておいて、他の人たちは必要なときにその代表のサーバに問い合わせるの。「yahoo.co.jp の IP アドレス教えて!」って。
  24. そして代表のサーバはちゃんと「yahoo.co.jp の IP アドレスは 203.216.231.160 だよ!」って返答してくれる。これによってみんないちいち対応を覚えなくても良くなった。
  25. この仕組みを名前解決、DNS って言って、対応表を管理する代表サーバを DNS サーバって言うの。
  26. これでやっとインターネットに接続してウェブサイトが表示される仕組みが分かった。長々と説明してきたけどまとめるとかなり単純。www.yahoo.co.jp を表示することを例に挙げると、
    1. まずブラウザは「www.yahoo.co.jp の住所 (IP アドレス) 教えて!」とDNS サーバに問い合わせる。
    2. DNS サーバは「203.216.231.160 だよ!」と返答してくれる。
    3. 次にブラウザは住所が分かったので 203.216.231.160 にあるサーバに接続しに行って「トップページちょうだい!」と言う。
    4. サーバは「いいよ!」と言ってトップページのデータを送ってくる。
    5. 最後にブラウザは送られてきたデータを表示する。
  27. たったこれだけ。超単純! じゃあ今度は HTML の話をするよ。

簡単に説明しようとして逆に分かり難くなってる? ここがおかしいとかここをこうしたらいいってあったら教えて!

で、次は HTML の話をする! HTML っていうか XHTML。HTML なんて知らなくていい、W3C の勧告に準拠した Strict な XHTML だけ教える!