了解DNS

DNS通讯协议

DNS服务通常使用53号端口,同时使用TCP协议和UDP协议.

DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议.

什么叫区域传输?

DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器.

在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息.当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息.这就叫做区域传输(Zone Transfer).

为什么既使用TCP又使用UDP?

这里就要先了解一下TCP与UDP的一个差异:

UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节.当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送.

区域传送时使用TCP,主要有一下两点考虑:
1. 辅域名服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。
2. TCP是一种可靠的连接,保证了数据的准确性。

域名解析时使用UDP协议:
1. 客户端向DNS服务器查询域名,一般返回的内容都不超过512字节。
2. 不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。

虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。

DN解析记录

  • A记录: 将域名指向一个IPv4地址(例如:100.100.100.100),需要增加A记录

  • CNAME记录: 如果将域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记录。这个域名一般是主机服务商提供的一个域名

  • MX记录: 建立电子邮箱服务,将指向邮件服务器地址,需要设置MX记录。建立邮箱时,一般会根据邮箱服务商提供的MX记录填写此记录

  • NS记录: 域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录

  • TXT记录: 可任意填写,可为空。一般做一些验证记录时会使用此项,如:做SPF(反垃圾邮件)记录

  • AAAA记录: 将主机名(或域名)指向一个IPv6地址(例如:ff03:0:0:0:0:0:0:c1),需要添加AAAA记录

  • SRV记录: 添加服务记录服务器服务记录时会添加此项,SRV记录了哪台计算机提供了哪个服务。格式为:服务的名字.协议的类型(例如:_example-server._tcp)。

  • SOA记录: SOA叫做起始授权机构记录,NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中那一台是主服务器

  • PTR记录: PTR记录是A记录的逆向记录,又称做IP反查记录或指针记录,负责将IP反向解析为域名

  • 显性URL转发记录: 将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址。例如:设置 www.a.com 转发到 www.b.com 后,访问 www.a.com 时,地址栏显示的地址为:www.b.com 。

  • 隐性UR转发记录: 将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址,隐性转发会隐藏真实的目标地址。例如:将 www.a.com 转发到www.b.com 后,访问 www.a.com 时,地址栏显示的地址仍然是:www.a.com 。

关于TTL值,即Time To Live(生存时间),表示解析记录在DNS服务器中的缓存时间,TTL的时间长度单位是S(秒).其作用是当你设置了一定时间后,DNS服务器获取到该条记录后,会在该间隔周期到后重新获取记录,通常建议设置为3600,即一个小时,方便在更改记录能及时生效.

值得一提的是,我们的操作系统在获取一条记录后,也会缓存,这个缓存也是有时间限制的,但通常与DNS记录中设置的TTL值无关:

  • Windows系统中,通常是86400秒,可以查看官方说明,

  • IOS设备同样也是86400秒,

  • Android上,网上大多说默认是10分钟,我搜了下,看源码是2秒!!??

浏览器的对DNS缓存也是自定义的,像是Chrome和Firefox的缓存时间是60秒,IE浏览器则是1800秒.