从浏览网页开始谈起:网络协议简介
时间:2023-07-18 19:36:01 | 来源:网站运营
时间:2023-07-18 19:36:01 来源:网站运营
从浏览网页开始谈起:网络协议简介:
浏览一个网页的背后
- 信息时代的人们对于网络已经习以为常。每个人每天会浏览上千个网页,接受大量的信息流(有些时候甚至会让信息流烧坏脑袋),并将此作为一天中最重要的休闲方式。
- 我的一位授课导师曾经说过:没有人会对一个他们不了解的东西完全放心。然而我们不难发现,这个时代的普通人们对自己不了解的东西是如此的投入——至少在网上冲浪的时候是这样。
- 我们有没有曾经想过,在你点击浏览某个网页的时候,到底发生了些什么,让那些大大小小的文字和图片呈现在你使用的终端上呢?浏览一个网页的背后,到底都发生了什么?
- 我们用一个例子来解释:假如你去图书馆看书,那么保证你能看到这本书的是什么呢?
首先我们需要有文字——毋庸置疑的是,没有文字的地方也不会有图书馆这种东西;没有文字的地方也无法高效而准确的传递信息。在我们浏览网页的背后,这个相似的概念就是计算机语言,它保证了所有的信息能够被机器所存储,所理解,所传递。
你会需要一个认识文字的大脑,它能够正确的将书本上的文字转化成我们更熟悉的图像和影音,让我们理解这本书在说些什么——这就是我们的手机,甚至是手机上的浏览器在我们浏览网页的过程中发挥的作用。它把从远处传来的计算机语言解读成人类可辨识的内容,而不是通过一大堆0110的二进制字符串来困扰我们。
最后,我们需要一个书架,或者一个图书馆,来存储这些知识,保证在我们需要的时候可以获得这些知识。在浏览网页上,我们把这种存储信息的地方叫做服务器,因为它总是向各种各样的客户端(我们的手机或者电脑就是客户端)提供信息服务。 - 以上只是一个非常粗略的例子,很多细节都被掩盖了。比如说服务器如何和客户端实现通信——就好比我们怎么样才能携带着这一颗充满智慧的大脑去图书馆;服务器的各种不同种类——图书馆也分为社区图书馆,大学图书馆,国家图书馆等等。但是服务器和客户端,永远是这个过程中不会缺少的两个角色。
web server是什么
- 就如我们刚刚说的,服务器种类繁多。根据服务器的功能,我们将服务器分为游戏服务器,文件服务器,网页服务器,邮件服务器等等。而web server,就是我们中文所说的网页服务器。
- web server(网页服务器)会根据客户端发来的http的请求,或返回一个错误码,或返回一个网页,作为这个请求的响应。
- 还是用图书馆的例子而言,假如我们希望找到一本书,那么我们或许会到一个图书馆去,对那里的工作人员说:“我希望能够借阅《白鹿原》”,然后工作人员会确认这个图书馆有没有这本书,并依据确认的结果给你一个回复。
- 同样的,在网络世界里,我们会先找到一个网络地址,譬如www.baidu.com,然后向它发出一个请求:“我正在寻找2008年奥运会的金牌榜”,服务器接收到你这个请求后,会查看自己所存储的信息里有没有与此相关的,如果没有的话,它会返回一个错误的状态码,比如我们经常看到的404,如果有的话,它就会返回一个相应的结果。
- 对于web server来说,这个相应的结果就会是一个静态或者动态的网页。在这里,静态的网页指的是一个根据计算机语言产生的,一个一直存储起来的网页。无论是谁用什么方式访问,都会返回一个一模一样的网页。而用金牌榜的例子来解释动态的网页的话,就好比服务器里只存储了各个国家在历届奥运会中获取金牌的情况,为了向请求提供一个理想的答案,服务器先将2008年的结果组合起来,再返回给你。假若下次你查询的是2012年的金牌榜,静态网页可能只能给你一个错误码,因为它只存储了2008年的金牌榜。但是动态网页就会将2012的金牌榜组合起来,返回给你。
网络模型:初窥http协议
- 我们刚刚提到了,web server会响应客户端发来的http请求,那么什么是http?
- 为了解释http的概念,我们需要分为两个方面来解释:一是协议是什么。二是网络模型是什么。
- 仍然用图书馆的例子来演示:图书馆里存在一种“社交协议”。我们去询问工作人员一本特定的图书时我们应该使用的方式和提供的信息,以及工作人员回复我们的时候,他们应该使用的方式和提供的信息。
为了礼貌起见,我首先要表明身份和来意,并带上礼貌用语。
“您好,我是bearInTheRoad,想向您咨询一下贵馆有没有《白鹿原》这本书,如果有的话能否告诉我储藏在哪个书架上呢?”
工作人员收到了我的问题,然后理解了我在寻找《白鹿原》这本书的意图,于是礼貌的回复我。
“您可以去C区125书架查找,那里应该还剩下一本。”
假如我不遵循这种固有的社交协议,不说明自己是谁,或者粗鲁的询问工作人员,“白鹿原在哪里你这个马鹿?”,大概率下工作人员会回复我,”我才不告诉你这个碧池。“
这就是不遵循社交协议的后果。 - 在网络世界也是一样。客户端在向服务端请求资源的时候,要说明自己的身份,自己所需要的资源,自己能够解析的格式等等信息。服务端也会遵循这个协议,通过某种商定好的方式去提供这些结果。
我们把这个约定好的请求方式叫做协议。 - 那么什么叫做模型呢?在图书馆中,我们在前台询问的这名工作人员或许并不知道某本具体的书的情况,他必须通过对讲机联系某个库管员,而那个库管员则需要联系现在正在某个区域值班的巡视员,以确定某本书是否在某个位置仍有藏书。这种前台——>库管员——>巡视员的传递,我们可以叫它”图书馆询问模型“。因为任何一个对于书籍位置的咨询都必须经过这样的流程,这是一个固定的模型。
- 网络模型也是一样。客户端和服务端在通讯的过程中,有一套固有的流程,有几个和前台、库管员、巡视员类似的成员。所有的请求和响应都必须遵循这个模型来进行。
在网络模型中,我们不再称呼他们为库管员或者巡视员。我们将它们称为:应用层,传输层,网络层,链路层和物理层。 - 我们不详细解释各层的作用和它们各自的组成协议,只需要知道应用层就是”图书馆询问模型“的前台,是我们最经常使用的网页浏览器所处在的位置。应用层强调的是多个端系统之间的信息交换(好比客户端和服务端的通讯)。而http协议,就是应用层中和网页关系最紧密的那个协议。也就是说,网页浏览器必须用这种方式去和服务器交换信息。
(图片来源:
https://cn.bing.com/th?id=OIP.utYJ0KuUnavnfLPz4HHuOgHaEi&pid=Api&rs=1)
关于http协议
- 作为应用层中网页通讯的重要协议,http协议是我们最经常打交道的一种。它的全称是hyper text transmission protocol,中文是超文本传输协议。
- 相对于更下层的协议来说,http协议的规则是那么的简单,开发和部署也是那么的容易,这主要体现在以下几个方面。
- 简单:http协议规定通讯是由header和body两个部分组成。header一定要有,body可有可无。header和body都是用文本格式,明文传输的。即使你完全不懂计算机知识,也大概能看出一点端倪来。
- 灵活易拓展:http协议中很多东西都不是必备的,属于你可以加上也可以不加上,只需要服务端和客户端达成一直就可以。这使得这个协议可以变得很复杂,也可以保持非常简单。
- 无状态:无状态的意思是,http协议下的通讯,是不会做任何记忆的。通讯之间相互独立,互不关联。好比你一分钟前发起请求,自报家门之后提出要什么资源,一分钟后你再次联系服务端,仍然需要自报家门然后重新提出资源请求。更简单的理解,就是你每次询问图书馆的前台任何信息,都需要走一遍完整的”社交协议“,即使你们一秒钟之前刚刚对话过。
埋藏在http下面的TCP/IP协议簇
- 我们刚刚说到了http协议发生在应用层,也是我们接触的最多的一层。但是就如我们的图书馆例子中说的一样,一个请求不会只停留在前台这里。必然是要经历后面的库管员和巡视员的步骤的,网络请求也不会在应用层戛然而止,必然是需要继续去访问更深层的。
- 应用层的下一层是传输层,也就是我们说的TCP协议簇发生的地方。TCP协议簇是一种面向连接的,可靠的,基于字节流的通信协议。TCP协议最核心的部分就在它的可靠性上。这也就涉及到了人们经常说的三次握手和四次挥手。
- 什么是三次握手呢?客户端和服务端建立一个通讯的时候,为了保证双方的接受和发送能力都正常,先要进行相关确认,通俗的说法如下:
客户端:”你听得到我说话吗?“
服务端:”我听得到你说话,你听得到我说话吗?“
客户端:”我听得到你说话。“ - 什么是四次握手呢?客户端和服务端结束一个链接的时候,需要双方都确认结束了,都发送完了自己需要发送的信息。通俗的说法如下:
客户端:”我这边已经说完了,准备结束通话了。“
服务端:”好的,我知道你准备结束了。你等我说完。“
服务端:”我这边也说完了,准备结束通话了。“
客户端:”好的,我知道了。“ - 通过三次握手和四次挥手,TCP保证了客户端和服务端的通讯连接始终都是稳定可靠的,不会因为某一方的问题出现数据丢失。
- 传输层的下层是网络层,这里是IP协议的主战场。
- TCP这边的相关信息,会传输到网络层来由IP协议处理。如何处理呢?IP层主要做两个工作:一个是寻址,一个是把信息分割成数据包,再将数据包重组起来。
- 所谓的寻址,可以用人们寄快递来比喻。我们在寄快递的时候,首先把需要寄的物品放在快递包里面,这个是应用层的工作。然后我们打电话叫顺丰快递上门,以确保这个快递寄送的可靠和安全性,这个是传输层的功能。顺丰小哥上门之后呢,就会要我们填写我们自己的姓名地址和收件人的姓名地址,以保证这个快递可以准确的送到正确的地方去,这就是IP协议在网络层所做的,寻址。
在网络世界中当然是没有省市街道这种概念的,但是有IP地址这个概念。譬如111.229.121.33就是一个网络世界里面的地址。IP协议会根据需要填写客户端和服务端分别对应的网络地址。 - 什么是分割数据包呢?想象一下,假如你的快递是一个1吨重的挖掘机,快递小哥当然没办法把挖掘机给寄出去。他会把挖掘机拆解成零件,然后分成很多个包裹,一个一个的寄出去。等到收件人那边收到了之后,他为了还原一个挖掘机,就会把零件拿出来,一点一点的拼凑成一个完整的挖掘机。
IP协议也是一样,会根据不同网络所支持的数据报的大小来对信息进行切割和重组,以保证传输的顺利进行。 - 说到IP协议的时候,另一个不得不说的东西是端口。假如我们只用地址信息寄送快递,很可能是寄不到正确的人手上的。为什么呢?因为有太多人在杭州市西城区胡同大街300号这个地址办公了,怎么能知道准确的收件人是谁呢?
于是我们衍生了一个概念,叫做端口。就好像人名一样。我们根据IP地址送到了指定的客户端或者服务端的机器上之后,通过端口来判断每一个文件属于这个机器上的哪个应用程序。
也好似人名一样,这里说的端口也是一个为了应用而产生的概念,并不是计算机物理上存在的东西,更多的类似于一个标识符。 - 最后提一下IP协议的一个特点:IP协议是不可靠的无连接数据报服务。什么意思呢?就是IP协议只管发,只管收,而不管是否送达和是否正确。还是以挖掘机为例的话,IP协议不会管所有的零件是不是真的寄到了以及最后拼出来的到底是个挖掘机还是个计算机。这些东西,只有TCP协议来管理。
如果你不想碰TCP/IP的话:Socket简介
- 想象一下,假如说一切的网络请求都诞生于http,然后交给tcp,然后交给IP,然后再从链路层和物理层出去。在接受的时候则要完整的反过来考虑一次:对于程序员这帮每天都要和网络协议打交道的人,方便吗?
- Socket,中文叫作套接字,就是为了解决这个麻烦的问题而诞生的。Socket作为一个抽象的接口层,横梗在应用层和传输层之间,帮助程序员避免每天都要和那么复杂的TCP/IP协议打交道,让他们只需要考虑更高层次的发什么内容等应用层问题就可以了。
- 这也就是刚刚我们说的快递小哥的功能。我们要寄出一个挖掘机,如果没有快递小哥,我们要自己考虑拆解零件,一个一个的寄出,再收取零件,一个一个的拼接的问题。但是有了快递小哥,我们只需要告诉他,我们要寄出这台挖掘机,然后他会处理好其他所有事情。在收到挖掘机的时候,他也会先把挖掘机给拼装好,再给我们开过来签收。
- 稍微说深一点,Socket其实来源于Unix,是”一切都是文件“理念的一个续写。人们只需要通过一个接口,打开文件,读取文件,写入文件,再关闭文件就可以了,而不需要考虑更深层次的转码等问题。这个概念延展到网络通讯,就成为了我们的socket,一个接口概念。
(图片来源:
https://images.cnblogs.com/cnblogs_com/goodcandle/socket2.jpg)