dns资源记录类型等

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介:

接上篇,我们知道每个域需要指定主机来实现dns服务的功能,所以有类似以下字段:

    baidu.com.       NS      ns.baidu.com.  (指定哪个主机实现管理域名服务器功能)

    ns.baidu.com.    A        1.1.1.1    (这个主机在哪个位置)

    实际上ns.baidu.com    A        1.1.1.1  这条记录在本机是可以不用指定的,因为真正授权是在上级指定的,也就是说以上两条记录应该在com这个域的域名数据库中指定,当然本机自身也要知道自己是谁,所以需要第一条记录,而既然本机可以成为ns服务器,说明本机的ip就是com指定的ip,所以第二条记录可以不要,之所以写上去是为了防止有人解析ns服务器的主机名A记录,此时我们需要返回结果。


    dns是如此的重要,万一dns服务器挂掉,会造成很多域名无法解析。所以,为了防止一台单点故障导致dns服务无法使用,所以dns服务提供主从服务。当然dns也允许单机工作,根据它们功能的不通可以分为以下几种类型:

    主域名服务器:主域名工作在主从模式下,在这个模式下dns可以在任意节点上解析,但是对dns的修改必须在主域名服务器上

    从域名服务器:从服务器提供dns解析功能,它的数据来源于主域名服务器的拷贝,从服务器定时像主服务器请求更新数据文件。

    缓存域名服务器(caching only server):如果一个dns服务器本身不管理任何域,但是它可以把它收到的信息存储下来,并提供给别人解析,那么这就是一个缓存dns服务器

    转发服务器(forwarding server):如果一个dns服务器既不管理某个域也不解析任何dns,只为主机转发dns请求,那么这就是一个转发服务器。


DNS的主从工作原理:

    dns主从服务器同时对外提供服务,所以要时刻保持数据的一致。为此,当主dns服务器数据库更新的时候从服务器必须到主服务器上cp数据到本地更新。但是从服务器怎么知道数据库改变了呢?它是这样子的:

    主服务器和从服务器中都记录一个序列号(serial number),因为所有的更新必须在主dns服务器上操作,所以每次更新dns数据库的时候,主dns就在序列号上+1,这样子,当从服务器发来查看更新请求时,对比下序列号,就可以知道自己是否需要更新。 

    

    那么,从服务器什么时候来检查是否更新呢?    

     同样地,dns服务器记录一个刷新时间(refresh time),每隔这个时间从服务器来检查一次更新。然而更新过程中可能因为网络故障等问题无法联系上主dns服务器,这个时候,如果主dns刚好更新数据库,而我们又因为更新失败而等待下一次更新时间的话,那么dns缓存过期就会带来长时间的解析错误,这是我们不愿意看到的,所以dns服务器还定义了一个重试时间(retry time),定义当请求更新失败时,重新发起请求的时间间隔。所以一般这个时间比刷新时间小得多。但是,如果主dns服务器已经挂了,从服务器会一直请求更新失败,那么这个时候就需要一个标准来认定主dns挂了,这个就是过期时间(expire time),当超过这个时间,从服务器会认为主服务器挂掉,然后从服务器自己也停止提供服务(这个是听说的额,我自己一直以为从服务器会替代主服务器,下一篇实战测试下)

    所以一个dns服务器的数据库会包含以下信息:

        序列号(serial number)

        刷新时间(refresh time)

        重试时间(retry time)

        超时时间(expire time)

        否定回答超时时间(negative answer ttl)

    事实上,它还需定义否定回答的超时时间,这个时间可以防止别人恶意访问


资源记录(resource record RR):

    我们把dns数据库中每一个条目称作一个资源记录(resource record RR)

    我们知道,dns是用来做名称解析的,所以一个资源必须包含要解析的对象(name)和解析出来的结果(value)

    我们还知道,以为缓存的关系,所以解析出来的结果需要一个过期时间,所以资源记录还需要ttl(time to live)值

    有时我们需要把域名转化为ip,有时又相反,这是两种不同的过程,所以资源记录还需要类型(rrt resource record type)

    所以一个资源记录格式大概如下:

    NAME    [ttl]    IN    RRT    VALUE

    N表示这是一个一个INTERNET的DNS资源记录,ttl加[]是因为,当所有的RR都有功能的TTL值的时候,我们可以把TTL值写在最上面,变成如下形式:

TTL 600;

NAME    IN    RRT    VALUE


那么资源记录有什么类型呢?常见的如下:

    

    1.A记录和AAAA记录,即域名-->ip,格式如下:

        ns.baidu.com. 600 IN   A        192.168.1.1  

        A是fqdn-->ipv4,AAAA是fqdn-->ipv6,一个A代表32位,对ipv6不太熟,这里不提供案例..


    2.反向记录(PTR,pointer)即ip-->fqdn,格式如下:

        1.1.168.192.in-addr.arpa.    600 IN PTR    ns.baidu.com.

    反向记录的写法比较特殊,它的name是ip反过来写并且以in-addr.arpa结尾


    3.ns记录,我们知道ns是用来指定哪个主机担任某个域的解析的,所以它是fqdn-->fqdn,并且还需要知道这个主机的地址,所以它一般包含一个ns记录和ns主机的A记录,格式如下:

        baidu.com.        600     IN    NS    ns.baidu.com

        ns.baidu.com.    600    IN    A    192.168.1.1


    4.SOA(start of Authority)记录,既然我们掌管某个域,那么我们就应该拥有这个域的某些管理信息(域名,主从服务器之间的同步信息)所以这条记录是很重要的,必须放在区域文件第一条,它的格式如下:

    ZONE_NAME    TTL    IN    SOA    FQDN    ADMIN_MAILBOX ( 

                                                            serial number

                                                            refresh time

                                                            retrytime

                                                            expiretime

                                                            negative answer ttl

                                                        )    #必须使用()而不是{ },且前后必须有空格,之前写错,勘误

        zone_name表示区域名(注意不是域名),ttl表示这条记录的过期时间,fqdn表示主dns服务器主机,admin_mailbox表示管理员的邮箱,剩下的参数前面已经讲过了,需要补充说的是,里面的时间单位可以写成M、H的形式,因为@在区域文件中有特殊含义(代表区域名,在bind的配置文件中定义),所以邮箱格式中的@必须转化为.

        时间单位:M(分钟)、H(小时)、D(天)、W(周)默认是秒

        邮箱格式:1@163.com--> 1.163.com

例子:

@    600    IN    SOA ns.baidu.com. 1.163.com. (

                                                    1

                                                    1H

                                                    2W

                                                    3D

                                                    600 )

也可以这么写:

baidu.com.    600 IN SOA ns.baidu.com. 1.163.com 1 1H 2W 3D 600

    

    5.mx记录:我们知道,我们发邮件一般发送地址都是xx@xx.com的形式,但是我们主机怎么知道xx是谁呢?它是哪台主机上的用户呢?所以dns服务器还必须提供mx记录,它告诉外界,哪台主机提供了邮件服务,哪台主机可以帮你找到用户,它的格式如下:

    ZONE_NAME    TTL    IN MX PRI    VALUE

    ri字段代表邮件服务器的优先级,值为0-99,数字越小优先级越高,这是因为可能提供多台邮件服务器的缘故


    6.cname(canonical name)记录,也叫作别名记录,即一个域名的别名,fqdn-->fqdn的形式,例子:

        www2.baidu.com.  50 IN CNAME    www.baidu.com.


区域和域的区别:(参考bind9手册,2.3章)

    整个域可以划分为多个区域,就比如说baidu.com是一个域(domain),它可以包含为a.www.baid.com.和b.ftp.baidu.com.这些主机,但是却用www.baidu.com.和ftp.baidu.com.这两个区域(zone)文件,可以说它们两者并没有太严格的关系,两种不同的概念,区域可以视为dns数据库的名称,是一种物理实现,而域是逻辑上的概念


     今天就到这了,关于dns服务器软件bind的实现,我们下篇再探讨















本文转自biao007h51CTO博客,原文链接: http://blog.51cto.com/linzb/1877979,如需转载请自行联系原作者



相关文章
|
23天前
|
开发框架 供应链 监控
并行开发模型详解:类型、步骤及其应用解析
在现代研发环境中,企业需要在有限时间内推出高质量的产品,以满足客户不断变化的需求。传统的线性开发模式往往拖慢进度,导致资源浪费和延迟交付。并行开发模型通过允许多个开发阶段同时进行,极大提高了产品开发的效率和响应能力。本文将深入解析并行开发模型,涵盖其类型、步骤及如何通过辅助工具优化团队协作和管理工作流。
54 3
|
11天前
|
缓存 监控 网络协议
|
11天前
|
存储 消息中间件 NoSQL
Redis数据结构:List类型全面解析
Redis数据结构——List类型全面解析:存储多个有序的字符串,列表中每个字符串成为元素 Eelement,最多可以存储 2^32-1 个元素。可对列表两端插入(push)和弹出(pop)、获取指定范围的元素列表等,常见命令。 底层数据结构:3.2版本之前,底层采用**压缩链表ZipList**和**双向链表LinkedList**;3.2版本之后,底层数据结构为**快速链表QuickList** 列表是一种比较灵活的数据结构,可以充当栈、队列、阻塞队列,在实际开发中有很多应用场景。
|
9天前
|
Dart 安全 编译器
Flutter结合鸿蒙next 中数据类型转换的高级用法:dynamic 类型与其他类型的转换解析
在 Flutter 开发中,`dynamic` 类型提供了灵活性,但也带来了类型安全性问题。本文深入探讨 `dynamic` 类型及其与其他类型的转换,介绍如何使用 `as` 关键字、`is` 操作符和 `whereType<T>()` 方法进行类型转换,并提供最佳实践,包括避免过度使用 `dynamic`、使用 Null Safety 和异常处理,帮助开发者提高代码的可读性和可维护性。
64 1
|
10天前
|
存储 NoSQL 关系型数据库
Redis的ZSet底层数据结构,ZSet类型全面解析
Redis的ZSet底层数据结构,ZSet类型全面解析;应用场景、底层结构、常用命令;压缩列表ZipList、跳表SkipList;B+树与跳表对比,MySQL为什么使用B+树;ZSet为什么用跳表,而不是B+树、红黑树、二叉树
|
1月前
|
安全 Java 编译器
Java 泛型深入解析:类型安全与灵活性的平衡
Java 泛型通过参数化类型实现了代码重用和类型安全,提升了代码的可读性和灵活性。本文深入探讨了泛型的基本原理、常见用法及局限性,包括泛型类、方法和接口的使用,以及上界和下界通配符等高级特性。通过理解和运用这些技巧,开发者可以编写更健壮和通用的代码。
|
2月前
|
网络协议 大数据 云栖大会
2024云栖大会 预告:IPv6与DNS基础资源专场
2024云栖大会 预告:IPv6与DNS基础资源专场
2024云栖大会 预告:IPv6与DNS基础资源专场
|
22天前
|
弹性计算 网络协议 网络安全
内网DNS解析&VPN网关联动实现云上访问云下资源
内网DNS解析&VPN网关联动实现云上访问云下资源
|
3月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
159 6
|
3月前
|
存储 数据挖掘 大数据
深度解析Hologres计算资源配置:如何根据业务场景选择合适的计算类型?
【8月更文挑战第22天】Hologres是一款由阿里云提供的分布式分析型数据库,支持高效的大数据处理与分析。本文通过电商优化商品推荐策略的案例,介绍了Hologres中的计算组型与通用型配置。计算组型提供弹性扩展资源,适合大规模数据及高并发查询;通用型则适用于多数数据分析场景,具备良好计算性能。通过实例创建、数据加载、计算任务建立及结果查询的步骤展示,读者可理解两种配置的差异并根据业务需求灵活选择。
54 2

相关产品

  • 云解析DNS
  • 推荐镜像

    更多