知行合一
Github
顺翔的技术驿站
顺翔的技术驿站
  • README
  • ABOUTME
  • Computer Science
    • 数据结构与算法
      • 位运算以及位图
      • 随机数
      • 递归
      • 经典排序算法
      • 经典查找算法
      • 数组和动态数组
      • 链表
      • 栈和队列
      • 树
      • 哈希表
    • 计算机网络
      • 物理层
      • 数据链路层
      • 网络层
        • TCP
      • 运输层
      • 应用层
      • HTTP
        • HTTPS的原理
        • DNS详解
        • file协议
        • 邮件协议
    • 设计模式
      • 单例模式
      • 建造者模式
      • 原型模式
      • 工厂模式
      • 享元模式
      • 代理模式
      • 装饰者模式
      • 桥接模式
      • 适配器模式
      • 外观模式
      • 组合模式
      • 事件驱动
      • 有限状态机
      • 备忘录模式
      • 模板方法模式
      • 策略模式
      • 迭代器模式
      • 命令模式
      • 解释器模式
    • 加密与解密
      • 数字证书原理
      • cfssl
  • Programming Language
    • 编程语言学习要素
    • Java
      • 集合
        • List
          • ArrayList
          • Vector
          • Stack
          • LinkedList
        • Iterator
        • Set
          • HashSet
          • TreeSet
        • Map
          • HashMap
          • HashTable
          • TreeMap
          • LinkedHashMap
      • 常用API
        • 日期时间处理
        • System
        • Random
        • Arrays
        • Scanner
        • 格式化输出
      • java特性
        • java5特性
        • java8特性
        • java9特性
        • java10特性
        • java11特性
      • 并发编程
        • 线程基础
        • 线程同步:synchronized及其原理
        • 线程同步: volatile
        • 锁机制
        • 锁的分类与对应的Java实现
        • JUC:同步辅助类
        • JUC: AtomicXXX
        • 线程池
        • ThreadLocal详解
      • 测试
        • 使用JMH进行基准测试
      • JVM
        • 强引用、软引用、弱引用、虚引用
        • jvm内存模型
        • jvm优化
        • GC算法与回收器
        • 静态绑定与动态绑定
      • ORM
        • Mybatis
          • IBatis常用操作
      • Web编程
        • Servlet详解(一)
        • Servlet详解(二):request和response对象
        • Servlet详解(三):会话技术与Cookie
        • JSP详解(一):页面构成、EL表达式
        • JSP详解(二):九大内置对象
        • JavaWeb的编码问题
        • Thymeleaf
      • Velocity
      • Java日志框架总结
      • Spring
        • SpringIOC
        • SpringMVC
        • SpringBoot源码
      • 其他
        • Apache Commons Lang使用总结
        • 使用FtpClient进行ftp操作
        • Java PDF操作总结
        • Java使用zip4j进行文件压缩
        • Java解析Excel总结
    • JVM Language
      • Groovy
      • Scala
    • Kotlin
      • 变量和常量
      • 数据类型
        • 基本数据类型
        • 容器类型
        • 函数类型
        • null和null安全
      • 流程控制
      • 包
      • 面向对象
    • Golang
      • 关键字与标识符
      • 变量和常量
      • 数据类型
      • 函数
      • 常用API
        • 时间日期处理
        • 字符串操作
        • 正则表达式
      • 控制语句
      • 包package
      • 面向对象
      • 错误处理
      • 命令行编程
        • Cobra
      • 文件操作
      • 测试
      • 并发编程
        • sync包详解
      • 数据格式与编码
        • 使用encoding包操作xml
        • 使用encoding包操作json
        • 使用magiconair操作properties
        • 使用go-ini操作ini
      • 反射
      • Build Tools
        • Go Module
        • Go Vendor
      • 日志框架
        • zap日志框架
      • Web编程
        • Gin
    • JavaScript
      • 数据类型
      • ECMAScript
        • ECMAScript6
      • NodeJS
    • TypeScript
      • 变量和常量
      • 数据类型
      • 函数
      • 面向对象
      • 泛型
      • Build Tools
        • tsc编译
        • 与webpack整合
    • Python
      • BuildTools
        • requirements.txt
        • Ananconda
    • Swift
      • 变量和常量
    • Script Language
      • Regex
      • BAT
      • Shell
    • Markup Language
      • Markdown
      • Yaml
  • Build Tools
    • CMake
    • Maven
      • 搭建Nexus私服
      • maven使用场景
    • Gradle
  • Version Control
    • Git
      • Git工作流
      • Git分支管理
      • Git Stash
      • Git Commit Message规范
      • .gitttributes文件
    • SVN
  • Distributed
    • 分布式基础理论
      • 互联网架构演变
      • 架构设计思想AKF拆分原则
      • CAP理论
      • BASE理论
    • 一致性
      • 一致性模型
      • 共识算法
        • Paxos
        • Raft
        • ZAB
      • 复制
        • 主从复制
        • Quorum机制
        • Nacos Distro协议
      • 缓存一致性
        • 双写一致性
        • 多级缓存一致性
    • 事务一致性
      • Seata
      • 本地消息表实现方案
      • 关于dpad的事务问题的分析
    • IO
    • RPC协议
    • 序列化
    • Session共享
    • 分布式协调
      • Zookeeper
        • zk集群4节点搭建
    • 服务治理
      • Dubbo分布式治理
    • 分布式ID
      • 分布式ID生成策略总结
    • 分布式锁
    • 应用服务器
      • Tomcat
    • Web服务器
      • Nginx
        • Nginx的基本配置
        • ab接口压力测试工具
        • nginx模块
        • 随机访问页面
        • 替换响应内容
        • 请求限制
        • 访问控制
        • 状态监测
        • nginx应用场景
        • 代理服务
        • 负载均衡
        • 缓存
        • 静态资源服务器和动静分离
        • 附录
      • Kong
    • 缓存中间件
      • Caffeine
      • memcached
      • Redis
        • Centos下安装Redis
        • RatHat下安装Redis
    • 数据库中间件
      • ShardingSphere
      • MyCat2
    • 消息中间件
      • Kafka
      • RocketMQ
  • Microservices
    • 服务发现
      • Nacos注册中心
      • Consul
    • 配置中心
      • Apollo
    • 消息总线
    • 客户端负载均衡
    • 熔断器
    • 服务网关
    • 链路追踪
      • Skywalking
  • Domain-Specific
    • Auth
      • 有关权限设计的思考
      • 认证方式
      • JWT
    • 任务调度
      • QuartzScheduler
      • Elastic-Job
      • XXL-Job
      • PowerJob
    • 工作流
      • BPM
      • Activiti
      • Flowable
    • 规则引擎
      • Drools
  • Architect
    • DDD领域驱动设计
      • 三层架构设计
      • 四层架构设计
    • Cola
    • 代码设计与代码重构
      • 重构改变既有代码设计
      • 枚举规范化
      • 接口幂等
      • 限流
      • 历史与版本
      • 逻辑删除和唯一索引
      • 业务对象设计
    • 单元测试
      • SpringBoot单元测试实践
    • 项目管理
    • APM
      • SkyWalking
      • Arthas
    • 性能优化
      • 接口性能优化
    • 系统设计
      • 流程中台
      • 短信中台
      • 权限中台
        • 智电运维平台组织架构改造二期
  • Database
    • Oracle
      • Docker下安装oracle11g
    • IBM DB2
    • Mysql
      • 安装Mysql
      • 用户与权限管理
      • MySQL的逻辑架构
      • 存储引擎
      • 索引详解
      • MySql的列类型
      • MySql中表和列的设计
      • MySql的SQL详解
      • 锁机制
      • 事务
      • Mysql函数总结
      • MySql存储过程详解
      • MySql触发器详解
      • Mysql视图详解
      • Mysql中Sql语句的执行顺序
      • 配置MySql主从和读写分离
      • MySql的备份策略
      • MySql分库分表解决方案
      • MySql优化总结
      • MySQL实战调优
        • schema与数据类型优化
    • Mongo
  • File System
    • README
    • HDFS
    • FastDFS
    • MinIO
  • Linux
    • 常用的Linux命令
    • vim
    • Linux磁盘管理
    • Linux系统编程
    • RedHat
      • rpm包管理器具体用法
    • Ubuntu
      • Ubuntu下录制屏幕并做成gif图片
      • Ubuntu20.05LiveServe版安装
  • DevOps
    • VM
      • 新建一个新的Linux虚拟机需要配置的东西
      • VMware桥接模式配置centos
      • VMwareFusion配置Nat静态IP
    • Ansible
    • Container
      • Docker
        • Dockerfile详解
        • DockerCompose详解
      • Containerd
    • Kubernetes
      • 安装k8s
        • 使用Minikube安装k8s
        • centos7.x下使用kubeadm安装k8s1.21
        • ubuntu20下使用kubeadm安装k8s1.21
        • centos7.x下使用二进制方式安装k8s1.20
        • 使用DockerDesktop安装K8s(适用M1芯片)
      • 切换容器引擎
      • 使用k8s部署项目的流程
      • 集群维护-备份升级排错
    • Gitlab
      • GitlabCI/CD
    • CI/CD
      • ArgoCD
  • Big-Data
    • Hadoop
    • MapReduce
    • HDFS
  • Front-End
    • Android
      • Log的使用、自定义Log工具类
      • Android倒计时功能实现
      • 解决ViewDrawableLeft左侧图片大小不可控的问题
      • AndroidSQLite基本用法
      • View的生命周期
      • 工具类
      • WebView详解
      • ViewTreeObserver类监听ViewTree
      • 在onCreate中获取控件的宽高等信息的几种方法
      • View的foreground属性
        • MaterialDesign
          • BottomNavigationBar
          • CardView
          • Elevation高度、shadows阴影、clipping裁剪、tint着色
          • TouchFeedbackRipple波纹动画
      • Volley完全解析——使用、源码
      • Android围住神经猫的实现
      • LookLook剖析,架构概述——MVP、Retrofit+RxJava
      • Android性能优化之渲染
    • Browser
      • 浏览器的工作原理
    • HTML
      • DOCTYPE标签、XHTML与HTML的区别
    • CSS
      • CSS的继承性、层叠性、权重
      • CSS浮动float详解(一):标准文档流
      • CSS浮动float详解(二):使用float
      • CSS浮动float详解(三):清除浮动方案
    • Tools Lib
      • JavaScript 文件下载解决方案-download.js
      • js-url 用于url的js开源库
      • jsuri 用于操作url的js开源库
      • window offset
    • React
      • 模块化和组件
      • 组件的三大核心属性
      • 事件处理
      • 表单数据收集
      • 生命周期
      • DOM的diff算法
      • 工程化
        • 脚手架create-react-app
        • 工程结构和模块化
      • 路由
  • Design
    • 产品设计
      • 交互设计
由 GitBook 提供支持
在本页
  • 域名空间结构
  • DNS 查询过程
  • 权威解析
  • 递归查询和迭代查询
  • 正向查询和反向查询
  • Bind服务
  • 在DNS中的域名
  • DNS 解析记录分类
  • 安装Bind
  • 启动
  • 配置
  • 配置权威解析

这有帮助吗?

在GitHub上编辑
  1. Computer Science
  2. 计算机网络
  3. HTTP

DNS详解

DNS, Domain Name System的缩写, 也就是域名系统. 因为在互联网中, 我们通过IP地址进行通讯, IP使用数字表示, 不便于记忆, 所以就需要DNS将域名与IP对应起来, 通过DNS服务可以将IP和域名相互转换.

在操作系统中, HOSTS文件优先于DNS对域名进行转换.

早期使用Hosts解析域名, 有以下几种缺点:

  • 名称解析效能低下, Hosts文件较大

  • Hosts文件维护困难


将域名解析为 IP:

  1. 客户机向DNS服务器发送域名查询请求

  2. DNS服务器告知客户机Web服务器IP地址

  3. 客户机使用IP地址与服务器进行通讯

域名空间结构

  • 根域, 点., 根域名的服务器只有13台

  • 顶级域

    • 组织域 com 商业, edu 教育, gov政府, org民间团体组织, net网络服务机构, mil军事机构

    • 国家或地区 cn 中国 jp 日本 uk 英国, hk 中国香港

  • 二级域: baidu.com, sina.com, 是购买来的域名

  • 子域, 或者叫三级域: www.baidu.com, www就是三级域, 是基于二级域配置的

域名分级, 具有层次结构, 可以分而治之处理, 这样索引起来就比较快.

DNS 查询过程

  1. 客户机向本地域名服务器发起域名查询

  2. 本地域名服务器如果曾经解析过该域名,则直接使用缓存(也就是DNS缓存), 返回给客户机访问网站. 如果未曾解析过, 他就回去询问根DNS服务器

  3. 根服务域名将.cn 的顶级域DNS服务地址返回给客户端

  4. 客户机去访问 .cn 顶级域DNS服务器查询ip, .cn顶级域如果不知道, 则会返回.com.cn 的DNS服务地址

  5. 客户机去访问 .com.cn 查询ip, 得到 imooc.com.cn 二级域的DNS 的 ip

  6. 客户机去访问 imooc.com.cn 的DNS服务地址, 终于得到了www.immoc.com.cn 的地址

在这个过程中, 本地服务器请求从根域名服务器直到查到imooc.com.cn 服务器的过程是迭代查询, 依次根据域名结构迭代查询DNS服务器地址, 最终得到IP地址. 而客户机请求本地域名服务器的查询过程是递归查询.

权威解析

最后一台返回 www.imooc.com.cn 的ip地址, 这个地址称作权威解析 IP地址, 这台服务器称作权威服务器.

递归查询和迭代查询

  • 递归查询: 要么作出查询成功的响应, 要么作出查询失败的响应. 一般客户机和服务器之间属于递归查询: 当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析, 则DNS服务器会向另外的DNS服务器发送请求, 得到结果后转交给客户机.

  • 迭代查询: 服务器收到一次迭代查询回复一次结果, 这个结果不一定是目标IP与域名映射关系, 有可能是下级DNS的地址

正向查询和反向查询

  • 正向查询: 根据域名查询IP地址

  • 反响查询: 根据IP地址查询域名

Bind服务

Bind是DNS服务, 他提供了以下几个服务:

  1. 域名解析服务

  2. 权威域名服务

  3. DNS工具, 可以用于测试DNS

在DNS中的域名

普通域名省略了根域名, 比如www.baidu.com 的实际域名为 www.baidu.com.

DNS 解析记录分类

A记录

权威解析IP地址, 最多使用, 根据域名直接完整解析为IP

CNAME记录

一个IP地址可能需要有多个域名时, 可以使用CNAME, 将其他域名解析为另一个域名, 再权威解析为IP地址. 也可以让我的域名解析到域名提供商上,让域名提供商完成解析

NS记录

第一台BindServer没法对域名进行权威解析, 所以就发送了一条NS记录, 让其发送到其他DNS服务器上解析域名, 根DNS, 顶级DNS都是发送的NS记录.

MX记录

针对邮件服务的解析, 配合A记录进行.

安装Bind

readHat:

yum install bind bind-chroot

ubuntu:

sudo apt-get install bind9

启动

named

查询进程:

ps -aux | grep named
named     10525  0.0  5.8 168284 57916 ?        Ssl  14:24   0:00 /usr/sbin/named -u named -c /etc/named.conf
root      11416  0.0  0.0 112724   988 pts/1    R+   16:11   0:00 grep --color=auto named

配置

/etc/named.conf:

  • options {} 整个Bind的全局选项

  • logging {} 服务日志选项

  • zone . {} DNS域解析

options {
        // Bind 监听 127.0.0.1 的53端口
        listen-on port 53 { 127.0.0.1; };
		// ipv6 53端口
        listen-on-v6 port 53 { ::1; };
		// Bind主配置路径, 数据库路径
        directory       "/var/named";
		// DNS缓存
        dump-file       "/var/named/data/cache_dump.db";
		// 静态解析文件
        statistics-file "/var/named/data/named_stats.txt";
		// 内存统计信息
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
        // 权限
		allow-query     { any; };

        /*
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable
           recursion.
         - If your recursive DNS server has a public IP address, you MUST enable access
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface
        */
        recursion yes;

        dnssec-enable no;
        dnssec-validation no;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.root.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        // 日志路径以及级别
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

// 根域解析, named.ca 记录了所有根域服务器的地址
zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

配置权威解析

配置/etc/named.conf, 修改

listen-on port 53 { any; };
allow-query     { any; };

配置 /etc/named.rfc1912.zones, 增加如下zone:

zone "svc.com" {
	type master;
	file "svc.com.zone"
	allow-update { none; };
}

当前路径配置为 directory "/var/named"; 所以在此目录下新建文件 svc.com.zone:

$TTL 1D
@       IN SOA  @ yangsx.svc.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
svc.com.	NS 	dns.svc.com.
dns.svc.com. 	A 	192.168.1.111
s1.svc.com. 	A 	192.168.1.111
s2.svc.com. 	A 	192.168.1.112
s3.svc.com. 	A 	192.168.1.113
s4.svc.com. 	A 	192.168.1.114
  • $TTL 1D 一天缓存刷新一次

  • @ 代表 .svc.com.

  • yangsx.svc.com. 管理员邮箱

  • svc.com. NS dns.svc.com. 一条NS解析, 告诉客户机, 无法解析请请求dns.svc.com DNS服务器进行权威解析

  • s2.svc.com. A 192.168.1.112 s2.svc.com 权威解析为ip 192.168.1.112

dig命令测试:

[root@server1 named]#  dig @192.168.1.111 s2.svc.com  

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> @192.168.1.111 s2.svc.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 783
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;s2.svc.com.			IN	A

;; ANSWER SECTION:
s2.svc.com.		86400	IN	A	192.168.1.112

;; AUTHORITY SECTION:
svc.com.		86400	IN	NS	dns.svc.com.

;; ADDITIONAL SECTION:
dns.svc.com.		86400	IN	A	192.168.1.111

;; Query time: 0 msec
;; SERVER: 192.168.1.111#53(192.168.1.111)
;; WHEN: 六 1月 23 17:36:57 CST 2021
;; MSG SIZE  rcvd: 89
上一页HTTPS的原理下一页file协议

最后更新于1年前

这有帮助吗?

客户机访问该ip地址请求资源

file
file
file