首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HTTP协议自述

背景介绍

但凡世界上牛逼的人物,都会有一个非常离奇的经历。比如说乞丐出身的皇帝朱元璋,出生时家中红光大作,映红了半边天;再比如说无良皇帝刘邦,简直不要太牛逼,说自己是老妈和一条白龙交合生出的自己,而老爹是目击证人(笑哭)。

而我,作为网络世界的扛把子,自然也不能在经历上矮人一头。

我,就是大名鼎鼎的HTTP,我的老爹是CERN(欧洲核子研究组织)的蒂姆 • 伯纳斯 - 李(Tim BernersLee)博士,而我被制造出来的直接原因就是为了方便世界各地的学者交流信息

话说在我诞生的时候,天空中电闪雷鸣,狂风大作……,我一出生,就是身高百尺,手摘星辰。

不过你要是想知道我到底有多厉害,那我就得介绍一下我们这个世界的背景以及实力等级的划分了。

我所在的世界,叫做网络星球。我的家族,是这个世界上数一数二的家族:TCP/IP协议族。以后你就会了解到TCP/IP协议族到底是多么无敌的存在。

我的家族是上古修炼家族,传承源远流长。共有四大分部:应用层,传输层,网络层,数据链路层,而我,就是应用层中最年轻的长老,也是我的家族中数一数二的存在。又要回到我的背景介绍上了,在这个世界,修炼者的等级分为100级,而我在出生的时候,就是45级,可以说是前无古人,后无来者,不行,让我先飘一会。

几十年过去了,我也已经80级了,我越来越成熟,也越来越强大,现在啊已经成为了这个世界上的中流砥柱。

为了吸引更多的优秀人才来到我的家族,我想向大家详细的介绍一下我家族的情况。

四大分部,各司其职

像我们这么大的一个家族,想要保证整个家族的正常运转,就需要让每个人各司其职,高速流通。为了让人才的能力得到最大程度的发挥,当年家族最具前瞻性的族老,将家族分成了四个部分,就是上面说的:应用层,传输层,网络层,数据链路层。

我们的世界,一直和人类的世界有着频繁的交流。不但如此,为了历练我们家族中的成员,总会接受人类世界的发布的任务,赚取我们世界上的货币-----流量来维系家族成长。所以,这些发布任务的人类,被我们称作用户。

下面我就来介绍一下各司其职的四大分部,在家族中的作用。

传输层:

传输层是和我们关系最近的一层,这一层的作用是用来在两台机器之间进行数据传输的。事情是这样的,因为用户网络状况等的一些原因,是无法保证传输的可靠性,也就是说,传输的数据可能会在传输的过程中出现错误。导致数据到达另一台机器的时候不是用户想要的内容。这时,就会发现,我家族中的这个部门是举足轻重的。

传输层的一大功能就是提供了可靠的数据传输,这也是使得我的家族在网络世界上的地位越来越高的另外一个原因。

在这一层,最具有代表性的人物是TCP和UDP这俩货,他们俩其实是一对双胞胎,和我是死党。虽然他们俩看起来差不多,提供的功能又都是可靠的数据传输。但是这俩货的思路可不是那么的一样,以后如果有机会,我会好好的给大家介绍一下这对兄弟的。不过,在后面的说明中,我还是会简单介绍一下这个TCP的。

总的来讲,为了实现可靠的数据传输,TCP和UDP都会将我(HTTP)封装的请求数据和响应数据切割后打包,再进行传输。他们的打包方式简单粗暴,他们将数据切割成一小段一小段的,然后再加上自己的内容,也就是给这些小段的数据加上标号,到达另一台计算机的时候,再用这个标号的顺序把我的数据重新给原回去。看得我是一阵心疼,好不容易打包好的数据,万一让他们给弄丢了,我岂不是还得重新打包?可惜目前他们这两个传输专家也没有什么好的办法。

网络层:

在我的世界中,网络线路四通八达,主机的数量也是非常多,看的我胆战心惊。我总在想,网络层究竟是如何将这些数据准确的送到目的机器的呢?

直到有一次我问了问IP小兄弟,我才弄明白,原来,IP小兄弟的任务就是将数据准确的送到目的主机。(这里的是IP协议,而非ip地址)

IP小兄弟会给每一个数据包划分一个传输线路,开始发送后,一边寻找下一个规划线路中的节点,一边向节点转发,最终到达目的地。

数据链路层:

数据链路层的一帮家伙都是硬梆梆的,他们都是实体的。也就是人类说的网络相关硬件,什么网线啊,什么交换机了,什么服务器主机等等,反正是处理网络的硬件部分都属于数据链路层。

不过,我不太喜欢和这帮家伙打交道,脾气又臭又硬。

好了,讲到这里,我最后补充一下整个网络传输过程:

我(HTTP)的作用是将用户请求数据和服务器相应数据封装,加上自己的头信息,也就是做个标记。我将数据封装完后,交给传输层中的我的死党TCP或者UDP,他们两个会将我的数据切割,然后加上标志,开始传输。传输的过程交给的是网络层,IP小兄弟会规划传输路线,一边寻找节点一边向节点转发,最后到达目的地,再由链路层中的硬件接收;硬件接收后,再由TCP或者UDP还原数据包,最后再交给我,去掉我的头信息,还原回真正的请求数据。同样的,当请求被服务器识别之后,会将响应数据交给我HTTP,以同样的路径返回客户端。注意,发送时,每次经过一个层次,就会封装一次数据,而接收数据的时候恰恰相反,是一层层的去封装。

代表人物简介

下面,让我来用比较简洁的语言介绍一下这几个代表人物(TCP,IP,DNS),(不会太过于深入,毕竟这只是入门的文章,以后的文章会写的更加深入)

TCP:看看是不是发对了

前面说过,我的死党TCP这个家伙,会将我封装的大块数据分割成一个个小的数据段,这个小的数据段还被这货起了名字:报文段,每个报文段会有一个唯一标识,而最终在接收的时候,TCP也是通过这个唯一标识来判断是否有数据丢失,如果有数据丢失,这货会重新发送一遍的(客户端或者服务端),这让我们很不爽,因为貌似效率低了些(实际上还不错),但是也没有办法。

我的死党TCP有一独门绝技,名曰TCP的三次握手。

第一次握手(发送端-->接收端):发送端的TCP发送带有SYN标志的数据包。

第二次握手(接收端-->发送端):如果握手成功(收到第一次握手时候的数据),接收端发送带有SYN/ACK的标志数据包表示已经收到,就是确认信息。

第三次握手(发送端--->接收端):发送端发送带有ACK的数据包,表示握手结束,确认数据已经成功到达,完成握手。

如果其中有某次握手意外结束,则会重新发送丢失的数据包。

其实上面TCP的绝技三次握手的作用,就是确定报文段是否成功被接收端接收了。这就是TCP的独门秘诀。

IP:看看数据包应该去哪

(刚才我在备注中已经说明,这个IP指的是网络层的IP协议,并非是IP地址,这一点要注意。)IP小兄弟的任务就是给报文段规划一个正确的路线,然后一边中转一边发送。

对了,IP小兄弟高速我,他的能力完全是因为MAC地址,他向我解释说,每一台硬件的MAC地址是唯一的,在这个世界上找不到两个相同的MAC地址,所以,它能够准确的找到中转的位置。

他还说了一个有意思的事情,就是在传输的过程中,上一台主机只知道下一台主机在哪,而不知到其他的路线中的主机在哪,这就是传说中的“没有人能够全面掌握互联网中的传输状况”的由来。

DNS:别装了,我知道你是谁

当你看见一个网站的时候,你不借助工具,你是不知道这个网站的ip的。比如说我的博客(http://roobtyan.con),光看这个网址,你肯定不知道ip地址。但是,计算机的能力是处理数字,它是不会识别文字的,即便可以识别,那也是因为有字码表的存在。

为了方便各个层次的功能开展,我们应用层的大家庭中,就有了这个DNS,他的作用是将域名解析成ip地址。

只要资源在互联网上,都能被DNS解析到,所以,DNS经常说的一句话就是:“别装了,我知道你是谁。”。

对了,DNS服务在你向浏览器中输入域名,然后回车后就启动了,这时返回给浏览器的就是IP地址。

嗯,说了这么多,好像完全忽视了我的存在,其实我也很不爽,没办法,无良作者非要介绍完整个的大背景。好吧,若你想知道我为何能成为TCP/IP协议族的扛把子,那么就请看下一期的“我是传奇之HTTP”了!

欢迎关注我的专栏呦!

结语

感谢您的阅读,欢迎指正博客中存在的问题,也可以跟我联系,一起进步,一起交流!

这里写图片描述

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180429G0VIE000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券