浏览器是怎么得到一个网页的

在这里插入图片描述

系列文章目录

由于因特网的实现是一个分层架构,为了防止篇幅过大,笔者不想一篇文章就写完想表达的所有内容,于是会以系列文章的方式,主要内容包括TCP/IP分层架构、网络层的最短路径算法:Dijkstra算法的实现细节,传输层的TCP传输控制协议的拥塞控制、流量控制以及握手和挥手,和应用层的DNS服务。

《TCP/IP参考模型-分层架构》(未完成)
《TCP/IP参考模型-应用层的DNS》(未完成)
《TCP/IP参考模型-传输层TCP》(未完成)
《TCP/IP参考模型-网络层Dijkstra算法》(未完成)

前言

在21世纪的今天来说,网络可以说是无所不在,扫码支付、叫外卖、跟家人打一个温馨的视频通话等等。这些都是一个叫做因特网(Internet) 的东西在帮助我们,因特网把很多独立的部分联系起来组成一个庞大的网络世界。从最初PC时代的互联网到智能手机的移动互联网再到现在万物互联的物联网,这个基础设施无时无刻不在改变着我们的生活方式和思维模式。但它在提供各种便利和机会的同时也增加着很多的风险,个人在网络上可以说是裸奔,为了保护个人隐私问题,国家最近出台了个人信息保护法,使用法律的手段防止滥用大数据。本篇文章将从一个大家经常使用网络的一个例子:浏览器访问网站开始,来分析一个为了实现全世界范围的互联网,因特网是怎么做到的。

在浏览器中输入网址后,是怎么得到一个网页的?

一般在访问网站时,我们记住的是一个叫做 域名(DomainName) 的东西,比如www.baidu.com。在浏览器地址栏中输入该地址,就会得到这么一个结果:
在这里插入图片描述
那么,浏览器是经过了哪些步骤来得到这个网页的呢,下面将给大家娓娓道来。

一. DNS域名服务器

我们在访问百度的网站时其实就是在访问百度公司的某台电脑上的某个文件,但是网络上这么多的电脑我们怎么来标识它们呢?IPV4使用一个32位的二进制数:IP地址(Internet Protocol Address) 来识别一台主机或者一个网络。形如点分十进制112.168.11.2(实际上是4个字节的二进制位,只是点分十进制让人看起来更友好而已)。

那么如何通过一个域名来找到服务器IP地址呢?答案是DNS域名服务(Domain Name Service),它提供的服务就是通过域名找到其对应的IP地址。一般我们要解析一个域名时,会向本地DNS服务器发送一个UDP请求,本地DNS会查询缓存中是否有对应的记录,如果没有则会递归地查询根域名服务器->顶级域名服务器->权威域名服务器。权威域名服务器会告诉本地DNS服务器该域名绑定的IP地址,权威域名服务器一般运行在域名提供方,比如阿里云。

当然,如果每次访问网站都要通过这样一个DNS查询,会对所有的域名服务器造成很大的压力,延迟也会更高。于是在浏览器和操作系统中都有一个DNS缓存,里面存着最近解析过的域名和IP地址的记录,浏览器在解析域名之前会先查询浏览器缓存再查询操作系统缓存,如果还没查到才会去请求本地DNS服务器。

二. HTTP超文本传输协议

通过DNS解析到IP地址后,浏览器会通过 HTTP超文本传输协议(hypertext transport protocol) 对目标服务器发起一个客户端请求,请求内容通过URL统一资源定位器(Uniform Resource Locator) 指定。它由三部分组成,格式是:协议名://域名/资源名。如果你复制一下浏览器地址栏中的地址,会得到一个这样的字符串:https://www.baidu.com/,其中https代表这个URL的协议,百度使用的是安全的http协议,www.baidu.com是域名,在最后一个“/”后面没有内容,这代表着访问服务端提供的默认资源,一般都是index.html。服务器收到请求后就会响应对应的资源给客户端,如下图所示:
在这里插入图片描述

浏览器收到index.html,会根据HTML+CSS+JS三种组合来对.html文件进行解析。HTML代表页面的内容,CSS代表页面的样式,JS是页面中的逻辑。按照这种规则解析完以后,一个完整的网页就展现到了大家面前。

三. TCP传输控制协议

HTTP是一个应用层协议,它实际使用的是TCP/IP参考模型中的传输层协议TCP来传输数据的。在上面的URL中默认使用的HTTP知名端口80,所以端口号可以缺省,如果服务器使用的其他端口的话,URL就会变成这个样子:https://www.baidu.com:8564。知道目标IP地址和端口后,HTTP将使用TCP实体发起一个握手请求,请求连接服务器,服务器上绑定目标端口的应用程序就会响应一个确认,然后浏览器再响应一个确认,如此一个TCP连接便确立,如下图所示。
在这里插入图片描述

TCP通过源IP地址、源端口、目标IP地址和目标端口来确定一条连接,这条连接通过三次握手之后,就可以互相发送数据段。在咱们这个例子中,HTTP发送一个index.html的请求,服务器收到了将index.html分成若干份发回HTTP。

四. IP因特网协议

在传输层的下面是TCP/IP参考模型的第三层,网络层。网络层中最重要的设备就是路由器,它主要承担数据报转发和路由的工作,并且通过统一使用网络层的IP协议将异构的物理网络连接在了一起,实现了一个庞大的因特网。TCP/IP的寻址是通过多跳实现的,多跳是指数据报从源IP地址到目的IP地址的过程中,经过了很多个路由器,通常是一个最短路径。
路由器中维护着一张路由表,里面存着目的IP地址和去往目的地址的下一跳IP地址。因为因特网特别庞大,所以从源路由器到目的路由器存在着很多不同的路径,因此需要一个路由算法来决定一个最优路径,这个路径可能是延时最低的,物理距离最短的或者是符合政策的。
拿访问百度的例子,我们可以通过liunx系统的traceroute工具来得到一个路径,如下图所示
在这里插入图片描述
里面有*号是因为网络中的某些路由器屏蔽了ICMP Ehco报文。

总结

从浏览器发送一个请求经过了这些步骤,DNS解析IP地址,然后通过IP地址发起HTTP请求,HTTP再通过TCP建立连接并传输请求信息,服务器上的TCP再返回信息,而从源端到目的端是通过网络层的路由实现的。当然,整个数据传输过程不止到网络层,在网络层的下面还有数据链路层、Mac子层以及物理层,在这里就不多赘述了。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>