DNS域名解析服务详解

目录

一,DNS域名解析基础

1,DNS系统的作用

 2,DNS系统类型

3,DNS查询类型及原理

二,正向解析

1,各种资源记录

2,安装配置方法

三,反向解析

 四,主从复制

 五,分离解析

总结


一,DNS域名解析基础

1,DNS系统的作用

正向解析:根据域名查找对应的IP地址

反向解析:根据IP地址查找对应的域名

DNS系统的分布式数据结构

根. 根域名DNS服务器:专门负责根域名

IPv4的根名称服务器:全球共13个负责解析根域的DNS服务器,美国10个,英国1,瑞典1,日本1

IPv6的根名称服务器:全球共25个,中国1主3从,美国1主2从

一级DNS服务器:专门负责一级域名的解析(一般代表一种类型的组织机构或国家地区)

.com(工商 企业)       .net(网络供应商)    .edu(教育机构)    .cn(中国国家域名)     .org(团体组织) .gov (政府部门)

二级DNS服务器:专门负责二级域名的解析 .net.cn .edu.cn .com.cn 

子域名DNS服务器:专门负责子域名的解析 也称为三级域名 ina.com.cn .pku.edu.cn

主机站点 tts9 tts6 mail www 

 2,DNS系统类型

1,缓存域名服务器

也称为DNS高速缓存服务器

通过向其他域名服务器查询获得域名->IP地址记录

将域名查询结果缓存到本地,提高重复查询时的速度

2,主域名服务器

特定DNS区域的权威服务器,具有唯一性

负责维护该区域的所有域名->IP地址的映射记录

需要自行建立所负责区域的地址数据文件

3,从域名服务器

也称为辅助域名服务器,是对主域名服务器的热备份

其维护的域名->IP地址记录来源于主域名服务器

需要从主域名服务器自动同步区域地址数据库

3,DNS查询类型及原理

1,递归查询:

 一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后, 若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结果后转交给客户机。此查询的源和目标保持不变,为了查询结果只需要发起一次查询。(不需要自己动手)

2,迭代查询:

一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对方不能返回权威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起行查询,直到返回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次查询。(需要自己动手)

DNS查询原理:

 正向解析查询过程:

1)先查本机的缓存记录

2)查询hosts文件

3)查询dns域名服务器,交给dns域名服务器处理 以上过程成为递归查询:我要一个答案你直接会给我结果

4)这个dns服务器可能是本地域名服务器,也有个缓存,如果有直接返回结果,如果没有则进行下一步

5)求助根域服务器,根域服务器返回可能会知道结果的顶级域服务器让他去找顶级域服务器

6)求助顶级域服务器,顶级域服务器返回可能会知道结果的二级域服务器然他去找二级域服务器

7)求助二级域服务器,二级域服务器查询发现是我的主机,把查询到的ip地址返回给本地域名服务器

8)本地域名服务器将结果记录到缓存,然后把域名和ip的对应关系返回给客户端

二,正向解析

1,各种资源记录

区域解析库:有众多资源记录组成

记录类型:A,AAAA,PTR,SOA,NS,CNAME,MX

SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解

析库的第一条记录SOA,是起始授权机构记录,说明了在众多 NS 记录里哪一台才是主要的服务器。在任何DNS记录文件中,都是以SOA ( Startof Authority )记录开始。SOA资源记录表明此DNS名称服务器是该DNS域中数据信息的最佳来源。

A(internet Address):作用,域名解析成IP地址

AAAA(FQDN): --> IPV6

PTR(PoinTeR):反向解析,ip地址解析成域名

NS(Name Server):,专用于标明当前区域的DNS服务器,服务器类型为域名服务器

CNAME : Canonical Name,别 名记录

MX(Mail eXchanger)邮件交换器

SOA记录与NS记录的区别:NS记录表示域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析;SOA记录设置一些数据版本和更新以及过期时间等信息。

2,安装配置方法

配置服务器

关闭防火墙和selinux

 安装主软件和配置包管理软件

 开启服务和检测

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C 语言实现 DNS 域名解析的过程如下: 1. 定义 DNS 查询报文 DNS 查询报文包含以下字段: - 标识符(ID):用于标识该查询和响应,通常是一个随机数。 - 标志(Flags):用于指定该查询的类型和设置。 - 问题数(QDCOUNT):用于指定查询报文中包含的问题数。 - 回答数(ANCOUNT):用于指定响应报文中包含的回答数。 - 授权数(NSCOUNT):用于指定响应报文中包含的授权数。 - 附加数(ARCOUNT):用于指定响应报文中包含的附加数。 - 问题(Question):用于指定查询的域名和类型。 - 回答(Answer):用于返回查询结果。 - 授权(Authority):用于指定授权域名服务器。 - 附加(Additional):用于指定其他信息,例如 DNS 服务器的 IP 地址。 2. 构造 DNS 查询报文 构造 DNS 查询报文的过程如下: - 定义一个 DNS 查询报文结构体,包含上述字段。 - 将域名转换成 DNS 查询格式,即将每个标签的长度和内容以字节方式存储,并在末尾添加一个 0 字节。 - 将查询报文头部填充好,包括标识符、标志、问题数等字段。 - 将查询报文中的问题字段填充好,包括域名和查询类型(通常为 A 记录)。 - 将查询报文序列化成字节数组。 3. 发送 DNS 查询报文 使用套接字 API 发送 DNS 查询报文到 DNS 服务器,例如: ```c #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int sockfd; struct sockaddr_in servaddr; sockfd = socket(AF_INET, SOCK_DGRAM, 0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(53); // DNS 服务器端口号 inet_pton(AF_INET, "8.8.8.8", &servaddr.sin_addr); // DNS 服务器 IP 地址 sendto(sockfd, query, query_len, 0, (struct sockaddr *) &servaddr, sizeof(servaddr)); ``` 其中,query 表示序列化后的 DNS 查询报文,query_len 表示报文长度。 4. 接收 DNS 响应报文 使用套接字 API 接收 DNS 响应报文,例如: ```c char response[1024]; int response_len; struct sockaddr_in servaddr; socklen_t servlen = sizeof(servaddr); response_len = recvfrom(sockfd, response, sizeof(response), 0, (struct sockaddr *) &servaddr, &servlen); ``` 其中,response 表示接收到的 DNS 响应报文,response_len 表示报文长度,servaddr 表示 DNS 服务器的地址。 5. 解析 DNS 响应报文 将接收到的 DNS 响应报文解析成可读的格式,例如: ```c struct dns_header *header = (struct dns_header *) response; char *question = response + sizeof(struct dns_header); char *answer = question + strlen(question) + 1; ``` 其中,dns_header 表示 DNS 报文头结构体,question 表示查询问题部分,answer 表示查询回答部分。 6. 提取 DNS 查询结果 从 DNS 响应报文中提取查询结果,例如: ```c struct dns_answer *ans = (struct dns_answer *) answer; char *ip = inet_ntoa(ans->ip); ``` 其中,dns_answer 表示 DNS 回答结构体,ip 表示查询到的 IP 地址。 注意,以上代码仅为示例,实际实现中还需要考虑更多细节和异常情况。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值