前置き
この記事は「ネットワークのこと教えてくださーい」とやってきた学生君に対してアドリブで対応した記録になります。不正確な部分、あえて詳細に触れていない部分、また間違ってる部分などがあると思います。間違っている部分についてはご指摘いただけると幸いです。
はじまり
学「澤田さ~ん、今お時間よろしいですか」
私「いーよ」
学「ネットワークについて教えてほしいのですが」
私(アバウトに来たな)「ネットワークって具体的に何を?」
学「先輩が話していることを理解したくて、ネットワークをどう学べばいいのかと」
学「例えば、サーバってなんですか?コンピュータと違うのですか?」
学「メールってどうなってるんですか?クライアントって、僕のマシンでメール書いてますけど、これはクライアントですよね?この書いたメールがどうやって相手に届いているんですか?」
私「なるほど、じゃあ一から説明することにしますか」
ネットワーク階層モデルの話
私「確か基本情報処理技術者の資格持ってるって言ってなかった?当然ネットワークも範囲に入ってるはずだけど」
IPAのページ検索
私「サーバはコンピュータであり、情報の提供者、ここでいうIPAね。で、それを受け取って表示する側がクライアント、具体的に言うとこのブラウザ」
私「クライアントからサーバに向けて、これくださいというリクエストが送られて、サーバから、はいどうぞとレスポンスが返される。これが基本」
私「で、どっちから話すか、上からでいいか。具体的にどのような形式でリクエストを送り、どのような形式でレスポンスが返されるかが決まっている。それがプロトコルというもの。HTTPのPはprotocolのP」
私「で、このサーバのコンピュータではいろんなプログラムが動いているわけだけど、・・・あーやっぱり下から説明した方がいいな」
私「情報処理技術者試験の勉強してたときにOSI参照モデルっての出てこなかった?」
学「ありました」
私「今ネットワークについて説明しようとする際に、全部まとめてごちゃっと説明しようとするとすごい説明しにくいのね。それを切り分けて説明するために階層構造が作られているというわけ」
物理層~データリンク層(イーサネット)
物理的な接続
私「そこにケーブルが下がってるわけだけど、通信をするためにはともかくつながっていないといけないわけね。まあ今どきは無線もあるわけだけど」
私「で、ともかくつなぐことができたら0,1が送れると。例えば電圧が高いのを1、低いのを0みたいに。これが物理層」
非常に雑なイーサネットの説明
私「で、0,1は送れるようになったわけだけどそれだと使いにくいからある程度まとまった単位でやり取りをするようにしたわけで、現実世界だとハガキを送るみたいなもん。層によってハガキの名前が違うのだけど、イーサネットだとフレームと言う」
私「さっきは線がつながっていれば通信できると言ったけど、実際にはネットワーク内にコンピュータが何台もあるから誰に送るかを決めないといけない。誰に送るかというのがアドレス」
学「172なんとかってやつですか?」
私「それはIPアドレス。イーサネットだとMACアドレスと言う」
学「MACアドレスってコンピュータに一つなんですか?」
私「いや、ネットワークカードに一つ。だからネットワークカードを2つ挿してたら2つMACアドレスがある。このポート1つにMACアドレス1つな感じ」
学「僕のマシンはポートないんですけど」
私「それって無線だよね。まあ無線のモジュールに対してMACアドレスが付いてる」
※通信全体の話をしたかったので、MACアドレスの形式、アドレス長などの話はざっくり省略です
ネットワーク層(IP)
私「データリンク層で通信はできるようになったわけだけど、このIPAのサーバ、そこら辺にありそう?」
学「ないですね」
私「そう、IPAのサーバは別ネットワークにある。つまり、IPAのネットワークまでリクエストを届けないといけない。それをやってるのがネットワーク層、TCP/IPで言うとIP。ここで使われるのがIPアドレス」
学「あー、だからインターネットって言うんですね」
私「別ネットワークに届けるってどうやってるのとか色々話すと長くなるのでざっくり省略する。ともかく相手までは届くようになったわけだ」
※同様に、IPアドレスの話等はざっくり省略です
トランスポート層(TCP)
私「相手まで届くようになったので、やっと話が戻ってくるわけだけど、サーバコンピュータで動いてるどのプログラムに届けるか決めなければいけない。これを扱うのがトランスポート層」
学「どうやってるんですか」
私「ああ、言い忘れてた。ポート番号で識別する。HTTPだと80ね」
学「プロキシだと8080ですよね」
私「まあ基本的に自由に使っていいのだけど、自由過ぎるとつなぎ先がわからなくなるからこのサービスにはこの番号ってのが決まってる」
※TCPのハンドシェイク等については以下同文
アプリケーション層(HTTP)
私「ここまでで送る先のプログラムが決まったので、後は個別のアプリケーションの処理になる」
学「セッション層とプレゼンテーション層はどうなってるんですか?」
私「OSI参照モデルだとあるけど、現実の世界だとぶっちゃけそんなきれいに分けれないからセッション層~アプリケーション層がごちゃっとなってる」
学「アプリケーション層のプロトコルっていくつあるんですか」
私「むっちゃある」
HTTPは何をしているのか
学「HTTPってHTMLやり取りするプロトコルですよね」
私「まあHTML以外も送受信できるけど」
学「HTMLの解析結果が送られてくるんですか?」
私「ああそういうこと、HTTPではくださいといったもの、index.htmlくださいとリクエストしたら、index.htmlの内容が送られてくる。それを読み込んで表示するのはクライアント側(ブラウザ)の仕事」
トンネリング?
学「ここまではわかりました。ところで先輩はマシンAで取った画像をマシンBで見れないとおっしゃってるのですが」
私「それだけだと何がいけないのかわからないけど、ネットワークプログラムがちゃんとできてないのか、さっきは難しくなるから略したけど、ファイアウォールがあってIPもしくはTCPレベルではねられているのか」
学「トンネリングがなんとかっておっしゃってたんですけど」
私「そっちの方。ふーむ、その話に進むと一段難しくなるわけだけど、具体的に何がしたいかにもよるし」
次回予告?
というわけでネットワークの基礎について対話形式(学生君の相づちや簡単な質問は省いているので大体私がしゃべっていますが)で説明してきました。
結局のところ学生君の聞きたかったのはややこしくなるから省いたプライベートネットワークとその接続のことのようです(まあそれを理解するための前提となる基本的な通信について説明したわけですが)。おそらく次週もやってくると思うのでそれを反映した各層の深掘りについて記事を上げる、かもしれません。