108.互联网事(1)-历史和技术

以前我做过一期电台,第22期,名字叫互联网是谁发明的。那一期里,我讲了一些互联网的故事,没有涉及技术,都是一些八卦故事。接下来的几期,我想详细的说一说我知道的互联网的故事和一些技术。

因为工作的原因,我的工作是和路由器相关的,主要是给路由器写软件,主要的工作是实现路由器的一些协议,我工作的主要内容基本是就是《TCP/IP详解》那三本书里的第二本。当然这只是我工作中的一小部分内容,更多的工作是给领导倒茶,按摩,还有帮同事签收快递。

这一期,我稍微的回顾一下历史。如果大家喜欢看科技的历史,尤其是互联网的历史,可能会看到这样描述互联网的起源。是说冷战时期,由于要应对共产主义的威胁,尤其是苏联的威胁,美国需要一个可靠的系统,能够应付在核打击以后还能有效的指挥军队,然后,就产生了一个军方主导的系统,这个就是阿帕网,也就是互联网的前身。这个事吧,都是后人胡绉的,不对也不错,在第22期里,我曾经提到过一个人,叫查尔斯·赫兹菲尔德,他是当时阿帕网这个项目的主任,他在书里写到,当时肯定没打算搞防核打击的这个网络,因为当时美国只有为数不多的计算机,而且是分散在美国各地,当时很多科研人员没法使用这些计算机,这想搞个事情,让这些计算机互相之间能被使用,而不是一说用计算机,就得出差…

这是两个版本的故事,一个流传非常非常的广泛,几乎分布在任何网络书的前言里,防止核弹打击这是一个非常非常吸引眼球的话题。另一个故事的版本就没什么吸引力了,就是一群科研人员不想出差,想可以远程使用计算机。我只是说一下这两个故事,你可以随便相信一个就好,或者两个都不相信。我个人认为,抗击核打击的那个说法不是很靠谱,因为这个网出来以后,别说核打击了,就是打个雷,或者连雷都甭打,自己就挂了,在70年代,节点的可靠性极差,就和去年的三星手机一样,用着用着自己就炸了…

而且,当时的阿帕网所采用的技术和今天使用的技术一毛钱关系也没有,当时的阿帕网用的技术是NCP技术,这个技术是面向连接的,NCP只能是主机到主机的连接,没法组成大网络,而且,这个NCP没有纠错的机制,传输中只要是有一点错误,马上撂挑子不干了,非常的非常的脆弱。我们今天所使用的IP网,是面向无连接的,和NCP截然相反。这个TCP/IP的思想,更多的是借鉴欧洲,确切的说是法国的cyclades网络,这个名字很有暗示的意味,这个是个地名,是爱琴海上的一个群岛的名字,可以连在一起。

开发这个cyclades网络是人是个法国人,他的名字叫普赞,这个人是个年少成名的大天才,具体的生平我就不说了,一个大发明家,本科的时候设计的东西就被国际公司买去使用。我本科时候,除了游戏,几乎不会任何东西。他本科时候就已经开始卖专利给大公司了。然后没毕业,就赚到了一辈子花不完的钱。他就带着钱,带着爹妈移民美国了,顺便去MIT读了个博士。然后他发现了阿帕网,如果是普通人,可能会觉得太神奇了,他刚开始也这么觉得,但是,很快,他就有了一个大胆的想法,他觉得他可以改进这个网络,然后,他就真的改进了。

后来的事情我就省略了,他的项目进展顺利,直接挤兑了美国的阿帕网,可惜,一直支持这个项目的法国总统乔治-让-蓬皮杜去世了,他去世以后,这个项目竟然给取消了。有一本书专门讲这个事,我不说了,和本文关系不大,然后,你法国脑子有病取消了这个项目,但是,这个面向无连接的技术已经被证明是可行的,也是可靠的,美国的科学家就学去了,然后TCP/IP技术就诞生在美国了,本来是有可能诞生在法国的。在1973年,普赞就在巴黎和法国的一个城市建了一个和美国不同的网络,性能和可靠性比美国的阿帕网要好,这个事情就被普赞的美国好友知道了,基于普赞CYCLADES网络的理念,卡尔夫和卡恩在美国,建立起了如今互联网所普遍使用的TCP/IP协议。

当然了,大家还是非常认可普赞的工作的,比如这个普赞也是被称为互联网之父的,英国女王还给了他100万英镑的奖金呢,就是奖励他这个工作。

我这样讲其实也有问题了,让人感觉阿帕网非常的不靠谱,其实,这不是我的本意,我一直以来,认为一个技术能突出重围,并不是靠这个技术多么优秀,更多的是不知道什么原因,可能是偶然性更多一些。TCP/IP技术也不是说多么的先进,在当时,也有和TCP/IP竞争的技术,并不比TCP/IP差。在TCP/IP诞生后的最初10年里,并没有人敢断言这个技术会在未来占据统治地位。因为当时在阿帕网上,大家觉得NCP这个东西不怎么好,反正随便试试,其中的TCP/IP只是随便试试的技术之一,一直到1985年的时候,TCP/IP才随着Unix的流行而爆发,前10年,不温不火,也没有什么特别的功能是其它技术完不成的。

所以,随着年龄的增长,我已经不认为有什么历史的必然。其实,我现在越来越觉得,无论人也好,历史也好,技术也好,偶然的因素,没法解释的因素才是起决定作用的,后来找的原因,都是马后炮。比如说,在地球上,有这样一种动物,按生物学的分类是人科,人族,人属,智人。这种动物在交配的时候,雄性每次能搞出3亿个精子,但是,绝大部分的智人,只能生一个后代,3亿个,只有一个存活下来。这是历史的必然还是历史的偶然呢?我认为是100%的偶然。你总不能说这3亿个兄弟姐妹,就你最厉害吧!说不定人家是让着你呢… 历史上的灭国战,也不是必然的,大部分仍是偶然因素。比如宋朝的老赵带着军队打北汉,城墙都被水冲开了,眼看就胜利了,结果好死不死,大水冲过来一大堆草,不偏不倚,就堵在这个缺口上,到手的胜利没了,这完全是偶然因素,如果没有这堆草,北汉当天就挂了。还有朱棣,就要死了,结果来了一阵大风,把对方的帅旗给吹断了,结果最后当皇帝了…后来我还看到有人说那叫风切变,用科学的理论一本正经的胡扯为什么朱棣当了皇帝… 还有就是,谁能预料到西安事变的发生?这种事情谁能预测?这玩意就是用大数据,超大数据,也没法预测张作霖,也算是一代枭雄,生了这么个浓包儿子…他的兵最多,装备最好,比日本好5倍,但是失地最广,东三省1秒钟就丢了,战绩最差,罪恶最深… 前无古人,后无来者。

同样,讲到技术,也是这样,为啥TCP/IP技术胜出了呢?我只能说,不知道啥原因,可能是历史的偶然吧。当时,和TCP/IP技术能完成同样功能的有不少技术,比如X.25这个技术,当时TCP/IP能做的,他也能做。只是后来TCP/IP这个技术越来越厉害了,才让X.25协议边缘化了。现在X.25这个协议也在进化,但是,比起TCP/IP来,已经几乎没有存在感了,比如现在的帧中继就是X.25的进化版,就是带有差错自动修正功能的X.25。还有一个变体是AX.25,这个被广泛的应用在业余无线电中,现在也有一些人建议可以用TCP/IP来取代AX.25,真是应了那句话,“凡有的,还要加倍给他叫他多余;没有的,连他所有的也要夺过来。”现在X.25越来越被边缘化了…

因为TCP/IP协议对普通大众来说太难了,即使是计算机毕业的,也不会有机会接触到,除非你和我一样,找不到好工作,来个做路由器的公司,天天和TCP/IP打交道。以我的经验来看,做网络开发是最没有变通的开发之一,脑袋比较轴的人可以来开发路由器,因为网络协议是定好的,有严格的标准,比如说,IP数据包最大就是64K字节,无论多么天才的项目经理,这个标准是死的,不可能像互联网公司的项目经理一样,有太多的发挥空间。比如用IP Over ATM的技术,每个ATM的Cell固定是53个字节,其中报头是5个字节,这都是标准,不能改变的,如果你是项目经理,想改动一下,那就没法工作了。所以,在开发路由器这个行业,也有项目经理,但是,完全不用像游戏行业,互联网行业的项目经理那么有创意。开发路由器相对比较死板。

因为TCP和IP远离了大众,所以,我只会在这一期里提一下这个技术。以后,我只打算说一下HTTP,这个技术是每个上网的人每天都能用到的技术。知道了HTTP,就能够知道自己为什么能上网,或者为什么不能上网了。HTTP也是每个和网站开发相关的人必须了解的。

如果用一句话来解释TCP/IP的作用,其实也很简单,这是我好多年来体会出来的一句话。IP是用来解决数据包传不远的问题,TCP是用来解决数据包送不到的问题。这个大概就是我至今为止所有的领悟。路由器开发,所有的方案,其实都是解决的一个问题,这个问题很痛苦,就是“出了问题怎么办?”

如果数据包是一包黄金的话,如果你想送到远方,这个问题怎么办?当然是包住,然后写上地址,这个写地址的解决方案,就是IP。那这包黄金送到出去安全么?出了问题怎么办?这要镖局来压镖,这个解决方案就是TCP协议。当镖局压着这包黄金去远方的时候,是不可能认识所有路的。比如让你去2000公里的某地,只能打听,或者用GPS来导航。

不认路怎么办?问呐!就问每个经过的路由器,我该怎走。比如你从北京送到海南,你只能先问去河北怎么走,到了河北再问到山东怎么走,你不太可能一出家门,在北京就问路口的大妈,海南怎么走。只能一站一站问下去。解决这个怎么走路的问题,就是各种OSPF,ISIS协议的问题…

还有一种情况是,比如说,你要去的地方,比如海南吧,你在燕国,这个燕国和海南有仇,燕国的国君就下令,只要是有人去海南,格杀勿论。所以,所有去海南的,去Facebook的,去Google的数据包,在半路就被捅死了…能怎么办呢?有两个办法,一个是坐私人飞机,直接去海南,中间在天上,地上的人没法查,加密的,这种方法叫VPN,有钱人爱坐私人飞机。另一种方法是说谎,在湖北,你正好有个兄弟,燕国正好管不到湖北,沿途有人问你去哪里,你不说去海南,你说去湖北,那数据包就放行了。到了湖北,反正你有兄弟在那里,想干啥也行了,当然从湖北再去海南也是可以的,这个方法叫代理。

好了,关于TCP/IP,就只能讲这些,我至今所学,也不过是这三句。前两句是IP是用来解决数据包传不远的问题,TCP是用来解决数据包送不到的问题。第三句是:出了问题怎么办?

下面几期,讲HTTP以及HTTPS,大概就是这样吧。

刘延栋 wechat
欢迎扫一下关注我的公众号:软件那些事儿
欢迎收听我的电台,你的支持将鼓励我继续前进