インターネットでウェブページを見るとき、見えないところでいくつもの「通信の仕組み」が動いている。
特に重要なのが「TCPコネクション」と「HTTPコネクション」、それに関係する「タイムアウト」だ。
タイムアウトには種類があり、場所によって役割がちがう。
この記事では、それらをいちどに整理して説明する。
Contents
TCPコネクションとは
TCP(Transmission Control Protocol)は、データをきちんと順番に確実に届けるためのしくみ。
たとえば、あなたがあるウェブサイトにアクセスするとき:
- サーバーと「つながっていいですか?」とあいさつする(SYN)
- サーバーが「いいよ!」と返す(SYN-ACK)
- 「じゃあ始めよう!」と返す(ACK)
この3ステップでTCPコネクションが確立される。
これを「ハンドシェイク」と呼ぶ。
TCPコネクションタイムアウトとは?
TCPコネクションタイムアウトは、このハンドシェイクが完了するまでの時間制限のこと。
もしサーバーが応答しなかったり、途中で止まっていたら、「もうつながらない」と判断して通信をあきらめる。
それがTCPレベルのタイムアウト。
HTTPコネクションとは
TCPコネクションの上に乗るのがHTTP(Hypertext Transfer Protocol)コネクション。
これは実際の「データのやりとり」をするためのしくみ。
TCPが電話回線なら、HTTPはその上で話している会話。
たとえば:
- 「このページください」(HTTPリクエスト)
- 「はい、どうぞ」(HTTPレスポンス)
このやりとりが「HTTPコネクション」。
ブラウザやAPI通信で毎日使われている。
HTTPにおける2つのタイムアウト
コネクションタイムアウト(HTTPレベル)
HTTPでいうコネクションタイムアウトとは、TCP接続にかかる時間をアプリケーション側がどう待つかの設定。
つまり、「HTTPリクエストを出す前に、TCPがちゃんとつながるかどうか」を何秒待つかを決めている。
中身はTCPコネクションタイムアウトとほぼ同じ。
リードタイムアウト
HTTPにおけるリードタイムアウトは、リクエストは送れたが、レスポンスが返ってこないときの待機時間。
「ページください」と言ったけど、サーバーがなかなか返してくれないとき、「もうムリ」と切る。
これはアプリケーションレイヤーの問題で、APIやWebサーバー、クライアントがそれぞれ設定する。
まとめるとこうなる
レイヤー | タイムアウトの種類 | 内容 | 主な設定場所 |
---|---|---|---|
TCP | TCPコネクションタイムアウト | TCP接続(3wayハンドシェイク)が完了しない | OS, ミドルウェア |
HTTP | コネクションタイムアウト(アプリ視点) | TCPがつながるまで待つ時間 | Webクライアント、HTTPライブラリ |
HTTP | リードタイムアウト | リクエスト後にレスポンスを待つ時間 | アプリケーション, Webサーバー |
なぜこれを知るべきか
タイムアウトは、ユーザー体験やシステム安定性を大きく左右する。
GoogleのSRE(Site Reliability Engineering)チームのガイドラインでは、タイムアウトの設計を次のように述べている:
“Timeouts are the foundation of resilient systems.”
「タイムアウトは、壊れにくいシステムの土台である」
適切に設定しないと:
- ネットが遅く感じる
- ユーザーが離脱する
- サーバーの負荷が下がらない
まとめ
- TCPコネクションタイムアウトは実在する。TCPのつながりに時間制限がある。
- HTTPのコネクションタイムアウトは、TCPのタイムアウトとほぼ同じ意味。
- リードタイムアウトは、HTTPリクエスト後にレスポンスを待つ時間。
- すべてのタイムアウトは、「どこであきらめるか」を決める設計ポイント。
- これらの理解は、ネットワークトラブルの原因特定にも使える。
通信がスムーズに見える裏側には、こうした“見えない時間制限”がきちんと設計されている。
しくみを知っておくことは、より良いITスキルの土台になる。