Cloudflareは毎秒6000万件のHTTPリクエストを処理しており、そのうち約70%がTCP、約30%がUDP・QUICでの接続とのこと。このうち、TCPでの接続が開始されてから実際にデータ交換が完了する割合は約80%しかありません。なぜTCP接続が切断されるのかについて、Cloudflareが分析をまとめました。

Bringing insights into TCP resets and timeouts to Cloudflare Radar

https://blog.cloudflare.com/tcp-resets-timeouts/

TCP接続におけるクライアントとサーバーのやりとりは下図のように進みます。まずクライアントが「SYN」フラグの付いたパケットを送信することでハンドシェイクが始まり、サーバーが「SYN+ACK」で返答してからクライアントが「ACK」を送信することでハンドシェイクが完了し、データが送信できるようになります。また、接続を終了する際にはお互いに「FIN」と「ACK」を送信し合うFINハンドシェイクを行います。



ネットワークエラーや悪意のある攻撃など、さまざまな理由によって一度開始されたTCP接続が中断されることも多く、Cloudflareでは接続の状態をモニタリングして異常の規模と理由を理解することでネットワークの信頼性を高めようとしているとのこと。分析においては「接続プロセスのどのタイミングで異常が発生したか」が重要な手がかりとなるため、Cloudflareは異常が発生した接続データを下記の4種類に分類しました。

・Post SYN

サーバーがクライアントのSYNパケットを受信後、「SYN+ACK」を送信してもクライアントから「ACK」が送られなかった場合の分類です。パケットが偽装されていることが多く、位置情報が信頼できません。

・Post ACK

ハンドシェイクが完了し、接続が確立したものの、何のデータも送信されずに接続がリセットされたりタイムアウトしたりする場合の分類です。

・Post PSH

最初のデータが1回だけ受信できたものの、その後接続がリセットされたりタイムアウトしたりする場合の分類です。PSHフラグはTCPパケットにアプリケーション用のデータが含まれていることを示しています。

・Later

複数回のデータの受信に成功したものの、10回以内にリセットやタイムアウトが発生した場合の分類です。

全世界のTCP接続の状況をグラフに表すと下図の通り。世界平均では約20%のTCP接続においてクライアントから10回データパケットを受信する前にリセットやタイムアウトが発生しています。新たな日付のデータを確認したい場合はCloudflare Radarのサイトで閲覧可能です。



アメリカのデータはこんな感じ。Post SYNの割合が高いのはネットワークスキャンによるもので、Laterについてはブラウザでタブを開いたもののすぐに閉じた場合などが該当するとのこと。



アメリカの中でも住宅向けのISPに限定するとPost SYNの割合が少し低下しました。



一方、Googleが使用しているASではLaterでの切断がほとんどなく、人間による接続が少ないことがうかがえます。



実際にCloudflareのボット検出システムでは99.2%がボットによる接続と判定されており、上記の分析と一致しています。



インターネットスキャン会社が使用しているASではPost SYNの割合が跳ね上がります。



こちらもボット検出システムではほとんどがボットによる接続と判定されました。



中国ではグレート・ファイアウォールという検閲システムが稼働しており、禁止されたアドレスへの接続を強制的に中断するためPost SYNの割合が跳ね上がります。



イギリスのデータでは毎日18時にPost SYNの値が上昇するという特徴が見つかっています。



このサイクルはGoogle Cloud上で稼働するZMapによる全IPアドレスへのスキャンであることがCloudflareの調査で判明しました。



メキシコではPost ACKやPost PSHの数値が世界平均よりも高くなっています。CloudflareによるとPost ACKやPost PSHでの異常は接続の改ざんに関係する場合が多いとのこと。



メキシコの問題では下図のASがPost ACKの数値を高めています。Cloudflareの分析では、携帯電話会社が特定のサイトへの接続について課金しないというゼロレーティングを適用している場合、転送量が上限になった際に接続先を確認してから切断するためPost ACKでの切断が多くなるとのこと。



同じ通信会社のペルーにある子会社でも同じ傾向が確認されており、同じルールで運用されていることがうかがえます。



同様のルールを適用する場合でも、手法によってPost PSHでの切断になる場合もあるとのこと。



一部の国では試験時間中にインターネットが切断されます。シリアのデータでは、切断されている時間にはPost SYNの割合が極めて高くなっており、全ての接続がブロックされたことが分かります。



一方、同じように試験時間中にインターネットを切断しているアルジェリアではPost ACKの割合が高まっており、特定の接続のみをターゲットにして切断している模様。



こうした国やASごとのデータはCloudflare Radarで自由に閲覧できるため、気になる人は確認してみてください。