完整的web请求流程:(文章内容较多,请耐心阅读!!!)
在浏览器输入请求的域名-dns解析-----向指定服务器进行三次握手----传递需要请求的数据给服务器-----服务器解析进行返回
我们来详细捋一捋上述几个过程
一、浏览器与DNS解析的过程
1.浏览器地址栏输入请求的链接后,浏览器首先检查自身的DNS缓存是否存在解析记录
浏览器自身查询dns缓存:
firefox:
配置含义:
network.dnsCacheEntries:缓存的数量
network.dnsCacheExpiration:dns缓存的时间
network.dnsCacheExpirationGracePeriod:dns缓存的时间,设置为0表示不缓存
chrome:
查看dns设置:chrome://net-internals/#dns
输入chrome://chrome-urls即可查看chrome所有的配置界面
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三次握手)
我们现在找到了我们要向那台服务器进行通信了,那么怎么进行通信呢?这里我不解释复杂的内容,只做简单介绍。复杂的介绍我会单独在网络里面进行解释。
找到了指定服务器的IP地址,现在我们要向他发起请求,这个请求互相确认建立通道后我们才能正式发送我们需要的请求数据请求服务器回复。那么举个例子解释:
三次握手:
喂,你听得到吗?
我听得到啊,你听得到我吗?
我能听到你,今天balabalabala.....
具体的见网络里的解释。那么通道建立了我们开始发送我们的请求。服务器接收,返回对应请求的数据给我们。
三.服务器通过建立的通道返回数据给我们,我们的浏览器解析对应的文件,将精美的片子展现给你,而不是一串乱码!!