计算机与原始人砸核桃用的石头是不是一样的?

计算机与类人猿用来敲坚果的石头是不是一样的?当然不一样,两者有本质的差别,如果从其它的维度去讲,我们可以说它们是一样的,因为它们都是人类在进化过程中使用的工具。我们不讨论计算机它是什么操作系统,用的什么CPU,CPU的制程是14nm还是7nm,还是3nm还是5nm。我们讨论一个问题,计算机是不是工具?

计算机当然是工具,它是为了解决问题而发明的,就像原始人用石头一样,为了解决问题发明的。那么好了,既然是为了解决问题而发明的,那么解决问题的工具,就不应该比问题还复杂。这么讲很多人可能不同意,我们这里不讨论哲学问题。要解决问题我们当然是要一种简单好用的工具来解决问题,而不是去解决提出问题的人。好了,这里我们不讨论政治。

既然是工具,我们只在工具这个维度讨论问题。工具嘛,简单好用是他的核心。这就引申出了“又不知道哪,听说的一个”面试题,为什么“http协议需要三次握手?”,“为什么需要三次握手,而不是四次、五次、或两次?”。首先我们要肯定一下面试官,他肯定是研究网络通信、网络协议的这块的,看过什么ACK,SYN之类的专业术语。这种学术研究的思维还是值得认可。但淡蛋蛋蛋是,他跑偏了。

我们先来研究一下,网络通信、协议呀,之类的它们是为了解决什么问题?它是为了解决什么问题而发明的,很明显通信嘛,就是通信嘛,对不对?既然是通信那么好,我们推演一下最简单的场景,接下来可能比较像剧本:

client:你好,我是苏小和?你收到了吗?          //synchronize (SYN) 

Server:你好,我是小苏和,我收到你发的消息?你收到我发的消息了吗?//synchronize (SYN) 、acknowledge (ACK) 

client:收到了,那我请你出去玩呀,明天25:78怎么样呀?我发送了9个字,你收的时候验证一下。//其实这个时候通信已经建立起来了

balabalabala......

如果这个时候我们非要来四次握手或五次握手,我们来看看发生了什么:

client:你好,我是苏小和?你收到了吗?          //synchronize (SYN) 

Server:你好,我是小苏和,我收到你发的消息,你收到我发的消息了吗?//synchronize (SYN) 、acknowledge (ACK) 

client:收到了,你收到了我收到了你信息的信息了吗?

Server:我收到了你收到了我收到了你信息的信息了。你收到了我收到了你收到了我收到了你信息的信息了吗?

client:你有病吗?

server:你才有病?                                      //synchronize (SYN) 、acknowledge (ACK) 

.....................

大家看懂四次握手、五次握手和三次握手的区别了吗?当然您愿意这么握也没人拦着,只要有人愿意和你握就行。

我们再推演两次握手:

client:你好,我是苏小和?你收到了吗?

server:哦

client:你好,我是苏小和?你收到了吗?

server:哦

client:哦个屁呀,你收到了吗?

server:你有病吗?

client:你才有病?//synchronize (SYN) 、acknowledge (ACK) 

......

大家看懂了吗?至于什么请求头、请求体呀,编码呀,验证呀,都是在简单、高效、安全的原则上合理衍生出来的规则。如果我们不是专门从事网络相关工作的人员,我觉的了解到这个层面就够了。等到用的时候再去找资料、再去看就可以了。如果我们有机会去当面是官,不要问“为什么不是四次握手和五次握手?”这样的问题。这就同孔乙己的“茴香豆的茴有几个写法?”是一样的。

 

你可能感兴趣的:(http)