このセクションでは、Cloudflare が Anycast ルーティングでトラフィックを効率よく振り分け、ユーザーとオリジンサーバーの間に入る仕組みを説明します。続いて、性能最適化のための TCP 接続と keep-alive を扱い、最後に TCP 接続を速くするプロトコル拡張である TCP Fast Open(TFO)を説明します。
ユーザーはデバイスから Cloudflare のグローバルネットワークへリクエストを送り、Cloudflare に接続します。Cloudflare はユーザーとオリジンの間に入り、オリジンサーバーへ接続します。
flowchart LR accTitle: Cloudflare を介した接続 A[訪問者] <-- 接続 --> B[Cloudflare グローバルネットワーク] <-- 接続 --> C[オリジンサーバー]
ユーザーのトラフィックは Anycast ↗ ルーティングにより、最短の Border Gateway Protocol ↗(BGP)パスに基づいて、最寄りの Cloudflare データセンターへ届きます。Cloudflare はその後リクエストを処理します。Cloudflare のデータセンターから応答できない場合は、Cloudflare がオリジンサーバーへの接続を開き、リクエストを転送します。
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)はプロトコル拡張です。データを初期 SYN パケットで送れます。ハンドシェイクを別に完了してからデータを送る必要がありません。TCP 接続の確立を大幅に速くできます。TFO はレイテンシを下げ、特に高レイテンシのネットワークで Web サイトとアプリケーションの性能を高めます。Cloudflare はユーザー接続で TFO に対応しています。
クライアントが Cloudflare で保護された Web サーバーへ接続を開始すると、接続要求として TCP SYN パケットを送ります。リバースプロキシとして動く Cloudflare は SYN パケットを受け取り、接続確立のため SYN-ACK パケットで応答します。TFO が有効な場合、Cloudflare は SYN-ACK パケットに初期データ(HTTP リクエストデータなど)も含められます。データ送信用の追加の往復が不要になります。クライアントはデータを含む SYN-ACK パケットを受け取り、ACK パケットで確認します。これにより接続確立が速くなります。