分散コンピューティング環境 (Distributed Computing Environment: DCE) とは、OSF が開発した異機種間でアプリケーションの分散処理を実現するためのソフトウェアの集合です。
UUID
UUID (Universal Unique Identifier) は空間的・時間的にユニークな識別子です。UUID は、極めて短い間しか存在しないオブジェクトの特定からネットワーク上で長い間存在するオブジェクトを確実に識別するなど多目的に使用することができます。
UUID の作成にあたって個々の識別子を何らかの認定機関に登録する必要はありません。そのかわり、各 UUID ジェネレータでユニークな値を必要とします。この空間的にユニークな値は通常ネットワーク接続システムで適用されているIEEE 802アドレスで特定さます。
UUID はフィールド間にパディングを含まない128ビットの領域から構成されます。
| フィールド | データ型 | 説明 |
|---|---|---|
| time_low | Unsigned 32-bit integer | タイムスタンプ(Unsigned 60-bit integer)の下位フィールド。 |
| time_mid | Unsigned 16-bit integer | タイムスタンプ(Unsigned 60-bit integer)の中位フィールド。 |
| time_hi_and_version | Unsigned 16-bit integer | タイムスタンプ(Unsigned 60-bit integer)の上位フィールドとバージョン番号の複合。(*1) |
| clock_seq_hi_and_reserved | Unsigned 8-bit integer | クロックシーケンス(Unsigend 14-bit integer)の上位フィールドと予約領域の複合。(*2) |
| clock_seq_low | Unsigned 8-bit integer | クロックシーケンス(Unsigend 14-bit integer)の下位フィールド。 |
| node | Unsigned 48-bit integer | ユニークなノード識別子。48-bit IEEE 802アドレスを設定する。 |
タイムスタンプは60ビット値である。UUID バージョン1では 1582年10月15日 00:00:00.00 からの経過時間を 100 ナノ秒単位で表した UTC(Coordinated Universal Time)として格納されます。
| 15 14 13 12 | 11 10 09 08 07 06 05 04 03 02 01 00 |
| version | time_hi |
| bit | Version | 説明 |
|---|---|---|
| 0001 | 1 | DCE version, as specified herein. |
| 0010 | 2 | DCE Security version, with embedded POSIX UIDs. |
| 07 | 06 | 05 04 03 02 01 00 |
| 1 | 0 | clock_seq_hi |
UUIDを16進数の文字列で表現するときは次のように表記する。
<time_low>-<time_mid>-<time_hi_and_version>-<clock_seq_hi_and_reserved><clock_seq_low>-<node>
例)2fac1234-31f8-11b4-a222-08002b34c003
Windows に Microsoft Visual C++ がインストールしてあれば、UUID は uuidgen コマンドを使用して作成することができます。
C:\>cd "\Program Files\DevStudio\VC\bin" C:\Program Files\DevStudio\VC\bin>uuidgen 0e452ba0-0a41-11d2-bd1b-00003987a102 C:\Program Files\DevStudio\VC\bin>
IEEE 802
米国で1980年にIEEEの802委員会が発足し、LANの標準化について話し合うことになった。その結果、1984年には委員会の合意した標準化案としてIEEE 802.1〜802.5が公表され、ほぼこれらが業界の標準となった。
LANではOSIのデータリンク層に相当する部分を物理層に依存した基本的な通信部分(Media Access Control sublayer: MAC)と相互の通信を制御するための物理層に依存しない部分(Logical Link Control sublayer: LLC)に分けている。LLCは物理層に依存しないために、異なるMAC/物理層に対して1つで済む。
MACサブレイヤでは物理媒体に接続された複数のコンピュータ間でのアクセス制御を行うプロトコルを定めている。LANでは物理的に一本の線を複数の接続機器で共有するため、同時に二つ以上の機器が媒体を使用しようとしたときの調停手段が必要となる。これがアクセス制御と呼ばれるもので、IEEE 802では、CSMA/CD、Token Bus、Token Ringの三種類が用いられている。
LANは通信距離が短く、通信機器の信頼性も高いため、広域網などに比べると電送誤りはほとんど起きない。したがって、データリンクで提供されているコネクション型プロトコルで用いられている誤り制御は複雑すぎる。したがって、コネクションレス型プロトコルを用いて、誤り制御などはさらに上位の層で行う方法を取ることが多い。そこで、LLCサブレイヤはコネクションレス型プロトコルのみを提供するクラス1と、通常のコネクション型を含んだクラス2の二本立てとなっている。
CSMA/CDは、Ethernet(EthernetはXerox社の商品名である)で利用されている。方式が単純であるために多くの製品が出ており、最も広く普及している。形状はバス型LANであり、アクセス方法は単純である。
MACアドレスの取得方法
Windows NT 4.0
Windows NT 4.0の場合、レジストリ内の NetworkAddress 値からMACアドレスを取得できます。
レジストリキー: \\HKEY_LOCAL_MACHINE\SOFTWARE\Description\Microsoft\Rpc\UuidTemporaryData
MACアドレスを取得するプログラムの例を次に示します。
HKEY hKey;
char szAddress[256];
DWORD dwType, dwBytes;
RegOpenKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\Description\Microsoft\Rpc\UuidTemporaryData",
0, KEY_ALL_ACCESS, &hKey);
RegQueryValueEx(hKey, "NetworkAddress", NULL, &dwType, szAddress, &dwBytes);
Sun Solaris
Sun Solarisの場合、ifconifgコマンドで取得できます。
$ ifconfig -a
lo0: flags=849<UP,LOOPBACK,RUNNING,MULTICAST> mtu 8232
inet 127.0.0.1 netmask ff000000
le0: flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST> mtu 1500
inet 133.113.94.53 netmask ffffff00 broadcast 133.113.94.255
ether 8:0:20:18:4b:b4
$
Java
JavaにはMACアドレスを取得する機能は組み込まれていません。MACアドレスを取得するには、JNIを使用するか、C等のネイティブな機能を呼び出すメソッドを用いなければなりません。