Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

TCP 接続

最終更新 Markdown で表示Agent セットアップ

このセクションでは、Cloudflare が Anycast ルーティングでトラフィックを効率よく振り分け、ユーザーとオリジンサーバーの間に入る仕組みを説明します。続いて、性能最適化のための TCP 接続と keep-alive を扱い、最後に TCP 接続を速くするプロトコル拡張である TCP Fast Open(TFO)を説明します。

Cloudflare がユーザーとオリジンを接続する仕組み

ユーザーはデバイスから Cloudflare のグローバルネットワークへリクエストを送り、Cloudflare に接続します。Cloudflare はユーザーとオリジンの間に入り、オリジンサーバーへ接続します。

flowchart LR
accTitle: Cloudflare を介した接続
A[訪問者] <-- 接続 --> B[Cloudflare グローバルネットワーク] <-- 接続 --> C[オリジンサーバー]

ユーザーのトラフィックは Anycast ルーティングにより、最短の Border Gateway Protocol(BGP)パスに基づいて、最寄りの Cloudflare データセンターへ届きます。Cloudflare はその後リクエストを処理します。Cloudflare のデータセンターから応答できない場合は、Cloudflare がオリジンサーバーへの接続を開き、リクエストを転送します。

TCP 接続と keep-alive

HTTP(Hypertext Transfer Protocol)は、TCP 上で動く レイヤー 7 のアプリケーションプロトコルです。デフォルトでは、HTTP はリクエストとレスポンスのたびに新しい TCP 接続を開きます。接続の確立と切断が繰り返され、性能上のオーバーヘッドになります。

Keep-alive は TCP と HTTP をつなぐ仕組みです。1 つの TCP 接続を開いたまま、複数の HTTP リクエストとレスポンスに使えます。Web リソースごとに新しい TCP 接続を張るオーバーヘッドとレイテンシを抑えられます。既存接続の再利用でネットワークトラフィックが減り、Web アプリケーションの効率と応答性が上がります。

TCP 接続は、HTTP リクエストが終わったあとも残ることがあります。ただしリソースを効率よく使うため、一定時間アイドルの接続は通常切断されます。接続の再利用を高め、接続オーバーヘッドを抑えるために keep-alive を使います。これらの仕組みで、ネットワークリソースを節約しつつ、Web アプリケーションの性能と信頼性を高めます。

ユーザーまたはオリジンが keep-alive に 2 回応答しない場合、Cloudflare は TCP Reset(RST)パケットを送って接続を切断します。

ユーザー向け接続のデフォルトのアイドルタイムアウトは 400 秒です。400 秒のあと、Cloudflare は 75 秒ごとに keep-alive プローブを送り始めます。連続 9 回応答がなければ、Cloudflare は RST パケットを送って接続を切断します。

ユーザーと Cloudflare の間、および Cloudflare とオリジンの間の TCP 接続設定は、Enterprise のお客様向けにカスタマイズできます。詳細はアカウントチームへ問い合わせてください。

TCP Fast Open(TFO)

TCP Fast Open(TFO)はプロトコル拡張です。データを初期 SYN パケットで送れます。ハンドシェイクを別に完了してからデータを送る必要がありません。TCP 接続の確立を大幅に速くできます。TFO はレイテンシを下げ、特に高レイテンシのネットワークで Web サイトとアプリケーションの性能を高めます。Cloudflare はユーザー接続で TFO に対応しています。

クライアントが Cloudflare で保護された Web サーバーへ接続を開始すると、接続要求として TCP SYN パケットを送ります。リバースプロキシとして動く Cloudflare は SYN パケットを受け取り、接続確立のため SYN-ACK パケットで応答します。TFO が有効な場合、Cloudflare は SYN-ACK パケットに初期データ(HTTP リクエストデータなど)も含められます。データ送信用の追加の往復が不要になります。クライアントはデータを含む SYN-ACK パケットを受け取り、ACK パケットで確認します。これにより接続確立が速くなります。

役に立ちましたか?