EUI-64はデバイスを一意に識別する64ビット長のIDのこと。そのアドレス体系はIEEEによって標準化されている。IPv6アドレスの下位64ビットはインタフェース識別子と呼ばれ,EUI-64をある規則で変換したものを割り当てる。そのため,EUI-64とインタフェース識別子は異なるものである。

 EUI-64では,64ビット長の識別子のうち,上位24ビットはOUI(Organizationally Unique Identifier)またはcompany_idと呼ばれ,IEEEが製造業者に対して一意に割り当てた番号である。残りの下位40ビットは,extension identifierと呼び,IEEEはその割り当てには関知しない。OUIの割り当てを受けた製造業者の責任の下で,重複がないようにデバイスに対して,番号を割り当てる。この規則が守られれば,EUI-64識別子を持つデバイスはすべて世界的に一意な識別子を持つことになる。

 さらに,EUI-64では左から,7ビット目と8ビット目には意味が定められている。7ビット目はuniversal/localビットと呼ばれ,0がセットされていると識別子が世界で一意であること示す。一方,1の場合はローカル利用を示しており,必ずしも一意である保証はない。PPPリンクやシリアル・リンクなど,一意なハードウェア・アドレスが付与されていないホストでは,ローカルの範囲だけに有効な値を持つことができる。また8ビット目は,グループ・アドレスになりうるかどうかを示すビットで,このビットがオンの場合はマルチキャスト・アドレスとして扱われる。

 EUI-64の前身として,EUI-48というアドレス体系がある。主に,イーサネットやトークン・リング,FDDIなどのデバイスで用いられており,48ビットのアドレス長を持っている。EUI-64と同様に上位24ビットはOUI,残りの24ビットが製造業者が管理するextension identifierとなっている。

 EUI-64はEUI-48を拡張したアドレス体系だが,EUI-48からEUI-64へのマッピング方法が定められている。変換対象となる,EUI-48アドレスの上位24ビットと下位24ビットの間に,FFFEという16ビットの値をはさむ。変換前のEUI-48でも一意性が保証されているならば,変換後に得られるEUI-64の値も一意性を保っている。

 EUI-64を利用したIPv6アドレスの生成方法についてふれよう。IPv6アドレスの下位64ビットはインタフェース識別子と呼ばれ,同一リンク内でインタフェースを特定するための値として使われる。EUI-64からインタフェース識別子への変換方法は,EUI-64アドレスの左から7ビット目を反転させる。

 インタフェース識別子でも,左から第7ビット目はuniversal/localビットだが,1がセットされている場合は,世界で一意に特定可能な識別子であることを示す。EUI-64とインタフェース識別子では,7ビット目の意味が逆転している。

 以上のように,EUI-64値が簡単に計算できるインタフェースはインタフェース識別子も簡単に決まることがわかる。一方,シリアル・リンクやトンネル・リンクなどはハードウェア・アドレスを持たない。このようなインタフェースでは,そのホストが装備している他のハードウェア・インタフェースからEUI-64値を流用することがある。例えばKAMEでは,トンネル・リンクのインタフェース識別子はイーサネットのそれと同じ値をとるよう実装されている。インタフェース識別子の条件は同一リンク内で,衝突を起こさないことであり,EUI-64から派生した値を用いることで,実用上,十分に衝突を回避することができる。

(加藤淳也▼早稲田大学大学院 理工学研究科)


EUI-64について
http://standards.ieee.org/regauth/oui/tutorials/EUI64.html
EUI-48について
http://standards.ieee.org/regauth/oui/tutorials/EUI48.html
IPv6アドレスのアーキテクチャ(RFC2373)
ftp://ftp.ietf.org/rfc/rfc2373.txt