Tech Sketch Bucket of Technical Chips by TIS Inc.

「パケット」と「フレーム」 〜 IEEE 802.3小ネタ(1)

Pocket


banner-ieee8023topics.png
技術標準規格ってお堅いものの代表ですが,そんなお堅い標準規格のひとつ,イーサネットの標準規格を定めているIEEE 802.3を,役に立つかどうかはさておき,ちょっとマニアックな視点からイジってみようかと思ってます。

第1回目は,「パケット」「フレーム」という用語にまつわる,ちょっと奇妙な物語。

生粋のネットワークエンジニアは別として,ITエンジニアの多くは,ネットワーク技術の低レイヤの話はちょっと苦手な方が多い気がします。こんなコラムを書いていますが,私も同様です。

イーサネットに代表されるデータリンク層(第2層)や物理層(第1層)になると,学生時代や新入社員時代に机上で勉強した基本的なことは知識として持っている程度というケースも多いんじゃないでしょうか。普段,意識するのはTCP(第4層)やIP(第3層)までですよね。イーサネットは今では仕事でも家庭でも日常的に使うものになりましたが,気に掛けるのは,速度(「ここのネットワークはギガイーサですか?」など)や,ツイストペアケーブルの種類(「これはカテゴリ5eかな?」)くらいじゃないかと思います。

たまにはそんな低レイヤの話題に触れるのもいいんじゃないかなと思って,視聴率低迷→途中打ち切りも覚悟で,イーサネットの話題を書いてみようかと思い立ちました。でも,ネットワークスペシャリストになろうという方たち向けの話をするつもりはないので,役に立つ話かどうかは別として,たぶん役に立たないのですが,せめて読んでちょっとだけ面白そうな小ネタを集めてみようと思いました。



■「パケット」と「フレーム」

デジタルネットワークの話をするときに使用する「パケット」と「フレーム」という言葉を,どう使い分けているでしょうか。ちゃんとお勉強をしている方は"そんなの簡単だ"と言いそうな気がしますし,そうで無い方もGoogle先生に"パケット フレーム"と問いかけてみれば,たぶん同じ答えを見つけそうです。

一般名詞として見たときは,どちらも明確な違いはありません。けど,ネットワーク技術の文脈では,第2層でのデータのひとまとまりを「フレーム」と呼び,第3層(または第3層以上)でのデータのまとまりを「パケット」と呼んで使い分けることが"一般的"だと書かれていることが多いでしょう。第4層のTCPでは「セグメント」と呼ぶ場合もあります。アプリケーション層では「メッセージ」だと書かれているケースもあります。上位層になるほど呼び方は流動的な気がしますが,第2層の話をするときには「フレーム」,第3層なら「パケット」を使うのが,まぁ,流儀というか一般的なのはたしかです。イーサネットフレームやIPパケットについては,下図(a)(b)の様に説明されているケースがほとんどでしょう[★1][★2][★3]。また,IEEE 802.3 [★4]でもこの様に記載されていました。

《図1》
Figure_ieee8023topics_1_1.png
(IEEE 802.3ではフレームフォーマットに「EXTENTION」が含まれています。この拡張部分は1Gb/s(1000BASE-*)の半二重モードの時だけ使われる,つまり,まず使われることはないものの様です)。

ところが,この穏やかに決着が付いているかに見える状況で,IEEEがやらかしちゃってくれました。今回の話題の元は,IEEE 802.3の Part 1 に含まれる第3章です。
 「3. Media Access Control (MAC) frame and packet specifications」
もうこのタイトルからしてすでに「フレームとパケットの仕様」になっています。そこには,次の様な図が書かれています。[★5]

《図2》IEEE 802.3-2008 および 2012 での記述:
Figure_ieee8023topics_1_2.png

イーサネットのフレームは,"プリアンブルから始まってFCSで終わる"と理解するのが普通だったはずです。ところが新しいIEEE 802.3ではプリアンブルとSFDはフレームには入れてもらえていません。そして,プリアンブルから始まる部分は『イーサネット"パケット"』だということにされてしまっています。ここまで明確にフレームとパケットを分けて定義されてしまうと,従来のプリアンブルから始まるデータ構造を示して「これがイーサネットフレームです」と呼びにくくなってしまいました。これは困ったことになりました。

ただ,ちょっとだけIEEEの決め方に理解できる部分もあります。もともと,「イーサネットフレーム」が,プリアンブルから始まると解説されるケースと,宛先MACアドレスから始まると解説されるケースと,両方があったような気がします。古いIEEE 802.3 (2005年版)では,MACフレームフォーマットとしてプリアンブルから示していますので,たぶんプリアンブルを含む方が有利な気がします。けど,SFD (Start Frame Delimiter) がフレームの途中に挟まっているのはちょっと妙な気がしますし,「イーサネットヘッダ」は宛先MACアドレスからとした方が自然な気もします。

とはいえ,(イーサネットの)フレームの外側をパケットだとしてしまうのは,ちょっと無謀な気がします。

冒頭にも書いたように,フレームやパケットという用語はそれだけで特定のデータ構造を示すものではありません。ですから,「イーサネットパケット」,「イーサネットフレーム」,「IPパケット」,「TCPパケット(またはTCPセグメント)」と丁寧に書き分けるべきなのかもしれません。けど,それじゃあ鬱陶しいと思いませんか。

小ネタ:

困ったことにIEEE802.3の中ではフレームとパケットが両方定義されている

「イーサネット(第2層)で流れるデータを"パケット"って呼ぶのは間違いだよ」なーんて話をされたら,思いっきりドヤ顔をしていいので,上の話で反論してあげてください。このコラムを書いている時点(2013年)で,この話はネットワークエンジニア達の中でもあまり知られていません。(気づいている人も知らんぷりしている可能性があります)。

ただ,コラムのネタに取り上げておいてこんな事を書くのもどうかと思いますが,私はこの新しいIEEE802.3のパケットとフレームの定義は無視しちゃっていいんじゃないかと思っています(もちろん個人的見解です)。中には規格に準じた用語使いをしないといけないケースはあるでしょう。そんな人にとっては,これは小ネタじゃなくて必要な知識だと思います。けど,まぁ,普通の状況では,従来通りにイーサネットの話をするときには,従来通り「フレーム」,IPの話をするときには「パケット」でいいと思います。

この「イーサネットパケット」の定義は,2008年版のIEEE802.3から登場して,現時点の最新版である2012年版でも踏襲されています。でも何年か後に,このイーサネットパケットの定義は消えるんじゃないかと,つまり,IEEEはこの定義を撤回してくれるんじゃないかと,なんの根拠もありませんが,そんな風に期待しています。

...............

技術標準規格っていうものは,決めるまでには長い時間が掛かることが多いのですが,いったん決まったら簡単に変えられるものじゃありませんし,変えるべきでもないとは思います。でも,めまぐるしく変わるIT(ICT)分野では,なかなかそうもいきません。実状に合わなければ,見直すことも必要です。

IEEEがイーサネットのパケットの定義を撤回するかどうかはまったくわかりません。けど,過去には"規格で決めたことを押し切れずに撤回した"または"呼び方を変えた"という事例もあります。そんな『IEEE 802.3の敗戦の逸話』も,このコラムでいくつか書けると思います。



[★1] 三輪賢一, 「プロのための[図解]ネットワーク機器入門」, 技術評論社, 2012年
ネットワーク技術を網羅的に解説してくれていて,かつ,新しい本なので,なかなか重宝しています。タイトルどおり機器類を実際の機種の仕様や写真を交えて解説してくれているところもこの本の特徴です。

[★2] http://itpro.nikkeibp.co.jp/article/COLUMN/20060327/233396/

[★3] http://www.atmarkit.co.jp/ait/articles/0107/05/news001_3.html

[★4] IEEE Std 802.3-2005

[★5] IEEE Std 802.3-2012
Section 1 (第1分冊), p.53, ("3. Media Access Control (MAC) frame and packet specifications")}

エンジニア採用中!私たちと一緒に働いてみませんか?