インフラ/ネットワークの知識2(データリンク層)

# はじめに
データリンク層の技術についてまとめていきます.

今回は,MACアドレスやVLANなどデータリンク層にかかわる単語をまとめていきます.


# データリンク層について
データリンク層は,隣接する機器と正確に通信するためのルールが定められた階層です.

つまり,物理層の信頼性を確保するためにある階層ということになります.

では,信頼性を確保するためにどのようなことをしているのかというと,**フレーム化**というものをしています.

まず,データリンク層では,データリンクという論理的な伝送路を作り,その中でエラーを検出します.

そして,データリンクをどのノードに対して作るか,出来上がったデータリンクの中でビットが欠けてないかを判断するためにカプセル化処理を行います.
(物理層はケーブルにデータを流すことしかしないからです)

このカプセル化処理のことを**フレーム化**と呼びます.

# フレーム化について
イーサネットにおけるフレーム化について(イーサネットフレーム)をまとめます.

EthernetⅡのイーサネットフレームは以下の5つのフィールドで構成されています.
また,あて先/送信元MACアドレスとタイプを合わせて**イーサネットヘッダ**と呼びます.

- プリアンブル
- あて先/送信元MACアドレス
- タイプ
- イーサネットペイロード
- FCS

![スクリーンショット 2024-12-22 133814.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586226/d64d8589-b429-051c-3871-564f95152cca.png)

### プリアンブル
イーサネットフレームをこれから送る**合図**のようなものです.

### あて先/送信元MACアドレス
送りたいノードの**MACアドレス**をあて先MACアドレス,自分のMACアドレスを送信元MACアドレスにセットして送出します.

受信側のノードは,あて先MACアドレスを見て受け入れるか破棄するかを判断します.

##### MACアドレス:イーサネットワークに接続しているノードを識別するID

### タイプ
ネットワーク層でどのようなプロトコルを使用しているかを表す識別IDです.
代表的なプロトコルのタイプコードは省略します.

### イーサネットペイロード
ネットワーク層から受け取るデータそのものを表します.

IPを使用していたならば**IPパケット**になりますし,ARPだったら**ARPフレーム**となります.

注意点は,データのサイズは46~1500バイトと決められています.

そのため,データのサイズが足りない場合は**パディング**をして,ダミーのデータを付加する必要があります.

逆に,データのサイズがオーバーする場合は,分割することで1500バイト以内に収めます.

### FCS(Frame Check Sequence)
データが壊れていないかどうかを確認するためのフィールドです.

送信するときに,イーサネットヘッダとイーサネットペイロードに対して一定の計算を行い,その結果をFCSとして付加します.

FCSがエラー制御の役割を担っています.

# MACアドレスについて
ここで,MACアドレスについて詳しく見ていきます.

MACアドレスは48ビットで構成されている一意の識別情報となっています.

さらに,MACアドレスは上位24ビットと下位24ビットで異なる意味を持ちます.

上位24ビットは**ベンダーコード**と呼ばれ,IEEEによって管理されています.

下位24ビットはベンダー内で一意に管理されているコードです.

# L2スイッチ
データリンク層で動作する機器は**L2スイッチ**です.

L2スイッチは,LANケーブルで接続された機器のMACアドレスを記憶し,どの機器がどのポートに接続されているかを把握して通信を行います.

つまり,MACアドレスを基にフレームの転送先の切り替え(**スイッチング**)を行っています.

## L2スイッチのスイッチング
では,どのようにしてL2スイッチはスイッチングをしているのかというと
メモリ上の**MACアドレステーブル**という表をもとにフレームをスイッチングしています.

MACアドレステーブルは'ポート番号','送信元MACアドレス'で構成されていて,どのポートにどのノードが接続しているかを管理します.

そして,L2スイッチでは以下の3つが行われることになります.
- 受け取ったフレームのポートと送信元MACアドレスの登録
- 知らないMACアドレスはフラッディング
- 使わなくなったら削除

## MACアドレステーブルの使われ方(例)
ノードAとノードBの双方向の通信を例にして,
L2スイッチの動作とMACアドレステーブルの使われ方を見ていきます.

#### 1.ノードAがノードBにフレームを送信
![スクリーンショット 2024-12-22 145916.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586226/8fe08e56-0bd5-d981-7220-1e5d2a242c34.png)


#### 2.スイッチがMACアドレステーブルにノードAを登録
![スクリーンショット 2024-12-22 150342.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586226/370a9a25-4fa9-a2b9-7d07-2614f3981498.png)

### 3.フラッディングで一斉送信
![スクリーンショット 2024-12-22 151011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586226/5a413453-412c-bf34-086d-d6bfdd80c973.png)

### 4.関係のあるノードBが応答
![スクリーンショット 2024-12-22 151604.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586226/92a27f1c-c173-e2cf-057d-894bcdc4ca01.png)


### 5.MACアドレステーブルの更新
![スクリーンショット 2024-12-22 151459.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3586226/5b771c78-28d1-2438-26d3-809bed08f21a.png)


### 6.エントリの削除
ポートに接続しているケーブルを抜いたり,一定時間使用されなかったら削除されます.

削除するまでの時間を**エージングタイム**と呼びます.

# VLAN
フラッディングなどで一斉送信するときに,必要ないノードにもフレームが送信されてしまい,
トラフィック的に効率がよくないです.

そのため,スイッチにはドメインを分割する機能が用意されており,
それが**VLAN**となります.

ドメインを分割するためのVLANの設定方法は以下の2つが挙げられます.
- ポートVLAN
- タグVLAN

## ポートVLAN
ポートVLANはポートにVLANを割り当てる設定方法で,
**スタティックVLAN**と**ダイナミックVLAN**の2つがあります.

ただ,ほとんどの場合はスタティックVLANなのでスタティックVLANについて見ます.

スタティックVLANは,ポートごとにVLAN IDを割り当てます.

これにより,そのVLAN IDに所属するノード同士でしか通信することができません.

異なるVLAN IDのものを通信させた場合はL3レベルの機器で中継する必要があります.

## タグVLAN
タグVLANは,VLANをタグ付けする設定方法です.

具体的には,フレームにVLAN情報をタグ付けします.

具体的にはイーサネットフレームに新たにVLANタグ情報をつけることで実現します.

ポートVLANの場合,VLANがスイッチをまたぐときに設定が大変です.

そのような場合,タグVLANを使用します.

タグVLANは,ポートからフレームを創出するときにVLANタグを付加し,受けといるときにタグを外して必要なノードに渡します.

この仕様により,ケーブルとポートは一つで済み,配線もシンプルになります.

最後に,タグVLANを設定するときは**ネイティブLAN**に注意しなければなりません.

ネイティブVLANが接続機器間で同じでなければ,通信ができなくなってしまうので,
VLAN IDだけでなく,ネイティブVLANも合わせる必要があります.

# ARP
**IPアドレスとMACアドレスの関連付けを行う**ためのプロトコルがARPです.

IPパケットのあて先IPアドレスを見て,
同じネットワークのノードだったら,そのIPアドレスのMACアドレスをARPで問い合わせます.

異なるネットワークのノードだったら,デフォルトゲートウェイのMACアドレスをARPで問い合わせます.

つまり,**ARPはIPアドレスからMACアドレスを求めます.**

## ARP Request
ARPの動きは,ブロードキャストでパケットのあて先IPアドレスを問い合わせるイメージです.

ARP Requestはブロードキャストで送信されるため,同じVLANにいるノード全てに行き渡ります.

## ARP Reply
ARP Requestに対する応答をARP Replyと呼びます.

同じVLANにいるノードの中で,対象のIPアドレスを持っているノード1台だけが応答します.

## ARPキャッシュ
ARPは一定時間エントリを保持する**キャッシュ機能**を持っています.

ARPでMACアドレスを知ったら,ARPテーブルのエントリとして追加し,保持します.

エントリを保持している間はARPを送信せず,一定時間が経過したらエントリを削除しARP Requestを送信します.

キャッシュ機能があると,**リアルタイム性に欠けてしまう**欠点はありますが,
ほとんどの場合,MACアドレスもIPアドレスも同じものを使用するので気にする必要はないです.

# 最後に
MACアドレスはPCなどを一意とするために存在しており,
それを基準としてデータの送り先を考えるということは既知でした.

しかし,もう一度丁寧に学びなおしてみることでネットワークへの理解を
深めることができましたし,必要最低限のこともまとめられました.

次回はネットワーク層についてみていきます.

IPアドレスなどが出てくるので,少し厄介だとは思いますが引き続き頑張ろうと思います.

# 参考
[インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門](https://www.amazon.co.jp/%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9-%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E6%8A%80%E8%A1%93-%E8%A8%AD%E8%A8%88%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E3%81%BF%E3%82%84%E3%81%9F%E3%81%B2%E3%82%8D%E3%81%97/dp/4797396806)