网课是b站中科大郑烇老师,杨坚老师课程,郑烇老师账号发布的
图片均来自郑老师分享的PPT
第二章 应用层
2.4DNS:域名系统
1、DNS的必要性
IP地址标识主机、路由器,但是IP地址不好记忆
人类一般倾向于使用一些有意义的字符串来标识Internet上的设备
存在着“字符串”—>IP地址的转换的必要性
人类用户提供要访问机器的“字符串”名称,由DNS负责转换成为二进制的网络地址
2、DNS系统需要解决的问题
问题1:如何命名设备
用有意义的字符串:好记,便于人类用使用
解决一个平面命名的重名问题:层次化命名
(1)DNS域名结构
一个层面命名设备会有很多重名
NDS采用层次树状结构的命名方法
Internet 根被划为几百个顶级域(top lever domains)
- 通用的(generic)
.com; .edu ; .gov ; .int ; .mil ; .net ; .org
.firm ; .hsop ; .web ; .arts ; .rec ; - 国家的(countries)
.cn ; .us ; .nl ; .jp
每个(子)域下面可划分为若干子域(subdomains)
树叶是主机
(2)DNS: 根名字服务器
(3)DNS名字空间(The DNS Name Space)
域名(Domain Name)构成
- 从本域往上,直到树根
- 中间使用“.”间隔不同的级别
域的域名:可以用于表示一个域(树枝是起点,树根是终点)
主机的域名:一个域上的一个主机(树叶是起点,树根是终点)
(4)域名的管理
-
一个域管理其下的子域
.jp 被划分为 ac.jp co.jp
.cn 被划分为 edu.cn com.cn -
创建一个新的域,必须征得它所属域的同意
(5)域与物理网络无关
- 域遵从组织界限,而不是物理网络
一个域的主机可以不在一个网络
一个网络的主机不一定在一个域 - 域的划分是逻辑的,而不是物理的
问题2:如何完成名字到IP地址的转换
分布式的数据库维护和响应名字查询
1>、一个名字服务器的问题
- 可靠性问题:单点故障
- 扩展性问题:通信容量
- 维护问题:远距离的集中式数据库
2>、区域(zone)
- 区域的划分有区域管理者自己决定
- 将DNS名字空间划分为互不相交的区域,每个区域都是树的一部分
- 名字服务器:
每个区域都有一个名字服务器:维护着它所管辖区域的权威信息
名字服务器允许被放置在区域之外,以保障可靠性
权威DNS服务器:
组织机构的DNS服务器, 提供组织机构服务器(如Web和mail)可访问的主机和IP之间的映射,组织机构可以选择实现自己维护或由某个服务提供商来维护
3>、顶级域(TLD)服务器:
负责顶级域名(如com, org, net, edu和gov)和所有国家级的顶级域名(如cn, uk,fr, ca, jp )
Network solutions 公司维护com TLD服务器
Educause公司维护edu TLD服务器
4>、区域名字服务器维护资源记录
- 资源记录(resource records)
作用:维护 域名-IP地址(其它)的映射关系
位置:Name Server的分布式数据库中 - RR格式: (domain_name, ttl, type,class,Value)
(1)Domain_name: 域名
(2)Ttl: time to live : 生存时间(权威,缓冲记录)
(TTL决定了资源记录应当从缓存中删除的时间,权威的生存时间为无限大,生存时间不是无限大的就是缓存,缓存的生存时间TTL默认为2天)
缓存是为了性能,删除是为了一致性
(3)Class 类别 :对于Internet,值为IN
(4)Value 值:可以是数字,域名或ASCII串
(5)Type 类别:资源记录的类型
例子:
资源记录(RR)格式: (domain_name, ttl, type,class,Value)
生存时间为空表示是权威
5>、DNS记录
DNS :保存资源记录(RR)的分布式数据库
资源记录(RR)格式:(name, value, type, ttl)
6>、DNS大致工作过程
- 应用调用 解析器(resolver)
- 解析器作为客户 向Name Server发出查询报文(封装在UDP段中)
- Name Server返回响应报文(name/ip)
7>、本地名字服务器(Local Name Server)
不严格属于层次结构
每个ISP (居民区的ISP、公司、大学)都有一个本地DNS服务器(即默认名字服务器)
当一个主机发起一个DNS查询时,查询被送到其本地DNS服务器
起着代理的作用,将查询转发到层次结构中
8>、名字服务器(Name Server)
名字解析过程
目标名字在Local Name Server中
情况1:
查询的名字在该区域内部
情况2:
缓存(cashing)
当与本地名字服务器不能解析名字时,联系根名字服务器顺着根-TLD 一直找到权威名字服务器
9>、上述情况2的查询方法
- 递归查询:
名字解析负担都放在当前联络的名字服务器上
(1)问题:根服务器的负担太重
(2)解决: 迭代查询(iterated queries) - 迭代查询
主机cis.poly.edu 想知道主机 gaia.cs.umass.edu的IP地址
(1)根(及各级域名)服务器返回的不是查询结果,而是下一个NS的地址
(2)最后由权威名字服务器给出解析结果,当前联络的服务器给出可以联系的服务器的名字
问题3:如何维护域名系统
增加或者删除一个域,需要在域名系统中做哪些工作
- 在上级域的名字服务器中增加两条记录,指向这个新增的子域的域名 和 域名服务器的地址
- 在新增子域 的名字服务器上运行名字服务器,负责本域的名字解析: 名字->IP地址
例子:在com域中建立一个“Network Utopia”
- 到注册登记机构注册域名networkutopia.com
需要向该机构提供权威DNS服务器(基本的、和辅助的)的名字和IP地址
登记机构在com TLD服务器中插入两条RR记录: (networkutopia.com,dns1.networkutopia.com, NS)
(dns1.networkutopia.com, 212.212.212.1, A) - 在networkutopia.com的权威服务器中确保有
(1)用于Web服务器的www.networkuptopia.com的类型为A的记录
(2)用于邮件服务器mail.networkutopia.com的类型为MX的记录
3、DNS的主要思路
- 分层的、基于域的命名机制
- 若干分布式的数据库完成名字到IP地址的转换
- 运行在UDP之上端口号为53的应用服务
- 域名解析是核心的Internet功能,但以应用层协议实现 (在网络边缘处理复杂性)
4、DNS主要目的
- 实现主机名-IP地址的转换(name/IP translate)
- 其它目的
主机别名到规范名字的转换:Host aliasing
邮件服务器别名到邮件服务器的正规名字的转换:Mail server aliasing
负载均衡:Load Distribution
5、DNS协议、报文
DNS协议:查询和响应报文的报文格式相同
6、缓存
一旦名字服务器学到了一个映射,就将该映射缓存起来
根服务器通常都在本地服务器中缓存着,使得根服务器不用经常被访问
目的:提高效率
可能存在的问题:如果情况变化,缓存结果和权威资源记录不一致
解决方案:TTL(默认2天),2天后删除
(TTL决定了资源记录应当从缓存中删除的时间,权威的生存时间为无限大,生存时间不是无限大的就是缓存,缓存的生存时间TTL默认为2天)
缓存是为了性能,删除是为了一致性
7、攻击DNS
总的说来,DNS比较健壮
DDoS 攻击
对根服务器进行流量轰炸
攻击:发送大量ping
没有成功
原因1:根目录服务器配置了流量过滤器,防火墙
原因2:Local DNS 服务器缓存了TLD服务器的IP地址, 因此无需查询根服务器
向TLD服务器流量轰炸攻击
攻击:发送大量查询
可能更危险
效果一般,大部分DNS缓存了TLD
重定向攻击
中间人攻击
截获查询,伪造回答,从而攻击某个(DNS回答指定的IP)站点
DNS中毒
发送伪造的应答给DNS服务器,希望它能够缓存这个虚假的结果
技术上较困难
分布式截获和伪造
利用DNS基础设施进行DDoS
- 伪造某个IP进行查询, 攻击这个目标IP
- 查询放大,响应报文比查询报文大
- 效果有限