在网页浏览器的地址栏里面输入URL时,web页面是如何呈现的?

        我们应该知道在网页浏览器里面输入URL之后,信息会发送到某处,然后从某处获得回复,然后将web页面呈现出来。

        那么,再详细一点,web浏览器是根据地址栏中的指定URL,从web服务器端获取文件资源等信息,从而显现出web页面。

        像这种通过发送请求获取服务器资源的web浏览器,都可称为客户端。

        web使用一种名为HTTP的协议作为规范,以来完成从客户端到服务端的等一系列的流程。

        可以这么说,Web是建立在HTTP协议上进行通讯的。

为了更加准确的了解HTTP,我们需要先了解一下TCP/IP协议族。

        我们通常使用的网络,是在TCP/IP协议族的基础上运作的。

        HTTP协议就是TCP/IP协议族的一个子集。

        可以这么说,

        TCP/IP协议就是与互联网相关的协议集合,而不只是TCP协议和IP协议。

        TCP/IP协议族里面最重要的就是分层。

        TCP/IP协议族按照层次分为四层:

* 应用层
* 传输层
* 网络层
* 数据链路层
       
TCP层次化的好处:对于每一层的设计,如果某一层出现了bugs或者修改,那么就不需要对整体的设计进行改动,每一层协议各司其职,只保证自己的方面不出现问题就行。

应用层:

        应用层决定了决定了向用户提供应用服务时通信的活动。

        就比如:FTP(文件传输协议)和DNS(域名系统)。

        HTTP协议就位于TCP/IP协议的应用层。

传输层:

        传输层提供处于网络连接状态的两台计算机之间的数据传输。

        只包含TCP(传输控制协议)和UCP(用户数据报协议)两个性质不同的协议。

网络层:

        数据包是网络传输的最小数据单位,网络层就是来处理在网络上流动的数据包。

        网络层规定了要通过怎样的路径来到达对方的计算机,并把数据包传送给对方。

        这么说,网络层的作用就是,当两台网络连接的数据传输的过程中要经过很多计算机或者网络设备,那么网络层就从众多路径内选出一条传输路线。

数据链路层:

        数据链路层用来处理数据传输过程中的硬件相关,即处理连接网络的硬件部分,包括控制操作系统,硬件的设备驱动,NIC,光纤等物理可见部分。

        利用TCP/IP协议族进行通讯的时候,会通过分层顺序与对方进行通讯,发送端从应用层往下走,接收端从数据链路层往上走。

        来看看两台计算机在进行数据传输的过程中TCP/IP协议如何运作。

* 在传输层的TCP协议把从应用层接收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号,然后转发到网络层。
* 在网络层中,在报文中增加作为通信目的地的MAC地址后转发给数据链路层。
* 接收端的服务器在链路层收到数据,再一层一层的向上传输,直到传输到应用层。
        对于HTTP报文呢,在发送端每向下传输一层,必然会被打上一个经过该层的首部信息,反之,在接收端每往上一一层,就相应的删除对应的首部。

        应用层就是传输HTTP报文,传输层是对HTTP报文首部添加TCP报文段,网络层在HTTP报文最首部增加IP报文段,数据链路层是添加以太网首部。

        这种将数据信息包装起来的做法就叫做封装。

        而TCP/IP协议的每一层协议对于数据传输的作用表面上就体现在它在数据中添加的报文。

IP协议:

       
IP协议处在网络层,它的作用是把各种数据包传送给对方。而如果要保证确实传送到对方那里,则需要满足各种条件,其中非常重要的是IP地址和MAC地址。

       
其中IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以跟MAC地址进行配对,IP地址可以变换,但是MAC地址基本不会改变。

       
IP间的通信依赖MAC地址,在网络上,通信的双方往往不会处于同一个局域网中,而是要通过多台计算机和网络设备中转才能连接到对方。而在进行中转的过程中,会利用中转设备的MAC地址来对接到下一个目标。在这里会采用
ARP协议用以解析地址,只需要知道通信方的IP地址就可以反查出对应的MAC地址。

TCP协议:

        TCP协议处在传输层,负责的是提供可靠的字节流服务。

        所谓字节流服务是指:为了方便运输,将大块数据分割成以报文段为单位的数据包进行管理。

        而可靠的传输服务是指,能够把数据准确可靠地传递给对方。

        简单来说,TCP协议为了更容易传输大数据才将数据分割,而且TCP协议能够确认数据最终是否送达对方。

        为了准确无误的将数据传输到对方,TCP协议采用了三次握手策略。

        用TCP协议把数据包送出去后,TCP一定会对是否准确传输进行验证,这里使用TCP的两个标:SYN和ACK。

        发送端首先发送一个带SYN标识的数据包给对方。

        接收端收到以后,回传一个带SYN/ACK标志的数据包以示传达确认信息。

        最后,发送端再回传一个带ACK标志的数据包,代表握手结束。

DNS服务:

        DNS服务跟HTTP协议都是位于应用层的协议,它提供域名到IP地址的解析服务。

        计算机既可以被赋予IP地址,也可以被赋予主机名与域名。

        相较于IP地址的一大串数字而言,主机名和域名的那种字母搭配往往更符合人类记忆模块。

        但是吧,当你传到一个域名,这种符合人类思维的方式计算机并不能理解,所以DNS服务就有了存在的必要。

        DNS服务通过域名查找IP,也可以从IP地址查到域名。

        知道了这些,我们再来梳理一遍数据传输的过程:

* 首先是客户端对目标域名发起请求
* 通过DNS服务将域名解析成IP地址
* HTTP生成请求报文
* 在传输层TCP将数据分割成多个报文段,将每个报文段可靠的传给对方。
* 在网络层中IP协议可以不断的选择线路,在众多的路由器中一边中转一边传送。
* 通过数据链路层连接硬件,传递给对方
* 对方使用数据链路层与硬件对接进行接收
* 在对方的传输层中,TCP协议对于传过来的排过序的报文段进行重组。
* 在应用层,HTTP协议对于收到的请求进行处理,
* 请求的结果通过同样的方式传输回去。
        参考书籍:《图解HTTP》上野宣 著 于均良 译

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信