KaQiita

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

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

はじめに

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

www.kaqiita.com

今までのステップのおさらいと今ステップで行うこと

今までのステップで既にブラウザからサーバーにリクエストを送り、サーバーから返ってきたレスポンスを元に Render Tree を構築して、ブラウザにページが表示されるところまで行いました。

そのため説明はほとんど終わっているですが、ステップ2の記事で確立した TCP 通信コネクションを切断するという工程が残っているので、最後にその解説を行います。

因みに、ステップ2の記事はこちらです。

www.kaqiita.com

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

通信コネクションを確立したときと同じように、通信コネクションを切断するときにも「3Way-Handshake」という手法が取られます。

f:id:KakkiiiiKyg:20190930201351p:plain

前回の図では「ブラウザ」や「サーバー」と明示的に書いていましたが、この図では「Active Close ホスト」と「Passive Close ホスト」と書いています。

これは通信を切断する際に送るコネクション切断要求(FIN)は、ブラウザ側が送ることもあればサーバー側が送ることもあるためです。

このコネクション切断要求を受け取ったホストはコネクション切断応答(ACK)を送り返し、「CLOSE_WAIT」の状態になります。

さらにコネクション切断要求(FIN)も加えて送り、「LAST_ACT」状態になります。

このコネクション切断要求を受け取ったホストは「TIME_WAIT」状態になり、コネクション切断応答(ACK)を送り返します。

そしてお互いのホストは「CLOSED」の状態となり、コネクションは切断されます。

Keep-Alive

上記の説明だと、ブラウザがサーバーに1回リクエストを送る度に通信コネクションを確立して切断するということをしなくてはなりません。

これでは通信の度に通信コネクション確立・切断の時間が掛かってしまいます。

ここで Keep-Alive という「この期間は通信コネクションを切断しないでね」という命令をしておくと、通信の度に切断することがなくなり、一定の時間は通信コネクションを確立したままになるので、その分通信速度を上げることが出来ます。

終わりに

この記事が「アドレスバーに URL を打ち込んでからページが表示されるまで」の最後の記事でした。

最後まで読んでいただき、ありがとうございました。