バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-network-backnumber/
はじめに
BLFに埋まっていたEthernetFrameを解析していく回。
UDPではあるようなので、UDPヘッダの構成に則って情報を分解&確認。
したのだが、どうやら最大長を超えてる・・・。
IPフラグメントという特殊な仕様が適用されているような・・・。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
BLFに埋まっていたEthernetFrameのトランポート層
じゃー、BLFに埋まっていたEthernetFrameを先頭から分解していく。
えっと、
外枠がEthernetFrameで、
その中にIPヘッダがいるんだっけ?
そうそう。
IPヘッダを見るとトランポート層が分かるようになってるんで、
それを持ってさらに該当トランポート層のヘッダに分解する感じ。
ちなみにトランポート層のプロトコルは何になってるのかな?
先に答えを言っちゃうとUDPだったねー。
ってことは割とシンプルな通信ってことかな?
うーん、どうだろうねぇ。
(なんだ、妙に含みのある言い方だな・・・。)
BLFに埋まっていたEthernetFrameを分解
とりあえず、ざっと分解してみた。
// Ehternetヘッダ
0x01,0x00,0x5e,0x00,0x01,0x01,// (宛先MACアドレス)
0x10,0x6f,0x3f,0x0f,0xd6,0xdd,// (送信元MACアドレス)
0x08,0x00,(タイプ=0x0800=IPv4)
// IPヘッダ
0x45,// (version=4,ヘッダ長=5)
0x00,// (サービス種別=0)
0x05,0xdc,// (全長=0x05dc=1500)
0x6a,0xdc,// (識別子=0x6adc)
0x20,0x00,// (フラグ=001b=継続,断片化位置=0x00)
0xff,// (生存期間=255TTL)
0x11,// (プロトコル=0x11=UDP)
0x6a,0x0f,// (チェックサム=0x6a0f)
0xc0,0xa8,0x0A,0x0B,// (送信元アドレス=192.168.10.11)
0xec,0x00,0x01,0x03,// (宛先アドレス=236.0.1.3)
// UDPヘッダ
0xb0,0x00,// (送信元ポート番号=45056)
0x09,0x79,// (宛先ポート番号=2425)
0x2a,0x6d,// (データ長=0x2a6d=10861)
0x00,0x00,// (チェックサム)
// データ
0x01,0x00,0x20,0x00,0xf4,0x50,0x71,0xda,0x02,0x00,0x9a,…
そういえば、UDPヘッダの構成は教えてもらってないけど、
- 送信先ポート
- 宛先ポート
- データ長
- チェックサム
で構成されてるのか。
まとめると、このフレームって、
- IPv4
- 送信元IPアドレス:192.168.10.11
- 宛先アドレス:236.0.1.3
- プロトコル:UDP
- 送信元ポート:45056
- 宛先ポート:2425
- データ長:10861
ってことだね。
あれ?
(気が付いたか。)
IPフラグメント仕様
データ長が10861[byte]ってなってるんだけど、
EthrnetFrameって1518[byte]が最大長じゃなかったっけ?
それを超えてるんだけど・・・。
うん。
これは、IPフラグメント仕様というものが適用されてるんだよねー。
IPフラグメント?
Wikipediaから説明文持ってきた。
IPフラグメンテーション(英: IP fragmentation)とは、Internet Protocol (IP) におけるデータグラムの断片化であり、MTUが通常のデータグラムのサイズより小さいリンク上でもパケットが転送できるようにする。日本語ではIP分割と呼ぶ資料もある。
Wiipediaより
うーん、つまり
1518[byte]に収まらないデータは分割するような仕様がIP層にあるってこと?
そうそう。
・・・。
・・・。
説明してくれーー!!
(まぁそうなるわな)
まとめ
まとめだよ。
- BLFのEthernetFrameを分解してみた。
- UDPだった。
- データ長がEthernetFrameの最大長を超えていた。
- つまり、IPフラグメント仕様が使われている。
バックナンバーはこちら。
コメント