TCP/IP 哲学:端到端的 Postel 定律

实际上这是互联网哲学,但 TCP/IP 是互联网的事实标准,也是互联网的唯一实例,因此 TCP/IP 等同于互联网。

我写过很多 TCP/IP 发展史的随笔,于宏观,我希望理解互联网何以至此,于微观,希望理解 TCP/IP 协议栈的细节,但总缺一个 “元历史”,TCP/IP 历史的历史,即 TCP/IP 为什么能发展壮大。
首先是端到端原则,它强调在通信系统设计中,将复杂的功能集中在终端(即发送方和接收方),而不是在网络中间节点(如路由器和交换机)上。简单来说,网络只 “尽力而为” 传输数据,终端的具体操作对网络无感知。

该原则让 TCP/IP 网络的接入变得简单,因此才支撑了持续不断的终端透明无感接入,让互联网快速变得壮大。这是 TCP/IP 成功的首要原则,因为接入一个终端不需要网络做任何事情,因此接入互联网的操作是可持续扩展的,这个过程一直持续到今天。

另一方面,复杂功能集中在终端意味着不光要接入,还要在终端对网络进行配置,这种复杂操作抵消了快速接入的优势。这也是电脑短暂流行后快速被智能手机取代的原因。没什么机器比电脑更复杂了,它太复杂了,比彩电冰箱空调洗衣机复杂太多了,它几乎不是一个平常人可以操作的机器。
某种意义上,电脑失败了,智能手机却成功了,原因很简单,电脑恪守了端到端原则,作为终端,它的操作太复杂了,而智能手机同样作为终端却成功了,这背后又隐藏了什么。

既然操作要这么复杂,老百姓用户肯定不能接受,需要宽容!大神出场,乔恩·波斯特尔(Jonathan Bruce Postel),以 Postel 定律闻名,始见于 TCP 第一标准 RFC793:

2.10. Robustness Principle TCP implementations will follow a general principle of robustness: be conservative in what you do, be liberal in what you accept from others.

中文翻译,“严进宽出”,“对发送严格且保守,对接收宽容且开放”,也正是 “严于律己,宽以待人”。该原则让智能终端摆脱了复杂性困扰。

如果终端用户觉得操作太复杂,要对其宽容,要么教会他,要么容忍他,但不能回避他。TCP 对很多主动的不规范以及被动的异常都给出了明确回应,以便发送终端可以将传输继续下去,而 IP 也尽
力而为提供 ICMP 支撑。

Postel 定律下来看电脑的失败和智能手机的成功。如果你不会电脑,你必须自己去学会,否则机器不会容忍你,这意味着电脑成了需要学习使用的专业设备,类似挖掘机,电锯,总之,电脑没有遵循 Postel 定律,它不是日用品。

但没人不会用智能手机。

智能手机允许用户进行任何操作,即使是错的或者无效的,它也尽力猜测并对准操作边界,只要不明确违规即可行,用户的操作空间扩展到了整个屏幕,配合以任意手势,针对任意操作均有可视化回应,比如屏幕下拉,下滑,左右滑,长按,此外,智能手机以独占输入精确提示用户如何操作,比如只让你输入 4 位数字,没别的选项。

Postel 定律背后最厉害的是氛围,如果接收相对宽容,发送总能得到回应而不是被无视,这个闭环实际上是一个自我强化的正反馈学习过程,发送方最终会很快,越来越快学会如何操作,应该如何操作。

很多同行可能觉得我说的有失偏颇,毕竟还有谁不会操作电脑吗。大众视野下,很多人都不会操作电脑,这个错觉就跟毕业就进 BAT 工作十几年的人不相信上海工资中位数只有几千一样,圈子的狭隘造就的,即使是互联网 IT 业的,也有很多人回家不开电脑了。

智能手机诉诸视听,而视听几乎是人类几千年食色性外之首选且囊于其中,TCP/IP 正好做了比纸笔,现场表演更优秀的介质桥梁,这是两者的双赢,下一代肯定更好,但基调还在视听。

不过我最烦跟同行聊技术细节,搞得跟全世界所有人都懂技术一样,技术真的不值钱。

总结两大件,端到端原则和 Postel 定律,相铺相成。端到端原则激发物理接入,Postel 定律使其逻辑适应,这就是 TCP/IP 的成功。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/2618.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux下使用原始socket收发数据包

在Linux系统中,使用非原始的socket,可以收发TCP或者UDP等网络层数据包。如果要处理网络层以下的数据包,比如ICMP、ARP等,或者更底层,比如链路层数据包,就得使用原始socket了。 创建socket 创建socket要使用…

cocosCreator2.4 Android 输入法遮挡

这里是 调用显示系统的输入法,然后在 Cocos2dxEditBox.java 创建UI,用于处理输入,这里可以看到会ui 会被系统的输入法遮挡,无法点击,是因为 计算ui位置时没有算上刘海区域,需要处理一下: private int getTo…

7.18 Java基础 |

以下内容,参考Java 教程 | 菜鸟教程,下边是我边看边记的内容,以便后续复习使用。 多态: 继承,接口就是多态的具体体现方式。生物学上,生物体或物质可以具有许多不同的形式或者阶段。 多态分为运行时多态&…

【Lua】闭包可能会导致的变量问题

先思考下面这个问题:local function counter()local count 0return function()count count 1return countend endlocal a counter() local b counter()print(a()) --> ? print(a()) --> ? print(b()) --> ? print(a()) --> ?输出结果&#xff…

网络基础12--可靠性概述及要求

一、可靠性基础概念定义可靠性(Availability) MTBF / (MTBF MTTR)MTBF(平均无故障时间):衡量系统稳定性的指标(如1年)。MTTR(平均修复时间):衡量故障响应与…

【Dv3Admin】菜单管理集成阿里巴巴自定义矢量图标库

图标选择是后台管理系统中高频功能。相比用 Element UI、Ant Design 等自带的 icon 集,阿里巴巴 iconfont.cn 支持上传和管理自定义图标,并生成矢量字体,便于统一维护和扩展。 本文目标是支持自定义 iconfont 图标的展示和选择,并…

有n棍棍子,棍子i的长度为ai,想要从中选出3根棍子组成周长尽可能长的三角形。请输出最大的周长,若无法组成三角形则输出0。

题目描述: 有n棍棍子,棍子i的长度为ai,想要从中选出3根棍子组成周长尽可能长的三角形。请输出最大的周长,若无法组成三角形则输出0。 算法为O(nlogn) 初始理解题目 首先,我们需要清楚地理解题目要求: 输入…

企业级网络综合集成实践:VLAN、Trunk、STP、路由协议(OSPF/RIP)、PPP、服务管理(TELNET/FTP)与安全(ACL)

NE综合实验4 一、实验拓扑二、实验需求 按照图示配置IP地址。Sw7和sw8之间的直连链路配置链路聚合。公司内部业务网段为vlan10和vlan20,vlan10是市场部,vlan20是技术部,要求对vlan进行命名以便区分识别;pc10属于vlan10&#xff0c…

deep learning(李宏毅)--(六)--loss

一,关于分类问题及其损失函数的一些讨论。 在构建分类模型是,我们的最后一层往往是softmax函数(起到归一化的作用),如果是二分类问题也可以用sigmoid函数。 在loss函数的选择上,一般采用交叉熵损失函数(…

机器学习:数据清洗与预处理 | Python

个人主页-爱因斯晨 文章专栏-Python学习 文章目录个人主页-爱因斯晨文章专栏-Python学习前言了解数据清洗数据清洗的步骤1. 环境准备与库导入2. 数据加载3. 数据初探与理解4. 缺失值处理5. 重复值处理6. 异常值处理7. 数据类型转换8. 数据标准化 / 归一化(预处理&a…

【代码随想录】+ leetcode hot100:栈与队列算法专题总结、单调栈

大家好,我是此林。 今天分享的是【代码随想录】栈与队列算法专题总结,分享刷算法的心得体会。 1. 用栈实现队列、用队列实现栈 232. 用栈实现队列 - 力扣(LeetCode) 225. 用队列实现栈 - 力扣(LeetCode)…

每次启动服务器都要手动选择启动项

存在的问题 如下图所示: 每次启动服务器的时候,都需要手动将光标选择到第二条,敲回车,才能正常启动系统。从图片可以看到,这是一个 GRUB 启动菜单,显示了三个选项: CentOS Linux (3.10.0-1160.1…