从在浏览器输入网址到打开页面看到网页信息是一个非常复杂的过程。DNS解析是非常关键的一步。 完整的执行一次页面的请求是一个非常复杂的过程,同时也是一个非常耗时的过程。 好在经过这么多年的发展,技术的不断积累,已经做了非常多的优化,比如各种缓存、各种算法的优化等。 DNS的主要作用就是将主机域名转换为ip地址。 这里记录一下本人对于dns查询的一些笔记。
发起一次http(非http2)请求需要经历下面的步骤
代码语言:javascript复制用户发起一次http请求(在浏览器输入url地址)
DNS 域名解析
发起 TCP 的 3 次握手
建立 TCP 连接后发起 http 请求
服务器响应 http 请求
客户端接受信息展示给用户
这里主要介绍一下DNS的解析步骤,简化版的DNS查询过程如下
代码语言:javascript复制1.浏览器缓存:首先会查询浏览器是否存在dns缓存,如果用户访问过某个网站,浏览器会缓存这个DNS记录。
在chrome浏览器可以输入这个查看(chrome://net-internals/#dns)
2.操作系统缓存,如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用,这样便可获得系统缓存中的记录。
OS缓存会参考DNS服务器响应的TTL值,但是不完全等于TTL值。
3.路由器缓存,如果前面没有查询到,则会将请求发向路由器,它一般会有自己的DNS缓存。
4.ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。
5.各个DNS服务器查询,通过一系列复杂的算法进行DNS查询(有人说是递归搜索)
名词解释
**DNS:**网域名称系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。 它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 DNS使用TCP和UDP端口53。 当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
ISP: 互联网服务供应商(Internet Service Provider)又称因特网服务提供者、互联网服务提供商、网络服务供应商,即指提供互联网存取服务的公司。通常大型的电讯公司都会兼任互联网服务供应商。
主机记录(A记录): A记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上。
别名记录(CNAME记录): CNAME记录用于将某个别名指向到某个A记录上,这样就不需要再为某个新名字另外创建一条新的A记录。
TTL: 表示 DNS 记录在 DNS 服务器上缓存时间
域名解析: DNS就像是一个自动的电话号码簿。 我们上网的时候通过在浏览器输入网址 (http://www.epoos.com) 的时候,就相当于输入用户名,解析(查找ip)就相当于通过用户名自动找到电话号码