完整的web请求流程:(文章内容较多,请耐心阅读!!!)

在浏览器输入请求的域名-dns解析-----向指定服务器进行三次握手----传递需要请求的数据给服务器-----服务器解析进行返回

我们来详细捋一捋上述几个过程

一、浏览器与DNS解析的过程

1.浏览器地址栏输入请求的链接后,浏览器首先检查自身的DNS缓存是否存在解析记录

浏览器自身查询dns缓存:

firefox:

完整的WEB请求流程解释

配置含义:

network.dnsCacheEntries:缓存的数量

network.dnsCacheExpiration:dns缓存的时间

network.dnsCacheExpirationGracePeriod:dns缓存的时间,设置为0表示不缓存

chrome:

查看dns设置:chrome://net-internals/#dns

输入chrome://chrome-urls即可查看chrome所有的配置界面

完整的WEB请求流程解释

2.浏览器优先在自身浏览器的dns缓存中进行查找,但是如果一个域名的dns解析结果有多个的话,chrome浏览器优先向第一个ip发起http请求,不通则依次向下。浏览器缓存没有找到浏览器会搜索操作系统自身的dns缓存。

windows的dns缓存:

windows下的host文件的所在地:c:\windows\system32\drivers\etc

查询dns缓存命令:ipconfig  /displaydns

强制刷新(清空)缓存:ipconfig  /flushdns (可能需要多执行几次。重启电脑能彻底清除)

linux的dns缓存:

现在很多Linux发行版都没有内置DNS本地缓存,linux不像windows那样可以使用ipconfig /flushdns来刷新,在linux下无需刷新,因为本身没有缓存,当然,如果非要缓存刷寻,可以安装nscd,然后刷新这个守护进程;

Ubuntu:

apt-get install -y nscd

CentOS:

yum install -y nscd

使用:

service nscd restart

3.如果操作系统缓存也没有,浏览器发起DNS调用,进入DNS解析过程。

DNS解析过程

例如查询baidu.com的ip

1.主机将查询发送至本地dns服务器(使用windows服务器搭建的dns服务器)

2.本地dns不包含此主机,向上游发送查询(如果第一层上游没有,会依次向上直到根DNS服务器,在此不做赘述)

3.上游DNS返回baidu.com的TLD的ip列表。

4.本地dns向TLD列表中的一个主机发送dns查询

5.TLD返回目的主机对应的权威dns地址。

6.本地dns向该权威dns发送查询报文

7.目的主机的权威dns返回目的主机的ip地址

注意:由以上过程可见,一条dns查询可能会产生7条dns报文,采用缓存技术,可以减少dns查询链的长度。

DNS缓存

缓存原理:

在一个请求链中,当某个DNS服务器接收一个DNS应答时,它能够将信息缓存在本地存储器中。当下次查询时,就能避免到根dns,TLD和权威dns的查询。由于主机和主机名的映射不是永久的,DNS缓存将在一段时间后被丢弃。

以上就是浏览器和dns解析的关系和解释,如果有不同意见或者有更好的理解方式和回答。欢迎留言批评指点!!!

 

二、向指定的服务器进行三次握手的操作(TCP三次握手)

待更新!!!

相关文章: