パケットの中身を見てみよう!
こんばんは!
今回はプログラミングから離れて、ネットワークに流れているパケットってどういう構成になっているの?ということをまとめていきます!
下記の流れでまとめていきます!
・パケットって何?
・IPv4パケット構造のフォーマットってどうなってるの?
・Wiresharkで実際に見てみよう!
パケットって何?
データを通信するときに分割されたデータを「パケット」と言われています。
パケットの中には、送信元や宛先などの情報が入っていて、それらの情報を元にデータが送られます。データを受け取る時には、分割にされたこの「パケット」を元に戻して、通信成功となるわけです!
IPv4パケット構造のフォーマットってどうなってるの?
「パケットはデータを分割しているんだね!いや、なんでそんなことできるん?」
と思うかと思います!←自分だけ?
それはパケットの構造(フィールド)によって、情報をまとめられているから可能となっているのです!
そのパケットはどのような構造になっているのかをまとめていこうと思います!
適当ですが、パケットのフォーマットは下記の図の様になっています。
では、それぞれを簡単に記載していきます!
Versionフィールド
IPのバージョンを表しています。
IHLフィールド
32ビットを基準としたIPヘッダの長さを表しています。
Type of Serviceフィールド
IPパケットの品質(優先度)の区別を表しています。
Total Lengthフィールド
ヘッダを含むIPパケット全体の長さを表しています。
Identification ,Flags ,Fragment Offsetフィールド
パケットを分割、再構成する際に使用する情報を表しています。
Time to Liveフィールド
パケットのループを防ぐためのカウントを表しています。
Protocolフィールド
プロトコルを識別する情報を表しています。
以下が例です!
1番:ICMP
6番:TCP
17番:UDP
Header Checksumフィールド
IPパケットの伝送エラーがないかチェックする情報を表しています。
Source Addressフィールド
送信元IPアドレスの情報を表しています。
Destination Address フィールド
宛先IPアドレスの情報を表しています。
Optons , paddingフィールド
オプション(付加情報)の情報を表しています。paddingで32ビットに調整されます。
一般的には、省略されることが多いですが、ルーティングの指定等に使われています。
Dataフィールド
IPパケットとして運ばれるデータを表しています。
とこのような構成になっています!
パケットって、分割しているとしても、しっかりとした情報で詰め込まれていますね~
Wiresharkで実際に見ていこう!
では、そのパケットの中身をWiresharkで見てみましょう!
手順としては、下記を行いました!
①パケットトレーサーを起動
②localhost(127.0.0.1)宛てへpingを流す ※ping -n 3 127.0.0.1
③②のやり取りをパケットトレーサーで確認する
取れたキャプチャはこちらになります!
※念のため、画像にモザイク入れさせてもらいます。。気になる方は、実際に確認してみると楽しいかもです!
パケット内のフィールドをすべて確認することができました!
※「option」と「padding」以外です。
パケットって、一見難しそうだなーと避けていたところがありますが、
こうして実際に確認してみると理解できて楽しいなと感じました~
今回はこんな感じです~
ここまで読んでいただきありがとうございました!
summarized in English
I did this using an wireshark to see what was in the packets.
The packet looks difficult at first glance, but I found it quite interesting when I looked at the contents!
I'm going to touch a lot of things in the future.