【MACアドレスとは】L2通信の基本的な仕組み

l2nw-mac

この記事のポイント
  • L2(同セグ)の通信ではMACアドレスが必要

  • MACアドレスについて

    • 工場出荷時に値が付与される

    • ユニークな値が付与される

    • 12桁の16進数で表現される

    • 上6桁はベンダーコード

  • L2通信の流れ

    • 宛先IPアドレスを指定する

    • 宛先MACアドレスを自身が知っているか確認する(ARPテーブル)

    • 知らない場合ARPを実行する

    • 宛先MACアドレスへデータを送信する

  • MACアドレスはipconfig /allで確認できる

通信する時はIPアドレスを使うのよね。それ以外の“アドレス”って必要なのかしら?

チャーチルさん

ポン先生

うん、実際の通信ではIPアドレス以外にもアドレスが必要になるよ。具体的な値も含めて確認してみよう。

本記事ではL2通信の仕組みとMACアドレスについて勉強します。他のセグメントとの通信の前にまずは同セグ内通信の基本を確認しましょう。

L2通信の仕組み

まずはL2の通信についてです。一般的にネットワークは役割毎に7つの階層に分割して考えます。これをOSI参照モデルと言います。OSI参照モデルの内、下から2番目のデータリンク層の事をL2(レイヤ2)と言います。ではL2は何かと言うと同セグ(同じセグメント内)の通信です。例えば192.168.100.0/24というネットワークセグメントにおいて192.168.100.10のPCと192.168.100.20のPCの通信は同セグ内の通信です。

でも実際は同セグの通信(例えばPCからPCの通信)ってあまり無いんじゃないの?って思うかもしれませんが、そうでもありません。他のセグメントと通信する際はルータを経由します。ルータを越える際はL3の通信ですがPC~ルータまでは同セグなのでL2通信です。そのためL3通信するためにはL2通信も必須という訳です。

L3通信とL2通信

では実際にL2通信の流れを見ていきましょう。L2通信ではIPアドレスの他に“MACアドレス”というアドレスが必要になります。次章ではMACアドレスについて見ていきます。

MACアドレスとは

MACアドレスとはPCなどのNIC(Network Interface Card)のアドレスです。NICは有線LAN/無線LANに接続するために必要な部品です。例えばPCの有線LANの差し込み口がまさにNICで、内部はカード状の電子基板となっています。ひとまずはIPアドレスを設定できるのであればそれはNICだと思っておけば大丈夫です。MACアドレスはIPアドレスとは違った特徴・ポイントがあるので早速見ていきましょう。

MACアドレス
  • 工場出荷時に値が付与される
  • ユニークな値が付与される
  • 12桁の16進数で表現される
  • 上6桁はベンダーコード

工場出荷時に値が付与される

IPアドレスは“設定値”なのに対しMACアドレスは“固定値”です。工場出荷時に決まった値が割り当てられ、同じ値のまま使い続けます。
※設定変更は可能ですが通常はしないです。

ユニークな値が付与される

IPアドレスはプライベートIPかつ別ネットワークであれば他の端末と同じ設定値で利用可能です。例えば企業AのPCが192.168.100.10、企業BのPCも192.168.100.10で同時にインターネットにアクセスすると言ったことは普通にあります。

一方、MACアドレスは唯一無二の値であり世界中のどの機器とも重複することはありません。そのため、例えばPCを別のネットワークの持っていき接続したとしてもMACアドレスが重複することはありません
※上記の通りMACアドレスの設定変更をしていない事が前提です。

12桁の16進数で表現される

それでは具体的な値を見ていきます。MACアドレスは12桁の16進数となります。16進数とは一桁あたり0~15の16通り表現する方法です。
※よく見る0or1の2進数は一桁あたり2通り 。

0~9は良いとして、10~15はどうするかというとA,B,C,D,E,Fで表現します。例えば10はA、13はD、15はFと言った具合です。そのためMACアドレスは例えば以下のような値になります。

00-01-E6-11-22-33

ポン先生

表記方法はOSによって変わる事があるよ。例えばCiscoのスイッチでMACアドレスを見ると上記は0001.e611.2233となり、ハイフンの有無や切れ目の位置、アルファベットの大文字小文字が変わったりするけど、値としては同じものを表現しているよ。

上6桁はベンダーコード

MACアドレスの12桁の内上6桁はベンダーコードと言い、メーカを表しています。例えば先程のMACアドレスのベンダーコードは00-01-E6ですがこれはHPのベンダーコードです。特定のベンダーコードがどのメーカなのかは検索すればすぐに出てきます。

この事は意外と便利で、例えば良く分からない機器を探す時のヒントにはなります。LANに正体不明な機器が接続されているがMACアドレスは分かっている場合、ベンダーコードを調べればメーカまでは特定出来ます。会社からユーザに貸与しているPCがDELLだった場合、上記の00-01-E6は少なくとも会社PCで無いことは分かります。ネットワーク機器のログからはHP製品の何かだという所までは特定し、どうしても追えない場合は周辺の機器を目視で確認し見つかったHP製品から絞り込む、といったこともあるので知識としては知っておきましょう。

ポン先生

ただし必ずしもベンダーコードと製品のメーカが一致しないこともあるんだよね。例えばDLEEのPCだけどNICがIntel製だった場合、ベンダーコードはIntelで見えてしまうのでそのPCがDELLであることはMACアドレスだけでは分からない事もあるので要注意だね。

L2の通信

では実際の通信の流れを見ていきましょう。以下のようなPC2台の通信を考えます。それぞれ有線で直接接続しています。

MACアドレスですが通常IPアドレスと紐付いています。IPアドレスがあるという事は必ずMACアドレスもセットで存在しています。これは非常に重要になるので忘れずいてください。
※正確に言うとNICに対してMACアドレス(固定値)とIPアドレス(設定値)が付与されている。

■PC1
IPアドレス:192.168.0.1
MACアドレス:00-00-00-11-11-11

■PC2
IPアドレス:192.168.0.2
MACアドレス:00-00-00-22-22-22

L2通信(構成図)

PC1→PC2に通信する場合、以下の流れになります。

L2通信の流れ

①宛先IPアドレスを指定する

②宛先MACアドレスを自身が知っているか確認する(ARPテーブル)

③知らない場合ARPを実行する

④宛先MACアドレスへデータを送信する

①宛先IPアドレスを指定する

同セグ内のL2通信であっても宛先情報としてはIPアドレスが必要になります。この場合はPC2の192.168.0.2を宛先として指定します。

①宛先のIPアドレスを指定する

②宛先MACアドレスを自身が知っているか確認する(ARPテーブル)

宛先の指定はIPアドレスで行いましたが実際の通信はMACアドレスで行います。そのためPC1はPC2のMACアドレスを知る必要があります。IPアドレスとMACアドレスは紐付いているので、この2つの値はセットで管理する必要があります。このセットの事をARPテーブルと言います。PC1は192.168.0.2を自身のARPテーブル上で参照し存在しているか確認します。

②宛先MACアドレスを自身が知っているか確認する(ARPテーブル)

③知らない場合ARPを実行する

初期状態ではPC1は当然PC2のMACアドレスを知りません。そのためまずは192.168.0.2に対応するMACアドレスを知る必要があります。

そこでPC1はARP要求をブロードキャストします。具体的には「192.168.0.2のMACアドレスを教えてくれ~」の要求をブロードキャストします。PC2は受け取ったARP要求の中身が自分のIPアドレスだったので、自身のMACアドレス(00-00-00-22-22-22)をPC1にARP応答します

これによりPC1は無事PC2のMACアドレスを知る事が出来ました。この「宛先のMACアドレスを教えてくれ~」の一連の仕組みをARPと言います。

③知らない場合ARPを実行する

④宛先MACアドレスへデータを送信する

これでようやく準備が整いました。後はPC2のMACアドレス(00-00-00-22-22-22)へデータを送信するだけです。一度通信が発生すればARPテーブルに情報はキャッシュされるので次回以降ARPは不要です。ただしネットワークを一度切り離す、PCを再起動する、ARPテーブルの保持時間が経過する、といった事でARPテーブルからは削除されるためその際はまたARP要求からやり直しになります。

④宛先MACアドレスへデータを送信する

MACアドレス確認方法

MACアドレスの確認方法を説明します。以下はWiodows10 PCの場合の例です。

コマンドプロンプト呼び出し

  • WindowsキーとRキーを同時に押します。
  • “ファイル名を指定して実行”というウィンドウが出てきます。
  • cmdと入力しOKを押します。
cmd

ipconfig /all コマンド

  • コマンドプロンプトという黒いウィンドウが出てきます。
  • ここで“ipconfig /all”と入力します。
  • するとPCの各NICの情報が出てきます。下の表示例だと“イーサネット アダプター イーサネット:”が有線LANポートです。
  • ”物理アドレス”の欄がMACアドレスになります。
  • ipconfig /allコマンドではその他にIPアドレスやサブネットマスク、デフォルトゲートウェイなどの情報も分かります。
ipconfig_all

まとめ

ポイント
  • L2(同セグ)の通信ではMACアドレスが必要

  • MACアドレスについて

    • 工場出荷時に値が付与される

    • ユニークな値が付与される

    • 12桁の16進数で表現される

    • 上6桁はベンダーコード

  • L2通信の流れ

    • 宛先IPアドレスを指定する

    • 宛先MACアドレスを自身が知っているか確認する(ARPテーブル)

    • 知らない場合ARPを実行する

    • 宛先MACアドレスへデータを送信する

  • MACアドレスはipconfig /allで確認できる

今回はL2の通信、主にMACアドレスについて説明しました。IPアドレスは有名ですがその裏では必ずMACアドレスがセットで活躍しています。実際、同セグのPC同士の通信はあまり多くは無いです。しかしルータ経由でルーティングする際のPC~ルータの通信はL2なのでそういった意味ではL2の通信は必ず発生します。宛先と通信できない障害が発生した際の切り分けでも、まずはデフォルトゲートウェイまでpingが当たるか確認します。L3通信の確認の前にまずはL2の正常性確認という訳です。それくらい基本中の基本になるので仕組みや流れは必ず理解する必要があります。