DNS详解

DNS详解

DNS(Domain Name System):域名解析系统。

DNS的作用是根据域名查找ip,也就是输入一个域名输出一个ip。

域名的层级

根域名:.root或者.

顶级域名:.com.cn、还有我的.icu都是顶级域名。

次级域名:比如我的域名ownpress.icu

主机域名:比如proxy.ownpress.icu,主机域名由域名持有者自行分配。

proxy.ownpress.icu.root
主机域名.次级域名.顶级域名.根域名

DNS解析过程

比如在浏览器中输入了www.ownpress.icu,会发生什么?

  1. 浏览器会查找本地dns缓存,有则返回结果,没有则继续下一步。
  2. 查看本地hosts文件有没有记录,有则返回,没有则继续下一步。

Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。

需要注意的是,Hosts文件配置的映射是静态的,如果网络上的计算机更改了请及时更新IP地址,否则将不能访问。

  1. 浏览器向本地dns服务器(运营商提供的)发送查询请求,本地dns服务器收到请求后会查询本地缓存,有则返回,没有则向dns根域名服务器发出查询请求。
  2. 根域名服务器收到请求后就返回.icu这个顶级域名的服务器。
  3. 本地dns服务器收到返回的.icu顶级域名服务器地址后就给.icu顶级域名服务器发出查询请求。
  4. .icu顶级域名服务器收到查询请求后返回ownopress.icu的地址。
  5. 本地dns服务器收到后,向.ownpress.icu这个域名服务器请求查询www.ownpress.icu
  6. .ownpress.icu域名服务器收到请求后,查询www.ownpress.icu的ip并返回给本地dns服务器。
  7. 本地dns收到最终查询结果后将其返回给了用户,不过本地dns服务器不会每次都傻傻的去一层层查询,它会缓存一部分在本地dns服务器中。

DNS缓存时间

dns服务器会配置有一个参数TTL(time to live),也就是dns记录的存活时间。

设置TTL的原因是一个域名对应的ip可能会发生变动导致dns服务器缓存记录失效,另外就是让访问量不是那么大的域名的解析不要一直占用dns服务器的缓存。

超过TTL的记录都会被删除,下次再有用户查询则重新获取。

DNS记录类型

A:地址记录(address),返回域名指向的ip。

NS:域名服务器记录(name server),返回保存下一级域名信息的服务器地址,要设置为域名。

MX:邮件记录(mail exchange),返回接受电子邮件的服务器地址。

CNAME:规范名称记录(canonical name),返回另一个域名,也就是跳转到另一个域名。

PTR:逆向查询记录(pointer record),只用于从ip地址查询域名。

DNS报文结构

DNS报文:

dns报文

同一个dns解析的请求报文和应答报文具有相同的事务ID。

DNS劫持和http劫持

dns劫持:中国互联网早期经常出现dns劫持,dns劫持就是dns返回的ip与你要访问的域名的真实ip不符。dns劫持的方法有好几种,第一种是流氓软件或者恶意程序修改了用户本地的hosts文件,第二种是路由劫持,第三种是dns服务器查询并返回了错误的ip,这可能是dns服务器被攻陷了亦或者是dns服务器故意如此。

http劫持:

在用户的客户端与其要访问的服务器经过网络协议协调后,二者之间建立了一条专用的数据通道,用户端程序在系统中开放指定网络端口用于接收数据报文,服务器端将全部数据按指定网络协议规则进行分解打包,形成连续数据报文。

用户端接收到全部报文后,按照协议标准来解包组合获得完整的网络数据。其中传输过程中的每一个数据包都有特定的标签,表示其来源、携带的数据属性以及要到何处,所有的数据包经过网络路径中ISP路由器传输接力后,最终到达目的地,也就是客户端。

HTTP劫持是在使用者与其目的网络服务所建立的专用数据通道中,监视特定数据信息,提示当满足设定的条件时,就会在正常的数据流中插入精心设计的网络数据报文,目的是让用户端程序解释“错误”的数据,并以弹出新窗口的形式在使用者界面展示宣传性广告或者直接显示某网站的内容。

使用工具管理DNS

  1. dig

dig可以查询dns记录以及dns解析的过程。

使用:dig +trace www.ownpress.icu查询详细信息。

使用:dig +short www.ownpress.icu查询结果。

使用:dig @8.8.8.8 www.ownpress.icu指定dns服务器。

使用:dig cname www.ownpress.icu查询指定类型的记录。

  1. host

host是dig的简化版,返回当前请求域名的各种记录。

用法:host www.ownpress.icu

  1. whois

查看域名的注册信息。

用法:whois ownpress.icu

  1. nslookup
1
nslookup [待查询域名] [指定DNS服务器]

清理本地dns缓存

  • macos
1
2
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
  • linux

使用NSCD的dns缓存:

1
sudo /etc/init.d/nscd restart

使用DNSMASQ:

1
sudo dnsmasq restart
  • windows
1
ipconfig /flushdns

根域名

请参考:http://www.ruanyifeng.com/blog/2018/05/root-domain.html

评论