バックナンバーはこちら。
https://www.simulationroom999.com/blog/In-vehicle-network-backnumber/
はじめに
BLFに埋まっていたEthernetFrameを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をIPフラグメントに着目して解析
じゃ、再度前回の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,…
うん、こんなんだった。
IPヘッダのフラグ情報
ここで着目するのは、IPヘッダのフラグのところ。
フラグ=001b=継続
ってなってるね。
これの情報の内訳ってどうなってるの?
3bit構成になってて、こんな意味になってる。
0 | 1 | 2 |
予備 | 禁止 | 継続 |
bit0は予備で常に0。
bit1が1の場合は断片化を禁止。つまりIPフラグメントではないことを明示している。
bit2が1の場合は断片化された後続のパケットが存在するパケットであることを意味してて、0の場合は後続のパケットが存在しないことを意味する。
ということは、今回は
禁止bitが0、継続bitが1。
つまりIPフラグメントってことになるのか・・・。
断片化位置
断片化位置=0x00ってのはなんだろ?
所謂offsetだねー。
うーん、日本語を英語に変換してくれと言ったわけじゃないんだけどー。
IPフラグメントされたフレームが全体のフレームのどこにいるかってのを示す値だね。
0x00ってことは先頭のデータってことを示している。
まぁ途中からそうなんだろなーって思ってたけど。
この感じで次回は2つ目のEthernetFrameを見てみようか。
まとめ
まとめだよ。
- IPフラグメントに着目してEthernetFrameを確認。
- IPヘッダのフラグでIPフラグメントになるかどうかが決定する。
- 断片化位置で全体のどこのデータかが分かるようになっている。
バックナンバーはこちら。
コメント