DNS设计
作用
DNS: name -> IP address
挑战
我们如何将这个扩展到广域网?
为什么不是集中DNS
- 流量
- 遥远的中央数据库
- 单点更新
- 单点故障
Doesn’t scale!
goals
基本上是一个广域分布式数据库
可扩展性
稳健性
不需要:原子性、强一致性
DNS主机条目的属性
不同种类的映射是有可能的:
- 简单案例:1-1域名和IP地址之间的映射:
- kittyhawk.cmcl.cs.cmu.edu maps to 128.2.194.242
- 多个域名映射到相同的IP地址:
- eecs.mit.edu and cs.mit.edu both map to 18.62.1.6
- 单个域名映射到多个IP地址:
- aol.com and www.aol.com map to multiple IP addrs.
- 某些有效的域名不映射到任何IP地址:
- for example: cmcl.cs.cmu.edu
DNS设计:层次结构定义
- 层次结构中的每个节点都存储一个以相同后缀结尾的名称列表
- Suffix = path up tree
-
例如,给定这棵树,在哪里将被存储:
image.png
DNS设计:区域定义
- 区域=连续的名称空间部分
- 例如,完整的树,单个节点或子树
- 一个区域有一组关联的名称服务器
- 必须存储名称和树链接的列表
DNS设计:续。
- 通过说服所有者节点创建/委托一个子区域来创建区域
- 区域内的记录存储多个冗余名称服务器
- 主/主名称服务器手动更新
- 辅助/冗余服务器通过区域传输名称空间进行更新
- 区域传输是DNS服务器“配置”的批量传输 - 使用TCP来确保可靠性
- Example:
- 由CMU.EDU管理员创建的CS.CMU.EDU
- 谁创建CMU.EDU或.EDU?
DNS:根名称服务器
- 负责“根”区
- 全球13个根名称服务器
- 目前{a-m} .root-servers.net
- 本地名称服务器在无法解析名称时联系根服务器
- 使用众所周知的根服务器进行配置
服务器/解析器
- 每台主机都有一个解析器
- 通常是应用程序可链接到的库
- 手动配置本地名称服务器(例如/etc/resolv.conf)
- 名称服务器
- 要么负责一些区域或...
- 本地服务器
- 查找本地主机的远程主机名
- 通常回答关于本地区域的查询
Typical Resolution
image.png解决www.cmu.edu的步骤
- 应用程序调用gethostbyname()(RESOLVER)
- 解析器联系本地名称服务器(S1)
- S1向根服务器(S2)查询(www.cmu.edu)
- S2返回cmu.edu的NS记录(S3)
S3的记录怎么样?
这是附加信息部分的用途(PREFETCHING)
S1查询www.cmu.edu的S3
S3返回www.cmu.edu的记录
查询方法
- 递归查询:
- 服务器熄灭并搜索更多信息(递归)
- 只返回最终答案或“找不到”
- 迭代查询:
- 服务器尽可能多地响应(迭代)
- “我不知道这个名字,但问这个服务器”
工作负载对选择的影响?
- 本地服务器通常会递归
- 根/远程服务器进行迭代
工作量和缓存
- 所有服务器/名称是否可能同样受欢迎?
- 为什么这会成为一个问题? 我们如何解决这个问题?
- DNS响应被缓存
- 快速响应重复翻译
- 其他查询可能会重用查找的某些部分
- DNS负面查询被缓存
- 不必重复过去的错误
- 例如。 拼写错误,在resolv.conf中搜索字符串
- 缓存的数据周期性超时
- 由数据所有者控制的数据的生存时间(TTL)
- 每条记录都传递TTL
可靠性
- DNS服务器被复制
- 如果≥一个副本启动,名称服务可用
- 查询可以在副本之间进行负载平衡
- UDP用于查询
- UDP
- 为什么不适用TCP?
当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(TCP)
UDP传输速率快,不用牵手,重传丢包交给上层应用来做
- 超时尝试备用服务器
- Try alternate servers on timeout
Exponential backoff when retrying same server - Same identifier for all queries
Don’t care which server responds
网友评论