TCP是“第一个系统”

人类一共创造三个系统:

  • 第一个系统是原型系统,仓促的原型,一小撮爱好者造就,精简,刚刚够用,不多也不少。
  • 第二个系统是经理系统,经理组织无数次会议讨论再讨论设计而成,臃肿低效满足完备性。

第三个系统回归到现实,在第一个系统上叠加做了减法的第二个系统,是沉淀的结晶。

TCP属于第一个系统。这可以解释为什么它的性能差,以及为什么难以优化。

TCP从来没被设计过,仅为实现字节流的可靠传输而为之,不多也不少。甚至IP从TCP分离出来形成两个层也是几年后的事。最初的TCP和性能不沾边,完全不在考虑范畴,甚至拥塞控制也是后来经历了1986年大拥塞之后才加进去的。

不多也不少意味着无法扩展,TCP头就那么大,很难扩展容纳额外信息,初始的滑动窗口,GBN必须保留作为基础兜底,额外的优化只能是补充,不能改变底座。

与TCP一起诞生的IP同样也有类似的问题。

那么第二个系统,即经理系统在哪里?

经理有心无力。因为TCP在最早期时就已经大规模部署,积重难返。

最近刚刚看完《UNIX传奇》,其中讲述了Makefile的“tab-in-column-1”问题,其中揭露了一个有趣的悖论:

如果程序很好,它就会吸引用户,然后就很难用任何不兼容的方式来修改。Unix和大多数其他系统都充斥着最初就存在的瑕疵,根深蒂固,无法修复。

TCP就是那个“很好的且吸引人的程序”。这很容易理解,如果程序满足刚需,且它是早期唯一的选择,那这个唯一的选择就会迅速占领市场,无论它满足刚需的手段是否优雅,它都很难被替换。

第一版越成功,惰性就越大,它的先天缺陷就越难修复,它本身也越难被替换,第二个系统就越难诞生。

看看IPv4的局便知,IPv4确实有地址短缺的问题,IPv6确实解决了该问题,但人们宁可在早已满目疮痍的IPv4上继续打补丁,采用各类把戏规避问题,也不愿统一切换到IPv6。惰性使然,只要还能用,就不更换。

TCP的第二个系统还不存在,没人去重新设计TCP企图替代TCP,BBR虽然独立于TCP,但它也只是关于拥塞控制这个子领域的增强,如果非要指出一个,QUIC很像第二个系统。

在Unix领域有同样的故事,Unix v6之前是第一个系统,初见雏形,精简实用,此后高校,厂商的经理们开始卷第二个系统,同时GNU也企图卷一个GNU Hurd,但这些都太Unix太经理了,为一个完备的Unix而Unix,为经理而经理,最终都被Linux干掉了,而Linux是第三个系统。

ISO/OSI分层模型也是经理们设计出来的第二个系统,在实现原型之前先论证完备性,很遗憾,它被精简够用但毫无设计感且问题多多的TCP/IP打败。

我曾经一直觉得TCP一开始没有设计好,因此才有先天性能缺陷,并且这个缺陷难以修复,后来我读了一些TCP的原始资料,方知TCP并非设计而成,而是“用”出来的。近日读完了一本《Unix传奇》,Unix的历程也和TCP/IP一样,加深了我对TCP的深入理解,GBN粗暴,但简单,管用,满足刚需,这就够了,这非常符合第一个系统的特征,加之TCP很快成功,也就注定连同它的瑕疵走一生了。写点感想。

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值