コンピュータネットワークでは、レート制限はネットワークインターフェースコントローラが送受信するリクエストのレートを制御するために使用されます。これは、DoS攻撃[ 1 ]を防止したり、 Webスクレイピングを制限したりするために使用できます。[ 2 ]
研究によると、1台のゾンビマシンのフラッディング率は毎秒20回以上のHTTP GETリクエストであり、正当なリクエスト率はそれよりもはるかに低いことが示されている[ 3 ]。
スロットリングエラーの数を最小限に抑えるために、レート制限はスロットリングパターンと併用して使用する必要があります。 [ 4 ]
ハードウェアアプライアンスは、 OSIモデルのレイヤー4またはレイヤー5におけるリクエストのレートを制限することができます。
レート制限は、受信したECNマーク付きパケットによって送信側のネットワークプロトコルスタックによって引き起こされる場合もあれば、途中のルーターのネットワークスケジューラによって引き起こされる場合もある。
ハードウェアアプライアンスはレイヤー4で特定のIPアドレス範囲のレートを制限できますが、NATによってISPの単一のIPアドレスにマスクされた多数のユーザーを持つネットワークをブロックするリスクがあります。
ディープパケットインスペクションはセッション層でのフィルタリングに使用できますが、アプライアンスとプロトコルサーバー(つまりWebサーバー)間のTLSやSSLなどの暗号化プロトコルを効果的に無効化します。
FTPサーバーや一般的なWebサーバーなど、リクエスト/レスポンスモデルを使用するプロトコルサーバーは、セッション管理のためにRedisやAerospikeのような中央集中型のインメモリキーバリューデータベースを使用する場合があります。レート制限アルゴリズムは、セッションキャッシュ内の情報に基づいて、ユーザーセッション(またはIPアドレス)を制限する必要があるかどうかをチェックするために使用されます。
クライアントが一定時間内にリクエストを多数送信した場合、HTTPサーバーはステータス コード429: Too Many Requestsで応答することがあります。
しかし、場合によっては(例えばWebサーバーの場合)、セッション管理およびレート制限アルゴリズムは、Webサーバー自体ではなく、Webサーバー上で動作するアプリケーション(動的コンテンツに使用されるもの)に組み込むべきである。
プロトコルサーバーやネットワークデバイスは、設定されたリクエスト制限に達したことを検知すると、新規リクエストの処理を停止し、応答しなくなります。場合によっては、入力レートが許容レベルに達した時点で処理されるキューに追加されることもありますが、ピーク時にはリクエストレートがキューの容量を超えることもあり、リクエストを破棄せざるを得ない場合もあります。
データセンターでは、サービスレベル契約に基づいて、異なるテナントやアプリケーションに割り当てられるリソースのシェアを制御するために、レート制限が広く使用されています。[ 5 ]データセンターでは、ソフトウェアとハードウェアを使用してさまざまなレート制限技術が適用されています。仮想化データセンターでは、ハイパーバイザ層でレート制限を適用することもできます。データセンターのレートリミッタの重要なパフォーマンス指標は、スケーラビリティを決定するリソースフットプリント(メモリとCPUの使用率)と精度です。通常、トレードオフが存在し、レートリミッタにより多くのリソースを割り当てることで、より高い精度を実現できます。データセンターのレート制限のパフォーマンス向上に焦点を当てた研究が数多くあります。[ 5 ] [ 6 ]