When Bangladesh vanished from the global routing table in July 2024, public routing data captured the event as it unfolded. Drawing on first-hand observations from inside one affected network, this article explores what that data can and cannot tell us.
On 18 July 2024, operators across Bangladesh began withdrawing their BGP prefixes in sequence. Within hours, 170 million people lost internet access and the country vanished from the global routing table.
The event was widely reported as a deliberate, government-ordered shutdown. I run the network at one of the operators that went dark that night, giving me a direct view of how the withdrawal unfolded. Here, I compare that experience with the public routing data to examine what the evidence can and cannot tell us about the event.
The data and its limits
Before we dive into the story, a note on the data is in order. Public routing data reveals when prefixes appeared and disappeared, but not why. To reconstruct the sequence of events, I combine several public measurement sources with direct operational observations from inside AS63526.
The primary source is RIPE RIS data which is available via RIPEstat. This provides BGP routing history pulled via API for AS63526 and AS24389 across the shutdown and restoration periods. (Note that RIPE RIS records routing history in 8-hour buckets, so it cannot determine the precise timing of events that occur close together.)
Cloudflare Radar provides AS-level traffic and announced IP space, which is what gives the operator-by-operator timing. IODA contributes three independent signals (BGP, active probing, darknet) for country-level confirmation. OONI covers platform-level blocking in the days before the full outage, with the caveat that probe gaps during the outage are themselves evidence of it. The overall timeline is consistent with independent reporting from Internet Society Pulse and Cloudflare.
Two other source choices need stating upfront. I did not do RouteViews cross-validation. That is a genuine gap, though the withdrawal events are independently visible in Cloudflare Radar. My direct observations are limited to AS63526. Everything I describe inside that network is based on firsthand observation. Everything about other networks is inferred from public measurement data, and I flag it as such.
Inside AS63526
On the evening of 18 July 2024, at around 20:45 local time (14:45 UTC), we started pulling AS63526’s (Carnival Internet) prefixes. There was no script and no automation. Forty-seven prefixes, 46 IPv4 /24s and one IPv6 /48 were withdrawn the same way any operator would do it by hand: session by session, router by router, checking after each change.
The strange part was not the procedure. These are the same commands we run for routine maintenance every week. Nothing in the protocol, and nothing in our tooling, distinguishes an ordinary cleanup from disconnecting a network from the world. That ordinariness stayed with me, and it's one of the reasons I wanted to write this article.
RIPEstat records all 47 prefixes in the bucket ending 15:59:59 UTC, seen by 358 RIS peers on IPv4 and 363 on IPv6. This is the only part of the shutdown I can describe from first-hand observation. It also serves as a known reference point: I know exactly what one manual, sequential withdrawal looks like from both the router CLI and RIPEstat. I use that reference when interpreting other operator patterns in the public routing data.
What the routing table recorded
The outage did not happen all at once. It developed over roughly 20 hours, operator by operator, each withdrawal independent of the others.
| Time (UTC) | BST (UTC+6) | Event | Source |
|---|---|---|---|
| Jul 16, ~10:00 | ~16:00 | DNS/HTTP blocking of Facebook — AS24432 and AS24389 | OONI |
| Jul 17, ~10:00 | ~16:00 | WhatsApp blocking suspected — multiple operators | OONI |
| Jul 17, 19:30 | Jul 18, 01:30 | AS24389 (Grameenphone) — all 138 prefixes withdrawn | Cloudflare Radar + RIPEstat |
| Jul 17, 20:15 | Jul 18, 02:15 | AS25245 (Banglalink) — traffic and IP space to zero | Cloudflare Radar |
| Jul 18, 00:30–01:00 | 06:30–07:00 | AS24432 (Robi Axiata) — traffic and IP space withdrawal | Cloudflare Radar + ISOC Pulse |
| Jul 18, 12:00 | 18:00 | AS58715 (Earth Telecom) — traffic declining | Cloudflare Radar |
| Jul 18, 14:45 | 20:45 | AS63526 (Carnival Internet) — withdrawal begins (direct observation) | Author + Cloudflare Radar |
| Jul 18, 15:00 | 21:00 | National traffic near-zero | Cloudflare Radar + IODA |
| Jul 18, 15:59:59 | 21:59:59 | AS63526: all 47 prefixes in same 8-hr bucket; AS24389: 130 of 138 | RIPEstat API |
| Jul 19, 07:59:59 | 13:59:59 | AS24389: 8 IPv6 prefixes withdrawn — ~16 hrs after main window | RIPEstat API |
| Jul 23, 13:00 | 19:00 | Partial broadband restoration begins | Cloudflare Radar |
| Jul 28, 09:00 | 15:00 | Mobile operator connectivity begins recovering | Cloudflare Radar |
| Aug 6 | — | Majority of services restored — 22-day total* | OONI + Access Now |
The table provides the detailed chronology. Figure 1 shows the same events laid out on a common timeline, making the staggered sequence of operator withdrawals easier to see at a glance.
For more details, I focused on the RIPEstat records for two operators. Carnival Internet (AS63526) withdrew 47 prefixes (46 IPv4 /24s and one IPv6 /48), all appearing in the RIPEstat bucket ending 15:59:59 UTC and observed by 358 IPv4 and 363 IPv6 RIS peers. Grameenphone (AS24389) withdrew 138 prefixes, with 130 appearing in the same bucket and the remaining eight IPv6 prefixes not until the bucket ending 07:59:59 UTC on 19 July.
Taken together, the observations from RIPEstat and Cloudflare Radar show a consistent pattern across the operators examined.
Four signals in the data
Each of the four characteristics below has an innocent explanation on its own. Together they are harder to explain away. Before looking at each signal, one qualification applies throughout: everything below is consistent with coordinated action across operators. None of it proves coordination, and technical causation cannot be excluded on the basis of routing data alone.
Signal 1: Sequential withdrawal across a ~20-hour window
Technical failures start somewhere and cascade. The Bangladesh data shows the opposite. Per RIPEstat and Cloudflare Radar, Grameenphone (AS24389) went dark at 19:30 UTC on 17 July. Banglalink (AS25245) followed at 20:15. Robi Axiata (AS24432) between 00:30 and 01:00 on 18 July - Cloudflare Radar recorded full connectivity loss as of 01:00 UTC - and Earth Telecom (AS58715) around 12:00. Each looks independent, and no shared upstream failure is visible in the routing data. Our own withdrawal at 14:45 UTC, the one point I can verify from the inside, fits the same shape.
Signal 2: The straggler prefixes at AS24389
Eight of Grameenphone’s IPv6 prefixes, all /44 blocks in 2400:c600::, were not withdrawn in the main window. They sat in the global routing table for roughly 16 hours before being pulled at 07:59:59 UTC on 19 July (RIPEstat). Two readings fit the data equally well: prefixes missed on a manual checklist and cleaned up later, or a partially automated run that handled 130 of 138 and needed manual follow-up. Either way there was a human in the loop at some stage, but the data cannot tell us which stage.
| Prefix | Main window end | Actual withdrawal | Gap |
|---|---|---|---|
| 2400:c600:3370::/44 | 15:59:59 18 July | 07:59:59 19 July | ~16 hrs |
| 2400:c600:3450::/44 | 15:59:59 18 July | 07:59:59 19 July | ~16 hrs |
| 2400:c600:3460::/44 | 15:59:59 18 July | 07:59:59 19 July | ~16 hrs |
| 2400:c600:3650::/44 | 15:59:59 18 July | 07:59:59 19 July | ~16 hrs |
| 2400:c600:3660::/44 | 15:59:59 18 July | 07:59:59 19 July | ~16 hrs |
| 2400:c600:4610::/44 | 15:59:59 18 July | 07:59:59 19 July | ~16 hrs |
| 2400:c600:4620::/44 | 15:59:59 18 July | 07:59:59 19 July | ~16 hrs |
| 2400:c600:4720::/44 | 15:59:59 18 July | 07:59:59 19 July | ~16 hrs |
Signal 3: IODA three-signal confirmation
IODA measures outages three independent ways: BGP routing signals, active probing, and darknet traffic. On 18 July all three went to near-zero for Bangladesh at the same time. For a measurement artefact to produce that, three unrelated systems would have to fail at once. Taken together, these provide the strongest evidence in this analysis that the outage was real, complete and country-wide, rather than a partial disruption that only appeared more extensive from some vantage points.
Signal 4: Asymmetric restoration
The fact that the restoration looked nothing like the shutdown is itself a signal. (AS63526 restoration data below is direct observation; AS24389 is from RIPEstat.)
| Parameter | Shutdown — 18 July | Restoration — 23–28 July |
|---|---|---|
| AS63526 prefixes | 47 → 0 in one 8-hour window | 5 returned 23 July; 3 more 24 July; rest gradually over subsequent days |
| AS24389 prefixes | 138 → ~0 in same window, plus 8 stragglers | Wave 1 (7 prefixes) → Wave 2 (~50+) → Wave 3 (remainder) over 32+ hours |
| Route stability | Clean withdrawal | Peer count fluctuating 357↔359 — route flapping visible between waves |
| Sector priority | All operators affected equally | Broadband before mobile — mobile operators restored ~5 days after broadband |
The withdrawal was fast and near-total. The restoration was neither. Broadband came back first while mobile took another five days. Mobile networks do carry deeper dependencies. HLR, MSC and packet gateways all have to come up in order, so a purely technical explanation survives here too. But when infrastructure recovers from a failure, things come back in the order they get fixed. A five-day gap that splits cleanly by access technology, across multiple operators, is not that. The peer-count instability between waves points to prefixes being re-announced and adjusted incrementally rather than restored in one pass.
What this data cannot establish
There are certain limitations in the public data we have to keep in mind:
- The instruction chain behind the withdrawals. No written regulatory order has been publicly disclosed.
- IIG-level bandwidth restriction. This is inferred from IODA's active-probing signal and the wider operational context, not directly observed in BGP data. BGP withdrawals alone can produce near-complete reachability loss; the probing results are also consistent with additional transit-level restrictions. I therefore treat this as an inference from converging signals rather than an established fact.
- Precise withdrawal timing within each RIPEstat 8-hour observation window. Operators appearing in the same bucket may have withdrawn hours apart.
- Actions within mobile networks. Throttling or other changes inside mobile infrastructure are not visible through external BGP or traffic measurements.
- Mobile-network internal actions. Throttling inside mobile infrastructure is invisible to external BGP and traffic measurement.
Two additional data sources would have strengthened this analysis, and I would recommend both for similar work. RouteViews would provide an independent check on prefix-level withdrawal timing, while RIPE RIS Live would help reconstruct events within each RIPEstat observation window instead of relying on bucket endpoints.
How the Bangladesh case compares
Operator-by-operator shutdowns are not unique to Bangladesh. Iran's November 2019 blackout rolled out across ISPs over roughly five hours, cellular operators first (see notes [1],[2]), and Myanmar’s February 2021 shutdowns hit multiple operators under a ministry directive that Telenor later disclosed publicly (see [4],[5]).
What I have not found anywhere else in public reporting is prefix-level straggler evidence of the kind in Signal 2, or an operator-granular BGP timeline anchored by a first-hand account.
That, not the sequencing, is what makes the Bangladesh record unusual. The table below is based on the referenced public documentation; "not publicly documented" means I found no public analysis of that signal, not that it was absent.
| Event | Multi-operator sequencing | Prefix-level straggler evidence | IODA 3-signal | Phased / asymmetric restoration |
|---|---|---|---|---|
| Bangladesh, Jul 2024 | ✓ ~20-hr window, 5 operators, BGP withdrawal [9][10] | ✓ 8 prefixes, 16-hr gap (this article) | ✓ All three signals, country-wide | ✓ Broadband 24 Jul, mobile 28 Jul |
| Iran, Nov 2019 | ✓ ~5-hr rollout; cellular first, ISPs at different times; routing withdrawal primary method [1][2] | Not publicly documented | ✓ Documented by IODA; domestic NIN stayed up [1] | ✓ Gradual 21–27 Nov; leaked CRA notice ordered phased reconnection [3] |
| Myanmar, Feb 2021 | ✓ Multiple operators under MoTC directive; 6 Feb ~30-hr full shutdown; nightly 01:00–09:00 from 15 Feb [4][5] | Not publicly documented | ✓ Documented by IODA [4] | ✓ Wireless/fixed split; whitelist regime from May 2021 [5] |
| Pakistan, May 2023 | Partial — mobile networks suspended on PTA order; fixed lines stayed up [5][6] | Not publicly documented | Partial — per-AS outages; no country-wide near-zero [5] | ✓ Mobile back 12 May; platform blocks until 18 May (OONI) [5][6] |
| India / Kashmir, Aug 2019 | Region-scoped total blackout — mobile, fixed and landline all cut initially [7] | — | Regional; limited country-level signal | ✓ Extreme: 2G Jan 2020, whitelisted sites only, full 4G Feb 2021 (~550 days) [7][8] |
What makes the Bangladesh data unusual is not the event. It is how much of it is visible at the routing layer, and the fact that the measurement infrastructure recording it was already running before the event began. Nothing had to be set up.
Three takeaways for the community
Measurement
RIPEstat’s 8-hour buckets were fine for reconstructing the event afterwards. They are useless for catching it while it happens. RIPE RIS Live streams BGP updates in real time and already exists; it should be the default for outage monitoring, not something you reach for after the fact. Automated cross-AS restoration-pattern detection would also make the kind of wave analysis in Signal 4 reproducible instead of manual.
Routing security
Bangladesh has 98% RPKI ROA coverage, among the highest in South Asia (I documented the baseline on the APNIC Blog in November 2025). But ROA coverage and ROV enforcement are different things. ROV filters invalid announcements. It is not designed to stop an operator withdrawing its own prefixes, and it can’t. What ROV enforcement at the IXP level does provide is a cryptographically auditable environment for routing changes. Without it, the 18 July withdrawals left no trace in the routing security layer. The only record comes from measurement tools and accounts like this one. IXPs and transit providers in high-ROA regions should state publicly whether they enforce. The coverage number means little without that.
Resilience
Only 7.6% of Bangladesh’s networks peer locally through domestic IXPs (same APNIC Blog baseline). During the outage, the networks that peered through BDIX kept talking to each other. BDIX traffic crosses no international link and has no IIG dependency, so it simply kept running. Everything that depended on international transit went dark. This is not specific to Bangladesh: any economy where most domestic traffic routes internationally before returning has no resilience layer below BGP. More local peering does not change what BGP can do, but it does mean more of the network survives events that operate at the BGP and international-transit layer.
Closing
BGP is a mechanism for connecting networks. The same routing infrastructure, using entirely standard operational procedures, can disconnect a country. The routing table records what happened. It does not record why. Making that record more complete, with finer-grained timing, cryptographic auditability, and more resilience below the international transit layer, is worth the community’s attention.
Notes:
* A complete list of RIPEstat API queries used for this analysis, the full prefix list for AS63526 (47 prefixes as of 18 July 2024), and other data sources are available here.
[1] IODA and OONI, “Iran’s nation-wide Internet blackout: Measurement data and technical observations”, November 2019. ioda.inetintel.cc.gatech.edu/reports/irans-nation-wide-internet-blackout-measurement-data-and-technical-observations
[2] Amnesty International, The Hertie School and IODA, “A web of impunity: The killings Iran’s internet shutdown hid”, 2020. iran-shutdown.amnesty.org
[3] ARTICLE 19, “Tightening the Net: Iran’s November 2019 internet shutdown”, 2020. article19.org/resources/report-on-irans-internet-shutdown
[4] OONI, “Myanmar: Data on internet blocks and internet outages following military coup”, March 2021. ooni.org/post/2021-myanmar-internet-blocks-and-outages
[5] Internet Society Pulse, shutdown documentation for Myanmar, Pakistan, India and Bangladesh. pulse.internetsociety.org/shutdowns
[6] NetBlocks, “Internet disrupted in Pakistan amid arrest of former PM Imran Khan”, May 2023. netblocks.org
[7] Human Rights Watch, “No Internet Means No Work, No Pay, No Food: Internet Shutdowns Deny Access to Basic Rights in Digital India”, June 2023. hrw.org/report/2023/06/14
[8] SFLC.in Internet Shutdowns Tracker, Jammu and Kashmir. internetshutdowns.in
[9] Cloudflare, “Forced offline: the Q3 2024 Internet disruption summary”. blog.cloudflare.com/q3-2024-internet-disruption-summary
[10] Access Now, #KeepItOn campaign documentation, 2024. accessnow.org

Comments 4
Antonio Prado •
Thanks for writing this up. Signal 2, especially the evidence around the straggler prefixes, is a rare operational detail and one of the most valuable parts of the article. A few thoughts came to mind while reading. First, the resilience section may contain another useful signal. If the prefixes that disappeared from RIS were still being advertised or remained reachable through BDIX, that would point to a selective loss of international routing rather than a general network failure. The BDIX traffic graph alone cannot prove this, since a failure or shutdown at the IIG or transit edge could leave domestic peering untouched. Still, the idea may be testable. If BDIX retains route-server logs or snapshots, a prefix-by-prefix comparison could show whether routes remained visible domestically while disappearing from international collectors. Bilateral sessions would not necessarily appear there, but even partial evidence would strengthen the analysis. Second, I think the routing-security section needs a small correction. ROV enforcement at the IXP would not have made these withdrawals cryptographically auditable. RPKI validates the origin of route announcements; it does not sign or authenticate withdrawals. Even BGPsec protects the announcement path, not the later removal of a route. A route server may of course log that a prefix disappeared, but ROV adds no cryptographic attribution to that event. The recommendation that IXPs and transit providers should state whether they enforce ROV is still a good one, but I would keep it separate from the events of 18 July. Third, the eight-hour limitation belongs to the RIPEstat view or endpoint used in the analysis, not to RIS itself. RIS also archives the updates received by its collectors in five-minute MRT files. The July 2024 events can therefore be reconstructed retrospectively without RIS Live and with much finer timing. This could show whether operators placed in the same eight-hour bucket actually withdrew minutes or several hours apart, and clarify how long the IPv6 stragglers remained visible. The MRT timestamp still records when an update was observed by a collector peer, not the exact moment a command was entered, but it would remove much of the ambiguity. I would be very interested to see a follow-up based on the raw MRT data. The combination of public collector data and direct operational experience is what makes this analysis particularly valuable. Thanks -- antonio
Md.Kamruzzaman Khan •
Antonio, Thanks for this. One of the three I can close now, one I can only half close, and one you have given me a way to test. On BDIX, the part I can settle is the alternative you raise. For AS63526 the loss of international routing originated at the AS itself — my own account as the operator, not something the collector view can show — not at an IIG or transit edge failing underneath while domestic peering stayed up. So for at least one network the selective reading holds, on operational grounds rather than on the traffic graph. What I cannot settle is which of those prefixes stayed reachable domestically at the same moment, and the section should not have rested that on the graph. Your caveat about bilateral sessions is the binding constraint here rather than a footnote. Because a share of the peering at this exchange never touches the route servers, a prefix-by-prefix comparison would establish a lower bound on domestic visibility rather than measure it: presence in the logs is evidence, absence is not. That still helps, but it bounds how much the comparison can carry. I am asking what survives from that week, and will run the comparison if anything does. On ROV, the distinction you draw is the one the section missed. A route server can log that a prefix disappeared, but nothing in the deployed stack attests to the disappearance. The nearest thing in progress is the Signed Prefix List work, which makes absence checkable against a declared complete set, but that is a statement about what an AS may originate rather than an authenticated record that a route was removed at a given time. RFC 8205 is explicit about this at the edge of its own threat model: withdrawal suppression is left outside the protocol and deferred to certificate rollover. So the gap is architectural rather than a matter of deployment. Agreed that the recommendation should stand apart from 18 July. On the eight hours, one refinement: the interval is RIS's own per-collector RIB dump cadence surfaced through RIPEstat, rather than something RIPEstat introduces. Your point is unaffected, since the update files are the finer source either way, and I queried the wrong one. Your caveat about MRT timestamps is the real limit on what the timing analysis can claim, and I would rather be explicit about it than work around it. For AS63526 I can say which withdrawals were initiated at the AS rather than inferred from the collector view, which narrows the ambiguity for one network, but that is operator testimony and not a measured offset, and I will label it as such. Where the write-up gives times, they will be collector observations, and I will say so each time rather than let the two blur. You singled out the straggler prefixes, and that is where I will start, since it is the part I would most like to put on firmer footing. I would value your eye on it when it is ready. Kamruzzaman 1 Aug,2026
Antonio Prado •
Kamruzzaman, there’s nothing I’d push back on here. You’re right about the dump cadence, and I stand corrected: the eight-hour interval comes from the collectors’ bview schedule, while RIPEstat simply exposes it. I also agree that treating the BDIX logs as a lower bound is the most accurate approach. Even an incomplete lower bound would help move the selective-reading argument from testimony to measurement, at least for the subset of routes that appears in the logs. One thought on the straggler analysis: the update files should allow you to distinguish directly between the two possible readings of Signal 2. If the eight /44s were withdrawn within a few seconds of one another, and the pattern is consistent across peers, that would suggest a single cleanup action. If they disappear gradually, or coincide with a session-level event, the explanation is likely different. That inter-arrival pattern is exactly the kind of detail that gets flattened in a RIB snapshot, so it would fit well with the timestamp labelling you already plan to add. Send the draft over when it’s ready. I’d be very happy to read it. -- antonio
Md.Kamruzzaman Khan •
Antonio, good call on the inter-arrival test. I'll check the per-peer view first. If the spread isn't consistent across peers, the timing doesn't tell me much either way. Corrected wording goes to RIPE Labs this week. The MRT work will take a few weeks. I'll send it when it's ready. Kamruzzaman 5 Aug, 2026