伊朗网络部分恢复:如何用数据观测国家级断网与回潮

2026-05-28 22 预计阅读时间:1 分钟
来源:blog.cloudflare.com AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:8 分钟

近三个月的漫长断网后,伊朗的互联网终于亮起微光。Cloudflare Radar 的最新数据证实了这一趋势:流量与 DNS 查询量出现明显回升,但整体网络活跃度仍停留在断网前 40% 的水平。这不是简单的"开关拨回",而是国家级网络管控下的一种受限恢复。对于关注全球网络连通性的工程师而言,这种宏观流量的骤降与回潮,提供了极有价值的观测样本。

流量尖峰与 DNS 回潮背后的信号

Cloudflare Radar 的数据揭示了两个关键现象:

  1. DNS 查询率先反弹:当网络限制放松,设备重新连入互联网时,DNS 请求往往是最先爆发的指标。手机上的应用开始检查更新,浏览器尝试加载主页,这些行为都会在 DNS 层面留下尖峰。
  2. 总量仍处低位:尽管有尖峰,当前整体网络活动只有之前的 40%。这意味着大量底层基础设施、宽带接入或特定服务仍在受限状态,或者民众与企业的在线行为依然保持克制。

40% 这个数字很关键——它说明恢复是不完整的。如果只看"能不能访问某几个网站",很容易误判为全面恢复,但宏观流量百分比戳破了这种错觉。

观测国家级断网的技术视角

观测一个国家的网络中断,单靠"我能不能打开网站"远远不够。国家级断网通常涉及多层干预:

  • BGP 路由撤回:国内运营商在路由表中撤回向国际宣告的 IP 段,外部流量根本找不到路径。
  • DNS 污染与拦截:特定域名解析被篡改或直接黑洞化。
  • 骨干网流量整形:在国际出口处施加极低的带宽上限,让流量"有但极慢"。

要捕捉这些行为,必须依赖拥有全球边缘节点的网络平台汇总的数据。Cloudflare Radar 聚合了其全球网络的请求日志,能按国家维度输出 AS 级别的流量趋势和 DNS 统计,这正是它能在伊朗断网事件中率先发出信号的原因。

实操:用 Cloudflare Radar API 拉取国家级流量趋势

如果你想在自己的运维面板或监控系统中集成这类宏观观测,可以直接调用 Cloudflare Radar 的公开 API。下面这段 Python 脚本演示了如何拉取伊朗(代码 IR)过去 30 天的流量时间序列,并绘制趋势图。

运行前需要安装依赖:

pip install requests matplotlib pandas

脚本代码:

import requests
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime

# Cloudflare Radar 公开 API:获取指定国家的流量时间序列
# location=IR 代表伊朗,dateRange=30d 为过去30天
API_URL = "https://radar.cloudflare.com/api/v1/traffic/timeseries"
PARAMS = {
    "location": "IR",
    "dateRange": "30d"
}

def fetch_and_plot_iran_traffic():
    try:
        resp = requests.get(API_URL, params=PARAMS, timeout=15)
        resp.raise_for_status()
        data = resp.json()

        # 解析时间序列数据(API 返回结构可能包含多个维度,此处提取总流量百分比)
        # 注意:实际返回的 JSON 结构请参考 Cloudflare Radar API 文档,
        # 这里以典型的 timestamp + traffic_percentage 结构为例处理
        timestamps = []
        traffic_vals = []

        # 假设数据在 data["traffic"] 或类似键下,按时间戳遍历
        # 如果 API 返回结构有变,需根据最新文档调整解析逻辑
        for entry in data.get("traffic", []):
            ts = datetime.fromisoformat(entry["timestamp"].replace("Z", "+00:00"))
            timestamps.append(ts)
            # 流量占比,如 0.4 代表 40%
            traffic_vals.append(entry.get("percentage", 0) * 100)

        if not timestamps:
            print("未获取到有效时间序列数据,请检查 API 返回结构。")
            print("原始返回前200字符:", resp.text[:200])
            return

        # 用 Pandas 构建时序并绘图
        df = pd.DataFrame({"Time": timestamps, "Traffic (%)": traffic_vals})
        df.set_index("Time", inplace=True)

        plt.figure(figsize=(12, 5))
        plt.plot(df.index, df["Traffic (%)"], label="Iran Traffic Level", color="#f57c00")
        plt.axhline(y=100, color="gray", linestyle="--", label="Pre-shutdown Baseline (100%)")
        plt.axhline(y=40, color="red", linestyle=":", label="Current Level (~40%)")
        plt.title("Iran Internet Traffic Trend (Last 30 Days)")
        plt.ylabel("Traffic (% of Baseline)")
        plt.legend()
        plt.grid(True, alpha=0.3)
        plt.tight_layout()
        plt.savefig("iran_traffic_trend.png")
        print("趋势图已保存为 iran_traffic_trend.png")

    except requests.exceptions.RequestException as e:
        print(f"请求 API 失败: {e}")

if __name__ == "__main__":
    fetch_and_plot_iran_traffic()

运行说明:脚本会向 Cloudflare Radar API 发起请求,拉取伊朗近 30 天的流量数据并保存为 PNG 图片。如果 API 的 JSON 返回格式有更新,你可能需要根据官方文档微调 entry["timestamp"]entry.get("percentage") 的键名。将 location 参数改为其他国家代码(如 MM 代表缅甸,BY 代表白俄罗斯),即可观测其他发生过断网风险的区域。

宏观观测的边界与风险提醒

依靠 Cloudflare Radar 这类平台做宏观观测有明显的优势,但也有不可忽视的边界:

  • 盲区:如果断网仅针对特定协议(如只封 HTTPS 443,不封 DNS 53),流量统计可能低估实际干扰程度。
  • 采样偏差:Cloudflare 的流量更多反映访问其 CDN 和 DNS 解析服务的用户,不能完全等同于该国所有互联网活动。
  • 数据滞后:API 数据通常有数小时到一天的延迟,不适合用来做秒级的断网报警。

对于有海外业务的企业,建议将此类宏观指标作为辅助参考,结合自身业务节点在当地的 BGP 路由监控、DNS 解析探测和主动拨测(Synthetic Monitoring),形成立体的连通性感知体系。当宏观流量跌至 40% 时,你的业务真实可达率可能远低于这个数字——因为商业 API 和支付网关往往是管控的首要目标。

断网从来不是瞬间的灾难,恢复也不是一键重启。持续盯着数据,才能看清真实的连通曲线。


相关推荐