ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

PCDN家庭宽带限速与局停原理、排查及自建节点实践

PCDN家庭宽带限速与局停原理、排查及自建节点实践

PCDN 这个词最近两年在家庭宽带圈子里出现频率极高,一边是有人靠它把闲置上行变现,另一边是有人刚跑起来就遇到限速、甚至直接被局停。围绕"限速、局停为哪般"的争论,社区里每天都能刷到新帖。我前后折腾过几套节点,也帮朋友排查过好几次"为什么我的速度突然从 20Mbps 掉到 2Mbps",把踩过的坑和拆过的原理整理出来。这篇内容会讲清楚 PCDN 的底层逻辑、运营商侧看到的是什么流量特征、限速和局停分别发生在哪个环节、自建节点时的硬件与参数怎么选,以及实测下来的监控与排查方法。适合两类人看:一类是想搞明白原理再决定要不要上车的技术爱好者,另一类是已经在跑、但被限速搞得一头雾水的朋友。全文不会给任何"规避检测"的偏门办法,只讲清楚规则和边界,剩下的判断交给你自己。

1. PCDN 到底是个什么东西

1.1 从中心化 CDN 到分散式边缘:一条省钱的逻辑链

要说 PCDN,得先把 CDN 讲明白。传统 CDN 的做法是在各地建机房、机房,把源站的内容提前推到离用户近的边缘节点,用户请求时从最近的节点取数据,延迟低、源站压力小。这套模式效果很好,但它有一块固定成本:机房、带宽、电费、运维,全是服务方自己掏钱。带宽单价在数据中心算便宜,可架不住量大,尤其是视频、下载、大文件分发这类业务,带宽账单往往是最大的一笔支出。

PCDN 的思路很直白:既然终端设备有闲置的带宽、存储和算力,为什么不把这些零散的资源组织起来,当成一张"野生边缘网络"用?用户 A 的设备缓存了某个热门文件,用户 B 在附近想看同一个文件,那就让 B 直接从 A 那里拉,平台只需要在中间做调度和鉴权。这套逻辑在 BitTorrent 时代就被验证过,只是那时候没有商业化的调度体系,也没有稳定的结算机制。

从工程角度看,PCDN 的核心难点不在"能不能传",而在"调度得准不准"。一个合格的调度系统需要实时知道每个节点的在线状态、上行余量、缓存命中情况、到目标用户的网络距离,然后在一堆候选节点里挑出最优的几个。挑错了,用户端体验反而比直连源站更差。所以 PCDN 平台的技术壁垒,很大一部分在调度算法和节点质量评估上,而不在传输协议本身。这也是为什么同样是跑节点,不同平台给的收益差别能有好几倍——调度策略直接决定了你的上行被利用的效率。

理解了这一点,就能明白后面所有的争议从哪来:PCDN 要的是"大量分散的上行",而家庭宽带的上行资源,从一开始就不是按这个场景设计的。

1.2 家庭宽带怎么就成了"边缘节点"

家庭宽带的技术底座是 PON(无源光网络),主流是 GPON 和后来的 10G PON。一个 OLT 的 PON 口通过分光器带几十户,常见分光比是 1:64,部分场景会到 1:128。GPON 单 PON 口的下行速率是 2.5Gbps,上行是 1.25Gbps。注意这个"上行"是整个 PON 口共享的,不是每户独享。

再叠加一层资费设计:绝大多数家庭宽带套餐是"下行大、上行小",千兆套餐常见配置是 1000Mbps 下行配 30Mbps 或 50Mbps 上行,部分地区的上行会给到 100Mbps 甚至更高,但比例依然是严重不对称的。这种不对称不是技术做不上去,而是资费模型决定的——普通家庭用户的上行需求主要就是发发照片、开开视频会议、偶尔上传个文件,峰值高但持续时间短,平均占用极低。运营商的网络容量规划,就是按"平均占用低"这个假设来做的。

算一笔账就很清楚了。假设一户的上行是 50Mbps,如果只是正常使用,一天的上行流量可能就几个 GB。但如果这台设备在跑 PCDN,上行被长时间占满,理论峰值是 50 ÷ 8 × 86400 ≈ 540GB/天,一个月就是 16TB 量级。这个数字和普通家庭的月均流量差了接近两个数量级。

注意:上面是理论满速值,实际受调度命中率、对端需求、平台限流影响,通常远低于这个数。但即便只跑到三成,一个月也是几个 TB 的上行,量级差异依然巨大。

把视角拉到 PON 口这一层,问题就更明显了。假设一个 PON 口带 64 户,其中 10 户在跑 PCDN,每户上行按 50Mbps 持续跑,合计就是 500Mbps,占掉 1.25Gbps 上行总容量的 40%。晚高峰本来就是上行压力大的时段,这 40% 一占,同 PON 口下其他用户的视频通话、网游、直播推流全都会受影响。这就是矛盾的核心:PCDN 消耗的不是"你自己的"上行,而是共享介质上的公共容量。

1.3 一条上行链路的价值账

从商业逻辑上讲,PCDN 平台愿意付钱给节点,是因为它省下了数据中心带宽的钱。数据中心带宽按 Mbps 月付,价格和家庭宽带的单位带宽成本完全不在一个量级。家庭宽带是包月制,用多用少一个价,于是"把包月没用满的上行卖出去"这件事,看起来就像套利。

但套利能成立的前提是:交易双方都认可这个资源可以这么用。问题恰恰出在这里。家庭宽带的服务协议通常写的是"家庭日常使用",把它变成持续满负荷的商业上行出口,属于用途偏离。这不是技术问题,是合同边界问题。很多争论吵到最后吵不出结果,就是因为一方在谈技术可行性,另一方在谈使用边界,两边根本不在同一个频道上。

我个人的判断是:这件事的本质不是"能不能跑",而是"跑了之后愿不愿意承担对应后果"。技术上完全可行,容量上大概率会挤到别人,协议上多半不被允许,这三个结论同时成立。想清楚这一点,后面遇到限速、遇到停机,心态会平和很多。

2. 限速的真正原因:流量模型与上行资源

2.1 为什么上行带宽天生就是稀缺资源

很多人有个误解,觉得"我办的是千兆宽带,凭什么限我速"。这里的"千兆"指的是下行峰值,不是上行,也不是"随时可用的保证带宽"。宽带套餐里的速率数字,是接入速率的理论上限,不是专享带宽。接入网是统计复用的,所有人都按峰值跑,网络立刻崩。

上行比下行更紧张,有三个结构性原因。第一,PON 的上行采用时分复用,多个 ONU 轮流发送,需要严格的调度和测距,可用总容量本来就比下行少一半。第二,上行方向的设备成本和频谱规划更受限,扩容周期长。第三,家庭宽带的上行需求长期偏低,运营商没有动力提前扩容。这三条叠加,导致上行成了整个接入网里最脆弱的一环。

所以当一批用户同时开始持续满跑上行时,运营商的网管系统会最先在这条链路上看到异常:某个 PON 口的上行利用率曲线从日常的 20% 一路爬到 80% 以上,并且晚高峰之后也不回落,全天候高位横盘。这种曲线和"某个用户开了直播"完全不一样,直播是时段性的,PCDN 是 7×24 小时的。曲线形态本身就是最强的信号。

2.2 运营商侧看到的几类流量特征

从网管和流量分析的角度,PCDN 流量有一些比较明显的统计特征。这里说的是公开技术讨论中常见的分析维度,不是某家具体系统的实现细节。

观察维度普通家庭用户的典型表现PCDN 节点的典型表现
上下行比例下行远大于上行,比例常在 10:1 以上上行接近甚至超过下行,比例倒挂或接近 1:1
上行占用时长峰值高、持续时间短,日均占用低长时间稳定在高位,昼夜差异小
并发连接数几十到几百,随应用波动常维持数百到数千,连接对象分散
目的地址分布集中在少数几个大厂 CDN 段高度分散,跨多个网段和地区
端口与协议特征以 443 为主,协议单一端口随机化明显,长连接占比高
流量时序有明显的人类作息特征平滑、均匀,缺少突发性

这张表不是为了教人怎么"伪装成普通用户",而是想说明一件事:从统计上看,PCDN 流量和家庭日常流量的差异是结构性的,不是靠改几个参数就能抹平的。只要上行是持续满跑、连接是海量分散的,统计特征就摆在那里。网管系统不需要精确识别出"这是哪个平台的 PCDN",只需要判断"这个账号的流量模型异常",就足够触发后续动作了。

除了流量特征,还有一类信号来自业务侧:同一小区、同一 PON 口下多个账号出现高度相似的流量模型,或者出现集中的投诉。这类"群体性特征"往往比单账号特征更容易被注意到。

2.3 限速不是一刀切,而是分层的

很多人以为限速就是"被拉进黑名单,速度砍到 1Mbps"。实际观察下来,限速是有层次的,而且不同层次的表现完全不同。

第一层是端口级拥塞导致的被动降速。这种情况其实不算"处罚",就是 PON 口上行打满了,大家分不到带宽,你的实测速率自然掉下来。特征是波动大、晚高峰最差、凌晨能恢复。很多人误以为自己被限速了,其实只是撞上了拥塞。

第二层是** QoS 策略限速**。运营商在 BRAS 或 OLT 侧对特定账号下发限速模板,把上行峰值压到一个较低的值。特征是很稳定——不管你什么时候测,上行都卡在同一个数字上,比如稳定在 5Mbps 或者 10Mbps,纹丝不动。这种稳定恰恰是策略限速的标志,因为物理拥塞不会这么整齐。

第三层是上行与下行的联动限制。有些策略会把上行压得很低,同时下行也做一定限制,或者对新建连接数做约束。表现出来的现象是:测速下行还行,但打开网页、看视频都变卡,因为连接建立被拖慢了。

判断自己属于哪一层,方法很简单:连续几天在不同时段测上行,看数据是"波动"还是"稳定"。波动 = 拥塞或调度问题,稳定在某个整数附近 = 策略限速。这个判断很重要,因为它决定了你该去排查自己侧的问题,还是接受现状。

3. 局停是怎么发生的:从风控到停机

3.1 "局停"这个词到底指什么

"局停"是行业口语,完整说法是"局方停机",指运营商机房侧对账号做的停机处理,不是欠费停机,也不是用户自己报停。表现出来就是:光猫的 PON 灯正常、LOS 灯不红,说明物理链路是通的,但拨号拨不上,或者拨上了没有流量,账号状态在系统里被挂起。

这个动作通常不是人工一个个点的,而是风控系统根据规则批量触发的。触发之后,用户侧看到的现象往往是突然断网,重启光猫没用,打客服电话才被告知"账号存在异常使用"。恢复流程一般需要本人带证件去营业厅,或者通过线上渠道提交说明,签署相关承诺后才能复机。整个过程对普通用户来说体验很差,所以才会引发那么多情绪。

需要说明的是,停机是运营商对账号的一种管理手段,触发条件各家不同,也没有公开的完整规则。市面上流传的"触发阈值"大多是用户侧的经验归纳,可信度参差不齐,不能当成标准答案。

3.2 触发链路上可能的几个环节

从技术链路上推演,一个账号从"正常"走到"停机",中间大概会经过这么几个环节。

流量采集与建模。网管系统持续采集账号级的流量数据,包括上下行速率、流量总量、连接数、活跃时段分布。这些数据进入模型后,和该账号的历史基线、同套餐用户的群体基线做对比。偏离越大,风险分越高。

规则引擎判定。模型给出风险分之后,规则引擎按策略决定动作。轻度偏离可能只是标记观察,中度偏离可能下发限速模板,重度偏离或者反复触发,才会走到停机。

人工复核与工单流转。停机这种影响较大的动作,很多情况下会有一个复核环节,尤其是首次触发。但复核的颗粒度因地区而异,有些地方是批量处理,用户感知就是"莫名其妙被停"。

用户申诉与恢复。复机流程通常要求用户说明用途、承诺不再用于非家庭场景。这个环节的体验差异最大,也是社区吐槽最集中的地方。

提示:上面这条链路是根据公开讨论和常见运维逻辑做的合理推演,不代表任何具体运营商的实现。不同地区的策略差异可能非常大,别把某个人的经验当成通用规律。

我想强调的是,这条链路上真正起决定作用的是"偏离基线"这个判断,而不是某个精确的流量数字。同样是每月跑 5TB 上行,一个历史基线本来就是高流量的账号,和一个平时只用几百 GB 的账号,风险分完全不同。这就解释了一个常见困惑:为什么别人跑同样的量没事,我一跑就被停。

3.3 限速和局停,处理逻辑完全不是一回事

很多人把限速和局停混为一谈,其实两者的性质、可逆性、应对方式都不一样。

对比项限速局停
影响范围速率被压制,网络仍可用账号挂起,无法正常上网
触发门槛相对低,流量模型异常即可相对高,通常需要多次或严重偏离
可逆性停止异常流量后多数可自行恢复需要走复机流程,不能自行恢复
用户感知速度变慢,容易误判为网络故障直接断网,现象明确
恢复周期几小时到几天数天,取决于流程
排查重点先排除自身设备、线路、拥塞因素直接联系运营商确认账号状态

从这个对比能看出来,限速更像一个"软约束",停机是"硬处置"。实际使用中,多数人是先经历限速,如果继续跑,才可能升级到停机。所以如果你已经被限速了还在硬跑,那其实是在往下一个阶段走。

顺带说一句,判断自己被限速还是线路故障,有个很实用的办法:看同一时间下行的表现。如果下行正常、只有上行异常,且上行数值非常稳定,那基本可以确定是策略限速;如果上下行一起抖动甚至丢包严重,先查光猫、尾纤、分光器,别急着下结论。

4. 实操:自建一套可控的 PCDN 节点

4.1 硬件与功耗的成本核算

先说硬件。PCDN 节点对算力要求不高,但对存储 IO和网络稳定性要求不低。常见的配置是低功耗小主机或旧笔记本,配一块 SSD 做缓存盘。CPU 用四核低功耗型号足够,内存 8GB 起步,缓存盘容量按平台要求来,一般 200GB 到 1TB 之间。

功耗这笔账必须算清楚,很多人只看到收益没算电费。一台小主机待机加负载平均 20W,一年耗电 20 ÷ 1000 × 24 × 365 ≈ 175 度,按 0.6 元/度算差不多 105 元。如果用的是旧台式机,功耗 60W 起步,一年电费就 315 元,很可能把收益吃掉大半。

SSD 的寿命也得提前想。虽然 PCDN 整体是读多写少,但缓存回源、文件替换都会产生写入。假设每天写入 30GB,一年就是 10.9TB。消费级 SSD 的 TBW 一般在 200 到 600 之间,正常用两三年问题不大,但那些几十块钱的杂牌盘,写入放大一高就容易掉速甚至掉盘。我踩过一次坑:用了一块二手拆机盘,跑了四个月开始出现写入延迟飙升,缓存命中率断崖下跌,排查了半天才定位到盘上。

网络侧的准备:光猫改桥接、路由器拨号、给节点机分配固定内网 IP、关掉节点的 Wi-Fi 省电。如果平台需要公网访问能力,还得考虑 NAT 类型。这里只说明一个事实:全锥形 NAT 对 P2P 打洞最友好,对称型 NAT 下很多连接建不起来,效果会差很多。至于怎么确认自己的 NAT 类型,用现成的 STUN 工具测一下就知道,不需要折腾别的。

4.2 系统与运行环境的选择

系统我建议用轻量的 Linux 发行版,别用带桌面的版本,省内存也省心。装好之后做几件事:关闭不必要的服务、设置好时区与时间同步、配置日志轮转(这点很重要,日志写满磁盘是新手最常见的翻车原因)、把缓存目录挂到独立分区。

下面这个脚本用来做基础监控,采集网卡的上下行速率和 TCP 连接数,输出到 CSV,方便后面画曲线看趋势。放在/opt/mon/netmon.py:

#!/usr/bin/env python3 import time, csv, os, subprocess IFACE = "eth0" # 换成你的实际网卡名 INTERVAL = 60 # 采样间隔(秒) OUT = "/var/log/netmon.csv" def read_bytes(iface): with open("/proc/net/dev") as f: for line in f: if iface + ":" in line: parts = line.split(":")[1].split() rx = int(parts[0]) # 接收字节 tx = int(parts[8]) # 发送字节 return rx, tx return 0, 0 def count_conn(): try: out = subprocess.check_output( ["ss", "-tn", "state", "established"], text=True) return max(len(out.strip().splitlines()) - 1, 0) except Exception: return -1 if not os.path.exists(OUT): with open(OUT, "w", newline="") as f: csv.writer(f).writerow(["ts", "rx_mbps", "tx_mbps", "conn"]) prev_rx, prev_tx = read_bytes(IFACE) prev_t = time.time() while True: time.sleep(INTERVAL) cur_rx, cur_tx = read_bytes(IFACE) cur_t = time.time() dt = cur_t - prev_t rx_mbps = (cur_rx - prev_rx) * 8 / dt / 1e6 tx_mbps = (cur_tx - prev_tx) * 8 / dt / 1e6 conn = count_conn() with open(OUT, "a", newline="") as f: csv.writer(f).writerow([ time.strftime("%Y-%m-%d %H:%M:%S"), round(rx_mbps, 2), round(tx_mbps, 2), conn ]) prev_rx, prev_tx, prev_t = cur_rx, cur_tx, cur_t

用 systemd 把它挂成服务,开机自启,日志按周切割。这套东西跑起来之后,你对自家上行的一举一动就有了完整记录。后面不管是排查限速还是跟客服沟通,拿数据说话比空口描述有力得多。

注意:脚本里IFACE一定要改成实际网卡名,用ip -br link查一下。改错了不会报错,只会一直记 0,容易白白监控好几天。

4.3 上行实测:把"感觉慢"变成"数据慢"

监控脚本看的是趋势,具体到"我现在的上行到底是多少",还是得靠主动测速。我一般用三个层次交叉验证。

第一层,speedtest-cli或同类工具,简单粗暴,但对上行测得不细,容易受测速服务器质量影响:

# 安装后列出附近服务器,挑一个同城的 speedtest-cli --list | head -20 # 指定服务器 ID 测试,多跑几次取中位数 speedtest-cli --server 12345 --simple

第二层,iperf3打流,这个最可靠,能排除测速服务器的干扰。找一台有公网地址的服务器做对端,跑反向模式测上行:

# 服务端(对端机器) iperf3 -s -p 5201 # 客户端(测上行,-R 表示反向,服务端发包给客户端改成客户端发) # 想要测本机上行,用 -R 让服务端发、本机收,测的是下行 # 测上行要用默认方向:本机发,服务端收 iperf3 -c <对端IP> -p 5201 -t 30 -P 4 # 只看结果 iperf3 -c <对端IP> -p 5201 -t 30 -P 4 -f m

-P 4是开 4 条并行流,单流容易被 TCP 窗口和中间设备卡住,多流更接近真实带宽。跑 30 秒,看最后的 sender 那一行。

第三层,看运营商侧的数据。有些宽带 APP 会显示账号的实时速率,虽然不一定精确,但可以和前两层对照。如果三层数据一致地卡在同一个值上,那结论就很明确了。

我实测下来的经验是:测速一定要分时段。早上 8 点、晚上 9 点、凌晨 2 点各测三次,如果三个时段的数值差异很大(比如晚高峰只有凌晨的三分之一),那是拥塞;如果三个时段数值几乎一样,那是限速。这个判断方法百试不爽,比问客服还准。

4.4 在内网先做一次限速模拟实验

如果你想搞清楚"限速"到底是什么手感,可以在自己的内网做一次实验,用tc把上行压到固定值,然后体验一下各种应用的表现。这个实验只在局域网内做,不影响外部网络。

# 在节点机的上行网卡上限制出方向为 5Mbps sudo tc qdisc add dev eth0 root tbf rate 5mbit burst 32kbit latency 400ms # 查看当前规则 tc -s qdisc show dev eth0 # 压测看看实际效果 iperf3 -c <内网对端IP> -t 20 -f m # 实验结束,删除规则 sudo tc qdisc del dev eth0 root

这个实验的价值在于建立直觉:5Mbps 的上行意味着什么?意味着一个 1GB 的文件上传要花将近 27 分钟,意味着同时开两个视频会议就卡,意味着网页首屏加载会明显变慢。有了这个体感,你再看自己节点被限速后的表现,就能判断"是策略限速"还是"别的问题",而不是一味地怀疑设备故障。

提示:tc规则要记得删。忘了删的话,以后所有排查都会被这个规则干扰,我就干过这种事——限速实验做完忘了清理,第二天以为是运营商出手了,白白折腾两小时。

5. 常见问题与排查实录

5.1 一张速查表覆盖大部分现象

现象最可能的原因排查动作
上行稳定卡在固定值,下行正常策略限速停止异常流量,观察数天;联系运营商确认
上行波动大,晚高峰最差PON 口拥塞换时段多次测速,对比凌晨数据
上下行同时抖动、丢包高线路问题(尾纤、分光器、光衰)查光猫光功率,必要时报修
速率正常但缓存命中率低调度问题或 NAT 类型受限检查 NAT 类型,看平台侧节点评分
突然断网,重启光猫无效账号状态异常联系运营商查账号状态
节点频繁掉线重连设备过热或网卡/驱动问题查温度日志,换网线换口
SSD 写入延迟飙升盘寿命或写入放大查 SMART 信息,看 TBW 剩余
电费超出预期功耗估算错误用功耗计实测整机功率

5.2 几个印象深刻的排查现场

第一个是"假限速"。有位朋友的节点上行从 30Mbps 掉到 6Mbps,稳定得可疑,他一口咬定被限速了。我让他先跑了一周的监控脚本,结果发现速率曲线是阶梯状的——白天还好,晚上 7 点后准时掉下来,11 点后又恢复。这不是限速,是他家路由器开了智能 QoS,把大流量设备自动降级了。关掉 QoS 之后恢复正常。这个案例说明:先排除自己家的设备,再怀疑外面,顺序错了会浪费大量时间。

第二个是"缓存盘拖垮网络"。某次节点跑着跑着整机卡死,网络连接全断,重启才好。查了半天发现是 SSD 出现坏块,IO 阻塞导致系统负载飙高,网卡中断处理不过来。换盘之后一切正常。SSD 这种部件平时不显眼,出问题的时候表现却很迷惑,容易误判成网络故障。建议定期看一眼 SMART 里的Reallocated_Sector_Ct和Percent_Lifetime_Remain。

第三个是"PON 口邻居效应"。有位用户自己跑的量不大,但速度一直上不去。后来聊到同一栋楼里有好几户都在跑,基本可以确定是同 PON 口上行争抢。这种情况个人无解,只能降低预期或者干脆不跑。这也是我前面强调"上行是共享介质"的现实注脚。

第四个是"复机之后的遗留问题"。有些账号复机后,速率模板没恢复成原来的配置,导致下行正常、上行长期偏低。这种事不说清楚,用户很难自己发现。建议复机后立刻做一次完整测速并留档,作为后续沟通的依据。

5.3 关于边界的几点个人看法

写到这里必须说清楚:PCDN 这件事在很多地区、很多套餐下,是把家庭宽带用于了超出协议约定的场景。限速和局停不是"技术故障",是服务方在行使管理权。你可以不认同这个规则,但规则是明摆着的,跑之前应该知道自己承担什么。

我的建议是三条。第一,如果你要做边缘分发的正经业务,用商业带宽、商务宽带或者专门的服务器托管,别拿家庭宽带去顶。家庭宽带的定价模型里,本来就没有给商业上行留空间。第二,如果你只是想体验一下技术、跑个小规模玩玩,那就把上行占用控制在一个不影响他人的水平,别长时间满跑,也别在晚高峰抢带宽。第三,一旦被限速或停机,别急着对抗,先看数据、再沟通,很多问题是能说清楚的。

还有一个容易被忽略的点:设备安全和数据安全。跑第三方的分发程序,意味着你的设备会对外提供数据服务。选择平台时要看它分发的是什么类型的内容,缓存目录里会落下什么文件,有没有合规的内容审核机制。有些平台缓存的是公开的视频分片,有些则不然。这个差别很大,值得在入坑前花十分钟确认。

最后分享一个我认为最有价值的小习惯:给你的节点建一份运行日志。不用多复杂,就记三件事——每天的上行总量、每天的平均连接数、每次异常的时间和现象。坚持一个月,你会对自己这条线路的"脾气"了如指掌。哪天上行突然掉下来,你翻一眼日志就能判断是限速、拥塞还是设备问题,不用再靠猜。这份日志在跟运营商沟通时也很有用,数据摆出来,对方处理起来也会更认真一些。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进