日進日歩で日々進捗

非情報系学生による技術の備忘録。進捗出していきたい

ブラウザのHTTPリクエストからレスポンス取得までのHTTPパケットの流れ詳解

Webエンジニアやインフラ系のエンジニアであれば当たり前だと思いますが、HTTPリクエストを送ってからレスポンスを取得するまでの流れをパケットレベルでの理解は、なかなか怪しいと思ったので、このさい復習してみることにしました。

大前提

普段自分が利用しているインターネットのパケットがどういう風に流れているかを理解することは、大前提大事だと思います。
イーサネットやIPパケットのフォーマットも、発表されてからもう30年も立っている歴史の長い技術ですし、今後もこれらの技術を前提に新しい技術が作られることを踏まえると、理解することは当然意味があると思います。
また、普段アプリケーションばかり書いているエンジニアもここら辺のことは、理解せずに普段仕事をしている人も多いと思います、、

使用した環境・ツール

HTTPリクエストのパケット解析: レイヤー2(EtherNet ||)

EtherNet ||のフレームは以下の5つで構成されています。

f:id:low_programing:20191014204215g:plain
https://www.infraexpert.com/study/ethernet4.html

ethernetでは、Ethernetペイロードと呼ばれるデータの部分の大きさの最大値が決まっており、(これをMTU(Maximum Transmission UNit)という)、通常46バイト~1500バイトになっています。
これ以上のデータを送る場合、通常はIPのレイヤーでデータが分割されて、データが送信されることになります。

イーサネットフレームのFCSとは?

FCS(Frame Check Sequence)とは、イーサネットレイヤーのチェックサム機構になります。通常、宛先/送信元 MACアドレスEthernetペイロード、タイプに対してチェックサムの計算が行われます。このデータに対する同様の計算を、受信側、送信側のNICで行うことで、データが正しく送受信できているかを保証することになります。

IPレイヤーだけでなく、イーサネットのレイヤーでもチェックサムの機構あるんですね。
ちなみに、このチェックサムの演算、およびFCSヘッダーの付加はNICドライバ内で行なっています。
ちなみに、ここら辺はNICドライバの内部実装になるので、ネットワークエンジニアでもほとんど扱うことはないかと思います。

MACアドレスとは?

HTTPリクエストのパケット解析: レイヤー3 (IP)

IP ヘッダーは以下のようなヘッダー群で構築されています。

f:id:low_programing:20191014205849g:plain
https://www.infraexpert.com/study/tcpip1.html

IPヘッダー

4bitのフィールドで、ここではIPパケットのバージョンを示しています。
通常、IPv4が使われるので、この値は0100担っています。一部、IPv6の通信では、0110になっています。

IPヘッダー長

IPv4では、この値は5になっています。IPヘッダーの長さは、20byteで、この数字は32bit単位で表記されているので、20 * 8 / 32 = 5となります。・

IPフラグメンテーションとは?

IPフラグメンテーションとはどのようなものでしょうか。
これは先ほど書いたMTUが密接に関わってきます。

HTTPリクエストのパケット解析: レイヤー5 (アプリケーションレイヤー)

[後日追記します]