コンテンツにスキップ

TCP接続

以下のセクションでは、Cloudflareがどのようにトラフィックを効率的にルーティングし、ユーザーとオリジンサーバーの間の仲介者として機能するかを説明します。第二部では、パフォーマンス最適化のためのTCP接続とキープアライブについて説明し、最後にTCPファストオープン(TFO)、TCP接続の速度を向上させるプロトコル拡張について説明します。

Cloudflareがユーザーをオリジンに接続する方法

ユーザーは、デバイスからCloudflareのグローバルネットワークにリクエストを送信することでCloudflareに接続します。Cloudflareは、ユーザーとオリジンの間の仲介者として機能し、オリジンサーバーに接続します。

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

ユーザートラフィックは、最短のボーダーゲートウェイプロトコル(BGP)パスに基づいて、最寄りのCloudflareデータセンターにルーティングされます。これはエニキャストルーティングのおかげです。Cloudflareはリクエストを処理します。リクエストがCloudflareのデータセンターから提供されない場合、Cloudflareはオリジンサーバーに接続を開いてリクエストを転送します。

TCP接続とキープアライブ

HTTP(ハイパーテキスト転送プロトコル)は、TCP上で動作するレイヤー7アプリケーションプロトコルです。デフォルトでは、HTTPは各リクエスト-レスポンスサイクルごとに新しいTCP接続を開くため、接続の確立と切断が繰り返されることでパフォーマンスのオーバーヘッドが発生する可能性があります。

キープアライブは、TCPとHTTPを橋渡しするメカニズムであり、単一のTCP接続を複数のHTTPリクエストとレスポンスのために開いたままにすることを可能にします。これにより、各ウェブリソースのために新しいTCP接続を確立する際の接続オーバーヘッドとレイテンシが最小限に抑えられます。キープアライブは、既存の接続の再利用を促進し、ネットワークトラフィックを削減し、ユーザーエクスペリエンスを向上させることで、ウェブアプリケーションの効率性と応答性を改善します。

TCP接続は、HTTPリクエストが終了した後も持続することがあります。ただし、リソースを効率的に管理するために、アイドル接続は通常、一定期間の非アクティブ状態の後に終了されます。接続の再利用を促進し、接続オーバーヘッドを最小限に抑えるために、キープアライブが使用されます。これらのメカニズムは、ネットワークリソースを節約しながら、ウェブアプリケーションのパフォーマンスと信頼性を最適化します。

ユーザーまたはオリジンのいずれかが2回のキープアライブに応答しない場合、CloudflareはTCPリセット(RST)パケットを送信して接続を切断します。

ユーザーへの接続に関して、Cloudflareはデフォルトのアイドルタイムアウトを400秒に設定しています。400秒後、Cloudflareは75秒ごとにキープアライブプローブを送信し始めます。9回連続してプローブに応答がない場合、CloudflareはRSTパケットを送信して接続を切断します。

ユーザーとCloudflareの間、またCloudflareとオリジンの間のTCP接続設定は、エンタープライズ顧客向けにカスタマイズ可能です。詳細については、アカウントチームにお問い合わせください。

TCPファストオープン(TFO)

TCPファストオープン(TFO)は、データを初期のSYNパケットで送信できるようにすることで、TCP接続の確立速度を大幅に向上させるプロトコル拡張です。これにより、データ送信を開始する前に別のハンドシェイクを必要としません。TFOはレイテンシを削減し、特に高レイテンシネットワークにおいてウェブサイトやアプリケーションのパフォーマンスを向上させることができます。Cloudflareはユーザー接続でTFOをサポートしています。

クライアントがCloudflareによって保護されたウェブサーバーへの接続を開始すると、接続をリクエストするためにTCP SYNパケットを送信します。Cloudflareはリバースプロキシとして機能し、SYNパケットをインターセプトしてSYN-ACKパケットで応答し、接続を確立します。TFOが有効な場合、CloudflareはSYN-ACKパケット内に初期データ(HTTPリクエストデータなど)を送信することもでき、データ送信のための追加のラウンドトリップを不要にします。クライアントはデータを含むSYN-ACKパケットを受信し、ACKパケットで応答します。これにより、接続のセットアップが迅速化されます。