フレーム形式
フレーム形式について説明したページです。EthernetII、IEEE802.3、IEEE802.2、SNAP形式、フレーム形式判別によるマルチプロトコルの実現方法等について説明しています。
EthernetII形式
応用編の「フレームとCSMA/CD方式」ではフレーム構造を説明しました。プリアンブルまで含めて表すと以下になります。
これはEthernetII形式と言われ、TCP/IPだけでなくDEC社のDECnetやゼロックス社のXNSでも使われています。EthernetII形式はDEC社、インテル社、ゼロックス社によって仕様が策定され、その頭文字を取ってDIX仕様というイーサネットで使われているフレーム形式です。
TCP/IPは今でもEthernetII形式を使っています。
EthernetII形式の特徴はタイプ値がある事で、タイプ値で上位プロトコルが判別出来ます。TCP/IPのタイプ値は通常のフレームは0800、ARPは0806になります。
IEEE802.3形式
IEEE802.3はCSMA/CDに関する規格で、レイヤー2を示すデータリンク層の下半分であるMAC副層までを標準化しています。IEEE802.3では10Base-5、10Base-2、10Base-T等が定められており、その中でフレーム形式も定められています。
IEEE802.3で定められたフレーム形式をプリアンブルまで含めて表すと以下になります。
IEEE802.3形式はEthernetIIを基にしているため非常に似ていますが、赤色の部分が異なります。
EthernetIIではタイプを示す部分がIEEE802.3形式ではデータの長さを示すようになっています。
又、プリアンブルが8byteだったのが7byteになってSFDが1byte付いていますが、これは実質変わっていません。プリアンブルは10101010を7つ並べて最後が10101011となって次からフレームが開始される事を意味しますが、最後の10101011をSFDと定めたもので、結果としては同じになります。
IEEE802.3形式をそのまま採用したのがノベル社のNetWareというOSで使われたIPX/SPXです。このため、IPX/SPXのIEEE802.3形式は上位プロトコルを判別する部分がありませんでした。IPX/SPXではNetWare3.11JまでIEEE802.3形式のフレームがデフォルトでした。
IEEE802.3+IEEE802.2形式
IEEE802.2規格はデータリンク層の上半分であるLLCを標準化しています。
IEEE802.2はIEEE802.3の上位層に当たるため、IEEE802.2でデータをカプセル化した後、IEEE802.3でカプセル化されます。
赤部分のDSAPは宛先のサービスを示し、SSAPは送信元のサービスを示しますが、それぞれ1byteしかないため、公的に割り当てられているものは一部のプロトコルだけです。これはSAP値と言われていて、例えばIPX/SPXではE0です。DSAPとSSAPを合わせてLSAPと言い、IPX/SPXではE0E0になります。
コントロール部分はシーケンス番号等が入り2byteですが、制御信号やエラー信号では1byteになります。
EthernetIIではこのLLC部分がありません。
IEEE802.3+IEEE802.2形式は例えばNetWare3.12J以降のIPX/SPXのデフォルトのフレーム形式やOSIでも使われていました。OSIのSAP値はFEです。
SNAP形式
IEEE802.2ではSAP値が1byteしかないため、多数のサービスが扱えません。このため、SAP値をAAとして拡張出来るようにしたのがSNAP形式です。
DSAP、SSAP共にAAの場合はSNAP形式として認識されます。組織等と記載している部分は企業に割り当てられた番号やプロトコルIDになります。タイプ部分はEthernetIIのタイプ値と同じです。
SNAP形式は例えばAppleTalkのEtherTalkで使われていました。EtherTalkのタイプ値は通常の通信では809Bが使われ、TCP/IPのARPに当たるAARPでは80F3が使われていました。
マルチプロトコル
複数のプロトコルが混在してイーサネットを使う事をマルチプロトコルと言います。
今では殆どがTCP/IPですが、プロトコルが混在している場合はプロトコルを見分ける必要があります。例えば、ルーターで受信したフレームがTCP/IPなのかIPX/SPXなのかAppleTalkなのかXNSなのかを見分けないとルーティング出来ないためです。今でもTCP/IPはルーティングし、ベンダー独自プロトコルはスイッチング、又はプロトコルを判別して遮断するといった使い方がされる事があります。
IEEE802.3形式ではプロトコルを見分ける部分がありませんが、IEEE802.3形式を使っていたのはNetWareだけで今では見かけません。
このため、IEEE802.2形式でタイプから長さに変わった部分がどちらなのか判断出来ればいい事になります。タイプであればタイプ値でプロトコルを判断し、長さであればSAP値でプロトコルを判断、SAPがAAであればSNAP形式なのでタイプ値でプロトコルを判別出来ます。
タイプか長さの判断は、タイプと長さに当たる部分が1500以下であれば長さと判断し、1536以上であればタイプと判断出来ます。データの長さの最大値が1500byteなのに対し、タイプ値はXNSの16進数で0600、すなわち10進数では1536が最低値のためです。
このようにして同じイーサネット上でフレーム形式を判断出来るため、タイプ値やSAP値等で区別してマルチプロトコルを実現出来ます。