跳转至

Tor 中继地球仪

Tor 中继地球仪的画面,地球转到亚洲一侧,中继以彩色点分布在各国界内,左侧面板列出各国中继数与托管商排行

三件作品之中数据最多的一件。它把散落在不同机构的公开数据放到同一颗球上,让「哪里架得起中继」与「哪里连得上 Tor」两件事得以并置对照。放大到台湾之后还多出一层,那些连线实际上依赖哪些实体设施。

开始探索

不知道从哪看起就走一遍导览

按左侧面板上的「开始导览」,或直接开带 #tour 的网址,画面会依序走过七站:全球的中继分布、台数与共识权重的落差、连线受阻的地方、使用者估计、台湾的位置、台湾那几层实体设施,最后收在延伸阅读。空格键往下一站,左右键来回,Esc 离开。

这一段是为工作坊与教学现场做的。作品连同数据都在离线阅读的自动存档清单里,事先开过一次页面把东西存进设备,现场没有网络也打得开。导览途中随时可以自己拖曳地球,按下一站镜头就回到脚本上的位置。

某一份数据抓不到的时候,需要它的那一站会整站抽掉,站数跟着少一站。

数据层自己选

开场载起来的是地球本身、海底地形、Tor 中继与连线受阻,另外十一层摆在左侧面板最上方那一排格子里。按一下才去抓那一份数据并画上去,再按一下收回去,没按过的层完全不占流量。

十四份数据压缩后合计 800 KB,开场那四层占 429 KB,也就是进来先付一半多一点。其余十一层里最重的两块是海岸线 237 KB 与台湾那五层 95 KB。海岸线只是把海陆交界描得更锐利,没有它的时候国界与陆地填色照样分得出海陆,所以它排在按需那一边。

开关之后网址会跟着变,复制网址列给别人,对方打开看到的叠法跟你一样。也可以直接写,?layers=tw-power,tw-grid 只开变电所与电网,空的 ?layers= 只留地球本身。

按下「开始导览」的时候,七站要用的层会自己补载,不必事先一格一格点开。

球面上有什么

每台中继在球面上是一个点,落在自己所属的国界之内,颜色区分四种角色(guard、middle、exit、guard 兼 exit),大小对应带宽。陆地的亮度另外代表一项指标,默认是中继台数。

拖曳可以旋转地球,滚轮或双指放大会浮出更多国家标签。网址加上 #tw 会在载入时直接飞到台湾,换成别的国码(例如 #jp)同样有效,分享链接时可以指定对方一开启先看哪一块。

陆地亮度可以换指标

陆地亮度切换到共识权重之后的画面,国家标签改成显示百分比,德国 29.5%、瑞典 6.1%

  • 中继台数:该国托管的中继数量
  • 共识权重:该国在 Tor 网络中实际承担的流量比重,与台数常有明显落差
  • 单一服务商集中度:最大一家托管商占该国的比例,用以观察对单一服务商的依赖程度
  • 用户估计:该国使用 Tor 的人数估计,属于需求端指标
  • 上网人口:该国有多少比例的人上网,World Bank 收了 208 个经济体,比中继涵盖得广

指标由数据层供应,所以那一排按钮会跟着开关增减。前三个来自 Tor 中继那一层,用户估计与上网人口各自要先把对应的层打开才会出现。停在某个指标上而把供应它的层关掉的时候,画面会自己换回中继台数。

用户估计与上网人口摆在一起看才完整。前者是绝对人数,后者是那个数字的分母,两个对照才分得出某一国的差距来自需求还是人口规模。

台数与权重的落差值得切过去看一次。美国的中继台数最多,换成共识权重,德国会排到前面,德国那批中继单台扛的流量比较大。

点国家标签展开信息卡

点开德国的信息卡,列出 1715 台、占全网 16.9%、权重 29.5%、角色组成、托管商与 OONI 测试结果

卡片内容包含角色组成、带宽占比、运行官方建议版本的比例、主要托管商,以及该国在其他几份数据中的状况:用户估计、OONI 的异常率、网桥绕道的 pluggable transport 分布。

整合了哪些数据

中继分布(Onionoo,CC0 1.0)

画面主体来自 Onionoo 的中继快照,经蒸馏后只保留国家层级的聚合,内容不含 fingerprint、nickname、IP 或联络信息。目前收录近万台运作中的中继,分布于约八十个国家、九百多家托管商,其中美国、德国、荷兰三国即占去超过六成。这些数字取自最近一次快照,画面上会标示该份快照的产出时间。

按下画面上的「实时更新」后,数据改由你的浏览器直接向 onionoo.anoni.net 取得并重新计算,不再读取站上的快照。这个动作会让该服务器看见你的 IP,因此默认不启用,要不要开启由你决定。

连线受阻的地区(OONI,CC BY-NC-SA 4.0)

取自 OONI 的 tor 测试结果,统计近 30 天各国未依预期完成的比率,OONI 称之为 anomaly。异常的成因包含连线被阻挡、网络不稳与 ISP 故障,仅凭比率无法区分,因此画面只标示异常率达 85% 以上且样本数足够的少数国家,中段数值一律不上色。门槛订在这个高度,是因为瑞士、加拿大这类没有审查疑虑的国家,异常率也经常落在两成上下,把中段画出来等于用噪声指控特定国家。受标示的国家以国界向内的红色渐层呈现,相邻但未受标示的国家不会被误读成同样异常。

用户与网桥(Tor Metrics,CC0 1.0)

包含两份数字。一份是各国使用 Tor 的人数估计,另一份是网桥用户数,并依 pluggable transport 分列 obfs4、snowflake、webtunnel 等项目,涵盖两百多个国家。两者对照常出现有意义的落差:直连受阻的地区,网桥的数字明显偏高。

断网事件(Access Now #KeepItOn,CC BY 4.0)

2009 年至 2025 年间经人工汇整并逐笔查证的断网事件,涵盖五十余国。这份数据与 OONI 的性质不同,每一笔都有查证过的成因,因此可以明确说明「此处发生过人为断网」。武装冲突与族群冲突造成的中断未必出自政府决策,可能是战事破坏基础设施所致,画面上与信息管制类分开说明。

海底电缆与地理底图(OpenStreetMap ODbL、Natural Earth public domain)

海面上较细的线条是海底电缆,取自 OpenStreetMap 贡献者标注的两百余段路径,收录以欧洲、地中海与大西洋较为完整。最淡的一层是主要跨洋走廊的示意,取两端公开的登陆地点拉出大圆弧,仅走向可信,实际路由请参考专门的海缆地图。国界与海岸线来自 Natural Earth 的 10m 比例尺。东亚那一块涵盖中国东南沿海、台湾、日本、韩国、菲律宾、中南半岛、马来半岛与苏门答腊,海岸线简化时留到约 220 公尺,相邻两点相距 2.3 公里,国界留到约 330 公尺,相邻两点相距 2.8 公里。两层要在同一个量级,其中一层粗太多的话,放大之后会看到平滑的海岸线旁边摆着一条阶梯状的国界。其余亚洲与世界其他地方逐级放粗,因为站上的读者多半在东亚。欧洲与美洲那几级的点距是数十公里,岛屿只是几个点连成的折线,放大之后看起来是一段一段的方块。陆地的填色走另一条路,先画成贴图再贴上球面。全球那张是 2048x1024,赤道一个像素就是 19.6 公里,香港在上面只有 3 个像素,填色糊成一团而且边缘跟海岸线差了十几公里。东亚另外画一张 2048 见方的,一个像素降到 2.8 公里,香港变成 147 个像素。澳门 33 平方公里在那张上面仍然只有 4 个像素,形状要靠向量的国界线读。

东亚与东南亚的行政区界线(DATA.GOV.HK、Natural Earth public domain)

贴近日本、韩国、香港或东南亚各国时,陆地上会淡入一层细线,例如日本的都道府县、韩国的道与广域市、香港的 18 区,以及越南、泰国、菲律宾、印尼等十一国的省与州,跟贴近台湾时出现县市界是同一件事。每一国的界线是一份独立的小文件,镜头贴近那一国才去抓,一个典型的行政区在屏幕上够大了才画出来,所以日本的县比香港的区早出现。只画相邻两区共用的那条边,外框交给国界与海岸线,有主权争议的孤立岛屿因此不会被画进任何一国。香港的区界来自香港特别行政区政府民政事务总署,经 DATA.GOV.HK 发布,依使用条款使用。原数据把海面也分给各区,这里只留陆地上的部分。其余各国暂时没有容易取得的官方数据,用的是 Natural Earth 的一级行政区,这份数据放大之后比官方的粗,香港那一份就差了三十倍,而且不是每一国都跟上现况:印尼 2022 年巴布亚拆出新省,这里仍是旧的 33 省。

上网人口比例(World Bank CC BY 4.0、数位发展部 政府数据开放授权条款)

国家卡片上的上网人口比例是拿来当分母的。「这一国有几人用 Tor」很大一部分是在比人口大小,知道该国有多少比例的人上网,才判断得出两国的落差来自需求还是来自基数。World Bank 那份的 208 个经济体里没有台湾,台湾那一笔改用数位发展部的国家数字近用调查,两份的方法论不同,一份是 ITU 汇整各国通报,一份是对 12 岁以上人口的电话抽样,卡片上会标示出来,不宜直接比较。

放大到台湾

地球仪放大到台湾,县市界线与 345kV 输电线叠在岛上,中继以彩色点集中在西半部

台湾是这颗地球仪唯一做到县市尺度的地区,贴近之后会多出五层。左侧面板把台湾相关的信息独立成一区,按「关注台湾」会直接飞过去。

  • 县市界线:内政部国土测绘中心的直辖市、县市界线,22 个县市、84 条环线。它同时也是台湾的海岸线,全球那份的比例尺在这个尺度下不够用,所以贴近之后粗轮廓会换成它。
  • 海缆登陆点:14 处,自建数据集。登陆点坐标是 TeleGeography 商品的一部分,OpenStreetMap 没有收录这份数据,所以以数位发展部公开的海缆清单为骨干,逐点交叉查证坐标,每一笔标记精度分级与各自的来源。这份 v1 并不完整,缺口写在原始文件的文件头。
  • 变电站:台电的二次变电所主变压器装置容量及负载,280 座,画得出坐标的 201 座。卡片上的容量计把 N-1 画成看得到的几何,可靠容量刻度到装机容量之间那段斜纹,宽度正好是最大的一台主变压器,故障时消失的就是那一段。全台有 64 座的尖峰负荷超过可靠容量,那代表尖峰时掉一台就撑不住,跟现在有没有过载是两回事。
  • 发电厂与 345kV 骨干:105 座电厂与 242 段输电线。只有 17 座对得到坐标,但那 17 座已经占了装机容量的七成一,对不到的多半是离岸风场与小水力。161kV 以下的配电网完全没有画,那不是完整电网。
  • 用电与可再生能源:93 处台电自建的可再生能源场址、124 个月的各县市用电,以及今年 212 天的每日尖峰备转容量率。

电厂、变电站、可再生能源场址、登陆点与输电线都点得开看细节。

用电那段可以换两种看法

左侧面板切到工业用电占比,新竹县以 80.4% 排在第一,台南市 78.5%、苗栗县 77.9% 跟在后面

看售电量的话六都排在前面,换成工业用电占比,新竹县会跳到第一,科学园区的形状就出来了。园区横跨新竹市东区与新竹县宝山乡,行政上是分开的两列,看总量会被切成两半,看占比则不受影响。

下方那排细条是今年每日的尖峰备转容量率,低于 10% 的换成橘色,那是台电自己的供电吃紧门槛。

球上的动态

除了上面那几份数据,画面上还有几层效果,这些是渲染出来的,不是外部数据。

地球的日夜分界由 UTC 时间换算出的太阳直射点决定,随真实时间推移,四季昼长差异也会自动对应,过程不需对外连线。此外还有极光、大气边缘辉光与星空。

不定时出现的 Tor 三跳路径动画算是两者之间:端点取自真实中继位置,因此哪个国家较常被选中,会自然反映真实的分布,但三点的组合本身属于示意,并未模拟 Tor 实际的选路规则。

数据来源与授权

每份数据文件都带有 source、sourceUrl、license、licenseUrl 字段,画面下方也列有对应的来源声明。完整的授权清单见项目根目录的 NOTICE,其中 OONI 那一份是 CC BY-NC-SA 4.0,禁止商业使用。

延伸阅读