来年から仕事でお世話になるであろう方からネットワーク力についていろいろ質問されたけどネットワーク良く分かっていないので、勉強がてらCCNAの資格でも取ろうと思って真面目にネットワークについて勉強を始めることにしました。
ネットワーク強い人に「ネットワークってどれくらい分かります?」って煽られたので、L2~L4のプロトコルスタックを自作してやろうかと思ったけど、その人が期待しているのはciscoとかfortigateとか802.1QとかHAとその手の知識らしい。
— simotin (@simotin13) 2018年12月11日
ネットワーク詳しいってどういう状態を指すのか分かない。
そもそもTCPやUDPを扱うプログラミングは経験がありますし、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の話も付録に書かれていました。
- 作者: Charles E. Spurgeon,Joann Zimmerman,三浦史光,豊沢聡
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/06/10
- メディア: 大型本
- この商品を含むブログ (1件) を見る
次は802.1QとかL3スイッチについて勉強する予定。