漫谈TCP/IP网络技术

总有人问我如何精通网络技术,我也不好回答。但还是可以说几句。

我认为协议是最重要的,要多花点精力关注和思考协议,而不是具体的实现。

说起TCP,总有人觉得它太复杂,这个我有同感,可是当进一步聊起TCP的复杂之处时,更多的人都会聚焦到 TCP的代码太难看懂 可是难道TCP的RFC规范就简单吗?

这得从电话网和分时系统说起。

分时系统是约翰麦卡锡首先引入的,这仍然是一种横向变纵向的操作,就类似于我曾经预处理iptables规则那样,也和nf-HiPAC,Nginx这种相类似。可是这么简单的事情,大多数人就是想不到。批处理系统的操作习惯带来的思维定势太过强大。

分时引入计算机操作系统之后,多用户就可以共享计算机了,好像他们独占系统一样,这是一种全新的体验,完全不同于之前的批处理系统。

然而那时候网络依然是电路交换网络。如果用户要联网,那么就需要为登录系统的每一个用户维护一条连接,类似一路电话那样。

既然计算机资源都可以分时供给给多用户了,网络为什么不能呢?把一路电话看成一个批处理任务,将这些任务拆分成微小的部分,每一个小部分分时占用网络资源,看起来分组交换只是一个自然而然的结果而已,可是若要落地,电路交换网络带来的阻力却非常大,无论是思维模式上还是经济利益上,这就是传统的力量。

…(统计复用,存储转发的分组交换网我之前写过,这里不赘述其历程,日光之下,并无新事)
https://blog.csdn.net/dog250/article/details/115258918
https://blog.csdn.net/dog250/article/details/115262224

不管怎么说,分组交换网还是成功了。

起初,包括科学家在内的人们都认为互联网仅仅是用线缆把计算机连在一起,然而事实证明这种认知是肤浅的。

  • 既然分组交换将整个信息分成了小块,那么接收端必然要重组。
  • 如果中间转发节点缓存满了,重组信息就永远不会到达终点。
  • 终点等不到残包,中间节点无法释放缓存,死锁。

这还不简单?TCP不就是干这个的吗?可是要知道,那时并没有TCP啊!包括TCP在内的所有网络协议均是经过反复推敲来解决这类问题的。

把可靠性保证从网络移到主机,这是一个创举,这是端到端原则的先行。与此同时,如何把遍地开花的多种网络互联在一起是另一个棘手的问题。

针对以上两个问题,TCP和IP协议诞生了:

  • TCP主导端到端问题,应对缓存满了和重组问题。
  • IP主导不同网络的互联问题。

在协议设计之初有很多问题并不是后来人们事后分析的那样一蹴而就,人们在当时真的不知道该怎么办,人们并不知道后来的TCP协议,很多切实的需要解决的问题,TCP/IP更多的体现为一种自下而上的分析过程的产物,而不是一个设计出来的东西。

把数据从一台计算机送到另一台计算机,在起初没有TCP/IP的时候,并不是那么简单,很多问题需要考虑并解决,正是这些考虑催生了TCP/IP协议族。

这几乎就是互联网核心演化的三个部分的之一了,真的,没有别的,就这些!那么之二呢?

之二就是HTML和HTTP。

二战以后开启了信息爆炸的时代,单个人已经对掌握所有知识无能为力,人们不在奢望在一家图书馆解决所有问题,那么单个人如何应对大量的信息,如何组织它们,如何保存它们?

在TCP/IP伊始,FTP是一个最重要的协议,人们若要看什么文件,必须用FTP下载到本地来浏览,然而HTTP超文本传输协议解决了这个问题。HTML就是HTTP传输的内容。

整个互联网变成了一个共享的信息库,HTTP来来往往,HTML在其中穿梭,底层是TCP/IP。

接下来是安全和隐私。这就是第三部分,也就是最后的部分了。

我觉得非对称加密技术是个创举,单向数学函数牛逼逼,这个绝对是一个现代互联网安全的根基,再怎么强调都不为过。

我来排序:

  1. TCP/IP
  2. HTTP/HTML
  3. RSA

除了这三个,没别的了,真的没别的了。

很多人跟我提起DPDK,XDP,SmartNIC,我不是不在乎这些,我是觉得这些东西和网络无关啊,这些都是一些具体的实现方案。我见过很多这些技术玩的很溜的,但是却对网络协议不太理解的。

很多人跟我聊TCP长传优化时说到了spinlock优化,我不敢苟同。这些单机性能优化领域的事情在长RTT传输面前不值得一提。

假设一个数据包单机处理延时是10ms,我把它优化到0.1ms,牛逼逼吧,然而如果我能通过精准的重传预测,减少一个100ms RTT时间的传输,是不是可以交换几万个单机收益?

所以我不乐于卷入单机性能优化领域,如何优化网络传输,如何精准预测网络行为,才是有意思的,简单点说,那就是,能不发包就不发包,你要能精准判断某个数据是不需要发送的,如果非要发,你要有能力确定一个精准的发送时间。

网络是什么?首先网络是一个需要数据包快速离开的地方,其次才是它实现了什么功能。

有很多更有意义的事情需要我们来考虑:

  • 按照TCP这么传输合理吗?
  • 给UDP加一个可靠层有意义吗?
  • TCP和UDP之间有第三条路吗?视频音频并不需要完全可靠。
  • 松散按序协议有意义吗?
  • 如果每个人都可以自己实现cc,公平性如何保证?
  • 安全问题只能叠加而不能内置吗?

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

Guess you like

Origin blog.csdn.net/dog250/article/details/118244454