DNS全解析

一.DNS来源

最开始世界上的机器比较少,使用host来解析就够了。

到后来机器变的多了,改用由中心服务器统一更新host文件,各地的机器通过ftp从中心服务器更新host文件到本地

再到后来,机器更多了,只由中心服务器来更新host文件也力不从心了,于是改成分布式的,并逐渐演化到了今天的DNS系统

二.DNS服务器分类

与域名对应,分根域名服务器,顶级域名服务器和权威服务器。作用如下

类别作用
根域名服务器只关心所有顶级域名服务器的域名和IP地址
顶级域名服务器自己的顶级域名下的所有二级域名和地址
权威域名服务器负责自己区域的所有域名和地址(一主多备)

1.根域名服务器

根域名服务器只记录所有顶级域名服务器的域名和IP地址。比如它们只记录.cn,.com等这些顶级域名的服务器的解析。
全球有13组根域名,从a.root-servers.net 到m.root-servers.net。注意是根域名,不是根域名服务器。全世界各地都有根域名服务器,国内的话北京和上海有。根域名的分布可以在www.root-servers.org查看。
根域名是最重要,最关键

2.顶级域名服务器

顶级域名服务器只负责自己的顶级域名解析。比.cn的顶级域名,它只解析和.cn相关的域名,并且只解析到xxx.cn

3.权威域名服务器

权威域名服务器就是负责具体的域名解析了。比xiaoxiaoguo.cn就有一台权威域名服务器,它只解析和xiaoxiaoguo.cn相关的域名。

4.本地域名服务器

还有种dns服务器叫本地域名服务器(也可能有其他叫法),它不属于上面任何一种。但它也解析域名,如家用路由器上的192.168.1.1,114.114.114.114或者一些运营商的dns。本地域名服务器发挥了很大的作用,分担了整个dns系统的压力。

三.DNS记录

主要了解A记录,4A记录,MX记录,CNAME记录, NS记录即可。

四.DNS解析过程

当我们去解析一个域名时,比如解析xiaoxiaoguo.cn,会经过如下步骤:
1.查看本机的缓存有无该域名记录,如果没有,查看本机的host文件有无该域名记录,如果没有,则发个请求到本地DNS服务器。
2.本地DNS服务器收到请求后,查看是否有该域名的解析,如果有,返回解析记录给主机,如果没有,则请求根域名服务器
3.根域名服务器收到请求后,返回该域名对应的顶级域名服务器,比如这次请求返回.cn的服务器地址
4.本地域名服务器接到顶级域名服务器地址后,向该顶级域名服务器请求
5.顶级域名服务器返回该域名的权威服务器地址,比如这次返回xiaoxiaoguo.cn对应的权威服务器地址
6.本地域名服务器获得该地址后,发请求到该域名的权威服务器。
7.权威服务器返回该域名对应的解析。
8.本地域名服务器获取该解析后,返回给主机,解析完成。

这里可能会有个疑问:本地服务器是怎么知道根域名服务器的地址?如果安装了bind服务,可以看到默认有个name.ca的文件,里面记录了13组根域的解析。所以本地域名服务器默认就有根域的解析。

五.DNS报文结构

现在的DNS主要还是通过UDP来通讯,大小不超过1500个字节。报文结构如下:

  +--+--+--+--+--+--+--+
  |      Header        |
  +--+--+--+--+--+--+--+
  |      Question      |
  +--+--+--+--+--+--+--+
  |      Answer        |
  +--+--+--+--+--+--+--+
  |      Authority     |
  +--+--+--+--+--+--+--+
  |      Additional    |
  +--+--+--+--+--+--+--+

按格式来区分的话,可以分为三部分:头部Header,查询部分Question,应答部分:Answer,Authority,Additional

1.头部Header

报文格式如下

Header format

    0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                      ID                       |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |QR|  opcode   |AA|TC|RD|RA|   Z    |   RCODE   |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    QDCOUNT                    |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    ANCOUNT                    |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    NSCOUNT                    |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    ARCOUNT                    |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

各字段作用如下

ID: 2个字节(16bit),标识字段,客户端会解析服务器返回的DNS应答报文,获取ID值与请求报文设置的ID值做比较,如果相同,则认为是同一个DNS会话。
FLAGS: 2个字节(16bit)的标志字段。包含以下属性:
QR: 0表示查询报文,1表示响应报文;
opcode: 通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求),[3,15]保留值;
AA: 表示授权回答(authoritative answer)– 这个比特位在应答的时候才有意义,指出给出应答的服务器是查询域名的授权解析服务器;
TC: 表示可截断的(truncated)–用来指出报文比允许的长度还要长,导致被截断;
RD: 表示期望递归(Recursion Desired) – 这个比特位被请求设置,应答的时候使用的相同的值返回。如果设置了RD,就建议域名服务器进行递归解析,递归查询的支持是可选的;
RA: 表示支持递归(Recursion Available) – 这个比特位在应答中设置或取消,用来代表服务器是否支持递归查询;
Z : 保留值,暂未使用;
RCODE: 应答码(Response code) - 这4个比特位在应答报文中设置,代表的含义如下:
0 : 没有错误。
1 : 报文格式错误(Format error) - 服务器不能理解请求的报文;
2 : 服务器失败(Server failure) - 因为服务器的原因导致没办法处理这个请求;
3 : 名字错误(Name Error) - 只有对授权域名解析服务器有意义,指出解析的域名不存在;
4 : 没有实现(Not Implemented) - 域名服务器不支持查询类型;
5 : 拒绝(Refused) - 服务器由于设置的策略拒绝给出应答.比如,服务器不希望对某些请求者给出应答,或者服务器不希望进行某些操作(比如区域传送zone transfer);
[6,15] : 保留值,暂未使用。
QDCOUNT: 无符号16bit整数表示报文请求段中的问题记录数。
ANCOUNT: 无符号16bit整数表示报文回答段中的回答记录数。
NSCOUNT: 无符号16bit整数表示报文授权段中的授权记录数。
ARCOUNT: 无符号16bit整数表示报文附加段中的附加记录数。

2.Question 查询字段

报文格式如下:

  Question format

    0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                     ...                       |
  |                    QNAME                      |
  |                     ...                       |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    QTYPE                      |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    QCLASS                     |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

各字段作用如下

QNAME 8bit为单位表示的查询名(广泛的说就是:域名).
QTYPE 无符号16bit整数表示查询的协议类型.
QCLASS 无符号16bit整数表示查询的类,比如,IN代表Internet.

3.应答部分Answer/Authority/Additional

它们的结构如下

Answer/Authority/Additional format

    0  1  2  3  4  5  6  7  0  1  2  3  4  5  6  7
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    NAME                       |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    TYPE                       |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    CLASS                      |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    TTL                        |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    RDLENGTH                   |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
  |                    RDATA                      |
  +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

各字段作用如下

NAME 资源记录包含的域名.
TYPE 表示DNS协议的类型.
CLASS 表示RDATA的类.
TTL 4字节无符号整数表示资源记录可以缓存的时间。0代表只能被传输,但是不能被缓存。
RDLENGTH 2个字节无符号整数表示RDATA的长度
RDATA 不定长字符串来表示记录,格式根TYPECLASS有关。比如,TYPE是A,CLASSIN,那么RDATA就是一个4个字节的ARPA网络地址。

对这部分,可以通过wireshark等抓包软件抓个包看看,抓包的过程就不赘述了。

六.搭建DNS服务器

参考:http://blog.csdn.net/u012375924/article/details/50779891

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
DNS(Domain Name System)是互联网的一个基础设施,它通过将域名映射到IP地址来使得Internet上的计算机能够相互通信。DNS解析是将域名解析成IP地址的过程,其过程及原理如下: 1. 用户在浏览器中输入域名,如www.example.com; 2. 浏览器向本地DNS服务器(如ISP提供的DNS服务器)发送域名解析请求; 3. 如果本地DNS服务器缓存中存在该域名对应的IP地址,则直接返回给浏览器; 4. 如果本地DNS服务器缓存中不存在该域名对应的IP地址,则向根域名服务器发送请求; 5. 根域名服务器返回顶级域名服务器的地址,如.com域的顶级域名服务器的地址; 6. 本地DNS服务器向顶级域名服务器发送请求; 7. 顶级域名服务器返回下一级域名服务器地址,如example.com域的DNS服务器地址; 8. 本地DNS服务器向example.com域的DNS服务器发送请求; 9. example.com域的DNS服务器返回对应的IP地址; 10. 本地DNS服务器将IP地址返回给浏览器; 11. 浏览器通过IP地址访问服务器,获取网页内容并显示。 DNS解析原理: DNS采用了分布式数据库的方式进行域名解析球各地的众多DNS服务器共同维护了一个庞大的域名与IP地址的对应关系数据库。当浏览器发出域名解析请求时,会先向本地DNS服务器发送请求,如果本地DNS服务器缓存中不存在则向其他DNS服务器查询,直到获得域名对应的IP地址为止。DNS解析过程中采用了递归查询和迭代查询两种方式。递归查询是指DNS服务器在查询过程中一直向上级DNS服务器发送请求,直到获得结果为止。而迭代查询是指DNS服务器在查询过程中只向下级DNS服务器发送请求,然后将结果返回给上级DNS服务器,最终返回给客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值