KaQiita

新米社会人が適当なことを書いてます。温かく見守ってやってください。

3Way-Handshake による TCP 通信コネクションの確立

はじめに

以下の「アドレスバーに URL を打ち込んでからページが表示されるまで」の記事のステップ2の記事です。

www.kaqiita.com

ステップ1のおさらい

ステップ1では「DNS による名前解決」について書きました。

ここで行ったことは、ユーザーが入力した URL からリクエストを送るサーバーの IP アドレスを特定することでした。

そして IP アドレスが必要な理由は「TCP で通信するため」でした。

今回のステップは、IP アドレスが判明した後に実際に TCP で通信をするための準備を行うステップとなります。

3Way-Handshake

TCP で通信するために「3Way-Handshake」という手法が取られます。

f:id:KakkiiiiKyg:20190826124724p:plain

リクエストを送る前は、ブラウザは「CLOSED」で通信コネクションは一切開いていません。

DNS への名前解決が終わると、ブラウザは通信コネクションを確立するために、「LISTEN」状態のサーバーにコネクション確立要求(SYN)を送ります。

コネクション確立要求を受け取ったサーバーは「SYN_RECV」の状態になり、ブラウザにコネクション確立応答(ACK)とコネクション確立要求(SYN)を送ります。

ブラウザ側からコネクション確立要求を送っただけだと、ブラウザ ➡︎ サーバーにはリクエストを遅れますが、サーバー ➡︎ ブラウザにレスポンスを返せません。

そこでサーバーからもコネクション確立要求をブラウザに送ります。

コネクション確立要求を送った「SYN_SENT」状態のブラウザは、サーバーからのコネクション確立要求を受け取ることで「ESTABLISHED」状態になり、サーバーにコネクション確立応答(ACK)を送ります。

ブラウザからコネクション確立応答を受け取ったサーバーは、ブラウザが「ESTABLISHED」状態になったことを知り、自身も「ESTABLISHED」状態になります。

これでブラウザ・サーバー間に TCP 通信コネクションが確立しました。

終わりに

ここまでがステップ2の流れです。

次のステップ3の記事はこちら。

www.kaqiita.com