フォーマット図について(帯形式,表形式)
この記事ではフォーマット図についてまとめます。フォーマット図とはPDU(ヘッダやパケットなど)の構成要素を表した図です。
ネットの記事や技術書を見ていると、主に2つのフォーマット図が存在します。それらを帯形式,表形式としてまとめてみよう!というのが今回の主旨です。決して正確な呼び名ではなく、まとめ的な記事となりますので悪しからず..。
フォーマット図の記載方法
パケットのフォーマット図の記載方法には主に2種類あります。(1)表形式,(2)帯形式 の2つです。
表形式
表形式ではRFCに合わせて、1列4バイト(32ビット)の行を左から右に記載していきます。そして右端まで進んだら次の行からまた始まります。例えばデータが1バイト(8ビット)単位で転送される場合、次のような形で記載されます。
1つのブロックで1バイト(8ビット)の大きさであり、それが12ブロックあります。つまり全体としては12バイトの大きさとなります。(左端の数字が全体の大きさを表します。)
フィールドが増えてもコンパクトにまとめられるメリットがあります。しかし独特のフォーマットとなっているので、初見の方にとってはヘッダが付与されるイメージがあまり湧かないかもしれません。
帯形式
パケットを構成するフィールドを左から順に並べたモノです。
ヘッダが付与されるイメージを直感的に理解しやすいのがメリットとなっています。しかしフィールドが増えると帯が長くなって見づらくなるのが難点です。
各ヘッダをフォーマット図で表してみる
ここからは各ヘッダをフォーマット図で表してみます。表形式,帯形式のどちらでも表す内容は同じですが、「見やすさ」や「構成要素の理解しやすさ」に注目してみて下さい。
L2:イーサネットⅡのフレームフォーマット
イーサネットはすごくシンプルなプロトコルであり、主にMACアドレスとエラーチェックしか管理していません。なぜならイーサネットは「運び屋」であり、L3(IP)に言われた通りにデータを運ぶだけだからです。LAN上でデータを運ぶことが役割で、その他複雑な通信制御はそれより上のレイヤが担当しています。
帯形式
帯形式でイーサネットⅡのフレームフォーマットを表したモノが以下です。ヘッダ、トレーラという部分がL2で付加された情報となっています。
ペイロード(元々のデータ)にヘッダが付加される様子が直感的にイメージできるのではないでしょうか。MACアドレスや整合性チェックなど、必要最低限の情報しか含まれていない点に注目して下さい。
表形式
帯形式でイーサネットⅡのフレームフォーマットを表したモノが以下です。先ほどと形式は異なりますが、フィールドの中身は全く同じである点に注目して下さい。
先ほどとは違ってヘッダが付与されるイメージがあまり湧かないかもしれません。フィールドが5つくらいであれば帯形式の方が見やすいでしょう。しかしフィールドの数が増えると、表形式の方が見やすくなってくるはずです。
L2:IEEE802.11のフレームフォーマット
IEEE802.11は無線LANに関するプロトコルです。有線(イーサネット)と違って、電波という目に見えないモノを使って情報をやり取りします。電波は誰でもアクセスできる通信媒体である分、複雑な通信制御やセキュリティ制御を必要とします。
帯形式
帯形式でIEEE802.11のフレームフォーマットを表したモノが以下です。1行では入りきらないので2行に分けました。イーサネットの時よりもフィールドの数が増えていることに注目して下さい。MACアドレスに関しては有線LANと共存できるように4つに増えています。
空気中の電波をキャッチするために制御情報がたくさん必要となりますが、なんとか帯形式でも収めることができました。
表形式
表形式でIEEE802.11のフレームフォーマットを表したモノが以下です。表の方がスッキリと見やすくまとまっているのではないでしょうか。
帯形式と比べると少し複雑な表となりますが、どこに何があるか?がパッと一目で理解できます。
ARPのフレームフォーマット
ARPはL3とL2の中間に位置するプロトコルです。IPアドレスと対応するMACアドレスを調べることが主な機能となっています。ARPリクエストが送られる際には特別なパケットが隣接機器へ送信されるのですが、その中身についてもフォーマットが定まっています。
帯形式
帯形式でARPのフレームフォーマットを表したモノが以下です。1行では入りきらないので2行に分けました。IPアドレスとMACアドレスの紐付けに関する機能なので、アドレスに関するフィールドが多くなっています。
フィールドのサイズ自体はそれほど大きくないですが、細かいモノが多くなっています。
表形式
表形式でARPのフレームフォーマットを表したモノが以下です。細かいフィールドの大きさまで正確に把握することができます。
ここまで見てきた方なら帯形式でなくとも、パケットが付加されるイメージができているのではないかと思います。フォーマット図に少し慣れてくると表形式の方が見やすいかもしれません。
L3:IPv4のフレームフォーマット
L3:ネットワーク層では異なるネットワーク間の通信を管理します。ネットワーク層で使われるプロトコルはIPほぼ一択で、IPでメインとなるのがIPアドレスです。上位層のデータを小分けにして、IPアドレスによって番号を割り振ることがメインの仕事となっています。
帯形式
帯形式でIPv4のフォーマットを表したモノが以下です。細かいフィールドが多いので私も作っていてかなり厳しくなってきました。IPペイロードが上位層(L4:トランスポート層)から渡されたデータであり、元々のデータ本体です。ここに対してIPヘッダが付与されることになります。
識別子,フラグ,フラグメントオフセットの3つで、データを小分けにする処理に関する情報を定義しています。そしてその他のフィールドでIPアドレスに関する情報などを定義しています。
表形式
表形式でIPv4のフォーマットを表したモノが以下です。細いフィールドもしっかりと把握できます。
IPv4になると表形式でフォーマットを表すことがほとんどです。(帯形式でIPv4のフォーマットを表す技術書やネット記事はあまり見たことがないですね。。)
L3:IPv6のフレームフォーマット
アドレスが長くなった分、全体としてはIPv4よりも大きなパケットになりました。ただしフィールドの種類が減り、長さも固定されているのでとてもシンプルなフォーマットとなっています。
帯形式
帯形式でIPv6のフォーマットを表したモノが以下です。
表形式
表形式でIPv6のフォーマットを表したモノが以下です。
L4:UDPのパケットフォーマット
L4:トランスポート層はパケットの受け渡しに関する情報を管理しています。アプリケーションが即時性を求める時にはUDP、信頼性を求める時にはTCPを使用します。
帯形式
帯形式でUDPのフォーマットを表したモノが以下です。今までよりもグッとフィールドの数が減っている点に注目して下さい。リアルタイム性に重きを置いているため、できるだけシンプルなパケットフォーマットとなっています。
UDPペイロードとはデータ本体のことであり、ここではアプリケーションデータのことを指します。
表形式
表形式でUDPのフォーマットを表したモノが以下です。表の大きさもIPやイーサネットと比べるとかなり小さくなっています。UDPがすごくシンプルなプロトコルであることが伝わってきます。
L4:TCPのパケットフォーマット
即時性を求めるUDPと違って、TCPは通信の信頼性・正確性を求めます。具体的には送信パイプと受信パイプを使って、お互いがメッセージをやり取りしながら通信を行います。
帯形式
帯形式でTCPのフォーマットを表したモノが以下です。
表形式
表形式でTCPのフォーマットを表したモノが以下です。
表の大きさもUDPと比べるとかなり大きくなりました。
Discussion