Network & delivery

7 min readUpdated

Bps vs pps vs rps: the three numbers that size a DDoS

Quick answer

Bits per second (bps) measures bandwidth, packets per second (pps) measures packet rate, and requests per second (rps) measures application work. They fail different bottlenecks: bps saturates a link, pps exhausts a router, NIC or firewall, and rps overwhelms the application. Because overhead is fixed per packet, a 1 Gbps flood of tiny 64-byte frames is 1.49 million pps, which can melt a device that a larger flood of big packets would not touch. Size each attack by all three.

01What is the difference between bps, pps and rps?

Bits per second (bps, usually Gbps or Tbps) counts the volume of data on the wire. Packets per second (pps, usually Mpps) counts how many individual packets arrive, regardless of size. Requests per second (rps) counts complete application requests, such as HTTP requests. They are not interchangeable: a flood can be enormous in one and trivial in another.

Each number maps to a different bottleneck. Bandwidth (bps) is limited by the capacity of your link and your provider's uplink. Packet rate (pps) is limited by how fast a router, a network card or a stateful firewall can process packets, one at a time, no matter how small. Request rate (rps) is limited by how much work the application, cache and database can do per request.

That is why defenders quote all three. An attack described only as "100 Gbps" tells you nothing about whether it will drown your uplink or your router first. The sections below show the line-rate maths, a worked example of a small-bps attack that still kills a device, and which attack types push which metric. For an interactive converter between the first two, use the bandwidth and packets-per-second calculator.

02How many packets per second fit in a gigabit?

The answer depends entirely on packet size, because Ethernet adds a fixed overhead to every frame. On the wire each frame carries a 7-byte preamble, a 1-byte start-of-frame delimiter and a 12-byte inter-frame gap, which is 20 bytes of overhead that never changes. The smallest valid Ethernet frame is 64 bytes, so the smallest thing on the wire is 64 + 20 = 84 bytes, or 672 bits.

Divide the link speed by that and you get the maximum packet rate. At 1 Gbit/s that is 1,000,000,000 / 672 = 1,488,095 packets per second, the well-known 1.488 Mpps per gigabit figure. A 10 Gbit/s link therefore tops out near 14.88 Mpps of minimum-size frames. Cisco's own performance note gives the same range: a 1-Gb/s link carries between 81,274 and 1,488,096 packets per second depending on size.

Large packets flip the ratio. A 1500-byte payload becomes a 1,518-byte frame, or 1,538 bytes on the wire, so a 10 Gbit/s link carries only about 812,744 of those per second. The same bandwidth, roughly eighteen times fewer packets. This is the heart of why packet rate and bandwidth are different problems.

Frame (payload)On-wire bytesPer 1 Gbit/sPer 10 Gbit/s
64-byte minimum frame (46-byte payload)841.49 Mpps14.88 Mpps
530-byte frame (512-byte payload)550227 kpps2.27 Mpps
1,518-byte frame (1500-byte payload)1,53881 kpps0.81 Mpps
Line-rate packets per second (preamble + SFD + inter-frame gap = 20 bytes)
on-wire bytes   = frame bytes + 20
packets/second  = link bits per second / (on-wire bytes * 8)

64-byte frame :  1 Gbit/s  / (84   * 8) = 1,488,095  pps  (1.49 Mpps)
64-byte frame : 10 Gbit/s  / (84   * 8) = 14,880,952 pps  (14.88 Mpps)
1500 payload  : 10 Gbit/s  / (1538 * 8) =    812,744 pps  (0.81 Mpps, 1518-byte frame)

03Why can a small Gbps flood kill a server a bigger one survives?

Because the device limit is usually packets, not bits. Routers, switches and network cards are rated for a forwarding rate in packets per second; a stateful firewall is rated for new connections per second and concurrent connections. None of those limits care how big each packet is. A flood of tiny packets hits the packet limit long before it hits the bandwidth limit.

Take a hypothetical small virtual server or edge router that can forward roughly 1 Mpps. A 5 Gbit/s flood of full-size 1500-byte packets is only about 0.41 Mpps, well within reach, so the box keeps working. A 1 Gbit/s flood of 64-byte packets is 1.49 Mpps, which overruns the same box even though it is one fifth of the bandwidth. The smaller attack in bits is the larger attack in packets, and packets are what breaks.

This is exactly why packet-rate attacks have grown. In April 2024 OVHcloud reported an attack of roughly 840 Mpps, then a record, 99% of it TCP ACK packets from about 5,000 source addresses. The point of such an attack is not to fill a 100-gigabit pipe; it is to exceed the per-second packet budget of the gear in the path.

04Which attacks stress which metric?

Roughly, the three classic layers of DDoS map onto the three metrics. Volumetric attacks aim at bandwidth (bps). Protocol and state attacks aim at packet rate and connection tables (pps). Application-layer attacks aim at request handling (rps). Many real campaigns combine them, which is why a single figure is never the whole story.

  • A volumetric flood is sized in bps because the goal is to overrun the pipe; see amplification attacks for how a small request becomes huge traffic
  • A protocol flood is sized in pps because each small packet costs the same to process; this is the realm of Layer 3/4 attacks
  • An application flood is sized in rps because each request triggers real work behind it, as in an HTTP flood
MetricWhat it exhaustsTypical attacksMeasured in
bpsLink and uplink bandwidthAmplification/reflection such as NTP or memcached, large-packet UDP floodsGbps, Tbps
ppsRouter, NIC and firewall packet budgetSYN/ACK/RST floods, small-packet UDP floodsMpps, Bpps
rpsApplication, cache and database CPUHTTP floods, Rapid Reset, scrapingrequests/s

05What do the record numbers actually mean?

Record attacks are reported in whichever metric they set, which is why the headline numbers look unrelated. Cloudflare's report for the third quarter of 2025 (December 2025) described a 29.7 Tbps attack and a separate 14.1 billion packets per second attack, both from the Aisuru botnet. Its report for the fourth quarter (February 2026) described a 31.4 Tbps attack that lasted 35 seconds. The bandwidth record and the packet-rate record were different attacks.

Application-layer records are separate. The HTTP/2 Rapid Reset campaign of 2023 produced attacks of more than 201 million requests per second (Cloudflare) and 398 million (Google), using a technique that cost the attacker almost nothing per request. Cloudflare's fourth-quarter 2025 report put the largest HTTP floods of that campaign at 205 million requests per second, the highest rates it had seen since Rapid Reset. No amount of bandwidth planning helps against a request-rate flood, and no request limit helps against a packet-rate flood.

The practical lesson is to read all three numbers whenever an attack or a protection product is described. A table that lists only Tbps hides whether the real pressure was on the pipe, the processor or the application.

MetricLargest figure in the cited reportsSource and date
Bandwidth (bps)31.4 Tbps (35 s)Cloudflare, 2025 Q4 report (February 2026)
Packet rate (pps)14.1 BppsCloudflare, 2025 Q3 report (December 2025)
Request rate (rps)398 million rpsGoogle, 2023 (Rapid Reset)

06How do I convert between Gbps and Mpps for my own numbers?

Use the formula above, or the bandwidth and packets-per-second calculator, which does the arithmetic for any frame size and includes the 20-byte Ethernet overhead. Enter your link speed and a frame size to see the packet rate, or enter a packet rate to see the bandwidth it occupies. It runs in the browser.

When you plan capacity, convert the attack you fear into the metric your weakest component limits. If your router is the constraint, work in pps. If your transit is the constraint, work in bps. If your application is the constraint, work in rps. Then compare each against the relevant rating, not against a single Gbps headline. For the wider picture of how these attacks are absorbed off your network entirely, see what DDoS mitigation is and how to stop a DDoS attack.

Questions

Frequently asked questions

It depends on packet size. With minimum 64-byte Ethernet frames, which become 84 bytes on the wire after the preamble and inter-frame gap, 10 Gbit/s carries about 14.88 million packets per second. With full-size frames (a 1500-byte payload, 1,538 bytes on the wire) the same 10 Gbit/s carries only about 812,000 packets per second, roughly eighteen times fewer. Small packets are far harder on devices than large ones.

Neither alone; it depends on your weakest component. If a router or network card is the limit, packet rate (pps) matters most, because each small packet costs the same to process. If your uplink bandwidth is the limit, bits per second (bps) matters most. Stateful firewalls add a third limit, connections per second, which a packet flood can exhaust before either of the others.

Requests per second counts complete application requests, such as HTTP requests. It matters for Layer 7 attacks, where each request is cheap for the attacker but triggers real work on the server, cache and database. Request-rate attacks like HTTP floods and Rapid Reset set records in rps, not bps, and bandwidth planning does nothing against them; request-level filtering does.

Because packet-processing cost is per packet, not per byte. A device spends roughly the same effort on a 64-byte packet as on a 1500-byte one, so a flood of tiny packets reaches the device's packets-per-second limit while using far less bandwidth. A 1 Gbit/s flood of 64-byte frames is 1.49 Mpps and can overrun hardware that a 5 Gbit/s flood of large frames would not.

Divide the link rate in bits per second by the on-wire packet size in bits, where the on-wire size is the frame size plus 20 bytes of Ethernet overhead. For example, 1 Gbit/s divided by (84 x 8) gives 1,488,095 packets per second for minimum frames. The bandwidth and packets-per-second calculator does this for any frame size, including the fixed overhead.

Sources

Sources and verification

Line-rate figures recomputed with Python 3.11 (frame bytes plus 20 bytes of preamble, delimiter and gap) and matched against Cisco's published 1 Gbit/s range of 81,274 to 1,488,096 frames per second, on Debian 12, October 2026.

  1. 01Bandwidth, Packets Per Second, and Other Network Performance Metrics · Cisco
  2. 02The rise of packet rate attacks: when core routers turn evil · OVHcloud
  3. 03Gbps, pps, rps DDoS: volumetric, protocol and application-layer attacks · Imperva
  4. 042025 Q4 DDoS threat report: a record-setting 31.4 Tbps attack · Cloudflare
  5. 052025 Q3 DDoS threat report (29.7 Tbps and 14.1 Bpps attacks) · Cloudflare
  6. 06HTTP/2 Zero-Day vulnerability results in record-breaking DDoS attacks (201M rps) · Cloudflare
  7. 07How it works: the novel HTTP/2 Rapid Reset DDoS attack (398M rps) · Google Cloud

Last updated