mcommit's message

ソフトウェア開発の仕事をしているsimotinといいます。記事の内容でご質問やご意見がありましたらお気軽にコメントしてください\^o^/

Ethernet2(DIX)のフレームについて

来年から仕事でお世話になるであろう方からネットワーク力についていろいろ質問されたけどネットワーク良く分かっていないので、勉強がてらCCNAの資格でも取ろうと思って真面目にネットワークについて勉強を始めることにしました。

そもそもTCPUDPを扱うプログラミングは経験がありますし、FTPとかHTTPとかのサーバは実装したことがあって、あと他にもFA系のプロトコルは沢山実装したことがあるので少しはネットワークについては分かっているつもりだったのですがいざ勉強してみるとよくわかっていないことが多いことに気づかされました。

せっかく勉強しているので、調べたこととか備忘の為に書いてきたいと思います。

今回はレイヤー2。Ethernetフレームについてです。

Ethernetフレームの規格

Ethernetのフレームには、

の2つの規格が存在する。現在の主流はEthernet2の方。
ちょっと気になってRX63Nのハードウェアマニュアルを見てみたのですがイーサネットコントローラはIEEE802.3規格のフロー制御準拠とありました。PHYのチップは802.3準拠のチップが多いからでしょうか...

Ethernet2のフレームフォーマット。

フィールド サイズ(byte) 内容
プリアンプル 8 7byteの間 0xAA(10101010)を送信 8byte目で 0xAB(10101011)を送信
送信先MACアドレス 6 フレームの送信先
送信元MACアドレス 6 フレームの送信元
タイプ 2 上位のプロトコルタイプ
データ 46-1500 送信データ
FCS 4 送信先MACアドレスからデータ部までのCRC
IFG 12 フレームの区切りを表す96bit分の無通信区間

受信データサイズについて

Ethernetは可変長のフレームであるにも関わらずデータ長をフィールドはありません。

じゃあフレームの区切りはどうやって識別するんだ?

と疑問が湧いたのですが、調べてみるとFCSの後に96bit分の無通信時間(IFG:Inter Frame Gap)が入ることでフレームの区切りを識別するようです。

ちなみにwiresharkでパケットを表示すると送信先MACアドレス~データまでは表示されますがプリアンプルとFCSは表示されません(もちろん無通信時間もですが)

どちらもレイヤ1で処理されているからだと思いますが、Ethernetのフレームに問題がある場合*2トラブルシューティングができないですね。

タイプについて

2byteのタイプフィールドで、上位レイヤ(レイヤ3)で使用するタイプを指定します。
よく使われるIPv4は0x0800です。
PPPoEの仕様とかよく知らないですけどISPとの接続はPPPoEであることが多いと思うので実はお世話になっているプロトコルですね。

タイプの例

タイプ プロトコル
0x0800 IPv4
0x0806 ARP
0x8100 IEEE802.1Q
0x86DD IPv6
0x8863 PPPoE Discovery Stage
0x8864 PPPoE Session Stage

参考書籍

パラパラと読んでみましたが、Ethernetのレイヤ1、レイヤ2に関しては詳説 Ethernetでかなり詳しく書かれています。
IFGの話も付録に書かれていました。

詳説 イーサネット 第2版

詳説 イーサネット 第2版

次は802.1QとかL3スイッチについて勉強する予定。

*1:DIXはDEC,Intel,Xeroxの略

*2:例えばFCSが一致しない