前回見たリクエストパケットを、
もう少し詳細に見ていきます。
パケットの全体像は、以下のようになっている。
データの並びは、
(・概要)
・イーサネットヘッダ : Ethernet
・IPヘッダ : Internet Protocol
・TCPヘッダ : Transmission Control Protocol
・HTTPヘッダ : Hypertext Transfer Protocol
(・HTTPデータグラム : Line-based text data)
の順番になっている
→OSI参照モデルの下位層から順番になっている。
これらのプロトコルヘッダの情報がそろって初めて、
HTTPの通信が可能になる。
順番に、
〇概要
キャプチャ時に付加されたデータ。
実際にパケットに含まれるわけではないので、
あまり深くは突っ込まないことにする。
キャプチャ上のパケット(フレーム)番号、
タイムスタンプなど。
〇イーサネットヘッダ
イーサネット(Ethernet)の情報を含む部分
まず押さえておきたいところ(というか全部)
・MACアドレス (Source/Destination)
送信元と宛先のMACアドレス。
・タイプ(Type)
上位のプロトコルを示すもの。
IPv4を使っているので0x0800。
イーサネットのタイプについては↓を参照(外部サイト)
https://www.infraexpert.com/study/tea13.htm
フレームフォーマットについても、詳しい説明がある。
〇IPヘッダ
IP(Internet Protocol)の情報を含む部分
まず押さえておきたいところ
・バージョン(version)
IPv4かIPv6か。今回はIPv4なので、”4″。
・プロトコル(Protocol)
上位プロトコルを指定。
この場合はTCPを使っているので6番。
IPのプロトコル番号については↓を参照
https://www.infraexpert.com/study/tea11.htm
・IPアドレス(Source/Destination)
送信元(Source)と宛先(Destination)のIPアドレス。
〇TCPヘッダ
TCP(Transmission Control Protocol)の情報を含む部分
まず押さえておきたいところ
・ポート番号 (Source Port/Destination Port)
送信元と宛先のポート番号。
このパケットでは、
宛先(サーバ側)は、サービスを提供するポート(HTTPは80番)。
送信元(クライアント側)は、クライアントがランダムに決めた値。
・コントロールフラグ(Flags)
TCP通信のタイプを示すフラグ。
Syn、Ack、Finなど、
TCP通信において、このパケットの役割を表すもの。
フラグが立っている場合(“1″の場合)はその役割を含む。
TCPのコントロールフラグについては↓
https://www.infraexpert.com/study/tcpip8.html
・Sequence/Acknowledgment number
TCP通信の通し番号みたいなもの。
到達確認や再送制御に用いる。
深く突っ込むと結構難しいので、
とりあえずこの辺で終わり。
〇HTTPヘッダ
前回見たので省略。
〇HTTPデータグラム
(※リクエストにはなし。レスポンスのみ。)
実際に受け渡しする目的のデータ。
これも、前回見たので省略。
以上、HTTP通信本体のパケットを見てきました。
これら下位層のプロトコルヘッダ内の情報によって、
通信がクライアントとサーバーの間を行き来します。
次回は、この通信を成立させるまでの、
通信フローを見ていきます。