文章目录
DNS
- DNS 是给其他应用提供服务的,不是直接给人提供服务的(不直接给人提供服务)
- 将域名转化为 IP 地址
必要性
- DNS 为应用层的应用提供服务,得到了 IP 地址之后,应用层向传输层提交的是 IP 地址,因为 域名 是应用层的事情, IP 地址才是下层能够理解的
要解决的问题
- 如何命名设备(如何避免重名)—— 分层化的命名方式
- 如何解决域名到 iP 地址的转化问题——一台设备专门负责解析,要使用的人提供域名,服务器返回对应的 ip 地址(理论上可行,现实不行,因为设备太多,这种过于中心化的操作可能会导致很严重的问题)——分布式的解决思路(分布式的维护和解析域名)
- 如何维护:增加或者删除一个域名或子域名
DNS 域名结构
- NDS:域名
工作原理
- 分层式的,基于域的命名机制
- 若干分布式的数据库完成名字到 IP 地址的转换
- 运行在 UDP 的 53 端口的应用服务
- DNS 是一个互联网的核心功能,但是在网络边缘的客户端上进行处理(以应用层协议的方式实现)
主要目的
- 实现主机名—IP 地址的转换(name / IP translate)
- 其他目的:
- 主机别名到规范名字的转换:Host aliasing
- 邮件服务器别名到邮件服务器正规名字的转换:Mail server aliasing
- 负载均衡:load distribution
Q1:DNS 命名空间
域名
- 域名有两种,一种是从树的叶子节点向上找到树根(这表示的是一台机器的 域名)
- 第二种是从树的树枝起向树根找(这表示的是一个域的域名)
- 例如 ustc.edu.cn 表示的是一个域的域名;而 auto.ustc.edu.cn 表示的是一个服务器主机的域名
域名管理
- 一个域管理其下的子域,例如 .cn 这个域是中国的域名,那么它可以负责子域的命名,例如 edu 表示教育网站,edu.cn 就是 .cn 的一个子域;在其他国家,教育网站未必叫 edu,这要看那个国家如何指定这个子域的名称
- 域的划分是逻辑上的,而不是物理上的,比如美国有中国的大使馆,大使馆的域名还是属于 .cn 的
Q2 : 解析问题
单个 DNS 服务器的问题
- 如果只有一个域名服务器容易出现下面的问题:
权威名字服务器(authoritative record)
- 如何解决这个问题(分布式的方法):
- 将互联网的名字空间划分成一个个的 zone,zone 之间相互不重叠
- 在每个 zone 内部安排一个 权威名字服务器(authoritative record) 来维护这个 zone 内部的名字和 ip 地址的对应关系
- 每个权威名字服务器都要维护一个数据库,数据库内容包括:
- 内部的子域
- 内部的域名到 iP 地址的对应关系
- 所有的这些内容,统称 资源记录(resource records)
资源记录(resource records)
- 记录的是权威名字服务器中需要维护的内容;
- 资源记录的内容再数据库中存储的时候使用下面几个字段:
- Domain 域名
- ttl time to live 生存时间(权威,缓冲记录)
- Class 级别,Internet 的 class 是 IN
- Value 值, 可以是数字,域名,或者 ASCII 串
- Type 类别, 资源记录的类型
TTL 生存时间
- 如果 ttl 维护的是是一个权威记录,那么它的生存时间就是无限大,如果是一个缓存记录,那么生存时间可能是几天;
- 例如上海交大要访问中科大,那么上交大要去中科大的权威服务器查询中科大的 IP 与 域名的对应关系,然后将中科大的域名和 ip 的对应关系维护在上交大自己的服务器中,这个记录是一个缓存记录,过几天就删掉了
- 缓存是为了提高效率,删除是为了一致性,因为 ip 和 域名的对应关系可能会变,如果迁到另外一个 ip 那么就变了
Domain 域名: Value 值
- 域名和 ip 地址的对应关系就分别保存在 domain 字段和 value 字段中
Type 类别
-
控制了记录的方式,不同的字段应该记录什么内容
-
当 type=A 的时候,这时候的 domain 和 value 字段中分别存储的就是域名和 ip 地址
-
type=NS 的时候,domain 存的是域名,value 存的是该域名的权威服务器的域名
- 例如下图中,如果 yale 大学 cs 学院的域名为 cs.yale.edu 那么这个域在维护资源记录(RR)的时候就需要维护一条 type=NS 的记录,这条记录的 domain 是 cs.yale.edu,value 是 yale.edu 因为这个是他的权威服务器(父亲服务器)
- 例如下图中,如果 yale 大学 cs 学院的域名为 cs.yale.edu 那么这个域在维护资源记录(RR)的时候就需要维护一条 type=NS 的记录,这条记录的 domain 是 cs.yale.edu,value 是 yale.edu 因为这个是他的权威服务器(父亲服务器)
-
type=CNAME 的时候,Name 为规范名字的别名, value 记录的是规范名字
- 例如 www.ibm.com 是个别名,并不是规范的名字,其规范的名称是:servereast.backup2.ibm.com
-
type=MX 的时候,Value 为 Name 对应的邮件服务器的名字
资源记录实例
- 记录格式:domain, tll, class, type, value
- 图中内容的 domain 是 flits.cs.vu.nl; tll=86400s; class=IN; type=A; value=192.31.231.165
- 下面的例子中,tll 没有标记,代表这些是权威,生存时间无限大
DNS 大致工作原理
-
应用application 首先向解析器 resolver;
-
解析器作为客户向 local name server 发送查询报文
-
name server 返回响应报文(域名name/ip)
-
解析器将结果返回给应用程序
-
每台主机都需要主动或者通过协议自动设置将哪台 local name server 作为他查询的时候的对象。
-
如果 local name server 中找不到对应的信息怎么办?
递归查询
如果美国某台设备想访问 www.ustc.edu.cn 的网站,首先回去找 local name server,发现本地的名字服务器没有缓存,因此 local name server 会向 cn 的根域名服务器发出请求,cn 服务器会逐步向下查找 cn -> edu -> ustc 就找到了,然后跳到 中科大的权威名字服务器,找到 www.ustc.edu.cn 与其 ip 地址的对应关系
迭代查询
- 因为递归查询对于根服务器的负担太重了
- 通过 cn 得到 edu 的服务器线索,返回 edu 的地址,然后 local name 服务器再向 edu.cn 的权威名字服务器发出查询请求,然后再返回 ustc.edu.cn 的域名和 ip 地址对应的信息给 local name 服务器。
提高性能:缓存
DNS 协议 & 报文
- 查询和响应报文格式相同
- 标识符(ID)16 位:谁发出的查询请求,例如我和小明分别向 DNS 服务器发出了请求,如果不使用 ID 标志我和小明,那么 DNS 只能先向目标的名字服务器发送请求得到结果后把结果给我,然后才能处理小明的解析请求。但是如果用 ID 标志了我和小明,那么我们的请求就可以被同时发出去,DNS 得到解析结果后只要分别的找到我和小明的 ID 并给我们结果就行了。
- flags:
- 查询 / 应答
- 希望递归
- 递归可用
- 应答是否需要权威
Q3: 维护问题:如何新增一个域
- 首先新增一个域,它的顶级域肯定得知道并且维护这个信息,所以首先在其上级域中增加两条记录:
- 指向这个新增的子域的域名
- 指向这个新增的子域的服务器的地址