如下图,是windows下网卡的配置界面,相信大家都有见过,除了基本的IP地址、子网掩码、网关以外,还有主DNS服务器、备DNS服务器需要配置。
如果我们不涉及到域名相关的请求,通常是不需要配置DNS服务器的。有时候我们上网很慢,可能改下DNS服务器到另外一台就解决问题。而这些都涉及到互联网中很基础的一个协议,DNS协议。
1 初识DNS协议
(1)DNS协议是用来干嘛的
相信大家都听说过DNS,大概都知道DNS就是用来告知每个域名对应的IP地址是多少。但这只是DNS的功能之一,很小的一个功能。
这点用专业术语来说应该是叫作DNS的A记录,A记录即记录了一台主机的域名和IPv4地址的映射关系。记录主机的域名和IPv6地址的映射关系,那就是AAAA记录。
除了以上的A和AAAA记录以外,DNS还有好多其他类型的记录,功能不一,例如SOA、NS、CNAME、DNAME、MX、SRV、TEXT等等。
(2)任何域名的解析都需要DNS处理吗
如果只是简单的域名和IP地址的映射关系,我们完全可以用一个文件来记录,当客户端需要查找指定域名对应的IP地址(无论IPv4还是IPv6地址),优先查找此文件,在此文件没找到,再去向DNS服务器查找。
而这个文件,我们称之为hosts文件,无论是Windows、还是Linux都存在这个文件,如下图所示。我们可以按照文件中的格式新增域名和IPv4/IPv6地址的映射关系。
Windows下 | ![]() |
Linux下 | ![]() |
(3)DNS协议与OSI模型
DNS协议属于应用层协议,位于OSI七层模型的最高层,底层是传输层UDP协议(也可以是TCP协议),占用的端口是53/udp(和53/tcp),如下图所示。
2 DNS协议包的类型与报头
DNS协议包的种类主要是两种,Query和Response,每个包里面的字段大同小异,如下图所示。
DNS包 | DNS包举例(wireshark解析) | 各个字段解释 |
DNS Query | ![]() | Transaction ID:事务ID,用于区分一个完整的DNS会话 |
Flags:标志,指定该包是查询包还是响应包 | ||
Questions: | ||
Answer RRs: | ||
Authority RRs: | ||
Additional RRs: | ||
Queries:查询的内容 | ||
DNS Response | ![]() | Answers:查询的响应值 |
Additional records:查询的附加值,非必需,看服务器 |
DNS的常用记录
常用记录 | 格式 | 说明 |
SOA | $ORIGIN crdc.cisco.com. @ IN SOA @ admin.crdc.cisco.com ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum | 对应zone的相关信息,每个zone只能有1个SOA记录。 @: 表示zone的名字,如本例中的@表示【crdc.cisco.com.】。 在服务端的域名最后一定要加上点号(.)。 |
NS | @ IN NS ns.crdc.cisco.com. | zone下的DNS服务器的FQDN |
MX | @ IN NS mail.crdc.cisco.com. | zone下的邮件服务器的FQDN |
SRV | _http._tcp.crdc.cisco.com. IN SRV 0 5 80 www.crdc.cisco.com. _sip._tcp.crdc.cisco.com. IN SRV 0 5 5060 cucm.crdc.cisco.com. _sip._udp.crdc.cisco.com. IN SRV 0 5 5060 cucm.crdc.cisco.com. _ldap._tcp.crdc.cisco.com. IN SRV 0 5 389 dc.crdc.cisco.com _imap._tcp.crdc.cisco.com. IN SRV 0 5 143 mail.crdc.cisco.com. | zone下的应用服务器的FQDN,例如SIP服务器、HTTP服务器 |
A | ns.crdc.cisco.com. IN A 10.74.97.122 | zone下某台主机FQDN对应的IPv4地址 |
AAAA | ns.crdc.cisco.com. IN AAAA 2001:10:74:97::122 | zone下某台主机FQDN对应的IPv6地址 |
CNAME | ns.crdc.cisco.com IN CNAME dns.crdc.cisco.com. ns.crdc.cisco.com IN CNAME dns.test.com. | zone下某台主机FQDN的别名(另一个FQDN) |
PTR | 125.97.74.10.in-addr.arpa IN PTR dc.crdc.cisco.com. | 反向zone下某台主机IPv4/IPv6地址对应的FQDN |
NAPTER | ||
TEXT | ||
DNAME |
3 DNS常用工具
(1)nslookup
nslookup是一个用来测试服务器各种记录是否配置正确的工具,在Windows和Linux下默认都已经安装好了,常用参数如下所示。
nslookup -type=A caowen-cucm-pub.crdc.cisco.com 10.74.97.125
10.74.97.125
代表要查询的服务器,不写的话,会调用网卡配置文件上的DNS服务器
-type=A caowen-cucm-pub.crdc.cisco.com
代表要查询该域名对应的IPv4地址,该域名是一台主机
还可以是
------------------------------------------------------
-type=AAAA caowen-cucm-pub.crdc.cisco.com
代表要查询对象对应的IPv6地址,该对象是一台主机
-type=NS crdc.cisco.com
代表要查询对象对应的NS记录(DNS服务器的域名),该对象是一个域的名称,不是域内的主机
-type=MX crdc.cisco.com
代表要查询对象对应的MX记录(邮件服务器的域名),该对象是一个域的名称,不是域内的主机
-type=SRV crdc.cisco.com
代表要查询对象对应的SRV记录(应用协议对应服务器的域名),该对象是一个域的名称,不是域内的主机
caowen-cucm-pub.crdc.cisco.com
不带参数-type=“ ”,代表查询该对象的A/AAAA记录,该对象被当作一台主机
-type=X 10.74.97.123
查询该IP地址对应的域名,即PTR记录查询(反向记录查询)
(2)ipconfig /displaydns
Windows下查看DNS缓存的命令
(3)ipconfig /flushdns
Windows下清除DNS缓存的命令
(4)dig
该命令参数比较多,功能比较强大,在后面的高级课程会重点讲解。一般Linux下都默认安装,Windows没有安装,需要另外下载。