1 DNS必要性
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
当然这里dns背景,就是原来采用etc/host那种档案管理,后采用了dns.
2.名字空间
域名空间(domain name space),是一个名字被定义在顶部的倒置树结构。
标号
树上每个节点都有标号,根节点标号为空,所有子标号都不相同。所以保证了域名唯一性。
域名
域名(domain)是一个用点.分割的标号序列。域名总是从节点往上到跟,最后一级一级根是空。
完整域名Fully Qualified Domain Name, FQDN
以点.结尾的,包含所有标号,并唯一定义了该主机的名字。
不完整域名 PQDN
没有到根。
域名空间的分布
大的原则就是分层部分划分跟授权。
根服务器(root server):授权其他一些服务器,并保持到这些服务器的引用。
主服务器(primary server):存储了它管辖的区的文件,它负责创建,维护,更新这个区的文件。存储在本地文件。
次服务器(secondary server):它的区文件都是从其他服务器同步来,自己不负责维护。
次服务器从主服务器下载信息时,称为区同步。
与主服务器都有所负责区的管理方案。设计目的是为了提供可用性。
3 因特网中DNS
类属域:常见的有7种,书上列出了允许的14种
国家域:2字符长的。或者叫地理域
反向域:arpa是一个用于地址到名字转换的特殊域
一个IP例如192.168.11.2)所具有的DNS地址就是 2.11.168.192.in-addr.arpa(ip倒置)。在DNS系统里面,一个反向地址对应一个PTR纪录(对应A纪录),所以反向查询又叫 做指针(PTR)查询。
4.解析
域名到地址映射
解析过程分为递归解析和迭代解析。
高速缓存
DNS的一个基本特性是使用超高速缓存。当一个名字服务器收到有关映射请求时,它将该信息存放在高速缓存中,这样若以后再遇到相同的映射请示,就能直接使用缓存中的结果而无需通过其他服务器查询。应该告诉客户是来自缓存不是来自权威查询。
为了解决过时问题:1.权限服务器把生存时间TTL加入到映射。2.每个映射保持一个TTL计数器,定期的清除那些TTL到期的映射。
DNS服务器功能:
权威 DNS,自身具备解析能力
转发 DNS
缓存 DNS
5. 报文
DNS报文包含请求报文合响应报文,这个报文由12字节长的首部和4个长度可变的字段组成。
5.1 首部
首部格式如下:
- 标识字段:由客户程序设置并由服务器返回结果。客户程序通过他来确定响应与查询是否匹配。
- 标志字段:16bit的标志字段被划分为若干子段,如图所示
QR:0表示查询报文,1表示响应报文
opcode:0标准查询,1反向查询,2服务器状态请求。
AA:表示“授权回答”,该名字服务器是授权于该域的。
TC:表示“可截断的”,使用UDP时,它表示当应答的总长度超过512字节时, 只返回前512个字节。
RD:表示“期望递归”。这个表示告诉名字服务器必须处理这个查询,也称为一个递归查询。
RA:表示“可用递归”。如果名字服务器支持递归查询,则在相应中将该比特设置为1。
zero:3bit为0
rcode:返回码字段。0为没有差错,3名字差错。
随后4个16位字段说明最后4个变长字段中包含的条目数。对应如下
问题记录数:包含报文的问题部分的查询记录数。
回答记录数:包含响应报文的回答部分回答记录数。在查询报文情况下为0
授权记录数:包含了响应报文的授权部分授权记录数。在查询报文情况下为0
附加记录数:包含了响应报文的附加部分的附加记录数。在查询报文情况下为0
6 记录类型
6.1问题部分:
- 问题部分中每个问题的格式如图所示,通常只有一个问题:
- 查询名是要查找的名字,它是一个或多个标识符的序列。每个标识符的计数值来说明随后标识符的字节长度,每个名字以最后0结束,长度为0的标识符是根标识符,计数字节的值必须是0~63的数。如域名gemini.tuc.noao.edu的表示如下:
- 每个问题有一个查询类型,而每个相应也有一个类型。大约有20个不同的类型只,其中有一部分已经过时,最常用的查询类型是A类型,表示期望获得查询名的IP地址。
6.2 资源记录
- DNS报文最后三个字段:回答字段、授权字段和附加信息字段,均采用一种称为资源记录RR的相同格式。如图所示:
- 域名是记录中资源数据对应的名字。格式与查询名字字段格式相同。(因为使用压缩,所以有偏移的指针)
- 类型说明RR的类型码。它的值和查询类型的值一样,类通常为1,指互联网数据
- 生存时间是客户端保留该资源记录的秒数,通常的生存时间为2天
- 资源数据长度说明资源数据的数量16位字段。该数据格式依赖于类型字段,对于类型1,资源数据是4字节的IP地址。
- 资源数据:可变长度,包含如下之一:数值,域名,偏移指针,字符串。
- 7 压缩 请参照书
- 8 封装
DNS服务器支持TCP和UDP两种协议的查询方式,而且端口都是53。而大多数的查询都是UDP查询的,一般需要TCP查询的有两种情况:
1 响应报文长度超过512字节(UDP封装限制),产生了数据截断(TC标志为1)。
2. 当主(master)服务器和辅(slave)服务器之间通信,辅服务器要拿到主服务器的zone信息的时候。书上没有说,不确认此处。
9 注册机构
10. 安全
安全太多了,ddos攻击,DNS缓存污染,APR劫持等。
这里可以借鉴HTTPDNS的方式。
其他:相关命令ping,host, nslookup, dig, whois 等等;
下面以访问baidu为例,看下抓包的截图。对比上面报文结构。记录跟附加部分没有。