【ネットワーク】３分間NetWorking 第12回〜18回 OSI参照モデル レイヤ2 データリンク層

# はじめに
この記事は、3分間NetWorkingを読んでインプットした知識をアウトプットするために執筆しています。
学習内容のまとめ、学習してみての所感や疑問などを記載しています。
記事を読んでみて、間違っていることへの指摘や感想などありましたら、ぜひコメントをいただければ幸いです。
3分間NetWorkingのリンクは以下の通り。
https://www5e.biglobe.ne.jp/aji/3min/

# レイヤ2 データリンク層ってどんな層？
レイヤ2は隣接するノードとの通信に関するプロトコルをまとめたレイヤです。
「隣接ノード」とは、同じ建物や室内などのLANの中で直接繋がっているノードのことを指します。
WANのような異なるネットワークに属するノード同士の通信はレイヤ3 ネットワーク層で定義されます。

#### :bulb:レイヤ2でのトピックス
・イーサネット
・MACアドレス
・ブリッジ・スイッチ
・フレーム

# イーサネット

#### :label:イーサネットの歴史
イーサネットとはレイヤ1〜レイヤ2のLAN規格の一つです。現在のLAN規格はイーサネットが主流となっています。
イーサネットには2つの規格が存在します。DIXイーサネットとIEEE802.3です。
DIXイーサネットは「DEC」「Xerox」「Intel」の3社により作成された規格で、現在のイーサネットの原型となっています。
IEEE802.3は、DIXイーサネットを国際標準規格にするべく、IEEEによって制定された規格で、現在はイーサネットと言えばこちらを指します。

#### :label:IEEE802.3の仕様
IEEE802.3ではデータリンク層をさらにMAC副層（Media Access Control）とLLC副層（Logical Link Control）に分けて考えます。
MAC副層は複数のデバイスで同じネットワークメディア（ケーブルなど）を使用する際に、衝突が起こらないように、データをどのように送受信するかを決めます。
LLC副層は、メディアのような媒体に依存しないIEEE802.2という共通規格を定義しています。
LLC副層は、データリンク層の論理的な部分を担当し、エラーチェックやネットワーク層へのサービスの提供など、データの正確性を確保するための機能を提供しています。

#### :label:フレーム
各レイヤごとに送信データにヘッダが付加されることをカプセル化と言います。
データリンク層では、フレームと呼ばれるものが付加され、さらにトレーラと呼ばれるエラーチェック用の情報も付加されます。
トレーラはデータリンク層でのみ、付加されるものです。
フレームのフォーマットは左から順に以下の通り。

プリアンプル/宛先MACアドレス/送信元MACアドレス/フレームタイプ/FCS（トレーラ）

###### プリアンプル
フレームの開始をノードに認識させます。受信時に破棄されるので厳密にはフレームには含みません。

###### 宛先MACアドレス/送信元MACアドレス
送信先と送信元のノードを識別するための番号です。

###### フレームタイプ
上位層のプロトコルを識別するための番号です。

###### FCS
エラーチェック用の値が格納されています。

#### :label:CSMA/CD（送信側の制御）
イーサネットでは送信されたフレームは、メディアを通りすべてのノードに到達します。
特定の誰かに送る時でも、データが全員に送られます。このような型をブロードキャストと呼びます。
この時、誰かがデータを送っている最中は、衝突を回避するために他の人はデータを送信することができません。
そこで、CSMA/CDという制御を行います。
まずは、誰かがデータを送っているかを確かめ、データ送信中であれば送信完了まで待機するキャリア検知（CS）。

データの送信が終わったら、次に誰がデータを送信しても良い。特に送信順などは定めていないからです。これが多重アクセス（MA）。

データ送信中に、誤ってデータを同時に送信してしまった時、一旦データの送信を止めて、待機する衝突検出（CD）。CSで確認漏れが起こった際にCDが発生することがあります。
上記のように3つの制御を行なって、データの衝突を防いでいます。

＜イーサネットでのCSMA/CDの流れ＞
1.送信準備
イーサネットフレームを作成し、衝突カウンタを0にする。
※衝突カウンタ：衝突の回数を数えるもの。

2.CSMA
キャリア信号を検知する。なければ一定時間待った後に送信開始。

3.CD
送信中に衝突したかどうかを検知。衝突していなければ送信完了。
衝突していた場合、フレームの送信を一時中止し、JAM信号を送信。
※JAM信号：衝突発生を知らせる信号のこと。

4.バックオフ
衝突カウンタをプラス1。
衝突カウンタが16ならば、作成したフレームを破棄し、送信中止。
16未満であれば、ランダムな時間待機後、「2」に戻る。
あまりに連続して衝突が発生する場合、ネットワーク自体に障害があるか、あまりにも混雑していることが多い。その場合、何度送信しても無意味のため、16回を一つの指標にして、それ以上は送信を中止します。
※バックオフ：衝突が起きた場合の行動のこと。

#### :label:CSMA/CD（受信側の制御）
送信側でCSMA/CDでアクセス制御を行うように、受信側でもフレームを受け取った際に一定の制御を行っています。
イーサネットでは、ブロードキャストによってフレームが全員に届きます。
そのため、自分宛でないフレームも全て受信することになるが、送られてきたフレームをわざわざ全て読んで判断することはしません。
そこで、受信した時点で宛先MACアドレスと自分のMACアドレスを比較し、自分宛かどうかを確かめます。
自分宛ではなかった場合、その場で破棄します。
自分宛のフレームだった場合、エラーチェックを行い正しいデータであることを確かめます。
エラーだったら破棄し、正しかった場合はレイヤ3に引き渡す。

#### :label:全二重通信/半二重通信
イーサネットは正常な動作時には、基本的に送信しか行っていない。他の端末が送信中はCSMA/CDによって送信せずに待機となるからです。
送信のみ、受信のみのどちらか一方を切り替えて通信を行う方式を半二重通信と言います。
同軸ケーブルを使用したイーサネットであれば、半二重通信となるが、それ以外のツイストペアケーブルや光ファイバでは別の通信方式を使用できます。
仮にツイストペアケーブルの場合、4本2組で送信側と受信側を相互に繋いでいるため、送信中に受信することもできます。
送信と受信が同時に行える方式を全二重通信と言い、コリジョンが起こらないためCSMA/CDも必要ありません。現在は全二重通信が主流です。
しかし、全二重通信を行うには、ノードが対応していること以外にも条件があり、例えばリピータハブを使用すると全二重通信は行えません。これは、リピータハブの内部が1本の同軸ケーブルのようになっており、送信・受信で分かれていないからです。
スイッチであれば内部で衝突が起きない仕組みになっているため、全二重通信を行えます。

#### :label:ベストエフォート型配送
イーサネットではCSMA/CDというシンプルなアクセス制御を行います。
そのため、制御に特別な機器が必要なく、安価にネットワーク構築が可能です。
しかし、シンプルが故の欠点もあり、エラーフレームは問答無用で破棄してしまう所です。
さらに送信側には破棄されたかどうか分かりません。受信側はエラーを修正したりもしません。
このような通信方法をベストエフォート型配送といいます。
ベストエフォート型とは、分かりやすく言うと「取り敢えず頑張るけど、ダメだった時は諦めるね」というような型です。取り敢えず送信はするけど、エラーがあった時は何も保証しないよという意味です。

# MACアドレス
#### :label:MACアドレスとは
MACアドレスはNICにつけられた物理アドレスです。
NICのROMに焼き付けられており、NICが作られた段階で決定されています。
各デバイスには必ずNICが取り付けられているので、各デバイスをMACアドレスで識別することが出来るようになります。
MACアドレスは全世界で重複がないように付与されています。
レイヤ2では、フレームの送信元や宛先を識別するために、MACアドレスが使われています。

#### :label:MACアドレスの構成
MACアドレスは48ビットからなり、人間が分かりやすいように16進数12桁の番号で表記されます。
48ビットのうち、先頭の24ビットをベンダーコードと呼び、NICを作ったベンダーの番号が表記されています。ベンダーコードはIEEEが決定したものです。
後半の24ビットは、シリアル番号と呼び、ベンダーが任意につけたコードです。
つまり、MACアドレスは「どこのベンダーが製作した、何番のNIC」ということになりますが、実際にはどこのベンダーが作ったかの情報は重要ではなく、デバイスを識別さえできればどんな名前でも良かったのです。
しかし、MACアドレスは重複してはならないことから、一番手軽に重複なしの番号を付与するのに、ベンダーコードが使われているというわけです。

#### :label:MACアドレスの欠点
MACアドレスの欠点として、アドレスと実際の機器の場所が無関係であるというところです。
MACアドレスとは、「どこのベンダーが製作した、何番のNIC」という名前でしかなく、そのデバイスの場所までは特定することができません。
しかし、LAN環境であれば、限られた狭いネットワークになるので、名前だけわかれば場所を特定することも可能です。
WANやインターネットとなると、名前だけでは場所までは特定できなくなります。
この欠点をフォローするのが、レイヤ3の論理アドレスです。論理アドレスについては、レイヤ３の記事で記述します。

# レイヤ2デバイス

#### :label:ブリッジ
ブリッジはLANとLANを繋ぐノードです。
ハブとの違いは、ハブは来た信号を全てのノードに流してしまうが、ブリッジは宛先のセグメントを識別して、宛先のセグメントに信号を流すことができます。
ネットワークの区切りをセグメントと呼びますが、2つの異なるセグメントを繋げるのがブリッジの役割です。
あくまで、宛先のセグメントを認識するのであって、例えば宛先が異なるセグメントのノードだった場合、そのノードの場所までは認識することができません。

#### :label:MACアドレスフィルタリング
ブリッジは受け取った信号（フレーム）から宛先MACアドレスを読み取ります。
宛先が同じセグメント内だった場合、ブリッジはフレームを通しません。同じセグメント内であれば、外部の異なるセグメントに送る必要がないからです。同じセグメントかどうかは、MACアドレスで判断します。
このフレームを通過させる、させないの判断をフィルタリングと言います。

ブリッジはポートごとにMACアドレステーブルと呼ばれる、MACアドレスと各ポートの対応表を見て、宛先MACアドレスと照合しながら判断を行います。
アドレスがある場合は、同じセグメント内にあるということになるため、フレームを通過させません。
逆にアドレスがない場合、フレームを通過させます。この時、ブリッジは宛先MACアドレスのあるポートまでは識別できないので、宛先のセグメントの全てのノードに流してしまいます。

#### :label:ブリッジの利点
ブリッジの利点として、宛先MACアドレスを認識して、宛先のセグメントによってフィルタリングすることにより、他のセグメント宛のデータがあまり入り込まなくなることがあげられます。
それにより、ネットワーク全体のトラフィックが減り、衝突が少なくなります。

さらに、ブリッジではJAM信号や衝突で壊れたデータも認識して、外部に通さないので、外部のセグメントの衝突の影響を受けません。
このことにより、セグメント内の通信効率が上昇します。

#### :label:ブリッジの欠点
ブリッジはフレームを読み取って、宛先セグメントを認識することができるが、そのことが逆に欠点にもなってしまっています。
受けた信号をそのまま流すハブに比べて、ブリッジは読み取る時間が発生してしまい、10〜30%程度遅くなってしまいます。つまり、ブリッジはセグメント内の通信効率を上げることができるが、ネットワーク全体に遅延を発生させてしまうというデメリットがあります。それでも、衝突が発生するよりはだいぶマシです。

もう一つ、ブリッジではブロードキャストを止めることができないのも、デメリットの一つです。
ブリッジはあくまで、セグメントの内側向けのフレームを止める役割です。ブロードキャストは内側・外側に関わらず、全ての宛先にフレームを送信するため、ブリッジでは止めることができません。

#### :label:レイヤ2スイッチ（スイッチングハブ）
スイッチはブリッジと同様に、MACアドレスによるフィルタリングを行います。
ブリッジと異なる点としては、マルチポートであることです。スイッチは一般的に3〜数百のポートを持っています。ブリッジはポートを2つしか持っていません。
マルチポートであるため、スイッチはフレームをどのポートに送るかまで判断します。
送信元のポートと、宛先の受信ポートを直接繋ぐことで、フレームを送信するのですが、間にハブなどが入ると、直接繋ぐことが出来なくなるので機能しません。
スイッチングハブと呼ばれるのは、複数のポートがあるため、見た目がハブにそっくりだからです。

同じ宛先への送信が同時にあった場合、スイッチはフレームの衝突を回避するために、バッファメモリと呼ばれる、一時退避スペースにどちらか一方のフレームを格納します。
もう一方のフレームの送信が完了し、伝送路が空いたら、バッファメモリから出して、送信します。
この方式をストアアンドフォワード方式と言います。ハブにはない機能の一つです。

#### :label:スイッチの利点
スイッチの利点として、宛先のポートを識別し、フレームを送信できることがあげられます。
さらに、送信元と受信先を直接繋いで、1:1で送信するため、衝突が発生しません。
複数のデバイスから同時に送信したとしても、バッファメモリの活用により衝突が発生しないため、複数のデバイスから同時に送信ができます。

スイッチの欠点としては、ブリッジと同様にフレームの読み取りに時間がかかることと、ブロードキャストを止められないことがあげられます。

# まとめ
今回はOSI参照モデル レイヤ2 データリンク層についてまとめました。
次回はレイヤ3 ネットワーク層についてまとめます。
最後に、記事を読んで間違いの指摘などがあればコメントで教えていただけると幸いです。
ありがとうございました。