计算机网络自顶向下(中科大郑烇):DNS
权威DNS服务器:组织机构的DNS服务器,提供组织机构服务器(如:Web和mail)可访问的主机和IP之间的映射。当本地名字服务器不能解析名字时,联系根名字服务器顺着根-TLD一直到找到权威名字服务器。TTL:生存时间,决定了资源记录应当从缓存中删除的时间。RR格式:(name,value,type,ttl)组织机构可以选择实现自己维护或某个服务提供商来维护。dns:保存资源记录(RR)的分布式数
DNS
DNS(Domain Name System)
- DNS的必要性
- IP地址标识主机,路由器
- 但IP地址不好记忆,不便人类使用(没有意义)
- 人类一般倾向于使用一些有意义的字符串来标识Internet上的设备
- 例如:www.ustc.edu.cn所在的web服务器
- 存在着“字符串”—IP地址转换的必要性
- 人类用户提供要访问机器的“字符串”名称
- 由DNS负责转换成二进制的网络地址
DNS系统需要解决的问题
- 问题1:如何命名设备
- 用有意义的字符串:好记,便于人类使用
- 解决一个平面命名的重名问题:层次化命名
- 问题2:如何完成名字到IP地址的转换
- 分布式的数据库维护和响应名字查询
- 问题3:如何维护:增加或者删除一个域,需要在域名系统中做哪些工作
DNS(Domain Name System)的历史
- ARPANET的名字解析解决方案
- 主机名:没有层次的一个字符串(一个平面)
- 存在着一个(集中)维护站:维护着一张主机名-IP地址的映射文件:Hosts.txt
- 每台主机定时从维护站取文件
- ARPANET解决方案的问题
- 当网络中主机数量很大时
- 没有层次的主机名很难分配
- 文件的管理,发布,查找都很麻烦
- 当网络中主机数量很大时
DNS(Domain Name System)总体思路和目标
- DNS的主要思路
- 分层的,基于域的命名机制
- 若干分布式的数据库完成名字到IP地址的转换
- 运行在UDP之上端口号为53的应用层服务
- 核心的Internet功能,但以应用层协议实现
- 在网络边缘处理复杂性
- DNS的主要目的:
- 实现主机名-IP地址的转换(name/IP translate)
- 其他目的
- 主机别名到规范名字的转换:Host aliasing
- 邮件服务器别名到邮件服务器的正规名字的转换:Mail server aliasing
- 负载均衡:Load Distribution
问题1:DNS名字空间(The DNS Name Space)
- DNS域名结构
- 一个层次命名设备会有很多重名
- DNS采用层次树状结构的命名方法
- Internet根被分为 几百个顶级域(top lever domains)
- 通用的(generic)
- .com;.edu;.int;.mil;.net;.org;.firm;.hsop;.web;.arts;.rec;
- 国家的(countries)
- .cn ; .us ; .nl ; .jp
- 每个(子)域下面可划分为若干域(subdomains)
- 树叶是主机
DNS:根名字服务器
共有13个根名字服务器
DNS名字空间(The DNS Name Space)
- 域名(Domain Name)
- 从本域往上,直到树根
- 中间使用” . “间隔不同的级别
- 例如:ustc.edu.cn
- auto.ustc.edu.cn
- 域的域名:可以用于表示一个域
- 主机的域名:一个域上的一个主机
- 域名的管理
- 一个域管理其下的子域
- .jp被划分为ac.jp co.jp
- .cn被划分为 edu.cn com.cn
- 创建一个新的域,必须征得它所属域的同意
- 一个域管理其下的子域
- 域与物理网络无关
- 域遵从组织界限,而不是物理网络
- 一个域的主机可以不在一个网络
- 一个网络的主机不一定在一个域
- 域的划分是逻辑的,而不是物理的
- 域遵从组织界限,而不是物理网络
问题2:解析问题-名字服务器(Name Server)
- 一个名字服务器的问题
- 可靠性问题:单点故障
- 扩展性问题:通信容量
- 维护问题:远距离的集中式数据库
- 区域(zone)
- 区域的划分有区域管理者自己决定
- 将DNS名字空间划分为互不相交的区域,每个区域都是树的一部分
- 名字服务器;
- 每个区域都有一个名字服务器;维护着它所管辖区域的权威信息(authoritative record)
- 名字服务器允许被放置在区域之外,以保障可靠性
名字空间划分为若干区域:Zone
权威DNS服务器:组织机构的DNS服务器,提供组织机构服务器(如:Web和mail)可访问的主机和IP之间的映射
组织机构可以选择实现自己维护或某个服务提供商来维护
TLD服务器
- 顶级域(TLD)服务器:负责顶级域名(如com,org,net,edu和gov)和所有国家级的顶级域名(如cn,uk,fr,ca,jp)
- Network solutions 公司维护com TLD服务器
- Educause公司维护edu TLD服务器
区域名字服务器维护资源记录
- 资源记录(resource records)
- 作用:维护 域名-IP地址(其他)的映射关系
- 位置:Name Server的分布式数据库中
- RR格式:(domain_name,ttl,type,class,Value)
- Domain_name:域名
- Ttl:time to live:生存时间(权威,缓冲记录)
- Class 类别:对于Internet,值为IN。所以DNS一开始不是专门给互联网用的
- Value 值:可以是数字,域名或ASCII串
- Type 类别:资源记录的类型
DNS记录
dns:保存资源记录(RR)的分布式数据库
RR格式:(name,value,type,ttl)
- Type=A
- Name为主机
- value为IP地址
- Type=NS
- Name为域名(如foo.com)
- value为该域名的权威服务器的域名
- Type=CNAME
- Name为规范名字的别名
- www.ibm.com的规范名字:severeast.backup2.ibm.com
- value为规范名字
- Type=MX
- value为name对应 的邮件服务器的名字
TTL:生存时间,决定了资源记录应当从缓存中删除的时间
资源记录(resource records)
- 例子
DNS(Domain Name System)
- DNS大致工作过程
- 应用调用解析器(resolver)
- 解析器作为客户像Name Server发出查询报文(封装在UDP段中)
- Name Server返回响应报文(name/ip)
本地名字服务器(Local Name Server)
- 并不严格属于层次结构
- 每个ISP(居民区的ISP,公司,大学)都有一个本地DNS服务器
- 也称为”默认名字服务器“
- 当一个主机发起一个DNS查询时,查询被送到本地DNS服务器
- 起着代理的作用,将插叙转发到层次结构中
名字服务器(Name Server)
- 名字解析过程
- 目标名字在Local Name Server中
- 情况1:查询的名字在该区域内部
- 情况2:缓存(cashing)
- 目标名字在Local Name Server中
当本地名字服务器不能解析名字时,联系根名字服务器顺着根-TLD一直到找到权威名字服务器
递归查询
递归查询:
- 名字解析负担都放在当前联络的名字服务器上
- 问题:根服务器的负担太重
- 解决:迭代查询(iterated queries)
迭代查询
- 主机cis.poly.edu想知道主机gaia.cs.umass.edu的ip地址
- 根(及各级域名)服务器返回的不是查询结果,而是下一个NS的地址
- 最后由权威名字服务器给出解析结果
- 当前联络的服务器给出可以联系的服务器的名字
- 我不知道这个名字,但是可以向这个服务器请求
DNS协议,报文
DNS协议:查询和响应报文的报文格式相同
提高性能:缓存
- 一旦名字服务器学到了一个映射,就将该映射缓存起来
- 根服务器通产都在本地服务器中缓存
- 使得根服务器不用经常被访问
- 目的:提高效率
- 可能存在的问题:如果情况变化,缓存结果和权威资源记录不一致
- 解决方案:TTL(默认2天)
问题3:维护问题:新增一个域
- 在上级域的名字服务器中增加两条记录,指向这个新增的子域的域名和域名服务器的地址
- 在新增子域的名字服务器上运行名字服务器,负责本域的名字解析:名字→IP地址
- 例子:在com域中建立一个”Network Utopia“
- 到注册登记机构注册域名networkutopia.com
- 需要像该机构提供权威DNS服务器(基本的,和辅助的)名字和IP地址
- 登记机构在com TLD服务器中插入两条RR记录
- (networkutopia.com,dns1networkutopia.com,NS)
- (dns.networkutopia.com,212.212.212.1,A)
- 在networkutopia.com的权威服务器中确保有
- 用于web服务器的www.networkuptopia.com的类型为A的记录
- 用于邮件服务器的mail.networkuptopia.com的类型为MX的记录
攻击DNS
DDos攻击
- 对根服务器进行流量轰炸攻击:发送大量ping
- 没有成功
- 原因1:根目录服务器配置了流量过滤器,防火墙
- 原因2:Local DNS服务器缓存了TLD服务器的IP地址,因此无需查询根服务器
- 向TLD服务器流量轰炸攻击:发送大量查询
- 可能更危险
- 效果一般:大部分DNS缓存了TLD
重定向攻击
- 中间人攻击
- 截获查询,伪造回答,从而攻击某个(DNS回答指定的IP)站点
- DNS中毒
- 发送伪造的应答给DNS服务器,希望它能够缓存这个虚假的结果
- 技术上较困难:分布式截获和伪造利用DNS基础设施进行DDos攻击
- 伪造某个IP进行查询,攻击这个目标ip
- 查询放大,响应报文比查询报文大
- 效果有限
总的来说,dns比较健壮
DNS递归算法与迭代算法的区别与联系
1. 递归查询(Recursive Query)
- 定义:客户端向DNS服务器请求时,若服务器无缓存记录,则由该服务器负责向其他DNS服务器完全代理查询,直到获得最终结果并返回客户端。
- 流程:
- 客户端向本地DNS服务器发送递归查询请求(如查询
www.example.com
)。 - 本地DNS服务器依次查询根DNS → 顶级域(如
.com
) → 权威DNS(如example.com
的NS记录),直至获取目标IP。 - 本地DNS将结果返回客户端。
- 客户端向本地DNS服务器发送递归查询请求(如查询
- 特点:
- 客户端只需发送一次请求,等待最终结果。
- 本地DNS服务器承担所有查询负载。
- 通常用于客户端与本地DNS服务器之间。
2. 迭代查询(Iterative Query)
- 定义:DNS服务器收到请求后,若自身无记录,则返回下一个可查询的DNS服务器地址,由请求方(客户端或其他服务器)自行继续查询。
- 流程:
- 客户端向本地DNS服务器请求
www.example.com
。 - 本地DNS若无缓存,向根DNS查询,根DNS返回
.com
顶级域服务器地址。 - 本地DNS向
.com
服务器查询,获取example.com
的权威DNS地址。 - 本地DNS向权威DNS查询,最终获得IP地址并缓存。
- 客户端向本地DNS服务器请求
- 特点:
- 本地DNS服务器仅提供线索,不代理完成所有查询。
- 查询链路由请求方逐步完成。
- 通常用于DNS服务器之间的查询。
3. 递归与迭代的区别
维度 | 递归查询 | 迭代查询 |
---|---|---|
责任主体 | 服务器完全代理查询,客户端等待结果 | 服务器返回线索,请求方继续查询 |
网络负载 | 服务器压力大(需处理全部查询步骤) | 负载分散到多个服务器 |
响应内容 | 最终结果(IP地址或错误) | 可能返回下一级DNS服务器地址或结果 |
典型场景 | 客户端 → 本地DNS服务器 | 本地DNS服务器 → 根/顶级域/权威DNS服务器 |
4. 递归与迭代的联系
- 组合使用:
实际DNS解析中,递归和迭代通常结合使用。例如:- 客户端发起递归查询至本地DNS服务器。
- 本地DNS服务器发起迭代查询至根DNS、顶级域DNS等,逐步获取结果。
- 缓存优化:两种方式均依赖DNS缓存机制减少重复查询。
其他DNS相关算法与机制
1. DNS缓存(Caching)
- 原理:DNS服务器缓存查询结果,减少重复查询开销。
- TTL(Time to Live):缓存有效期由权威DNS设置的TTL值决定。
- 示例:本地DNS缓存
example.com
的IP地址24小时(TTL=86400秒)。
2. 负载均衡(Load Balancing)
- 原理:通过返回多个IP地址分配流量,提升服务可用性。
- 实现方式:
- 轮询(Round Robin):依次返回多个A记录的IP地址。
- 权重分配(Weighted):根据服务器性能分配不同权重。
- 地理路由(GeoDNS):根据用户位置返回最近的IP。
- 示例:
www.large-site.com
解析为192.0.2.1
、192.0.2.2
、192.0.2.3
。
3. DNSSEC(DNS Security Extensions)
- 原理:通过数字签名验证DNS响应真实性,防止DNS欺骗(Spoofing)或缓存投毒(Cache Poisoning)。
- 关键机制:
- RRSIG(Resource Record Signature):记录的数字签名。
- DS(Delegation Signer):建立信任链的公钥哈希。
- 示例:客户端验证
bank.com
的A记录签名是否合法。
4. Anycast路由
- 原理:多个地理分布的DNS服务器共用同一IP地址,用户请求自动路由至最近的节点。
- 优势:降低延迟,提升抗DDoS能力。
- 示例:根DNS服务器(如
根服务器A
全球部署13个Anycast节点)。
5. 反向DNS查询(Reverse DNS Lookup)
- 原理:通过IP地址查询域名(PTR记录)。
- 格式:将IPv4反向格式化为
in-addr.arpa
域(如1.2.3.4
→4.3.2.1.in-addr.arpa
)。 - 用途:邮件服务器验证、日志分析。
6. EDNS(Extension Mechanisms for DNS)
- 原理:扩展DNS协议支持更大响应、客户端子网信息传递(ECS)等。
- 应用:
- CDN优化:通过ECS传递用户IP子网,返回最近的CDN节点。
- 大报文支持:解决传统DNS的512字节UDP限制。
总结
- 递归与迭代是DNS解析的基础,前者简化客户端逻辑,后者分散服务器压力。
- 其他算法如缓存、负载均衡、DNSSEC等,共同保障DNS高效、安全、可靠。
- 实际应用中,递归与迭代协同工作,结合缓存和扩展协议,形成完整的域名解析体系。
更多推荐
所有评论(0)