- PR -

MACアドレスのバイトオーダー変換

1
投稿者投稿内容
vmc001
会議室デビュー日: 2007/12/15
投稿数: 2
投稿日時: 2007-12-15 17:23
こんにちは,
私はLinuxを使ってネットワークプログラミングを行っています.

リトル・ビッグエンディアン
およびホスト・ネットワークバイトオーダーについての質問です.

Rawソケットを使ってEtherヘッダにアクセスすることをしています.
ソケットによってパケットを受信したとき,
IPアドレスであればntohl()を利用してホストバイトオーダーに変換します.
これはリトルエンディアンのPCでもビッグエンディアンのPCでも
ホストバイトオーダーでデータを扱うためということは理解しています.

しかし,MACアドレスの場合,6オクテットであるためntohl()等の関数は使えません.
参考書等のサンプルを読んでもバイトオーダー変換をせず,そのまま扱っています.
これではリトルエンディアンとビックエンディアンのPCの間で互換性を持てない
と思うのですが,MACのためのバイトオーダー変換をする関数などあるのでしょうか?
それともMACアドレスについてはプログラマがリトルエンディアンとビックエンディアン
を意識してプログラムするしかないのでしょうか?

よろしくお願いします.
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-12-15 17:45
引用:

vmc001さんの書き込み (2007-12-15 17:23) より:
しかし,MACアドレスの場合,6オクテットであるためntohl()等の関数は使えません.
参考書等のサンプルを読んでもバイトオーダー変換をせず,そのまま扱っています.
これではリトルエンディアンとビックエンディアンのPCの間で互換性を持てない
と思うのですが,MACのためのバイトオーダー変換をする関数などあるのでしょうか?


48bit精度の整数値として見る場合はエンディアンネスが影響しますが、
単なる6オクテットのデータの並びと見るのならば気にする必要はありません。
あくまでCPU上でのワード表現の解釈の違いなわけですし。

実際には、常にMSB⇒LSBの順序で並んでいるので、
自動的にビッグエンディアンで扱われていると考えてもいいと思います。
vmc001
会議室デビュー日: 2007/12/15
投稿数: 2
投稿日時: 2007-12-18 22:38
どうやら少しバイトオーダーについて誤解をしていたようです.

2オクテット以上の整数値をメモリに格納するときの順番がバイトオーダーである
ということが頭の中から抜けていたようです.
IPアドレスやMACアドレスなどのヘッダ構造体のメンバごと,
もしくはヘッダごとに適応される順番であると誤ったイメージを持っていました.

ありがとうございました.
1

スキルアップ/キャリアアップ(JOB@IT)