コネクションタイムアウト

電話の呼び出し音が鳴り続けても出ないときに自動で切れるように、サーバーが応答するまで待つ制限時間のことです。

定義 コネクションタイムアウト(Connection Timeout)とは、スマホやパソコンが相手のサーバーに接続を要求したあと、決められた時間内に返答がない場合に接続の試行を自動で諦める制限時間のことです。

電話の呼び出し音が鳴り続けると、なぜ自動で切れるのでしょうか?

友達に電話をかけたとき、相手が出ないのに延々と呼び出し音を聞き続ける人はいませんよね。通常は30秒〜1分ほど鳴らしても出なければ、電話会社側で自動的に通話を終了させます。もし永遠に呼び出し音が鳴り続けたら、かけた側も次の行動に移れず足止めされてしまいます。

インターネットの世界でも、これとまったく同じ仕組みが働いています。スマホで特定のウェブサイトやアプリを開くとき、私たちの端末はまず相手のサーバーへ「今、お話しできますか?」という挨拶の合図を送ります。

しかし、相手のサーバーの電源が落ちていたり回線が切れていたりすると、何の返事も返ってきません。返事が来るまで延々と待ち続けると、アプリの画面はフリーズし、端末のバッテリーやメモリが無駄に消費されてしまいます。そのためプログラムには、あらかじめ決めておいた待機時間まで待っても応答がなければ、接続をきっぱり諦める仕組みが備わっています。

接続タイムアウトの仕組みと流れ スマホ 無応答サーバー 1. 接続要求送信 2. 応答待機(時間計測) 3. タイムアウトで切断

もう少し詳しく:握手(ハンドシェイク)が終わって初めて通信が始まります

もう少し専門的に言うと、コネクションタイムアウトは実際のデータを受け取っている最中ではなく、通信の通り道を最初に確立する段階で発生します。

インターネット上で2台のコンピューターが通信を始める際、「3ウェイ・ハンドシェイク(3-Way Handshake)」という3段階の握手手順を踏みます。まずこちらのスマホが「接続してもいいですか?」と手を差し出し(SYN)、サーバーが「いいですよ」と返事をして(SYN-ACK)、さらに端末が「了解しました」と確認を送る(ACK)ことで、安全な通信経路が完成します。

しかし、サーバーの手前にあるファイアウォール(セキュリティシステム)が合図を遮断してしまったり、途中のネットワーク機器でデータが消えてしまったりすると、最初の握手が成立しません。端末は返事を待ちながらタイマーを動かし、あらかじめ設定された秒数が経過した瞬間に接続失敗エラーを表示します。

リードタイムアウト(Read Timeout)との決定的な違い

コネクションタイムアウトは、リードタイムアウト(Read Timeout / 読み込みタイムアウト)とよく混同されます。この2つはエラーが起きるタイミングも原因もまったく異なります。レストランに例えると非常にわかりやすいでしょう。

コネクションタイムアウトは、お店のドアが固く閉ざされていたり住所が間違っていたりして、店内に入ることすらできずに諦めて帰る状況です。通信の通り道自体が開いていません。

一方のリードタイムアウトは、お店の中に正常に入店し、店員さんに注文まで完了した状態です。しかし、厨房が混雑しすぎて1時間待っても料理が出てこず、お客さんが待ちくたびれて店を出てしまう状況にあたります。

したがって、コネクションタイムアウトが出た場合はサーバーが停止しているかアドレス設定が間違っている可能性が高く、リードタイムアウトが出た場合はサーバー内部の処理やデータ取得に時間がかかりすぎている可能性が高いと言えます。

🤔 よくある誤解

✕ 誤解

コネクションタイムアウトは、ネット回線が遅くて動画が途中で止まったときに起きるエラーである。

✓ 事実

動画が途中で止まるのは、データを受信している最中の問題です。コネクションタイムアウトは、データを受信する以前に、サーバーとの「最初の接続(握手)」すら成立しなかったときに発生します。

🧺 日常で出会う場面

1 アクセスしようとしたサイトがサーバーメンテナンス中やダウンしているとき、ブラウザに「接続がタイムアウトしました」と表示される。
2 Wi-Fiの電波が弱すぎてルーターと最初の通信ができず、アプリの起動や読み込みがキャンセルされる。
💡 つまり ひとことで

サーバーと最初の通信経路をつなぐまで待機する、最大の制限時間のことです。