DNS是什么

DNS,可以看作Domain Name Service,Domain Name Server, Domain Name System的缩写,网上也没有统一的解释,说明是哪一种的缩写,我们暂且先不管它

早期互联网的时代,我们使用IP地址访问网站
由于IPV4(IPv6)地址的难以记忆,人们用了一种转换的思想:使用人类容易记忆的名字来代替IP地址,然后通过某种服务把域名转化成IP,这样,就可以实现精确的定位
而这个名字就是域名,例如耳熟能详的百度首页www.baidu.com,我们学校的论坛www.xiyoubbs.com
这种服务就是域名解析服务,我们用来提供服务的服务器就被称作域名解析服务器

事实上,我们通常把域名服务,域名服务器都可以称作DNS,理解了域名解析服务的工作原理,就很容易明白我们交流,或者其他文献中简称DNS时,它所代表的真实含义

DNS的两种查询方式

分别是递归查询和迭代查询

所谓递归查询:如果目标DNS服务器无法解析某个主机名,则它将向其他DNS服务器继续查询,如此递归,知道获得结果并把结果返回给客户

所谓迭代查询:如果目标DNS服务器无法解析某个主机名,则它将已知道的其他DNS服务器的IP地址返回给客户端,以供客户端参考

一般默认都是递归查询

Linux下的一些用于DNS查询的命令

  • ping命令,不仅可以判断网络是否畅通,还可以用域名ping外网时,查看域名对应的主机IP

      $ ping www.baidu.com
      PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data.
      64 bytes from 61.135.169.125: icmp_seq=1 ttl=53 time=19.7 ms
      64 bytes from 61.135.169.125: icmp_seq=2 ttl=53 time=21.1 ms
      64 bytes from 61.135.169.125: icmp_seq=3 ttl=53 time=20.0 ms
      ...
    
  • host命令,一个DNS查询工具

      $ host -t A www.baidu.com  
      www.baidu.com is an alias for www.a.shifen.com.
      www.a.shifen.com has address 61.135.169.121
      www.a.shifen.com has address 61.135.169.125  
    

使用tcpdump观察DNS通信过程

tcpdump是Linux下的一个抓包工具
(Linux下各种服务所对应的端口,可以在/etc/services看到)
在一个终端A输入一下命令:

$ sudo tcpdump -i wlan0 -nt port domain 

然后开启另一个终端B,输入一下命令

$ host -t -A www.baidu.com  

可以在终端A下看到:

IP 172.24.243.3.21645 > 172.24.243.1.53: 18340+ A? www.baidu.com. (31)
IP 172.24.243.1.53 > 172.24.243.3.21645: 18340 3/0/0 CNAME www.a.shifen.com., A 115.239.211.110, A 115.239.210.27 (138)

cpdump以“IP地址.端口号”的形式来描述通信的某一端;以“>”表示数据传输的方向,“>”前面是源端,后面是目的端。

目标端口53是DNS服务使用的端口

第一个数据包是我的机器(172.24.243.3)发送的DNS查询报文
第二个数据包是服务器反馈的DNS应答报文

第一个数据包中,数值18340是DNS查询报文的标识值,因此该值也出现在DNS应答报文中。
“+”表示启用递归查询标志。
“A”表示使用A类型的查询方式。
“www.baidu.com”则是DNS查询问题中的查询名。
括号中的数值31是DNS查询报文的长度(以字节为单位)。

第二个数据包中,“3/0/0”表示该报文中包含3个应答资源记录、0个授权资源记录和0个额外信息记录。
“CNAME www.a.shifen.com., A 115.239.211.110, A 115.239.210.27 (138)”则表示3个应答资源记录的内容。
其中CNAME表示紧随其后的记录是机器的别名,A表示紧随其后的记录是IP地址。
该应答报文的长度为138字节。

修改DNS

我记得以前碰到过这样一见很诡异的事情:qq可以登录聊天,邮件客户端也可以正常工作,就唯独浏览器打不开网站页面

当时遇到的时候,感觉可诡异,后来才知道,原来是DNS挂了

我们通常上网都是直接通过网络运营商(电信,网通等)提供的网络,所以DNS也是自动获取,一定运行上的域名服务器出现了问题,那么我们也就不能正常访问网站

此时,我们就得修改DNS,著名的DNS有谷歌的:8.8.8.88.8.4.4
还有114DNS:114.114.114.114114.114.115.115
这两个算是比较好记的

还有其他的请参考公共DNS服务器



blog comments powered by Disqus