域名解析

首先Chrome浏览器会解析 www.example.com 这个域名(准确的叫法应该是主机名)对应的IP地址。怎么解析到对应的IP地址?

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

我们怎么查看Chrome自身的缓存?可以使用 chrome://net-internals/#dns 来进行查看

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

怎么查看操作系统自身的DNS缓存,以Windows系统为例,可以在命令行下使用 ipconfig /displaydns 来进行查看

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

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

  1. 找根域的DNS地址,向其发起请求(请问www.example.com这个域名的IP地址是多少啊?),根域发现这是一个顶级域com域的一个域名,于是就告诉运营商的DNS我不知道这个域名的IP地址,但是我知道com域的IP地址,你去找它去.

  2. 于是运营商的DNS就得到了com域的IP地址,又向com域的IP地址发起了请求(请问www.example.com这个域名的IP地址是多少?),com域这台服务器告诉运营商的DNS我不知道www.example.com这个域名的IP地址,但是我知道 example.com这个域的DNS地址,你去找它去.

  3. 于是运营商的DNS又向 example.com这个域名的DNS地址(这个一般就是由域名注册商提供的,比如:万网)发起请求(请问www.example.com这个域名的IP地址是多少?),这个时候example.com域的DNS服务器一查,诶,果真在我这里,于是就把找到的结果发送给运营商的DNS服务器,

这个时候运营商的DNS服务器就拿到了www.example.com这个域名对应的IP地址,并返回给Windows系统内核,内核又把结果返回给浏览器,终于浏览器拿到了www.example.com 对应的IP地址,继续进行下一步的动作了。

#DNS服务器

网卡DNS设置

用windows系统大家都知道,本地连接里面有一个DNS设置。 那么这个选项对应Linux系统的话就是在网卡配置文件,通过编辑 vi /etc/sysconfig/network-scripts 网卡下面的ifcfg-eth0 配置文件添加DNS服务器地址

  1 NAME=eth0
  2 DEVICE=eth0
  3 TYPE=Ethernet
  4 BOOTPROTO=dhcp
  5 DEFROUTE=yes
  6 PEERDNS=yes
  7 PEERROUTES=yes
  8 IPV4_FAILURE_FATAL=no
  9 IPV6INIT=yes
 10 IPV6_AUTOCONF=yes
 11 IPV6_DEFROUTE=yes
 12 IPV6_PEERDNS=yes
 13 IPV6_PEERROUTES=yes
 14 IPV6_FAILURE_FATAL=no
 15 ONBOOT=yes

只需要在后面添加 DNS1=200.200.114.114 ,次选 DNS2=114.114.114.114

DNS服务器地址配置

在Linux下面,有一个默认的DNS服务器地址配置文件的设置,存放在 /etc/resolv.conf

  • 设置方法很简单,通过编辑vi /etc/resolv.conf设置首选DNS和次要DNS。如下图,排在前面的就是首选DNS,后面一行就是次要的DNS服务器DNS

  1 # Generated by NetworkManager
  2 search novalocal
  3 nameserver 200.200.114.114
  4 nameserver 114.114.114.114
  5 nameserver 1.2.4.8

hosts主机表文件

跟Windows系统一样,Linux系统也有主机表文件。同样可以通过设置主机表地址进行特定主机的解析,优先DNS服务器地址。配置文件在/etc/hosts

划重点

Linux下设置DNS的位置主要是:

  1. 网卡设置配置文件里面DNS服务器地址设置

  2. 系统默认DNS服务器地址设置

  3. hosts文件指定

生效顺序是:

1 hosts文件 ---- 2 网卡配置文件DNS服务地址 --- 3 /etc/resolv.conf

需要注意的是:

1、/etc/resolv.conf下配置nameserver 会即时生效,但是每次重启操作系统会根据ifcfg-eth0里的DNS信息把该文件重写

2、ifcfg-eth0里配置的DNS信息相当于Windows界面里你设置IP时设置的DNS,是永久的,开机重启后依然存在

3、hosts文件的作用与Windows下的hosts文件作用相同,可以用该文件设置局域网内机器IP与机器名称对应,因其优先级高

最后更新于