Bootstrap

计算机网络学习笔记10(DNS)

网课是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
  • 查询放大,响应报文比查询报文大
  • 效果有限
;