パソコン実習室
アドレスとポート
≪ previous next ≫

U.MACアドレス

 前章でみたIPアドレスは、プロバイダーあるいは家庭用ルーター等によって動的に割り当てられた論理的なアドレスです。
 一方でパソコンやサーバーに搭載されているネットワーク アダプタ―※1には、製造段階で製品個々に書き込まれるアドレスがあり、このアドレスをMACアドレスといいます。MACアドレスはLAN内やインターネット内でパケットをリレー(受け渡し)する際に一時的に使われます。

※1 ネットワーク アダプタ―
ネットワーク インターフェース、ネットワーク カード、NIC(Network Interface Card)、LANカード等、様々な形状・名称がありますが、ここではネットワーク アダプタ―と呼ぶ事にします。


U.1.MACアドレスの表記

 パソコンやサーバー、ルーター等に搭載されているネットワーク アダプタ―には、個々のアダプターを識別するための番号が書き込まれています※2。 この番号をMACアドレスといいます。 MACアドレスは他のネットワーク アダプタ―と重複しないよう管理されているので、パソコンやサーバー等を特定するのに用いられます。

※2 書き込まれています
ネットワーク アダプタ―製造過程でEPROM等に書き込まれます。
実際の通信で使われるMACアドレスは、ソフトウェアがコントロールしているので変更可能です。

 MACアドレスは、ネットワーク アダプター等のハードウェアに割り当てられている固有識別子(番号)で、物理アドレスともいいます。
48ビットの符号(2進数)を、1バイト※3ごとにダッシュ(-)や コロン(:)の記号で区切って、16進数で表記します。大文字小文字は区別しません。 (記号を使わない場合もあります)。

 MACアドレスの表記例. 下記3例は全て同じMACアドレスを表しています。
a8-97-dc-98-ac-1bA8:97:DC:98:AC:1Ba897dc98ac1b

※3 1バイト(8ビット)
 情報通信の分野では8ビット単位のデータをオクテット(octet)と呼びます。
一方でバイトという呼称はその歴史的経緯から必ずしも8ビットとは限らないのですが、 一般に 1バイト=8ビット の考え方はかなり浸透していることから、ここではバイトと表現しています。


パソコンのMACアドレスは次の方法で確認できます(windows10の場合)。
  1. [スタート] をクリック後、電源ボタンの上にある歯車模様の [設定] を選択。
  2. [ネットワークとインターネット]を選択。
  3. ネットワークの状態を表示しているイラストと説明文の下にある [プロパティ] を選択。
  4. 大文字表記の [ネットワーク プロファイル] や [従量制課金接続] といった項目の中から [プロパティ] を探します。
  5. 最下段にある [物理アドレス(MAC):] を参照します。



U.2.構成と管理

 MACアドレスは48ビットの固定長です。前半の24ビットは機器を供給するベンダーに割り当てられた固有の識別子(番号)で、OUI(Organizationally Unique Identifier)、 ベンダーID、company id と呼ばれています。
 後半の24ビットは製品IDと呼ばれる部分で、個々の製品(ネットワーク アダプタ―)に重複しない番号が割り当てられます。製品IDの管理はベンダーに任されています。
 IEEE(Institute of Electrical and Electronics Engineers)とベンダーがそれぞれの部分を管理することで、結果として世界で1つだけの重複しないMACアドレスが保証されています。



 MACアドレスを必要とするベンダーはIEEEに申請してOUIの割り当てを受けなければなりません(有料です)。
 1つのOUI(ベンダーID)があれば24ビットの製品IDを使って約1,660万個のMACアドレスを作れますが、不足するような時は複数のOUIを取得する(もちろん有料です)ことも可能です。実際に多くのベンダーが複数取得しています。
 IEEEでは小規模なベンダーIDの割り当ても行っています。OUIの24ビットに12ビットを加えた36ビットのベンダーIDで、IAB(Individual Address Block)と呼ばれています。IABの場合ベンダーが使用できる製品IDは12ビットの4096個になります。

 IEEEでは OUIの一覧 および IABの一覧 をテキストファイルで公開しています。
ちなみに表記例(前項)のベンダーID A8-97-DC はIBMになります。


 OUI、IABといった名称は使われ続けるようですが、IEEEが行うアドレス割り当ての定義は MA-L、MA-M、MA-S に変わったようです。
  MA-L (MAC Address Block Large) 24ビットのベンダーID。(OUIと同じです)。
  MA-M (MAC Address Block Medium) 28ビットのベンダーID。
  MA-S (MAC Address Block Small) 36ビットのベンダーID。(IABと同じです)。


U.3.I/G ビット

 MACアドレスは下に示す通り48ビット(6バイト)で構成されますが、この中に重要な意味を持つビットがあります。


 左の図は先頭の(第1)バイトを抜き出してビット単位に示したもので、左側が上位ビットで右側が下位ビットになります。
 青で色分けしてある最下位ビット(0ビット目)が I/G ビットと呼ばれているもので、転送先が個別(Individual)なのかグループ(Group)なのかを指定します。

 I/Gビットが 0 の場合、そのMACアドレスは1台のネットワーク アダプターが対象であり、端末同士が1対1で通信を行うユニキャストを示しています。 一般的な通信(web閲覧やメール等)はユニキャストであり、ネットワーク アダプターに書き込まれているMACアドレスがそのまま使われます。

 一方でI/Gビットが 1 の場合は、複数の端末を通信の対象とした 1対多 のマルチキャストであることを示します。 マルチキャストはテレビ会議システム等の同時配信サービスに用いられます。 この時のMACアドレスはネットワーク アダプターに書き込まれた値は使われず、アプリケーションによって決められます。 例えばIPマルチキャストの場合、OUI部分の24ビットが 01-00-5E、続く1ビットが 0 と(先頭からの25ビットが)決められています。
▼ マルチキャストのアドレス(MAC & IP)は受信専用で、同一グループは同じアドレスを共有します。
  制御はアプリケーションによって行われます。
▼ VODのような個々のユーザーの要求に応じる通信はユニキャストになります。

 MACアドレスのすべてのビットを 1 (ff-ff-ff-ff-ff-ff)にする通信もあります。ブロードキャストと呼ばれるもので、LANに接続しているすべてのネットワークアダプタが対象になります。 この時I/Gビットも1になっていて、ブロードキャストはマルチキャストの特殊な形態であるともいえます。

 I/Gビットの左隣(1ビット目)にある G/L ビットはグローバル(Global)かローカル(Local)かを示します。
 G/Lビットが 0 の場合、そのMACアドレスはグローバルなアドレスであり、ベンダーから出荷される製品はすべてグローバル(G/Lビット 0)になります。
 一方、G/Lビット 1 はローカルであることを示し、研究室等の閉じた環境でしか存在しません。


U.4.転送はMACアドレスで

 パケットは通信相手に向かって一直線に進むわけではありません。多数のネットワークが相互に中継することで構成された巨大なネットワーク(インターネット)の森を、パケットはネットワークからネットワークへとバケツリレーのようにして運ばれます。こうした転送(バケツリレー)の際にMACアドレスは転送相手の指定として使われます。
 前章の「T.4.LANの内と外を中継する」で、家庭用ルーターとユーザーAの間でやり取りされるデータ(パケット)の宛先と送信元の指定には、IPアドレスが使われると説明しました。この説明には少し補正が必要です。

U.4.1.フレーム

 LANの通信規格はイーサネット(有線)と無線LANが主流です。そこで送受信されるデータのフォーマットはフレームと呼ばれています。フレームは積み荷であるパケットをスッポリと収めたコンテナのようなもので、そこに書かれる転送先や転送元※4のアドレスにはMACアドレスが使われます。
※4 転送先や転送元
IPアドレスが使われるパケット内の宛先や送信元と区別するため、フレーム内で使われるアドレス指定の言葉としてここでは転送先、転送元を使っています。

 フレームに付加するMACアドレスは通信相手(宛先IPアドレス)のものとは限りません。 例えば「T.4.LANの内と外を中継する」の説明図なら、ユーザーAが送り出すフレームの転送先MACアドレスは家庭用ルーターのMACアドレスになります。
 アプリケーションからデータ送信の依頼を受けたOSは、データを小分けにしてそれぞれにIPアドレス等をセットしたIPパケットを作ります。 これらのIPパケットにネットワーク アダプタ―のデバイス ドライバがMACアドレスや制御情報を付け加えてフレームを完成させます。
◎ 転送先のMACアドレス調べるのはOSの役目です。OSはパケットと共にMACアドレスをデバイス ドライバ
  に渡します。

イーサネットのフレームは概ね次のようなフィールドで構成されています。
以下ではイーサネットで話を進めます。無線LANの場合もアクセスポイントの情報(MACアドレスや変調方式)が加わるためフィールド数が増えますが、基本的な構成はイーサネットと同じです。

  • プリアンブル フィールド [サイズ:8バイト]
    同期信号です。他の端末(ネットワークアダプタ)にフレームの送信開始を知らせると共に同期のタイミング合わせに用います。信号のパターンは規格で決められています。
  • 転送先MACアドレス フィールド [サイズ:6バイト]
    転送先IPアドレスから検索した転送先のMACアドレスが入ります。
  • 転送元MACアドレス フィールド [サイズ:6バイト]
    自身のネットワーク アダプタのMACアドレスが入ります。
  • タイプ フィールド[サイズ:2バイト]
    データ フィールドの種類を示すIDが入ります。IDには 0x0800:IPv4、0x0806:ARP、0x809b:AppleTalk、0x86dd:IPv6 等があります。
  • データ フィールド [サイズ:46〜1500バイト]
    通信内容の本体。概ねパケットが入ります。
  • FCS(Frame Check Sequence) フィールド [サイズ:4バイト]
    通信エラー検出用の算出値。転送先MACアドレス 〜 データのフィールドから計算したCRC(Cyclic Redundancy Check)の値が入ります。受信側でも同様にCRC値を計算し、FCSフィールドと同じ値でなければエラー発生と判断して受信したフレームは破棄します。
 完成したフレームはネットワークアダプタからデジタル信号としてLAN内に送り出されます。同一LANに接続している他端末は受信したフレームの転送先MACアドレスが自分のMACアドレスと同じであれば受信動作を、異なる時はそのフレームを破棄します。

▼ フレームもパケットもネットワークで送受信されるデータの単位です。
 データを正確にやりとりするにはデータの並べ方を決めておく必要があり、それはプロトコルごとに決められています。 プロトコルごとに決められているデータ単位をPDU(Protocol Data Unit)といいます。
ざっくり分けると、レイヤー2のプロトコルで使われるPDUがフレームで、レイヤー3以上のプロトコルで使われるPDUがパケットになります。
▼ ネットワークの話題で使われるパケットは、フレームも含んでいる場合が多々あります。

U.4.2.MACアドレスの検索

 家庭用ルーターはパソコンから見ると「デフォルト ゲートウェイ」になります。そのIPアドレスとMACアドレスは、ネットワークのプロパティやARP(アープ)テーブルとして一時保存されています。
「デフォルト ゲートウェイ」のアドレス情報は、パソコン起動時にネットワークの設定データとして家庭用ルーターから受け取ります。 またその時の通信データを参照して デフォルト ゲートウェイ のMACアドレスを ARPテーブルに記録しておきます。ARPテーブルの内容は一定時間が経過すると消去されますが、適宜更新されます。
これらの情報はコマンド プロンプトの ipconfigコマンドや ARPコマンドで確認できます。
ipconfigはパソコンのIP構成を、ARPはIPアドレスとMACアドレスの対応を表示します。

下記はコマンド実行例です。ここから自身のIPアドレス(192.168.1.2)、家庭用ルーターのIPアドレス(192.168.1.1)とMACアドレス(a8-97-dc-98-ac-1b)が判ります。
C:\>ipconfig
Windows IP 構成
 IPv4 アドレス ........: 192.168.1.2
 サブネット マスク ......: 255.255.255.0
 デフォルト ゲートウェイ ...: 192.168.1.1

C:\>ARP -a
インターフェイス:192.168.1.2 --- 0xC
 インターネット アドレス   物理アドレス    種類
 192.168.1.1        a8-97-dc-98-ac-1b 動的
 192.168.1.255       ff-ff-ff-ff-ff-ff    静的

 OSはARPテーブルを参照して、デフォルト ゲートウェイのIPアドレスに対応しているMACアドレスを検出します。 通常、デフォルト ゲートウェイのMACアドレスはARPテーブルに記録されているので、OSはフレームの完成に向けて動作を進めます。

 ARPテーブルに目的のデータが無い状況も考えられます。例えば通信相手が同じLAN内のユーザーB(192.168.1.3)だとしたら・・。 そのような場合はARPパケットをブロードキャスト送信してMACアドレスの問い合わせを行います。



 ARP(Address Resolution Protocol)パケットはMACアドレス問い合わせ(応答)用の特殊なパケットで、宛先と送信元のアドレス(IP, MAC)に関する情報のみで構成されます。
 下図はARPパケットとフレームの主要フィールドのみを抜粋表示したものです。
OP(OPeration)コードはARPパケットの種類(要求/応答)を示します。


 ここで「T.4.LANの内と外を中継する」のユーザーAがホームページの閲覧を開始した時、たまたまARPテーブルに 家庭用ルーターのデータが無かったとしましょう。
 この時、ARPパケットは次のようにやり取りされます。
▼ 各MACアドレスを次のように仮定します
家庭用ルーター a0-a0-a0-a0-a0-a0
ユーザーA e8-e8-e8-e8-e8-e8

(1) ARPテーブルを参照して 192.168.1.1 のデータを得られなかった場合、下記内容のARP要求パケット&フレームを作成して送信ます。
[フレームの転送先MACアドレス:ff〜ff] ARP要求なのでブロードキャスト(すべて f)を指定します。
[ARPパケットのOPコード:1] このARPパケットが応答を求める要求であることを示します。
[ARPパケットの宛先MACアドレス:00〜00] 不明なのですべて 0 をセットします。

 転送先がすべて f (ブロードキャスト)のフレームは全端末(家庭用ルーターと全ユーザー)に届きます。各端末はARPパケットの宛先IPアドレスをチェックし、自分のIPアドレスと一致しなければ無視(廃棄)します。

(2) 宛先IPアドレスが一致した家庭用ルーターは、要求元であるユーザーAに向けてARP応答パケット&フレームを作成・送信します。またこの時の情報を基に、自身のARPテーブルにユーザーAの情報(IPアドレス, MACアドレス)を追記します。

 ARP応答を受けたユーザーAは、送信元(家庭用ルーター)情報を自身のARPテーブルに追加します。

(3) デフォルトゲートウェイのMACアドレス検索を終了したユーザーAは、中断していた作業に戻ってwebアクセスのフレームを完成させて送信を行います。




≪ previous [[ アドレスとポート ]] next ≫