ARPフォーマット
ARPフォーマット
ARPのパケットはIPが配送するのではありません。これがどういことかということについて、ARPフォーマットを見ながら説明します。ちょっと細かい話になるのですが、ARPのフォーマットは次の図のようになり
ます。
フィールド名、日本語じゃ適当なサイズで書ききれなかったので英語になってしまっていますが、順番に・・・
・ Hardware Type
ここは、どんなネットワークを使っているかという情報が入ります。イーサネットは”1″になります。
・ Protocol Type
ネットワーク層のプロトコルに何を使っているか?というのがこのフィールドです。ここは必ず0x0800でIPを示します。もともとTCP/IP以外でもARPを使えるように設計されていたのですが、TCP/IP以外はARPを使いません。
・ Hardware Length
ードウェアアドレス、つまりMACアドレスの長さです。”6″固定になります。汎用性を持たせるために定義されているフィールドです。
・ Protocol Length
プロトコルアドレス、つまりIPアドレスの長さです。”4″という値が入ります。
・ Operation
ARPリクエストかARPリプライかを識別します。1:ARPリクエスト、2:ARPリプライです。
・ Source H/W Address
送信元のMACアドレスです。
・ Source Protocol Address
送信元のIPアドレスです。
・ Dest H/W Address
送信先のMACアドレスです。ってことで、「ん?」って思う人もいますよね?「こいつを知りたいためにARPをだすんじゃないの?」って疑問に思いますよね?ここは、ARPリクエストのときは意味がありません。00-00-00-00-00-00とかFF-FF-FF-FF-FF-FFが入ります。ARPリプライのときは、ちゃんと送信先のMACアドレスです。
・ Dest Protocol Address
送信先のIPアドレスです。ブロードキャストされたARPリクエストのこの部分をみて、各コンピュータは自分のMACアドレスを聞かれているのかどうかと判断します。
このARPのフォーマットが、そのままイーサネットのデータ部分に入ってきているわけですね。IPがARPを配送しないというのはこのことを意味しています。このとき、イーサネットのフレームで「運んでいるのがARPですよ~」と識別するために、タイプ部に0x0806という値が入ってきています。