在日常生活中,由于记忆需要访问的所有IP地址过于复杂,所以人们就开发了可以将IP地址与域名相互对应的系统。即:域名系统(DNS)。
DNS的设计是一个类似于树状的设计形态,并且主要由三个部分组成:
1、域名空间和资源记录:它们是树状结构名称空间和与这些名称关联的数据(一般为对应的IP地址信息)的规范。从概念上来说域名树的叶子命名一组信息而查询操作则是从域名树提取特定域名信息。
2、名称服务器(DNS服务器):它们是服务器程序,它们保存着有关域名树的结构的信息和设置信息。名称服务器可以保存有关域名树的任何部分的结构和设置信息。但是一般而言特定的名称服务器只有关于该区域的域名信息子集的完整信息和指向其他名称服务器的指针。
3、解析器:解析器的存在是为了响应终端的DNS查询请求从名称服务器提取信息的程序。解析器必须能够访问至少一个名称服务器,并使用那个名称服务器的信息直接回答终端的DNS查询或使用到其他名称服务器的指针指向另一名称服务器进行继续查询。(此时又分为递归查询和迭代查询两种查询手段)。
同时由于域名系统并非只有一个人或者一个机构在使用,所以在实际使用过程中我们需要保证域名的唯一性。而为了保持这个唯一性,英特网每一个域名都是一个标签序列,用字母、数字和连接符组成,标签加上序列总长度不能超过255个字符,它由点号分割成一个个的标签,每个标签应该在63个字符之内,每个标签都可以看成一个层次的域名。同时使用域名的分级要素,从右至左,最右端为级别最高的域名而最左端为级别最低的域名。同时级别高的域名对于级别低的域名采取的是包含与被包含的关系。例如A.B.C.D是B.C.D、C.D、D的子域。
例如我们平时使用的最左端的代表国家的域名.cn等即为顶级域名。而在顶级域名旁边的.net等即为二级域名。这样进行分级后就可以有效地避免域名重复的现象发生。而由一个人或者机构来进行域名的重复性分析未免工作量过为庞大,并且只是划分了域名的话怎么样才能让终端设备知道域名与IP地址的对应关系呢。应运而生的就是DNS服务器。
DNS服务器按等级分为如下几类:
1:根服务器
在域名服务器中处于最高层服务器,也是相当重要的服务器全球有且仅有13台分布在全球的不同地区
2:顶级域名服务器
负责管理顶级域名下的二级域名的注册,在实际查询域名的过程中已知顶级域名后就是由顶级域名服务器来告知你二级域名的位置。
3:权限区域服务器
负责处理一个区域内的域名解析请求
4:本地域名服务器
终端的域名解析请求首先发往的就是本地域名服务器
但是尽管有了对应的域名服务器如果没有一定的查询规则的话域名解析的速度与效率也会可想而知得下降,造成设备的负载过高以及通信质量低下。所以一般终端在发送DNS请求后会通过两种方式进行查询。
1:递归查询
终端现将DNS请求发至本地域名服务器,如果查询不到则逐级向上转发查询,最后由本地域名服务器告知终端
2:迭代查询
终端将DNS请求发给本地域名服务器后,本地域名服务器将其转发给根服务器,根服务器直接将拥有该域名条目的服务器地址告诉终端。即终端直接向服务器查询。
DNS协议报文格式
0 15 16 31
Transaction ID(会话标识) |
Flags(标志) |
|
Questions(问题数) |
Answer RRs(回答 资源记录数) |
|
Authority RRs(授权 资源记录数) | Additional RRs(附加 资源记录数) | |
Queries(查询问题区域) | ||
Answers(回答区域) | ||
Authoritative nameservers (授权区域) | ||
Additional recoreds (附加区域) |
DNS报文头部
1:Transaction ID(会话标识):长度为2字节。是DNS报文的ID标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分DNS应答报文是哪个请求的响应。
Flags |
2:Flags(标志):长度为2字节。
QR | Opcode | AA | TC | RD | RA | (zero) | rcode |
1 4 1 1 1 1 3 4
QR(1bit) | 查询/响应标志,0为查询,1为响应 |
opcode(4bit) | 0表示标准查询,1表示反向查询,2表示服务器状态请求 |
AA(1bit) | 表示授权回答 |
TC(1bit) | 表示可截断的 |
RD(1bit) | 表示期望递归 |
RA(1bit) | 表示可用递归 |
rcode(4bit) | 表示返回码,0表示没有差错,3表示名字差错,2表示服务器错误(Server Failure) |
3:各个记录数:长度总共8字节。Questions、Answer RRs、Authority RRs、Additional RRs 各自表示后面的四个区域的数目。Questions表示查询问题区域节的数量,Answer RRs表示回答区域的数量,Authority RRs表示授权区域的数量,Additional RRs表示附加区域的数量。
DNS报文正文
1:Queries(查询问题区域)
0 15 16 31
Qname{查询名(地址字段),长度由于查询域名地址不同所以不固定} | |
Type(查询类型) | Class(协议组类型:一般为1代表网络类型为Internet) |
2:资源记录区域(包含了Answers(回答区域)、Authoritative nameservers (授权区域)和Additional recoreds (附加区域))
Qname(域名,长度不固定) | |
Type(查询类型) | Class(协议组类型) |
Time to live(生存时间(TTL)) | |
Data length(资源数据长度) | |
Data(资源数据,长度不固定) |
常用的DNS相关的命令
WINDOWS系统中:
C:\Users\Administrator>ipconfig
C:\Users\Administrator>ipconfig/displaydns
C:\Users\Administrator>ipconfig/flushdns
C:\Users\Administrator>nslookup A.B.C.D(域名)
思科IOS系统中:
Router(config)#ip domain-lookup
Router(config)#ip host
Router(config)#ip domain-name
同时在平时的网络通信中,也可以通过手动配置DNS服务器来影响自己的网络通信质量。例如可以进入Windows系统中的网络适配器选项选择网卡进入属性中更改ipv4属性。
将其中的DNS服务器有自动获取变为手动指定为你已知的一些效果较好的DNS服务器例如可以更改为百度的DNS服务器地址180.76.76.76。也可以在自己电脑的hosts文件中去手动修改(注:hosts文件中的DNS条目为电脑进行DNS查询是最优先查看到的条目)