访问网页的全过程
目录
应用层
DNS
DNS服务器种类
DNS工作流程
HTTP/HTTPS
传输层
网络层
开发岗中总是会考很多的计算机网络的知识点,但如果让面试官只考一道题,便涵盖最多的计网知识点,那可能就是网页浏览的全过程了。本篇文章带大家从头到尾带大家过一下访问网页的全过程。
总的来说,网络通信模型可以用下图表示出来,也就是大家只要熟记网络结构五层模型,按照这个体系来,很多知识点都能顺出来了,访问网页的过程全是如此。
开始之前,我们先简单过一下流程
1.在浏览器中输入指定网页的URL
2.浏览器通过DNS协议,获取域名对应的IP地址
3.浏览器根据IP地址和端口号,向目标服务器发起一个TCP连接请求
4.浏览器在TCP连接上,向服务器发送一个HTTP请求报文,请求获取网页的内容
5.在服务器收到HTTP请求报文之后,处理请求,并返回HTTP相应报文给浏览器
6.浏览器收到HTTP响应报文后 ,解析响应体中的HTML代码,渲染网页的结构和样式,同时根据HTM中的其他资源的URL(如图片,CSS,JS等),再次发起HTTP请求,获取这些资源的内容,知道内容完全加载出来。
7.浏览器在不需要和服务器通信时,可以主动关闭TCP连接,或者等待服务器的关闭请求。
应用层
一切的开始---打开浏览器,在地址栏输入URL,回车确认。那么,什么是URL?访问URL有什么用?
URL
URL(Uniform Resource Locators)即统一资源定位器。网络上的所有资源都靠URL定位,每一个文件对应一个URL,就像是路径地址。理论上,文件资源和URL一一对应。实际上也有例外的,比如某些URL指向的文件已经被重定位到另一个位置,这样就有多个URL指向同一个文件。
URL的组成结构
1.协议。URL的前缀通常表示了该网址采用了何种应用协议,通常有两种----HTTP和HTTPS协议。当前还有一些不常见的前缀头,比如文件传输时用到的ftp:
2.域名。域名便是访问网址的通用名,这里也有可能是网址的IP地址,域名可以理解为IP地址的可读版本,毕竟绝大部分人都不会选择记住一个网址的IP地址。
3.端口。如果指明了访问网址的端口的话,端口会紧跟域名后面,并用一个冒号隔开。
4.资源路径。域名(端口)后紧跟的就是资源路径,从第一个/开始,表示服务器上根目录开始进行索引到文件路径,上图中要访问的文件就是服务器跟目录下/path/to/myfile.html。早先的设计是该文件通常物理存储于服务器主机上,但现在随着网络技术的进步,该文件不一定的会物理存储在服务器主机上,有可能存放在云上,而文件路径也有可能是虚拟的(遵循某种规则)。
5.参数。参数是浏览器在向服务器提交请求时,在URL中附带的参数。服务器解析请求时,会提取这些参数。参数采用键值对的形式key=value,每一个键值对使用&隔开。参数的具体含义和请求操作的具体方法有关。
6.锚点。锚点顾名思义,是在要访问的页面上的一个锚。要访问的页面大部分都多于一页,如果指定了锚点,那么在客户端显示该网页是就会定位到锚点处,相当于一个小书签。值得一提的是,在URL中,锚点以#开头,并且不会作为请求的一部分发送给服务端。
DNS
键入了URL之后,第一个重头戏登场--DNS服务器解析,DNS(Domain Name System)域名系统,要解决的是域名和IP地址的映射问题。毕竟知识一个网址便于记住的名字,而网址真正存在的地址其实是IP地址。
在实际使用中,有一种情况下,浏览器是可以不必动用DNS就可以获知域名和IP地址的映射的,浏览器在本地会维护一个hosts列表,一般来说浏览器要先查看要访问的域名是否在hosts列表中,如果有的话,直接提取对应的IP地址记录,就好了。如果本地hosts列表内没有域名IP对应记录的话,那么DNS就闪亮登场了。
目前DNS的设计采用的是分布式,层次数据库结构,DNS是应用层协议,基于UDP协议之上,端口为53.
DNS服务器种类
1.根DNS服务器。根DNS服务器提供TLD服务器的IP地址。目前世界上只有13组根服务器,我国境内目前仍没有根服务器。
2.顶级域DNS服务器(TLD服务器)。顶级域是指域名的后缀,如com,org,net和edu等。国家也有自己的顶级域,如uk,fr和ca。TLD服务器提供了权威DNS服务器的IP地址。
3.权威服务器。在因特网上具有公共可访问主机的每个组织机构必须提供公共可访的DNS记录,这些记录将这些主机的名字映射为IP地址。
4.本地DNS服务器。每个ISP(互联网服务提供商)都有一个自己的本地DNS服务器。当主机发出DNS请求时,该请求被发往本地DNS服务器,它起着代理的作用,并将该请求转发到DNS层次结构中。严格来说,不属于DNS层级结构。
DNS工作流程
以下图为例,介绍DNS的查询解析过程。DNS的查询解析分为两种模式:
迭代
递归
下图是实践中常采用的方式,从请求主机到本地的DNS服务器的查询时递归的,其余的查询时迭代的。
现在,主机cis.poly.edu想知道gaia.cs.umass.edu的IP地址。假设主机cis.poly.edu的本地DNS服务器为dns.poly.edu,并且gaia.cs.umass.edu的权威DNS服务器为dns.cs.umass.edu。
- 首先,主机
cis.poly.edu
向本地 DNS 服务器dns.poly.edu
发送一个 DNS 请求,该查询报文包含被转换的域名gaia.cs.umass.edu
。 - 本地 DNS 服务器
dns.poly.edu
检查本机缓存,发现并无记录,也不知道gaia.cs.umass.edu
的 IP 地址该在何处,不得不向根服务器发送请求。 - 根服务器注意到请求报文中含有
edu
顶级域,因此告诉本地 DNS,你可以向edu
的 TLD DNS 发送请求,因为目标域名的 IP 地址很可能在那里。 - 本地 DNS 获取到了
edu
的 TLD DNS 服务器地址,向其发送请求,询问gaia.cs.umass.edu
的 IP 地址。 edu
的 TLD DNS 服务器仍不清楚请求域名的 IP 地址,但是它注意到该域名有umass.edu
前缀,因此返回告知本地 DNS,umass.edu
的权威服务器可能记录了目标域名的 IP 地址。- 这一次,本地 DNS 将请求发送给权威 DNS 服务器
dns.cs.umass.edu
。 - 终于,由于
gaia.cs.umass.edu
向权威 DNS 服务器备案过,在这里有它的 IP 地址记录,权威 DNS 成功地将 IP 地址返回给本地 DNS。 - 最后,本地 DNS 获取到了目标域名的 IP 地址,将其返回给请求主机。
除了迭代式查询,还有一种递归式查询如下图,具体过程和上述类似,只是顺序有所不同。
HTTP/HTTPS
利用DNS拿到了目标主机的IP地址之后,在浏览器便可以向目标IP地址发送HTTP报文,请求需要的资源了。在这里,根据目标网站的不同,请求报文可能是HTTP协议或安全性增强的HTTPS协议。
传输层
由于HTTP协议是基于TCP协议,在应用层的数据封装好之后,要交给传输层,经TCP协议继续封装。TCP协议保证了数据传输的可靠性,是数据包传输的主力协议。
网络层
终于来到了网络层,此时我们主机不再是是和另一台主机进行交互了,而是在和中间系统进行交互。也就是说,应用层和传输层都是端到端的协议,而网络层及以下都是中间件的协议了。
网络层的核心功能--转发与路由,必会!!!如果面试官问到了网络层,而你恰好又什么都不会的话,最起码要说出这五个字---转发与路由。
- 转发:将分组从路由器的输入端口转移到合适的输出端口。
- 路由:确定分组从源到目的经过的路径。
所以到目前为止,我们数据包经过了应用层,传输层的封装,来到了网络层,终于开始准备在物理层面传输了,第一个要解决的问题就是---往哪里传输?或者是说,要把数据包发到那个路由器上?这便是BGP协议要解决的问题。