はじめに
以下の「アドレスバーに URL を打ち込んでからページが表示されるまで」の記事のステップ2の記事です。
ステップ1のおさらい
ステップ1では「DNS による名前解決」について書きました。
ここで行ったことは、ユーザーが入力した URL からリクエストを送るサーバーの IP アドレスを特定することでした。
そして IP アドレスが必要な理由は「TCP で通信するため」でした。
今回のステップは、IP アドレスが判明した後に実際に TCP で通信をするための準備を行うステップとなります。
3Way-Handshake
TCP で通信するために「3Way-Handshake」という手法が取られます。
リクエストを送る前は、ブラウザは「CLOSED」で通信コネクションは一切開いていません。
DNS への名前解決が終わると、ブラウザは通信コネクションを確立するために、「LISTEN」状態のサーバーにコネクション確立要求(SYN)を送ります。
コネクション確立要求を受け取ったサーバーは「SYN_RECV」の状態になり、ブラウザにコネクション確立応答(ACK)とコネクション確立要求(SYN)を送ります。
ブラウザ側からコネクション確立要求を送っただけだと、ブラウザ ➡︎ サーバーにはリクエストを遅れますが、サーバー ➡︎ ブラウザにレスポンスを返せません。
そこでサーバーからもコネクション確立要求をブラウザに送ります。
コネクション確立要求を送った「SYN_SENT」状態のブラウザは、サーバーからのコネクション確立要求を受け取ることで「ESTABLISHED」状態になり、サーバーにコネクション確立応答(ACK)を送ります。
ブラウザからコネクション確立応答を受け取ったサーバーは、ブラウザが「ESTABLISHED」状態になったことを知り、自身も「ESTABLISHED」状態になります。
これでブラウザ・サーバー間に TCP 通信コネクションが確立しました。
終わりに
ここまでがステップ2の流れです。
次のステップ3の記事はこちら。