域名服务系统(DNS)
DNS:名字到IP转换;电子邮件选路信息;分布式数据库
解析器:是通过gethostbyname(3)和gethostbyaddr(3)来实现的
最常用的名字服务器是BIND
DNS基础
域名的每个标志符的最大长度是63个字符长度,不区分大小写
每个节点域名是从该节点到根用”.”连接起来的字符串
每个节点域名必须不一样,但节点标志可以一样
绝对域名:以”.”结尾的域名
不完整域名:不以点结尾的域名。如果不完整的域名由两个或两个以上的标号组成则认为它是完整的。
1) arpa是用作地址到名字转换的特殊域
2) 7个3字符长的是普通域
3) 2个字符长的是国家域名
普通域的含义:
- DNS中的域名授权:网络信息中心(NIC)负责分配顶级域和委派其他地区域的授权机构
- 区域:dns的一棵子树
- 一个区域的授权机构负责向该区域提供多个名字服务器,当有新系统加入该区域时,该区域的DNS管理者为该新系统申请一个域名和一个IP地址,并将信息加入到名字服务器数据库。
- 一个名字服务器可以负责一个或多个区域
- 主辅DNS的区别:主DNS是从数据库取信息,辅DNS是从主DNS取信息。
- 管理员将新用户信息加入磁盘文件,并让主DNS重新加载配置文件,辅DNS定时询问主DNS是否有新数据。
- 每个名字服务器知道如何同根服务器联系,知道其IP地址。
- 每个根服务器知道其二级域的名字和位置
- DNS的高速缓存特性
DNS报文格式
查询和响应报文
标识:请求和响应是否匹配
标志:
问题部分
格式:
问题具有查询类型,查询和响应都有类型,常见类型如下所示:
其中A类型获得名字的ip地址,ptr查询获得ip对应的域名
应答报文的资源记录字段
域名:资源对应的名字,格式和上面的查询名一样。
类型:RR的类型码。和查询类型的值是一样的。
类:通常为1指Internet数据
生存时间:客服端记录该资源的秒数,通常是两天。
资源数据长度:资源数据的数量。
资源数据:和类型有关。对于类型为1(A记录),资源数据是4字节的ip地址。
名字查找过程
- 客服端解析器查看/etc/resolv.conf,得到名字服务器的ip地址和默认域名(如果resolv.conf中有domain ****,则 ****+”.”为默认域名,否则直接为”.”)。
- 将需要查询的名字进行整理(如果名字不是以”.”结尾则加上默认域名(例如:查询名字为www.163而默认域名为com.则最后得到名字为www.163.com.)否则为绝对域名),然后按配置组成DNS请求报文,最后发送到名字服务器。
- 接收应答。
host 指令可以直接触发DNS请求报文,并能查询对应主机所有的接口地址。
Eg:
[root@dhcp_host ~]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 119.75.213.61
www.a.shifen.com has address 119.75.216.30
查询域名的命令
dig
nslookup
1. 客服端解析器查看/etc/resolv.conf,得到名字服务器的ip地址和默认域名(如果resolv.conf中有domain ****,则 ****+”.”为默认域名,否则直接为”.”)。
2. 将需要查询的名字进行整理(如果名字不是以”.”结尾则加上默认域名(例如:查询名字为www.163而默认域名为com.则最后得到名字为www.163.com.)否则为绝对域名),然后按配置组成DNS请求报文,最后发送到名字服务器。
3. 接收应答。
指针查询
举例
当一个组织加入Internet并获得DNS域名空间的授权时,他也获得in-addr.arpa(见本章第一张图)域名空间的授权,例如B类网络地址128.23.0.0注册域名为luo.cai.min.com,则同时获得23.128.in-addr.arpa域名;主机128.23.1.1注册名为piao.xiang.luo.cai.min.com,则同时获得1.1.23.128.in-addr.arpa的域名。
指针查询(从ip地址得到相应的域名)就是根据in-addr.arpa这个域名空间进行查询的,例子如下:
主机名检查
步骤:
1) 根据ip得到域名
2) 根据域名得到ip
3) 检查得到的所有ip中是否包含源ip
举例:
资源记录
资源记录类型
高速缓存
1) 所有名字服务器都使用高速缓存
2) 高速缓存由名字服务器维护,而不由名字解析器缓存
3) 在该站点所有使用名字服务器的主机均能共享服务器的高速缓存
4) 名字服务器只会在超出高速缓存的情况下才进行查询
5) 在/etc/resolv.conf中删除nameserver 行将导致,该主机的名字解析器使用本地的名字服务器
6) 不应该向根名字服务器发送期望递归的查询,他们只用来提供其他授权服务器的地址
7) 根服务器的应答中不包含回答资源记录,而包括授权名字服务器的授权资源记录和指出这些授权名字服务器地址的附加资源记录
8) 回答来自授权服务器则回答是授权的,回答来自高速缓存则回答不是授权的
9) 名字服务器一般轮询根名字服务器获得往返时间,然后选择往还时间最小的名字服务器
使用UDP还是TCP
1) 当DNS应答中的TC(截断)被设置时说明响应超过512字节,但只返回前面的512字节,客户端收到响应后用TCP重发请求,使得响应可以包含所有的应答内容
2) 辅名字服务器根据主名字服务器进行更新时,用TCP,因为数据量大
3) 由于DNS报文通常在广域网上传播,所以丢包和延时比较严重。所以,名字解析器和服务器都必须有很好的重传和超时程序
一个全面的例子
例子描述