FreeBSD
vlan
ethernet
More than 1 year has passed since last update.

.1Qと言われるVLANの機能はイーサーフレームに4バイトのタグを入れます(tagged)。タグのID部分は12ビットで全のビットが1と0以外が指定できるので4094通りの区別ができます。

VLAN-FIG.png

FreeBSDではvlan(4)がこの機能をサポートしています。

FreeBSDのホスト間でのVLANを使ったデータの流れは以下のようになります。

VLAN-FIG2.png

vlanはtag入りのパケットをifに渡します。インターフェースはそれをEthernetに出します。

受け取ったインターフェースはtagが入っているため該当のIDのvlanに渡します。

Switchへ送る場合はタグが一致しているポートからtagが削除(untagged)されて出されるように、Switchを設定します。

VLAN-FIG3.png

etherswitch(4)を使った設定につていはこちらに書きました。

.1Qなパケットが入ってきているかどうかはtcpdumpのeオプションで確認できます。

# tcpdump -e
00:02:29.230425 xx:xx:xx:xx:xx:xx (oui Unknown) > xx:xx:xx:xx:xx:xx (oui Unknown
), ethertype 802.1Q (0x8100), length 102: vlan 1, p 0, ethertype IPv4, 10.10.10.
3 > 10.10.10.5: ICMP echo request, id 30032, seq 7, length 64

ついでにSwitchの事も書いておく。90年代の10BaseTの頃はハブがほとんどでしたが2000年前後に100BaseTの時代になってSWITCHが安価に提供されるようになりました。

SwitchはMACアドレスを元に送信先のポートを限定して、通信効率を上げる仕組みです。

HUB-SW.png

通常の通信はポート間のみになりますが、通信の最初におこなわれる相手のMACアドレスを解決するARPはブロードキャストなので全てのポートに送信されます。マルチキャストも全ポートに送信されます。マルチキャストの説明

1998年に.1qがIEEEで規格化されSwitchにVLAN機能が付くようになりました。VLANはSwitchを複数のネットワークに分離する仕組みで主にセキュリティ確保の為に使われます。複数のSwitchにまたがって設定する事もできます。

HUB-SW2.png

上の図ではポートeはcとdとは通信できるがaとbとは通信できない設定を示しています。

この仕組を利用してネットワークインターフェースが1つしかないSOCにSwitchをつないでデュアルポートのルータを作る事ができます。

VLANには.1qとPORT BASEの仕様があります。.1qは上で書いたようにtagで区別していて、PORT BASEはPORT毎に通信できるPORTを設定します。

タグを挿入する事でフレーム最後のCRCが変わってくるので再計算が必要になります。

ifconfigでvlan(4)を設定する場合に、元のインターフェースがupされてないと機能しません。

netgraphにもvlanのモジュール(ng_vlan)がありますが、調べていません。