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

从 IP over 鸽子到 TCP 的适应性

RFC1149 展示了一种用信鸽传输 IP 数据报的方法。类似的方法很容易想到,一张纸,一支笔,一只鸽子:

  • IP 数据报通过 tun 网卡被应用程序打印在屏幕并被 b64 编码后抄写在纸上;
  • 写满 b64 编码的纸和笔一起绑在鸽子腿上放走(有电脑不一定有笔);
  • 鸽子到达目的地后拆开纸笔,输入应用程序后通过 tun 网卡接收;

RFC6214 将信鸽搬到了 IPv6 网络。以下是 wiki 的一个例子:以鸟类为载体的 IP 协议。

除了信鸽之外,三轮车,陌生人都可做 IP 数据报传输载体,这就是 TCP/IP 的核心特征之一,可利用一切既有可传输载体进行传输,不关注底层具体特征,或许它们完全可靠,但它们也可能完全不可靠,会丢,会乱,或许他们会尽力而为,取决于你支付给他们的好处。

传递一个 IP 数据报是如此简单随意,若加上可靠,保序的约束,事情会复杂些,但不会发散,这不单单是用信鸽传输 TCP 流,而是一段真实的历史,而 TCP/IP 协议的发展则是这段历史在互联网上的重复。

可靠传输在古代并不容易,平民没权使用驿站,寄送重要信件为了回执确认,一般会选择类似以下两种方法:

  • 有条件的使用信鸽送信,收信方放回另一只寻址发送方的鸽子带上回执;
  • 普通人委托常年往返或路过收信方的行商,收信方等到此人返程时捎带回执;

无论哪种方式,发信人总期待能在预期时间内收到回执,他知道鸽子一天飞多远,也知道熟人什么时候归来,虽然鸽子或被委托人的具体路线和路上行为并不固定,但大体上归来时间还是可以估算,一旦超过最长容忍期,发件人定会认为出事了。

这故事描述了 TCP 的全部标准行为,延迟 ACK,捎带 ACK,RTT 计算,超时重传。在传输介质笨重昂贵且不可靠的年代,内容要适应技术,因此,古代文字也和 TCP 协议时代的 telnet,Unix shell(ab, bc, cd, df, fg …) 一样,惜字如金。

为理解 TCP,同时为了展示以启山林的 TCP 时代的筚路蓝缕,要深入看一下古代竹简。

简单来说,古代竹简书既没有现代意义上的封面,页码,也没有索引,但它们通过物理结构和文本内在逻辑解决了顺序问题。单竹片为 “简”,编绳贯连为 “册”(如 ‘韦编三绝’),以最后一根简为轴,卷起来就是 “一卷”。

一旦用绳子编连好,文章的天然顺序就被物理地固定下来,阅读时从右向左,从上向下展开卷轴,就是自然顺序,若编绳断裂,顺序就会乱,如韦编三绝的故事,事实上编绳很容易断,如何从断裂的片段恢复成册就必须要考虑。

类似 MTU 的约束,由于竹简很重,限于手持和运输,一部大书需分多册,就需要在多册间标记册间顺序,卷轴上挂标签(一二三甲乙丙子丑寅…或卦象)看来最自然,但考虑到上述提到的编绳断裂后的重组,大量采用的却是 “文本内在连贯法”,要么用上下文衔接,例如编年,要么使用篇次,章回,例如 “XX第一”,“XX第二” 而不像当代目录那般任意,即顺序要含在内容中,老师傅凭记忆相承,不光传授书名篇次,还传授它摆在什么位置。

这简直跟 TCP 一模一样,TCP 靠序列号编排顺序,每个 TCP 段即一 “册”,传输中的 TCP 报文为 “帙” 的一 “卷”,接收端靠序列号做 “篇次” 恢复其位置,由于竹简书可能会被以任意方式运输,不限于用鹰(信鸽带不动),牛车,人力,那么遇到的问题和上述送信的问题一致,可靠性处理也将一致,这背景在 1970 年代在 arpanet 上被重构,就是 TCP 诞生的背景。

TCP 为什么是现在这个样子,都在历史中。随信息传播技术从竹简到纸书卷,封面书皮包裹着书页,这其实就是一个封装的过程,所谓 packetization 的概念我也经常提到,内容被解放了,很少有目录以篇次做索引了,取而代之的是封面上的卷 1,卷 2,上中下等此类。只要对书卷编号写在封面书皮上,不必对内容编号了。

遗憾的是,TCP 本身始终没有做 packetization,TCP 头甚至没有 length 字段,TCP 始终是竹简,TCP 将 packetization 分离给了 IP,这就是 TCP/IP。这对后续的传输协议设计带来了很大的影响,如果传输协议本身不做 packetization 将难以实现高性能,如果做了 packetization 则与 IP 冗余并降低了载荷率,这意味着特别是设计数据中心 transport 时,需要在二者间取舍。

无论线上还是线下,从信息存储,传输的根本理解协议设计才能看清全局,我们处理信息的存储和传输远不止从互联网时代才开始,我们已经迭代了成千上万年。

文言文作为古书面语诉诸昂贵且落后的存储和传输技术,决定了文言文的简短,而古文体则有便于常见的誊写,运输后乱序重组的意味,技术落后时,内容要适应技术。

随着造纸,印刷和运输技术的发展,封装内容的容器出现,内容被解放,同样的内容以精装,简装,连载等不同形式初版分发,技术发展了,技术服务内容。

始终不变的是内容,迭代的是技术。

若乱序恢复成本低了,就没有篇次,章回的必要了,存储运输成本低了,也不必再惜字如金,分卷长篇小说,线性叙事,连载,边受反馈边写的形式就开始流行。可靠运输依然需要回执,但回执成本低了。

线上总是和线下同步,对于互联网本身协议的发展也类似,早期的纯文本信息逐渐过渡到超文本信息,图片,视频,在线电影,短视频开始流行。

技术越发达,内容越灵活,技术越发达,信息越碎片,线上短视频流行前,线下的书早就变薄了,这里面的辩证很有趣,线上完全与线下同步:

  • 贮藏,运输技术越落后,书卷越厚,技术的发展没有让书更厚,反而更薄;
  • 存储,传输技术越落后,下载越多,技术的发展让下载更少,online 更多;

这很容易解释,信息越不易得,越有存储欲望,当信息易得,越是即时消费,越多越碎,但它蕴含的 “稀缺会被技术稀释” 的道理更值得深思。

令人惊叹的是,1970 年代的 TCP 迄今发展近 50 年,TCP 竟可适应 50 年的技术迭代,其核心就在于 TCP 是一个最小化悲观假设协议,它立足于类似古代平民送信的条件下完成传输,可靠,保序,能用,不做任何额外假设。

回顾平民送信,所谓悲观假设,即不可靠,会丢,会乱,资源受限,全是否定贬义,这是真正的最小集。最坏情况下,TCP 将这些否定贬义全部覆盖只满足可用性,可适应 1kbps 链路,最好情况下,由于没做任何肯定褒义假设,TCP 便什么都不用做,只要简单 batch(LRO,Big TCP) 即可应对 200Gbps+ 网络。

悲观假设是 TCP 适应性的根源。颇哲学的说法是,从最悲观的开始持续做减法,避免在任何乐观假设被违背时再做加法,过度满足时却又成了累赘,这是一种工程智慧。悲观假设,尽力而为,这也是 TCP/IP 整体的哲学,正是它促使了 TCP/IP 的成功。
TCP/IP 的成功并非单例,因为它的现实模板正是我们的现实世界,现实从悲观的假设开始,但这些假设正在被科技的发展一个个突破,或许文明的进程正是一个不断做减法的过程,世界不断变平坦,可观测。

写代码时,想象生活中同样的事怎么解决,代码就怎么写,几千年演化的范式不会错,把它搬到线上。

牛奶很贵,经理拧盖时不小心把牛奶撒在了邻座工人的裤子上,工人会喝掉裤子上的牛奶吗?如何评价一勺 20 万块钱的鱼子酱撒在了经理 8 万块钱的西裤上。

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

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

相关文章:

  • 大模型提示工程
  • 鸿蒙应用开发——Repeat组件的使用
  • 远程控制的全球节点功能如何开启?插件类型、并发数量怎么选?
  • 因果推断:因果回归树处理异质性处理效应(三)
  • 六应用层-真题
  • python笔记之正则篇(四)
  • 无标题文档
  • LeetCode 面试经典 150 题之验证回文串:双指针解题思路详解
  • pandas在AI中与其他库的协作
  • 【软件测试】第5章 测试分类(下)
  • 二物理层-真题-
  • c康复训练 01
  • MLP和CNN在图片识别中的对比——基于猫狗分类项目的实战分析
  • Node-Choice
  • PyQt6之滚动条
  • 使用OpenVINO将PP-OCRv5模型部署在Intel显卡上
  • 【图像处理基石】图像复原方面有哪些经典算法?
  • setTimeout定时器不生效- useRef 的特点/作用
  • 钻井的 “导航仪”:一文读懂单点、多点与随钻测量
  • CKS-CN 考试知识点分享(8) ingress 公开 https 服务
  • ​​[硬件电路-259]:LM4040AIM3 精密电压基准源: 管脚定义、概述、功能、技术指标、使用场景、原理
  • C语言:实现阶乘和计算
  • 鸿蒙应用开发——AppStorageV2和PersistenceV2的使用
  • shell脚本实现docker镜像批量保存并上传至Harbor仓库
  • 用 EzCaptcha 优化 reCAPTCHA 低通过率问题
  • 在docker中构建Vue项目
  • 力扣1895. 最大的幻方
  • Linux入门(四)
  • 以下是与LoRa技术相关的数学公式整理
  • (3) rust和前端交互