打开浏览器,输入网址一敲回车,你想看的内容就呈现在了屏幕上。
小时候听大忽悠们说,银行的ATM机里面坐着一个人,取钱的时候他数好了把钱给你。按照这个逻辑,那肯定是有人刷刷刷不停的在画图然后给你贴到屏幕上,老范有点想不明白,你要说ATM里藏个人那还有点道理,我这笔记本这么小,人藏哪里了啊?
实际上,ATM机里没有人,笔记本里也没有藏什么猫腻。你输入网址后能够得到你想要的结果,其实是计算机网络中应用端发起请求,服务端返回请求的一个过程。
先上流程图的,大家心里有个大流程的概念,有的放矢。您看完流程图千万别退出,雅俗共赏雅俗共赏,俗的荤段子全在后边,读着荤段子学会计算机网络,您要是错过了我绝不放过你。
左图是传统的教学方法,如果您觉得不好理解,就对应看右边的图。
应用端是谁?服务端又是谁?字全认识,却越看越晦涩。但是理解了这六个字的含义,至关重要,对接下来的事情的理解会有事半功倍的效果,因为我们这里面所有的故事都离不开这六个字的关系,都离不开这两位‘端爷’的相爱与纠缠。现在带大家认识一下两位“端爷”。
首先,咱们说应用端。应用是他的名字,端是他官职。
什么是端?我们一年级数学都学过线段对吧,线段有两端,也就是两头儿。那么顾名思义,应用端就是应用这头儿的。什么是应用呢?我觉得这需要和人结合在一起了。网络本身就是服务于人的,通俗讲你在浏览器输入https://www.zhihu.com/,就是在应用计算机网络去找一些东西,就是使唤,使唤计算机去帮你找些东西。
所以应用端说的俗透了就是供你使唤的这一头儿的东西。使用计算机、使用互联网,从这一头儿开始。
举个例子:我坐在河间驴肉火烧铺里吃着驴火喝着酒,我叫伙计过来跟他说:帮我做一碗驴腰子汤。伙计说得嘞,2号雅间驴腰子汤一份儿!这里的伙计就是你使唤的这一头,就是应用端。
再说服务端,那自然就是服务的那一头儿了。是谁呢,是后厨的大厨。伙计话音未落,这便传到了大厨的耳朵里,大厨三下五除二,做了一碗腰子汤,还特意加了两片钱钱肉。
如果说伙计听完我说的要碗驴腰子汤之后,没理我。后面的大厨自然也就不知道这回事。所以伙计那句“得嘞,灶上听着,2号雅间驴腰子汤一份儿!”就是发出请求。
现在,伙计发出了请求,大厨听见了,如果他没做,不理这件事,那我还是得不到腰子汤补身体。得需要大厨听到后真做了一碗,然后交给伙计,端到我的面前,我才算完成了这次叫餐的事。这里大厨做了一碗腰子汤,请伙计交给我,叫返回请求内容。
总结一下,伙计就是应用端,大厨就是服务端,伙计喊的那一嗓子叫请求,大厨做好了让伙计把汤端给我叫返回。
理解了这个流程的概念了么?万事开头难,开头理解了,后边就好说了。
从输入https://www.zhihu.com/到返回结果,经历了如下过程,
我们还是以上面的驴火的故事去逐条翻译术语。
- 浏览器接收到你输入的https://www.zhihu.com/,然后解析这个地址,获取对应的IP地址。
需要指明的是,我这里讲的不涉及负载均衡。饭店里就一位伙计,一位厨子。是单体服务(初入门的可以先不理会这句话)。
什么意思呢,我叫伙计过来,刚想说来碗驴腰子汤。可是环顾了一下四周,我又把到嘴边的话咽回去了。邻桌坐的都是同事,有几个男同事蔫坏蔫坏的,而且还有几个女同事在场。我要是大声喊直接要腰子汤,他们回去还指不定怎么嘲笑我呢。肯定说我坏话,坏我名声,这也间接暴露了我身体被掏空的实际情况,那绝对不行。不然第二天连公司门口卖烧饼的阿姨都会为我投来怜悯的目光。
我想了一招,我不说我要驴腰子汤。我顿了顿气,用标准的普通话说:sir,麻烦你帮我叫一碗好喝的汤,谢谢。为了避免伙计蒙圈或者给我上错了,我塞给他一张纸条,纸条上写着
这样伙计一看就懂了。
【sir,麻烦你帮我叫一碗好喝的汤,谢谢】就是域名,他很规范,也容易读,还不容易被我那帮同事识破。伙计看了我的纸条之后,懂了这句话的含义,就是解析域名。那么实际这句话解析出来就是【伙计,让灶上给我做一碗驴腰汤,快点】,也就是实际的地址了。这时候伙计听懂了,哦,找厨师,要驴腰汤。
2. 浏览器根据解析的访问地址,向服务端请求建立TCP连接,即著名的“三次握手”。
伙计听明白了我的意思,知道了我是要找后边那位厨师,做碗驴腰汤。下一步他得告诉后厨师傅啊。这家店面呢,后厨和堂子隔了一堵墙,只留了一个小窗户用来传菜。伙计一回头,因为窗户小没看见厨子的身影,心想我得先问问厨子在不在,于是喊了一声:灶上听着!这是试探性问一下呢,因为万一厨子不在,前边不白喊了么,这一天累的口干舌燥,省点力气还得值夜班呢。
喊了一声,没动静。伙计又喊了一声,灶上在不?只听闷声传回来一句:在嘞。好,这下确定人在那里,伙计再喊一声,灶上听着,巴拉巴拉一堆说。这一步,是伙计和厨子“呼麦”,就像平常【在么党】用微信聊天时千年不变的开场白一样:在么?还在么?现在在么?听到回信他才开始奔主题。
三次握手,我们下一节再专门讲。
3.应用端通过https协议将请求内容发送给服务端
先不讲什么是https协议。
伙计通过刚才的在么三连问和大厨搭上话了,下面就得开始说正事了。于是伙计吊起嗓门叽哩哇啦说了一堆我听不懂的话。(这就是机器内部语言传输了)反正大厨听懂了,我猜他说的应该是,2号雅间驴腰子汤一份儿!
4.服务端根据请求的内容,调用对应的方法,进行具体的处理工作,然后将结果返回给请求端
这部就好理解了,大厨听到了伙计喊来的话,着手准备做驴腰汤。做好了之后放到小窗口的托盘上,告诉伙计说,你刚才要的驴腰汤做好了。
5.应用端通过接收到的服务端返回的内容,将结果绘制出来,返给用户。
这部就更好理解了,伙计把驴腰汤端上来,放到你面前,说,先生,您的汤好了,请慢用。
作为客户我表示认可,就是我要的那种,敦敦敦,一饮而尽。喝完腰不酸了腿不疼了,一口气上六楼不费劲。