输入url发生了什么(一)--DNS解析

475 阅读3分钟

更多文章

输入url发生了什么(二)--TCP

输入url发生了什么(三)--HTTP

输入url发生了什么(四)--浏览器渲染

前言

之前面试的时候也遇到了问这个问题的,这个问题涉及的面还是比较广的,有DNS、TCP、HTTP,HTML、CSS、JS绘制到页面的过程,这中间又会涉及到安全、优化一些列问题,很是值得去了解一下

DNS简介

DNS即域名系统,当访问某个域名时最终会解析为ip地址,实际访问的也就是这个ip地址,但是ip地址并不方便记忆,所以后来发明了DNS服务,它是域名和IP地址相互映射的一个分布式数据库

域 & 域服务器

以本博客https://www.chasejourney.top为例,.符号是命名空间用来分割各个域,其实.top后还有一个.(通常不写),这个.就是根域,.com就是顶级域,.chasejourney是二级域,www是三级域,它们共同组成了三级域名

  • 根服务器

全球有13台IPv4根服务器、25台IPv6根服务器,中国部署了1台IPv6主根服务器3台IPv6辅根服务器,理论上说所有域名查询都是从根服务器开始的,只有根服务器会告诉我们顶级域名在哪里托管

DNS协议使用了端口上的UDP和TCP协议,UDP通常用于查询和响应,TCP多次验证比较慢用于传输,UDP正常工作的最大长度是512字节,512字节限制了根服务器的数量和名字,所以IPv4根服务器只能限制在13个,且命名为A-M

  • 顶级域名 & 顶级域名服务器

一般性顶级域名(gTLD): .com(公司)、.net(网络服务机构)、.org(非盈利组织)、.int(国际组织)、.edu(教育机构)等

国别顶级域名(ccTLD):.cn(中国)、us(美国)、uk(英国)、.io(英属印度洋领地)、.cc(科科斯群岛)

顶级域名服务器负责注册的二级域名

域名解析流程

  1. 浏览器缓存

浏览器会去查询缓存中是否有该域名对应的ip地址,如果有解析就此结束

  1. 系统缓存

浏览器没有查到相应的ip地址,会去本地hosts文件中查找有没有相应的ip地址,windows中hosts一般在C:\Windows\System32\drivers\etc

  1. 路由器缓存

系统没有查到缓存,就会向路由器发送查询请求

  1. 本地DNS服务器

以上缓存都没有查询到IP就会向本地DNS服务器查询,本地DNS主要指的是各个服务商,如移动联通电信等

  1. 递归查询

至此还没有查到ip,那就只能本地DNS服务向根服务器查询,根服务将所查询的顶级域名所在的服务器Ip地址返回给本地DNS,本地DNS在向顶级服务器在进行查询,顶级服务器将二级域名ip地址返回给本地服务器,之后重复该步骤,直到本地DNS拿到完整的ip地址并返给主机,本地DNS会缓存自己查询到的ip地址,如果此时有另外一个主机访问该域名,会直接返回缓存的ip地址

DNS预解析

  • meta标签预解析
 <meta http-equiv="x-dns-prefetch-control" content="on" />
  • link标签来强制对DNS做预解析
<link rel="dns-prefetch" href="https://www.chasejourney.top" />