当前位置: 首页 > 工具软件 > IPv6 CARE > 使用案例 >

闲谈IPv6-IPv4的TCP和NAT让互联网变得畸形

国俊艾
2023-12-01

下班的路上读了一篇比较有意思的百家号文章:
IPV6和5G来到后,我们会体验到《镜花缘》里的景象嘛?: https://baijiahao.baidu.com/s?id=1590883265841566472

这篇文章可以引起一些思考。文章很短,两分钟可以看完,我并不就着这篇短文做评论,而是想说,为什么这些在IPv4时代不可能发展起来。

我将其归咎于NAT!NAT是IPv4的遗毒!

NAT已经成了IPv4时代的一种与生俱来的性质,所以,一旦在IPv6时代丢了它,很多人非常不适应。很多人会觉得丢了一个宝贝。

我们总是会为丢失已经拥有的糟粕而感到惋惜,而不会觉得还没有得到但是将要得到的东西才是希望。这就是人的惰性,得到和失去并不对等,过去和未来并不等价。如果能不失去,那么人们宁可不得到。

没有了NAT后,人们会失去已经拥有的 躲在NAT后的感觉,而不会关心取消NAT后将会得到什么,毕竟UDP也好,P2P也罢,都没能得到过大规模部署。但现在是时候拥抱这些了,可人们依然不想要。人们想要TCP持续下去,因为人们早就习惯它了。

不是IPv4助长了TCP,而是IPv4的问题带来了NAT,而NAT阻滞了P2P(严格来讲,P2P并不是一种4层协议,但是按照编程模型来讲,它是比UDP更加激进的对等互联协议!),UDP等其它协议,让我们认为TCP的C/S编程模型是理所当然的。

是NAT的TCP友好性阻滞了其它非TCP协议,才让我们认为TCP是理所当然的,反过来,TCP的爆发也让人们觉得NAT是理所当然的。

别说万物互联了,就是因为NAT,让你无法在高铁上接入自己家的空调,你会觉得这不重要,因为你想象不到当人们觉得它重要时世界会变成什么样子。

如果NAT是理所当然的,那么它绝对是万物互联的障碍,而IPv6正是它的掘墓人!

IPv6带来了改变,它取消了NAT(你依然可以让IPv6做NAT,就像马依然可以跑在公路上那样不合时宜),IPv6解放了5G所需的资源,这就是二者的关系。


当真的实现万物联网时,人与人,物与物,人与物之间,正如《镜花缘》里那般,便不会有谎言了。问题是如何实现万物联网,需要什么样的基础设施来支撑万物联网。答案是一个列表,这个列表中当然包括IPv6和5G:

  • 庞大的地址空间支持海量的接入点;
  • 点对点对等互联使得任意节点在任意时间均可以收发数据;
  • 低功耗,移动性支持;
  • 高带宽,低时延…

这些宣传都听腻了的…

现在的问题是,IPv6对IPv4到底是一次简单对升级,还是说一次前所未有的颠覆?我认为是颠覆。

一切源自于IPv4的NAT。让我们从头说起。


IPv4的初衷是构建一个 分布式的(意味着无中心)点对点的(意味着无偏见)逐跳的(意味着无逻辑连接)分组交换的(意味着无物理连接) 网络,这样它便可以构建一个无中心的体系,方可承受冷战对手的任意精确打击。

然而,最终这张网进化成了我们现如今的互联网Internet。当初构建IPv4时,可能压根就没有想着每一个普通人都会拥有一个IPv4地址,如果仅仅用于军事目的或者一些国家战略级的目的,那么IPv4地址是足足的。

为了在无物理连接,无逻辑连接的尽力而为的网络上实现 有连接 的语义,必须在IP层之上实现,且这种实现 不能是逐跳的,必须是端到端的。

事实上,TCP只是IP可以承载的传输协议之一,并不是全部,TCP只是加强了IP,UDP才是复制了IP。

但是TCP除了连接性,还有一个更加有益的性质,这就是 流式传输! 这才是让其压倒UDP的那把宝剑。流式传输相比数据报传输要方便得多,它可以自适应当时比较小的带宽,主机发送,接收缓存,自带的滑动窗口可以轻松搞定这些事情,如果是数据报协议,就会面临 如果放不下,就只能丢掉 的尴尬,因为数据报不能切割!

不是连接,不是重传,不是保序让TCP在初期胜过了UDP,而是流式传输!连接,重传,保序只是辅助。

随着信息技术的发展,当初必须使用TCP的理由不存在了,流式不必基于字节而可以基于报文了,这样看来使用UDP会更加灵活,但是这个时候,推广UDP却受到了一种阻碍,从而又一次让TCP更加蓬勃起来。

这个阻力就是NAT!NAT对其它协议太不友好,因为它的方向性!然而,NAT同时也阻滞着TCP的反向连接,但是人们貌似并不care,于是发明出了uPnP,打洞这些垃圾技术,就是为了支持TCP的反向向内的连接。遗憾的是,这时,人们已经接受了TCP,各大网站,服务器均已经全面部署了TCP,别的协议就彻底没戏了。


人们常说互联网是一个资源共享的平台,我说不!

互联网是一个资源垄断在几个巨头的金字塔等级世界,完全不对等!这背后的原因就是大规模部署TCP,而TCP的卫道者就是NAT!

我们看看几十年前的TCP编程模型,非常清晰的一个资源垄断编程模型,我们称之为 C/S模型 ,一个例子就是,Apache服务器专门设计了几种MPM(Multi-Processing Module),来支持这种 C/S模型

这预示着服务器往往是强大的,而客户端往往只是展示一下结果而已。服务器越来越强大,客户机越来越瘦,这是这种C/S模型发展的必然趋势!这种模型最终发展到了我们现在的所谓 云计算。服务器越来越强大,强大到可以用一朵云来表示了,因为没有任何人可以刻画这朵云里面的细节!

非常具有讽刺意义的是,云计算,一切在云端,这恰恰就是现如今我们自嗨的互联网Internet的唯一形式,人们纷纷扑向云计算,人们以为这将是互联网世界的最后一块蛋糕。但是…

但这是不正确的,这不是真正的互联网应该呈现的样子,这不是真正的万物对等互联。

IPv6/IPv8,5G/6G的出现可能会彻底推翻这种模型!


由于NAT的存在以及TCP的局限,互联网变成了一个纯粹的 被动式的拉(pull)网 ,很少有 主动推(push) 的动作。

拉模型是一个典型的我们熟悉的Request/Response模型,我们目前熟知的HTTP协议就是这种模型,这意味着每次请求到资源,至少要经过两个RTT的时延。TCP需要握手,然后还要发一个Request报文,接下来才是Response。TCP意识到这样做是一种错误,于是FastOpen这个trick就出来了…

为何迟迟没有符合推模型的的App呢?因为在NAT和TCP的环境里根本就做不到!

首先,推模型需要知道目标地址,在IPv4网络中,这意味着NAT会成为障碍,此外,小型设备支撑不住太大的能耗,因此不适合做TCP的侦听端,此外,小型设备不适合处理MPM。这难道不是进一步助长将C和S超两个极端分化吗?


看看我们当前的TCP/IP网络的上层已经发达到了什么程度,随便一个消息系统都可以吊打TCP/IP网络上现有的传输协议模型:

  • 点对点模型。IPv4的初衷,但是NAT使得其只实现了一个方向,助长了两极分化。
  • 订阅/发布模型。IP协议的组播增强,但是组播和NAT一起面临着更多的现实问题。

只要打通了底层网络,世界任意两点或者多点的消息系统将可以任意 或推或拉 数据,传输本身将极大丰富。

但恰恰IP层本身却不支持推拉双向传输。这都怪NAT,而NAT本来只是解决IPv4地址不够用的一个Trick。

好了,让我来总结一下我上面都说了些什么:

  1. TCP是一种C/S模型的端到端协议。
  2. NAT让TCP的S端趋向于越来越强大,C端越来越瘦。
  3. NAT和TCP合力让互联网变得中心化,不对等。
  4. NAT和TCP违背了互联网的设计初衷。

有破要有立,IPv6将会带来什么?

如果彻底地扫除了NAT,如果5G/6G让更多的东西接入了互联网,那么什么才是正确的?

无疑,计算能力将变得分布化而不是越来越集中。在商业巨头内部,他们早就意识到了廉价的分布计算能力要远远强于昂贵的集中式计算,看看无论是谷歌,Facebook,还是阿里巴巴,腾讯,都不再采购专业昂贵的的设备,而是采购超级廉价的简易设备来自研软件,这种趋势将扩展到整个互联网!

集中进行云计算的那几朵云终将烟消云散!!

区块链技术只是一个想法,但是去中心化则是必然!无论采用哪种技术实现去中心化并不重要,重要的是把云驱散,互联网才能真正对等互联互通。

现在的互联网不是阿帕网最初希望成为的那个抗核打击的分布式去中心的互联网,现在的互联网更像是上世纪60年代登录大型机终端进行作业操作的 远程多用户登录终端系统! ,一群人拿着手机,Pad 登录云端 做各种有意义或者无聊的事情…


让我们来看另一些概念,即 分组交换,存储转发,统计复用! 是的,这些就是我们的互联网的根基中的根基,IP协议可以改变,这三点性质不可撼动。

基于这些,我们能把互联网实现成什么样子?那肯定不是现在这个鸟样子。

去年的时候,做过一段时间Kafka,我对Kafka的设计理念是非常喜欢的。它真的是 集存储和转发为一身! 而我们知道,存储和转发分别代表数据库和网络,它们在某些方面是矛盾的:

  • 数据库: 存储数据,数据的终点,越持久化存储越好。
  • 网络: 转发数据,数据的经由路径,需要尽快离开,一方面为了尽快到达目的地,另一方面尽快离开可以出让资源。

但是Kafka巧妙地将二者融合在了一起,以数据存储,哈希,发布订阅实现了储存转发和统计复用以及负载均衡。具体可以参见我去年的总结:
初试kafka后的一点感性的想法: https://blog.csdn.net/dog250/article/details/79512708
Kafka设计思想的脉络整理: https://blog.csdn.net/dog250/article/details/79588437

TCP/IP网络也要吸取其中的一些精华了。

所以说不要总被TCP和NAT限制住。动不动就说TCP好,说NAT好的是需要看看新的东西了,拿新东西没有的和老旧东西拥有的比,任何新东西都会被扼杀:

  • IPv6地址太长根本记不住,推广不起来!
  • 没有NAT不安全,时刻可能被攻击!
  • QUIC性能太差,且不稳定,进程总是crash!
  • 可穿戴设备能耗问题太多!
  • 无人驾驶车必须保留驾驶位!
  • 电子墨水书不能折角,不便批注!
  • 我是明朝人,我宁可不留头也要留发!
  • 我是那个明朝人的后代,我是清朝人,我死也不会剪掉辫子,太难看了!

最后,如果觉得这一切都太难,那么好吧,IPv4继续留给人用来在NAT后发起TCP连接自嗨吧,我早就觉得,IPv4和IPv6将长时间共存,IPv4作为一个局域网继续留给人用,IPv6将构建真正的互联网!二者通过NAT64来接口,也挺好!


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

 类似资料: