物理層からネットワーク層まで、抽象化の視点で理解するネットワーク基礎
物理層からネットワーク層まで、抽象化の視点で理解するネットワーク基礎
はじめに
大学で情報ネットワークの授業を受けて学んだ内容を、友達に教えながらまとめた記事です。
この記事で扱う内容:
- 物理層: 0と1を電気・光・電波で伝える仕組み
- データリンク層: 隣の計算機との通信(Ethernet, MACアドレス)
- ネットワーク層: 遠くの計算機との通信(IP, IPアドレス)
- 実際の通信の流れ
「抽象化」という視点で各層を理解すると、ネットワーク全体が見えてきます。
初学者の理解なので、間違いがあればコメントで教えてください!
第1章:ネットワークは階層構造である。
ネットワークは階層構造でできている。階層構造とは何かというと、層は自分より下の層を
抽象化したものであるという考え方である。実際の階層は以下のようになっている。
ちなみにファイルシステムとかの木構造とかの階層構造ではない。
| 階層 | プロトコルで規定される内容 |
|---|---|
| 7 アプリケーション層 | アプリケーション間でのやりとり |
| 6 プレゼンテーション層 | データ変換 |
| 5 セッション層 | 接続と切断、対話(dialogue)の管理 |
| 4 トランスポート層 | プロセス間の通信、再送処理、コネクション |
| 3 ネットワーク層 | 計算機を経由して通信する方式 |
| 2 データリンク層 | 隣の計算機と直接通信する方式 |
| 1 物理層 | 電気的特性、コネクタ形状や符号化 |
計算機と計算機の通信方式はデータリンク層で実装されているが、実際に物理的な信号として処理されるのは、物理層における波や電気といった物理的な信号である。
こんな感じで下の階層の何を抽象化して通信しているのかを頭に入れながら学ぶのがいいだろう。
第2章:物理層
データを送り合う層である。データは0,1の2進数である。
電気や、波で情報を伝える。例えば電気だと電位の高い低いで、0,1を伝えるし、波だと振幅の大きい小さいで伝える。光だと強弱で伝える。とにかくいろんな方法で0,1を伝えることで情報を伝えているのだ。
パラレル通信とシリアル通信
0,1を送る方法には2つある。パラレル通信とシリアル通信である。
パラレル通信は複数の線で一気に情報を伝える。例えば、8本あれば、一度のクロックで8bit送ることができる。
シリアル通信は、一本で送信する。よってパラレル通信が8本で伝えるとすると1クロック当たり8倍の量のデータを送れるのだ。
しかし、こんな簡単な話ではない。まずは、パラレル通信について話す
パラレル通信
複数本の線で通信するため長距離の通信ができない。使われるのはCPU内部などである。また、8本同時に全く同じタイミングで伝えることは難しく、全部が到着するまで待つ必要が生まれるため、一回受け取るのに必要な時間、クロック時間が大きくなってしまうという欠点がある。この現象をクロックスキューと呼ぶ。
隣り合う信号線同士が影響して不安定になってしまうことを 干渉(クロストーク) と呼ぶ。
あと経済的にも高いらしい。ここぞってところに使おう。
シリアル通信
一本で情報を伝える方法。つまり、0,1を送り続ける方式なのでなんでも使える。もちろん電気でも伝えられるし、波、光でも伝えられる。しかし、先ほど言ったように、並列に送れないため、パラレル通信の方が早い。
そして、どこまでがどの情報かを読み取るのが難しい。長い情報だとどこかでずれたら終わりである。それを色々な方法で切り抜けていく。それが面白いところである。
ビット区切りって何
例えば、情報は0,1で渡すわけである。それは電気なら、電圧を0か1で渡す。じゃあ、8回分の0を送りたいってなった時に、受け取る側は、8回分の0電圧を受け取るんだけど、超正確に測らないと7回分?8回分ってなっちゃう。これが1Gbit分とかになったら無理ゲー。そういうことである。
8b/10b エンコード方式
正直よくわかってない、8bitを10bitに拡張することで、000と0が多く並ぶのをなくすという方式だと思う。ある一定の数は、お互いのリズム感を信じるみたいなやつだったような。調べてみる。
調べてみた
簡単にいうと、4bitまでは通信相手と同じテンポを維持できると思う!!だから5bit以上同じものが続かないように2bit使って変換するよってこと!変換は変換表を使ったものでプロセスはシンプルである。
しかしこれだと、8bit送る時に10bit必要である。つまり、10送っても8しか情報は送れない。20%のロスが生じる。USB 3.0は5Gbpsと言われてはいるが、実際は5Gbps×0.8で4Gbpsである。
このロスを削減するために128b/130b方式や128b/132bで効率を向上させている。
一番簡単な符号化:マンチェスター符号化
0は高→低、1は低→高と各ビットで必ず電位が変化することによって変化を見失わせない。しかし、ロスが50%であることが最大の欠点。しかし、わかりやすすぎるのと、符号化の基本である。これを1b/2bエンコード方式と理解して、上の理解に繋げるとわかりやすいかも。
第3章:データリンク層
隣の計算機との通信を規定する層である。確認だが計算機とはPCやスマホであり、通信に使うものは、電気や波である。どうでもいいが、PCを計算機と呼ぶの本質的でかっこいい。隣とは、中継機(ルータ)なしに直接通信できる計算機。身内である。ローカルである。
そしてデータリンク層は、通信を規定するもの。つまりルールである。こういうふうに計算機と計算機を通信しましょうねってやつである。
代表的なものにHDLCとCSMA/CD(Ethernet)がある。
CSMA/CD(Ethernet)
何度もいうがethernetは規約である。こういうふうに通信するのがethernetであるというものがEthernetである。
1. 接続形態
バス型である。放送型ネットワークとも呼ばれる。
物理構成はスター型である。真ん中に親がいる。バラエティでいうところの明石家さんまである。
物理的にはHUBが中央にあるスター型であるが、論理的にはHUBがバス型に見せている。
ここもまた一つの抽象化である。
2. 通信方式
CSMA/CDというものである。ランダム割り当て方式ともいう。
- まず誰も送信中でないか確認をとる
- データを送出
- 衝突していたか?
- していたらちょっと待ってまた送信。(2の累乗で待ち時間が増えていったりするらしい..?)
3. フレーム・パケット構造
フレームというものを使ってデータを送受信する。この時これらは0,1であり、電気や波で表されていることを忘れては行けない。
・D(送信先MACアドレス) 6octet
・S(送信元MACアドレス) 6octet
・T(タイプ) 2octet
・I(情報部)46octet - 1500 octet
・FCS(誤り検出符号)4octet
ここでoctetは基本1byte 8bitである。なぜbyteで言わないかって?1byteじゃない時があるからじゃないかな。ここでも一つ抽象化しておくといつかいいことがあるのさ。ああ、抽象化の神のご加護が在らんことを。
4. MACアドレス
その計算機についているグローバルアドレス。これで世界中の計算機から一意に特定出来る。どうやって付けてるのか気になるよな。僕も気になる。いつか被らないのか気になるよな。僕も気になる。
ちなみに6octetのアドレスである。6octet = 6byte = 8bit × 6 = 2^28 = 2.6億しかないけど大丈夫か。足りなくね。
↑2^48 だった。 300兆くらいらしい。流石に大丈夫そう。
HDLC方式もあるが....
流石にEthernetが圧倒的に大事なので一旦置いておいて後でまとめる。
第4章:ネットワーク層
今回は、隣でない計算機との通信はどうやるかという話。結局は、データリンク層のEthernetで繋がっているということを頭に入れてほしいし、当然、電気や波を使ったシリアル通信もしている。結構繋がってきただろうか。
今回の主役は、IPプロトコルである。ちなみに隣ではない計算機とは、中継機(LAN)を経由した通信の話である。これを理解すれば、幾つものLANを経由し、世界中と繋がれ、インターネットの全貌が見えてくるだろう。非常に楽しいしワクワクが止まらないな。ということで行こう。
IP(Internet Protcol)とは
その名の通り、internetでの通信の規約である。引き続き、規約であることは頭に入れておこう。
IPによって、データリンク層が抽象化される。IPにとってデータリンク層がEthernetかHDLCかどうかなんて知ったことではない。それが抽象化の強さである。君はネットワークで通信するときにHDLCじゃないよな?なんて思ったことはないはず。IPパケット通信だなくらいは思っていてほしいが、AI時代にそんなこと言っても無駄である。
IPアドレス
ホストを一意に識別する32bitの番号である。これはMACアドレスの抽象化されたものである。
ルータなど、IPアドレスを2つ以上持つホストもある。
ホストとはなんだ?
ホストとはなんだ?と思った方が大半だろう。私もその一人である。ホストとは、計算機とほぼ同じだが少し違う。計算機は計算するもの、CPUとメモリがあるものというニュアンスだが、ホストは、ネットワーク上で通信する主体であるというニュアンス。
ネットワークってなんだ?
3層の視点で見た時の世界のことをネットワークと呼ぶのか?よくわからないが先に進めばパッと浮かぶかもしれない。
プライベートアドレス
グローバルに割り当てることがないアドレスである。
外部と通信しなければ自由に利用できる。外部ってなんだよ。隣の計算機として扱える範囲か?LANを超えたらそれは外部か??
ループバックアドレス
自身を指すアドレス。classのthisみたいなもんか。
ブロードキャストアドレス
同じデータリンク上の全てのホストをさすIPアドレス。これが大事になっている。(内部で使えるのがブロードキャストアドレスなら、プライベートアドレスの「外部」の説明あっているのでは?)
サブネットマスク
IPアドレスのネットワーク部とホスト部を識別するための数値
岡山大学:150.46.xx.xxである。
150.46はグローバルアドレス。いわゆる外部との通信用。
岡山大学に複数のルーターがあれば、それは150.46.1とか150.46.2とかになっていくのだろう。
それらに所属するホストたちは150.46.1.1みたいな感じだな。
150.46.1.1と150.46.1.2は同じサブネット(データリンク)だから直接送る。(同じ家の住人だから直接手渡し)
150.46.1.1と150.46.2.1は違うサブネット(データリンク)だから、同じデータリンクのルータに送る。(家が違うから一旦ポストに入れる)
サブネットは技術者が決められる。決めてみたいなあ
問題
・計算機を IPネットワークに接続する際,計算機にIP アドレスを設定しなければならないが,IP アドレス以外の必要な設定項目をあと 2つ挙げよ
1. サブネットマスク?
2. デフォルトゲートウェイ 一旦ポストに入れる場所
• DNS を利用する場合には,もう1つ必要になる.それは何か.
地域かな?一番近いDNSサーバが必要。✖︎
どのDNSサーバを使うかのアドレス⚪︎
DNSサーバは自分でどれを使うのかを決められるのだ。
3層と2層をつなぐ神 ARPテーブル
2層のデータリンク層では、MACアドレス、3層ではIPアドレスとして、ホスト(計算機)を識別してきた。しかし、最終的には、Ethernetで運んでもらうため、MACアドレスは知る必要がある。
それの対応を知ることができるのがARPテーブルである。
ここで混乱しないように言っておくが、ARPは、2.5層である。ブロードキャストという方法を使うので3層っぽいし、MACアドレスなので2層っぽさもあるのでどっちに振り分けるか悩むが、どちらでもないらしい。特殊なプロトコルなのである。
第5章:通信の流れ
ここまでの話でルータを跨いでホスト同士が通信できるようになった。実際にルータを跨いで通信する様子を見ていこう。

農学部のPCから工学部のPCにデータを送りたいとする。
まずは、通信相手のIPアドレスは150.46.1.1と知っていることとする(実際には、ドメイン名からDNSによってIPアドレスに変換することで知ることができる)。
まずは、IPパケットに送りたいデータと通信相手のIPアドレスを格納する。これをethernetフレームに乗せて通信を行う。Ethernetフレームはデータリンク層なので、MACアドレスを知る必要がある。ここで、ARPテーブルを使う。ARPテーブルを見てみると、、

150.46.1.1というdestinationはない。ない時には、defaultの場所に行けば良いので次の場所は、150.46.2.0ということがわかる。これをキーにして検索すると、MAC_R2が得られる。
これをEthernetフレームに乗せてR2に飛ばす。

これが一つの流れである。この後、Ethernetフレームを開けてIPパケットを取り出し、送り先のIPアドレスを知って、ARPテーブルを見る、ethermetフレームを飛ばすを繰り返すと工学部のPCまで届けることができる。一つ一つの動作の繰り返しでデータを伝えているのがわかる。
最後に
これはあくまで大学の授業を聞いて自分なりに理解したものであり、正確な情報ではない。必要に応じてアドバイスや訂正などがあればコメントいただけると幸いです。そして、少しでも理解の助けになったならば高評価、コメントいただけると励みになります。
Discussion