输入url到展现页面的过程

pick up your weapon and face it 

 

打开浏览器,输入 http://www.baidu.com,那么在短短的几秒内,浏览器会呈现一个百度的首页。这期间发生了什么呢?

首先会有一个DNS解析:域名通过DNS转化成ip地址的过程。http 是基于 tcp 连接的,而 tcp 则是通过 ip 地址去识别访问的。

域名解析 –> 发起TCP的3次握手 –> 建立TCP连接后发起http请求 –> 服务器响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) –> 浏览器对页面进行渲染呈现给用户

在谷歌浏览器中,可以通过查看 chrome://net-internals/#dns ,可以查询现有的缓存。

首先:Chrome浏览器中会首先搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否有www.baiducom 对应的条目,而且没有过期,如果有且没有过期则解析到此结束.

然后:如果浏览器自身的缓存里面没有找到对应的条目,那么Chrome会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束

然后:如果在Windows系统的DNS缓存也没有找到,那么尝试读取hosts文件(位于C:\Windows\System32\drivers\etc),看看这里面有没有该域名对应的IP地址,如果有则解析成功

然后:如果在hosts文件中也没有找到对应的条目,浏览器就会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器(一般是电信运营商提供的,也可以使用像Google提供的DNS服务器)发起域名解析请求(通过的是UDP协议向DNS的53端口发起请求,这个请求是递归的请求,也就是运营商的DNS服务器必须得提供给我们该域名的IP地址),运营商的DNS服务器首先查找自身的缓存,找到对应的条目,且没有过期,则解析成功。

然后: 操作系统就会查找NetBIOS name Cache(NetBIOS名称缓存,就存在客户端电脑中的),那这个缓存有什么东西呢?凡是最近一段时间内和我成功通讯的计算机的计算机名和Ip地址,就都会存在这个缓存里面。什么情况下该步能解析成功呢?就是该名称正好是几分钟前和我成功通信过,那么这一步就可以成功解析。

然后:如果也没有成功,那会查询WINS 服务器(是NETBIOS名称和IP地址对应的服务器)。

然后:如果没有查询成功,那么客户端就要进行广播查找。

最后:如果 没有成功,那么客户端就读取LMHOSTS文件(和HOSTS文件同一个目录下,写法也一样)

如果以上都没有解析成功,那么就宣告这次解析失败,那就无法跟目标计算机进行通信。 

 

那么每天都会有n次查询dns,上亿个甚至更多请求,那服务器会卡死的。所以这里也就出现了DNS负载均衡。

 

 

DNS 查询过程

域名通过 DNS 转化成 ip 地址的过程。

1. 查看浏览器内部缓存

检测域名是否存在于浏览器缓存中,如果有缓存直接使用,没有则下一步。打开 chrome://net-internals/#dns 即可查看本机浏览器的 dns 缓存。

2. 系统缓存

浏览器会调用一个类似 gethostbyname 的库函数,此函数会先去检测本地 hosts 文件,查看是否有对应 ip。

PS: 这里有一个点,localhost 默认 ip 是 172.0.0.1,这是一个回路段,也叫换回接口。也就是不会发往服务器,是直接在本地打开的。

3. 路由器缓存、ISP 缓存

如果浏览器和系统缓存都没有,系统的 gethostname 函数就会像 DNS 服务器发送请求。而网络服务一般都会先经过路由器以及网络服务商(电信),所以会先查询路由器缓存,然后再查询 ISP 的 DNS 缓存。

4. 本地 DNS 服务器

通常为自己计算机搭建的小型 DNS 服务器,自我使用,属于 DNS 优化的一部分。

5. 域名服务器

到此处的过程为:根域服务器(.) -> 顶级域名服务器(eg: .com,.org)->
主域名服务器(eg: google.com)

如果域名正常,应该就会返回 IP 地址,如果没有浏览器就会提示找不到服务器地址。

 

 参考:https://blog.csdn.net/u014465934/article/details/83241097

 

 

你可能感兴趣的:(输入url到展现页面的过程)