当前位置: 首页 > news >正文

TCP 的韧性:端网关系对传输协议的影响

本文继续说终端和网络之间发展的辩证,但从一个具体的派驰代码做引。先来看 Linux 6.17 两个关于 TCP 接收约束的派驰:

  • tcp: stronger sk_rcvbuf checks
  • tcp: do not accept packets beyond window
    虽然不复杂,但值得思考,这是少有的关于端资源约束的派驰,是对严进宽出原则的修补,不均等的能力必须补齐,否则会资源分配的不平衡。那么既然超限几 KB 能宽容,一定是超限更多了才引起注意,从而有了这个派驰,这说明容忍能力没有随着超限能力同步,这预示着必然存在某种极限开始错配了。

简单来讲,它做了以下修改:

// 6.16
if (当前已分配内存 < 接收缓冲区)接收;
else丢弃;// 6.17
if (当前已分配内存 + skb->len < 接收缓冲区)接收;
else丢弃;

让派驰解释自身最好:

Currently, TCP stack accepts incoming packet if sizes of receive queues are below sk->sk_rcvbuf limit. This can cause memory overshoot if the packet is big, like an 1/2 MB BIG TCP one.

不过我不说这个派驰在保护接收端内存约束方面的意义,我要强调它在网络拥塞控制中的意义,它将作为一个主机资源限制的论据。按照广义端到端的观点,两个端并非终结于两个主机的传输层,而始于数据源,终结于人脑,其中的瓶颈是人脑带宽,我将在此基础上展开。

曾几何时,专家经理们总是在 win = min(rwin, cwnd) 之外多发几个数据包,以此行为破坏流量控制和拥塞控制的收敛原则,赌网络和接收主机的宽容行为,达到抢带宽的目的,以此在竞速中获得高分,最终赢得客户。

太好了,有了这个派驰,不让超发了,它堵死了上述一条 “TCP 单边优化” 的路。

但且慢,万一 win = cwnd 呢,如果该 TCP 流是 cwnd-limited,它并不受 rwin 控制,该如何?这是重点。

承接 TCP/IP 的韧性:网络的无限扩展 & 主机的有限能力,文章的最后,我提到 PC 的失败和智能手机的成功,性能过剩的 PC 最终被独占屏幕 app 的智能手机替代,这背后涉及到端到端吞吐由最慢的环节决定这个世人皆知的道理。本文依旧用它说明问题。

互联网的发展路径是这样的:

  • 最初,主机和网络都慢,应用设计主要考虑节省主机资源,尽力满足用户需求;
  • PC 时代,主机极快,网络相对较慢,应用设计的核心矛盾变为隐藏网络延迟;
  • 移动互联网时代,智能终端低延迟优先,网络技术进步,app 独占屏幕,多任务弱化;
  • 现在,网络技术继续线性缓慢进步,app 依然独占屏幕,智能终端侧处理资源逐渐相对过剩;

独占屏幕 app 的智能手机替代 PC,独占屏幕 app(短视频,手游) 对处理性能的要求受限于人对信息的反应和消化能力,过剩的终端性能在实际使用中逐渐与相对慢速的网络适配了,而相对慢速的网络亦在缓慢进步,逐渐追平了相对静止的端性能。PC 到智能手机,是一个由强大但少到平庸而多的过程,网络技术的进步恰恰适配后者,这是一个技术追人力的过程,显然会触顶。

只要人还是人,且人口数量控制在一定范围,就难以预见带宽需求的爆发式增长,在 AI 奇点之前,本质上整个过程的瓶颈就是人脑的带宽,若日后 AI 加入会打破该假设,但那是疯狂投资泡沫破灭以后的事,至少在可预见的三五年还看不到影子。

到此为止,结论是,网络最终将会变成池化资源,TCP 最终受限于主机,win = rwin 将成为多数,而不是 cwnd。

若果真如此,文初展示 Linux 6.17 的 TCP 派驰就意味着它堵死了靠超发来抢带宽的路子,但简单反思后就发现,这种情况下超发的目的已经不是抢带宽了,而是抗丢包,超发更多是以 FEC 的方式发送冗余,并不占有 rwin 提示的接收缓存空间,超发作为护送跟随,到达即丢弃,依然阻止不了专家经理们胡作非为。

一丝安慰是,为 TCP 增加 FEC 功能具有不低的门槛,大多数经理及其治下的工人并不具备相关开发能力,虽然他们能快速开发一个 cc 模块比如魔改 BBR,但他们没有能力修改 TCP 拥塞状态机本身的代码,也就有碍但无大碍了。当然,对于有能力自研 DPDK 用户态 TCP 协议栈的经理及其治下的工人来讲,他们的自研多用于自家数据中心的东西流量而非南北流量,自己内部折腾,不入广域网,不扰民就是高尚。

该派驰阻止的是这些经理,他们会增加 cwnd,并且在 rwin 允许发送的范围外多发送一些数据,试图绕开 tcp_write_xmit 函数 while 循环中由于 cwnd 或 rwin 配额导致 break 的点。

还要多说几句,涉及传输控制与 cwnd 脱钩后的公平性。

对于支撑本文结论的证据,我此前也表达过类似观点,即端限制流。即使没有 rwin 的约束,sender 也会约束,未来将有越来越多的 TCP 成为 application-limited,其算法也不再符合早期的 capacity-searching 特征,因此公平性只在它们破坏了该假设时才给与保证,毕竟我不需要的你不能硬塞。
如此一来,cwnd 将脱离 cc 的控制,RED 对 app-limited,rwin-limited 流做丢包后,cwnd-based cc 对其做统一反应会严重破坏公平性.

但公平性问题并没有因此而弱化甚至消失,而是改变了。

公平性保障的进化类比智人社会,非常相似。万年前的石器时代,所有人全凭体力 capacity-searching,公平性被自然保证,人群当中没有弱鸡存在,然而到了现代,从泰森到睿经理都受到同等保护,公平性从体力公平变成了生存公平。

在网络传输领域,codel 调度算法(同样来自 VJ)配合 AIMD 即可促进类似的公平性演化,我依照其思路曾经做了一版 AQM,按照随机抽样原则,越大的流抽样后的比例越大,依据 buffer 动力学原理,不断变换 hash 种子即可在一个 10ms 级 RTT 内将最大的肇事者筛出来,单独惩罚它即可。反之,对于与 cwnd 脱钩的流,则不再控制或弱控制,保护需求不大的弱者,相关函数很容易改,给一个先看个意思:

// 但凡 app-limited 或 rwin-limited 的流都不是 cwnd-limited
static void tcp_init_cwnd_reduction(struct sock *sk, bool is_cwnd_limited)
{struct tcp_sock *tp = tcp_sk(sk);...tp->snd_ssthresh = inet_csk(sk)->icsk_ca_ops->ssthresh(sk, is_cwnd_limited);...
}

例行说点形而上。

TCP/IP 终究还是没能守住互联网点到点对等通信的初心,从 HTTP 开始计算资源就向内容中心集中,短暂的 PC 时代进入智能手机,平板时代后,最终只剩下浏览器,终究还是 HTTP。手机里纵有上百 app,你只能同时使用一个,无论哪个 app 都是一个浏览器,你的手机装了几百个浏览器,它们在竞相争夺你的注意力。

从拼 CPU,内存的 PC 时代到抢你的注意力的智能终端时代之间,网络从运送大宗计算原材料转换成运送多媒体流,从关注大吞吐到关注低时延的转变过程,这个转变过程的意义重大,如果认不清其中技术演进的新逻辑,就会吃大亏。

这转变过程涉及的显然不只是技术上限差距的问题,而是生态再分工的问题,我简单列举一些,不全:

  • 考虑到对大量的,突发的小请求的承载,0-RTT,多路复用流成为刚需,QUIC/HTTP3 几乎成了必然;
  • HTTP over QUIC/TCP 等标准协议足够好,没有必要再研发新的传输协议;
  • 终端不再参与过多本地存储和计算,便不再追求大吞吐,渲染,首屏,交互等低延时 QoE 指标更优先;
  • 移动终端,物联网终端对能耗的约束,强化终端不能提供强算力,计算进一步向中心集中,网络更加重要;
  • 终端退居交互前端,专注于采集和呈现,其硬件潜力被导向专用任务、能效和传感器;
  • 还有什么…

在此背景下,回到拥塞控制和传输优化,也许就知道为何超发没用了,所谓优化并不是获得更高的吞吐,而是在 application-limited 或 rwin-limited 自我约束下,不被 capacity-searching 流过多影响,解决之道当然不是将自己也变成 capacity-searching 流。这其中涉及了对整个传输协议各方面意义何手段的重新评估。

再说说 BBR,随便看看,毕竟这么久了 BBR 也不更了,看来真的是更不动了:BBR v3 latest status。

遗憾的是,虽然 BBRv1 未经论证,我们的互联网已经灌入了比例可观的 BBRv1,它在理论上承诺反 bufferbloat,但大量流共存时,minRTT 将收敛到稳定的统计期望,而 maxBW 则取决于瞬时突发,高于所需,BBR 流几乎总以 g·minRTT·maxBW(其中 g >= 2) 为 inflight,BBR 动力学特征消失,AIMD 的统计特征也被冲刷,大比例的 g·minRTT·maxBW 像混凝土一样灌在互联网的每个角落。

核心问题是,AIMD 会根据共存流量导致的丢包周期变化自行收敛,BBRv1 不会做这种收敛,只要流足够多,ProbeRTT 的作用将被统计律擦除,而 BBR 的正确性依赖 ProbeRTT 状态,到头来却获得一个由中心极限定理作用的稳定 minRTT。

若长期维持 CUBIC,它一定能自适应 app-limited,rwin-limited 背景下的网络流,就像它适应 capacity-searching 流量一样,但 2016 年底 BBR 强大的吞吐能力吸引了大多数人的注意,一对 iperf,所见即所得,BBR 打破了平静。

BBR 短时间被部署到各大互联网数据中心支撑南北流量,彼时已经进入移动互联网时代,高吞吐越发让位于低延时,人们操心的应该是低延时而不是 BBR 所宣传的带宽利用率,bufferbloat 是问题,但 BBR 解决不了该问题,只要不能从数学上证明 BBR 在统计上是收敛的(参见 主宰 TCP AIMD 的中心极限定理),ProbeRTT 能获得 minRTT 就不可信,这一切都怨经理。

这一切都怨经理。

浙江温州皮鞋湿,下雨进水不会胖。

http://www.dtcms.com/a/434783.html

相关文章:

  • 怎么创网站赚钱网站美工工作流程
  • malloc:arena
  • 第12课:构建对话记忆:打造多轮对话RAG机器人
  • 大良营销网站建设如何模板网站没有源代码
  • 归并排序的递归和非递归实现
  • 天津建设网站个人主页网页设计模板免费
  • 整体设计 逻辑系统程序 之8 三种逻辑表述形式、形式化体系构建及关联规则(正则 / 三区逻辑)
  • 京东Java后台开发面试题及参考答案(上)
  • 婚纱摄影网站帮忙建设公司网站
  • 载具系统介绍
  • 理解采样操作的不可微性及重参数化技巧
  • 做网站 视频外链做网站的做网站麻烦吗
  • TOGAF之架构标准规范-需求管理
  • 临沂 企业网站建设seo双标题软件
  • 公司为什么做网站支付宝小程序
  • Linux中读写自旋锁rwlock的实现
  • 前端-JS基础-day5
  • 字体版权登记网站WordPress网站结构优化
  • [特殊字符]【保姆级教程】GLM-4.6 接入 Claude Code:200K 长上下文 + Agentic Coding,开发者福音!编程能力大幅提升!
  • 大前端开发技术知识框架详解、Mono repo工程化实践详解、微前端实践详解
  • MDK编译过程
  • 网站整体风格设计ios aso优化工具
  • 数据结构KMP算法详解:C语言实现
  • 【网络通讯安全认证的理解:从密钥签名、数字证书到 HTTPS/TLS 流程】
  • 蜘蛛抓取网站模块原理推广是怎么做的
  • 中国石油AI中台-昆仑大模型介绍(二)
  • RAG核心特性:查询增强和关联
  • Spring 中事务的实现
  • 苏州哪家公司做网站网站布局是什么
  • AI智能体在研究分析中的仿真应用:预测、生存与建构——情绪是基于趋利避害的预测机制吗?