DNS
这几天因为要迁移服务器,所以把DNS相关的知识又看了一遍,有一些心得和大家分享一下:
(图片来自微软网站)
1)关于根服务器
Root server负责域名体系的根“.”。Local dns server不能解析的域名,都会查询根服务器,得到次一级的服务器,比如.org.。然后org服务器会告诉resolver下一级的服务器在那里,比如.kernelchina.org.,最后是相应的web服务器的地址,比如www.kernelchina.org。Root server的数据库应该不会很大(顶级域名数量有限)。有13个root server,这些服务器的内容应该是完全相同的(不存在解析请求从一个root转发到另一个root)。每一级的dns server都会有冗余机制来保证可靠性,比如root server就有13个,一是保证可靠性,也可以负载分担。一般DNS server有Master-Master,Master-Slave,Slave-Slave的配置方式,以保证可靠性。
http://www.zytrax.com/books/dns/ch4/
http://www.isoc.org/briefings/016/index.shtml
2)关于解析器(resolver)
(图片来自微软网站)
一般DNS服务器有两种解析模式:recursive(递归);iterative(迭代)。在Client发送DNS请求时,一般都是recursive,在这种方式下,DNS服务器或者回复可以解析的域名ip,或者回复不能解析。但是recursive方式对DNS服务器是一个负担。所以,当client发送recursive的请求,而DNS服务器又没有工作在recursive模式时,需要client本地的dns resolver具有iterative解析的能力。这是一个协商的过程,总之一般DNS服务器都支持这两种方式,只不过离client近的DNS服务器需要工作的recursive模式,以学习更多的DNS cache;而离client远的服务器工作在iterative模式,以减轻服务器本身的负担。不过,如果是提供DNS服务,最好是recursive模式,也就是说client的请求到此为止,不需要client做更多其它的事情。
http://technet.microsoft.com/zh-cn/library/bb727007(en-us).aspx
3)关于DNS cache
当某一个域名对应的ip地址改变时,通常是某一个服务器先手动改变(注册服务器),然后这个改变如何通知到其他服务器?如果其他服务器有这个域名的缓存,很显然,这个缓存是错误的。我想应该不会主动通知,而是等缓存过期后,重新来请求。所以一般更新域名要等24小时才能生效。对不同的服务器,包括client,域名缓存的时间是一样的吗?还是可以自己决定缓存的时间?看DNS的RFC里面好像没有规定DNS entry的有效期限(http有),所以缓存策略应该是自己来决定的。
4)关于DNSsec
DNS服务器之间通过请求,应答来交换消息。那么这些服务器之间如何建立信任关系?好的一点是DNS服务器之间的关系是手工进行配置的,没有自动学习的功能,那么信任关系可以由管理员来决定。需要注意的是DNS防篡改,这就信息的integrity(一致性),可以通过签名方式来改进。但是签名本身不能防止伪造,所以需要加入身份信息。在DNSsec里面要引入证书体系,就是为了解决身份认证和一致性两个问题。
http://www.isoc.org/briefings/016/index.shtml
- droplet's blog
- Add new comment
- 340 reads

