【CCNA】VLANについてまとめてみた

# スイッチの動作
* スイッチはフレームを受信すると、送信元MACアドレスを学習します。
  - VLANも記憶する
* MACアドレステーブルに受信したフレームの宛先MACアドレスと一致する情報が無ければ、そのフレームをフラッディング（**受信ポート以外の全ポートから送信**）します。
* MACアドレステーブルに受信したフレームの宛先MACアドレスと一致する情報があれば、そのポートから転送します。
* **VLANを分けている場合は、同じVLANにのみフラッディングします。**
* スイッチは直接接続されたデバイスのMACアドレスを学習する
* 動的に学習したMACアドレスはエージングTIMEがきたら自動的に消去される
* **ポートにVLANIDを割り当てる。デフォルトはVLANID 1**

レイヤ2スイッチは、物理アドレスに基づいて転送処理を行います。
送信先を決定するためには、受信フレームのフレームヘッダに格納されている、宛先MACアドレスを使用します。

## スイッチの管理VLAN
スイッチのデフォルトの設定では全てのポートがアクセスポートVLAN1になっているので、管理VLANは「VLAN1」に設定


# Vlanとは
* **スイッチでVlanを分割する機能**
* Vlan = ブロードキャストドメイン = サブネット
* VLAN IDで識別
* スイッチのポートはVLANID1が最初から割り当てられている
* 使えるVLANは`1-1001、1006-4094`

# IEEE 802.1Q  【 dot1q 】 
http://e-words.jp/w/IEEE_802.1Q.html

各VLANグループに固有の識別番号（VLAN ID）を割り当て、これを送受信されるデータ単位（イーサネットフレーム）のヘッダ部（制御情報）に記述してグループを識別する**「VLANタギング」（VLAN tagging）の方法について規定**

**「ネイティブVLAN」とは、トランクポートを流れるフレームにVLANタグが付与されない唯一のVLANです。**
ネイティブVLANは、スイッチを管理するトラフィック（CDPやSTPやDTPなど）の送受信で利用されます

# トランクポートとアクセスポート
## トランクポート
* **タグ付を行う(タギング)**
* スイッチ間を一本のケーブルで結び、複数のVLANを割り当てて、転送するポート
* トランクリンクでフレームを伝送する際にタグ（VLAN識別情報）を付けます。**送信側でタグをつけて、受信側でタグを外す**
* 受信側では挿入されたVLANタグを参照してどのVLANのポートに転送するかを決める


## アクセスポート
* **タギングはされない** スイッチでパケットがどのVLANに属するか判断して、そのVLANのポートに流す
* **ポートにVLAN IDを割り当てる。デフォルトはVLANID 1**
* 一つのケーブルで一つのVLANフレームを転送するポート

**デフォルトで、アクセスポートで動いている**

```
Switch#show int switchport
Name: Fa0/1
Switchport: Enabled
Administrative Mode: dynamic auto  //設定したモード(デフォルトで DTPのdynamic auto)
Operational Mode: static access    //実施のモード(アクセスポートとして動作)
Administrative Trunking Encapsulation: dot1q
Operational Trunking Encapsulation: native
Negotiation of Trunking: On　　　　// DTP ON
Access Mode VLAN: 1 (default)     // VLan1が割当られている
Trunking Native Mode VLAN: 1 (default)
Administrative Native VLAN tagging: enabled
```


# vlanコマンド
## vlanの状態確認
* show vlan
* show int switchport
  - IFのアクセス/トランク/トランクプロトコル/DTPなど確認できる
* show int trunk
  - トランクでどのVlanが許可されているかなど確認できる
* show int Fa/01 switchport

VLAN1002-1005は予約されている
act/lshutはVLANのshutdown状態。

```bash
Switch#show vlan
VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/1, Fa0/2, Fa0/3, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Gi0/1
2    windows                          active
1002 fddi-default                     act/unsup
1003 token-ring-default               act/unsup
1004 fddinet-default                  act/unsup
1005 trnet-default                    act/unsup

VLAN Type  SAID       MTU   Parent RingNo BridgeNo Stp  BrdgMode Trans1 Trans2
---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------
1    enet  100001     1500  -      -      -        -    -        0      0
2    enet  100002     1500  -      -      -        -    -        0      0
1002 fddi  101002     1500  -      -      -        -    -        0      0
1003 tr    101003     1500  -      -      -        -    -        0      0
1004 fdnet 101004     1500  -      -      -        ieee -        0      0
1005 trnet 101005     1500  -      -      -        ibm  -        0      0
```

### スイッチポートのVLAN情報の表示
show int IF名 switchport

```
Switch#show int Fa0/1 switchport
Name: Fa0/1
Switchport: Enabled
Administrative Mode: dynamic auto
Operational Mode: static access
Administrative Trunking Encapsulation: dot1q
Operational Trunking Encapsulation: native
Negotiation of Trunking: On
Access Mode VLAN: 1 (default)
Trunking Native Mode VLAN: 1 (default)
Administrative Native VLAN tagging: enabled
Voice VLAN: none
```

### VLAN作成
【ｺﾏﾝﾄﾞ構文:VLAN作成】
(config)#vlan {vlan番号}
(config-vlan)#name {vlan名} (任意)

### アクセスポート作成
【ｺﾏﾝﾄﾞ構文:VLANの割り当て】
(config-if)#switchport access vlan {VLAN番号}

【VLAN番号】
･1～4094から指定(作成)可能
･ﾃﾞﾌｫﾙﾄでVLAN1とVLAN1002～1005が作成済み
･ﾃﾞﾌｫﾙﾄで作成されているVLANは削除できない



## show int trunk
https://www.infraexpert.com/study/vlanz4.html



# トランクプロトコル
* トランクポートでのおはなし。一つのケーブルで複数のVLANフレームを同時に転送するための技術
* IEEE802.1qとISIL(シスコ独自)
  - 主流はIEEE802.1q でISILはほとんど使われていない

# ネイティブVLANとは(IEEE802.1q)
* トランクリンクでのおはなしで、IEEE 802.1Qの機能
* トランクリンクでは、タグを挿入することによって、受信側でVLANトラフィックを区別している
* 対向のスイッチから**トランクポートでタグなしのフレームを受信した場合、ネイティブVLANからのトラフィックだと認識される**
* よって、両端のスイッチでネイティブVLANを合わせている必要がある
* デフォルトのネイティブVLANは1
* ネイティブVLANは「switchport trunk native vlan {VLAN番号}」コマンドで変更できます。変更していないデフォルトの状態ではVLAN1がネイティブVLANになっています。
* IEEE 802.1Qに対応していない（タグを理解しない、タグ付け出来ない）デバイスとの互換性を持たせています。

# 管理VLAN
* telnetやSNMPで管理するためのVLAN
* デフォルトの管理VLANは1

# ネイティブVLANが異なっている
https://www.atmarkit.co.jp/ait/articles/1602/25/news046.html

　「ネイティブVLAN」とは、トランクポートを流れるフレームにVLANタグが付与されない唯一のVLANです。ネイティブVLANでない通常のVLANの場合は、フレームにVLANタグが付与されます。このとき、対向のスイッチ間でネイティブVLANが異なる場合、ネイティブVLANミスマッチが発生します。例えば、以下のような場合です。

スイッチA：ネイティブVLAN【20】
スイッチB：ネイティブVLAN【50】
　スイッチA、Bが直接接続されており、上記の設定がされているとき、スイッチAからBへVLAN20のフレームはタグなしVLANとして送信されます。ですが、スイッチBで想定しているのは「タグ有り」のVLAN20フレームです。結果として、ネイティブVLANがミスマッチの状態となり、通信ができません。


# ネイティブVLANと管理VLAN
 ネイティブVLAN＝管理VLANと認識されるのは、実際に利用する際に同じにするケースが多いためです。利用方法により、別々にすることも出来ますし、同じVLANを割り当てることも出来ます。

**デフォルトではネイティブVLANも管理VLANも1**

これにより、IEEE 802.1Qに対応していない（タグを理解しない、タグ付け出来ない）デバイスとの互換性を持たせています。
ネイティブVLANは、スイッチを管理するトラフィック（CDPやSTPやDTPなど）の送受信で利用されます。

# DTP
* スイッチとスイッチを接続したポートで対向のポートとネゴシエーションしてポートをアクセスポートとするか、トランクポートとするかを決定するためのCisco独自のプロトコルです。
* **トランクポートの場合、IEEE802.1QまたはCisco ISLのカプセル化プロトコルのネゴシエーションも行います。**

* スイッチ毎にデフォルトの設定は異なる
  - **show int switchport で確認できる**


### 【コマンド構文：DTPの無効化】
(config-if)#switchport nonegotiate
対向のデバイスによってはDTPが正しく動作しないことがあります。（DTPをサポートしていないデバイスもあるため）
そのためトランクポートにする場合は、「switchport nonegotiate」でDTPを止めて「switchport mode trunk」で手動でトランクポートにすることが推奨されています。

### 【コマンド構文：VLANカプセル化方式の指定】
Switch(config-if)#switchport trunk encapsulation dot1q

カプセル化形式としてシスコ独自のisl、標準化された802.1q形式のdot1qを指定出来ます。他社機と接続する場合はdot1qの指定が必須です。Catalyst間の接続でも最近は殆どdot1qが使われています。デフォルトは自動で接続先とisl優先でネゴシエーションします。**又、Catalyst2960等、dot1qだけサポートしており、コマンド自体が使えないスイッチもあります**


### DTP送信の停止
　(config-if)# switchport nonegotiate

通常はDTPは使わない

## 動的なトランクポートの設定　DTPの設定
**switchport mode dynamic desirable | dynamic auto**

accessとtrunkは自身のポートをaccessとtrunkにする。
↓は対抗によって自身のポートを変える。対抗がaccessだと、accessになる(不一致だと通信すらできないので)

* desirable 
  - **DTPを送信する**
  - **互いにトランクポートになろうとする**
  - 対向がaccessのみ、accessになる
* dynamic auto
  - **DTPを受信する**
  - **対抗のポートによって自動で自身もそのモードになる**
  - 対向がaccessまたは、dynamic autoの場合、accessになる
 
## 静的なトランクポートの設定
ポートを明示的にトランクに設定する

// 両方のプロトコルをサポートしている機種のみ必要
//トランクプロトコルは機種によってはdot1qのみサポートだけなどあり、その場合、**このコマンド自体がない**
switchport trunk encapsulation isl | dot1q | negotiate(デフォルト)

switchport mode trunk
switchport nonegotiate

https://beginners-network.com/cisco-catalyst-command/switchport-trunk-encapsulation.html
デフォルトは自動で接続先とisl優先でネゴシエーションします。
又、Catalyst2960等、dot1qだけサポートしており、コマンド自体が使えないスイッチもあります。

switch port mode trunk //明示的にトランク対抗もトランクポートにするようにDTPを送信
switchport mode auto   //対抗ポートによって自身のポートのモードが変わる
switchport mode auto   //対抗ポートによって自身のポートのモードが変わる。お互いにトランクになれるようにDTPを送信する

# VLAN間ルーティング
* スイッチ-ルータ構成
* L3スイッチ構成


VLANインタフェース= SVI = 論理インターフェース

https://milestone-of-se.nesuke.com/nw-basic/ethernet/vlan-svi-routed-port/

SVI の作成
◆　SVI の作成
(config)# interface vlan vlan-id
(config-if)# ip address address mask
(config-if)# no shutdown 

# トランクポート、アクセスポートの確認コマンド
```
show interfaces trunk
show vlan
show interfaces switchport
show interfaces status
```

# VTP
VTPはスイッチ間でVLAN情報を同期するためのプロトコルです。
VTPには「サーバモード」「クライアントモード」「トランスペアレントモード」という3つのモードがあります。

* サーバモードはVLAN情報を同期するモードです。VLANの作成と削除が可能です。
* クライアントモードはVLAN情報を同期するモードです。VLANの作成と削除はできません。
* トランスペアレントモードはVLAN情報を同期しないモードです。VLANの作成と削除が可能です。

【VTPによるVLAN情報の同期の条件】
1. トランクポートによる接続
2. VTPドメイン名の一致
3. VTPモードはサーバもしくはクライアント
4. VTPパスワードの一致（VTPパスワードが設定されている場合）
5. VTPバージョンの一致

＜コマンド構文：VTPドメイン名の設定＞
Switch(config)#vtp domain {VTPドメイン名}

＜コマンド構文：VTPモードの変更＞
Switch(config)#vtp mode {server | client | transparent}

＜コマンド構文：VTPパスワードの設定＞
Switch(config)#vtp password {パスワード}

＜コマンド構文：VTPバージョンの変更＞
Switch(config)#vtp version {1 | 2}

【VTPプルーニング】
VTPプルーニングとは、ブロードキャストの宛先VLANが存在しない（使われていない）スイッチへは、フレームを送らないようにする技術です。
VTPプルーニングを有効にすることで、不要なトラフィックを減らす事が出来ます。

＜コマンド構文：VTPプルーニングの有効化＞
Switch(config)#vtp pruning

【リビジョン番号】
VTPリビジョン番号は、VLANの設定変更があるたびに1ずつ増えていく数値です。
VLAN情報はリビジョン番号が一番大きなものを最新として、リビジョン番号が一番大きなものにVLAN情報を同期させます。
「サーバ」と「クライアント」はVLAN情報を同期するため、設定変更ごとにリビジョン番号が増えていきますが、「トランスペアレント」はVLAN情報を同期させないため、リビジョン番号は常に0になっています。

【VTPアドバタイズメント】
VLAN情報を同期するにあたり VTPでは「VTP要約アドバタイズメント」や「VTPアドバタイズメント要求」といったメッセージを使用します。
VTP要約アドバタイズメントは VTPドメイン名やリビジョン番号を通知するメッセージで、サーバモードのスイッチが5分毎に送信します。
VTPアドバタイズメント要求は、VTP要約アドバタイズメントメッセージを要求するためのメッセージです。サーバモードやクライアントモードのスイッチを再起動した場合や、VTPドメイン名を変更した場合に送信します。

【VTPの確認】
VTPの情報を確認するには「show vtp status」コマンドを使用します。


# 音声VLAN
【音声VLAN】
音声VLANとは、IP PhoneとPCのデータを別々のVLANに分離する機能です。
音声VLANを設定し、音声トラフィックとデータトラフィックを論理的に分離することで、音声トラフィックを優先的に処理できるようになります。

【音声VLAN設定時の主な注意点】
音声VLANを設定する際は以下の点に注意する必要があります。
・音声VLANを設定するポートはアクセスポートにする
・音声VLANを設定するポートではCDPを有効にしておく（CDPはデフォルトで有効になっているため、CDPの設定は必要ありません）
・音声VLANを設定すると自動的にPortFastが有効になる

【音声VLANで使用する主なコマンド】
(config-if)#switchport mode access
音声VLANを使用する場合、ポートはアクセスポートにします。

(config-if)#switchport voice vlan {VLAN_ID}
音声用のVLANを指定します。ここで設定された音声用のVLANは、CDPによってCisco IP Phoneに通知されます。

(config-if)#switchport access vlan {VLAN_ID}
PCデータ用のVLANを指定します。

#show interfaces [インターフェース] switchport
スイッチポートの設定情報を表示します。