关于DNS
对于 计算机网络-自顶向下的方法 的读书笔记
怎样标识一台主机
主机的一种标识方法为他的主机名, 如 www.baidu.com
使用主机名的一个优点就是便于记忆
但更多的是他的缺点:
主机名几乎没有提供关于主机在因特网中的位置信息
主机名可能由不定长的数字和字母组成, 路由器难以处理
所以主机也可以用IP地址进行标识
IP地址具有层次结构,从左至右扫描它时, 会得到越来越多主机在因特网中的位置信息
关于DNS
域名系统(Domain Name System)
是一个由分层的DNS服务器实现的分布式数据库
一个使得主机能够查询分布式数据库的应用层协议
DNS协议运行在UDP上, 使用53号端口
DNS提供的服务
主机名到IP地址转换
主机别名
有复杂主机名的主机可以有一个或多个别名, 别名比规范主机名要更加容易记忆, 应用程序可以调用DNS来获得主机别名对应的规范主机名和主机的IP地址
邮件服务器别名
电子邮件应用程序可以调用DNS, 对提供的主机别名进行解析, 获得主机别名对应的规范主机名和主机的IP地址
MS记录允许一个公司的邮件服务器和Web服务器使用相同 (别名化) 的主机名
负载分配
繁忙的站点会被冗余分布在多个服务器上, 每台服务器均运行在不同的端系统上, 每个都有不同的IP地址
所以一个IP地址集合与同一个规范主机名相联系
DNS数据库中存储着这些IP地址集合
每次域名解析请求都会根据对应的负载均衡算法计算出一个不同的IP地址并返回,以实现负载均衡
负载均衡的优缺点
优点
就近访问,提升访问速度:DNS解析时可以根据请求来源IP,解析成距离用户最近的服务器地址,可以加快访问速度,从而到达改善性能
缺点
更新不及时:DNS缓存的时间比较长,修改DNS陪之后,由于缓存的原因,会导致部分用户还会继续访问修改之前的地址,毫无疑问这样的访问会失败的,不仅达不到负载均衡的效果,更严重的是用户不能正常使用
扩展性差:DNS负载均衡的控制权限不是使用者的,而是域名商那里,无法根据业务特点针对性做一些定制化功能,更别提扩展性了
分配策略比较简单:DNS负载均衡支持的算法不多,不能区分服务器的差异,也无法感知后端服务的状态
针对以上DNS的优缺点,也有部分公司自己实现了HTTP-DNS,即使使用HTTP协议实现一个私有的DNS系统,但是其实和上面的DNS优缺点刚刚相反
DNS工作机理
对于调用DNS客户端的程序而言, DNS是一个黑盒子
程序需要将主机名转换成IP地址
调用DNS客户端,指名需要被转换的主机名
用户机上的DNS收到后, 向网络中发送一个DNS查询报文 所有的DNS请求和回答报文使用UDP数据报经端口53发送
用户主机上的DNS接受到一个提供所希望的映射的DNS回答报文
这个映射结果被传到调用DNS的程序
集中式
在因特网上只使用一个DNS服务器, 处理所有的请求
这显然是不可能的
单点故障 这个服务器寄了因特网就没了
通信容量 不能同时处理大量查询
远距离的集中式数据库 由于距离远,会造成网络拥堵问题
维护开销 维护困难
分布式层次数据库
DNS使用了大量服务器,以层次方式阻止,分布在全世界范围内
大体上有三种类型的服务器:根DNS服务器, 顶级域DNS服务器, 权威DNS服务器
根服务器提供TLD服务器的IP地址,TLD服务器提供权威DNS服务器的IP地址
域与物理网络无关
域遵从组织界限,而不是物理网络
一个域的主机可以不在一个网络,一个网络的主机不一定在一个域
域的划分是逻辑的,而不是物理的
根DNS服务器
由13个不同组织管理,没有一个在CN
顶级域DNS服务器
对于每个顶级域和所有国家的顶级域都有TLD服务器(或服务器集群)
权威DNS服务器
在因特网上具有公共可访问主机的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机名字映射为IP地址, 一个组织机构的权威DNS服务器收藏了这些DNS记录
本地名字服务器(Local Name Server)
并不严格属于层次结构
每个ISP都有一个本地DNS服务器,也称 “默认名字服务器”
当一个主机发起一个DNS查询时,查询被送到其本地DNS服务器
起着代理的作用,将查询转发到层次结构中
主机的本地DNS通常 “临近” 本主机
迭代查询和递归查询
一些奇奇怪怪的东西, 先丢这里, 还不知道怎么整理
权威DNS:
权威DNS是经过上一级授权对域名进行解析的服务器,同时它可以把解析授权转授给其他人,如COM顶级服务器可以授权dns.com这个域名的的权威服务器为NS.ABC.COM,同时NS.ABC.COM还可以把授权转授给NS.DDD.COM,这样NS.DDD.COM就成了ABC.COM实际上的权威服务器了。平时我们解析域名的结果都源自权威DNS。比如dns.com的权威DNS服务器就是帝恩思的ns1.dns.com ns2.dns.com
递归DNS:
负责接受用户对任意域名查询,并返回结果给用户。递归DNS可以缓存结果以避免重复向上查询。我们平时使用最多的就是这类DNS,他对公众开放服务,一般由网络运营商提供,大家都自己可以架递归DNS提供服务。递归DNS一定要有可靠的互联网连接方可使用。比如谷歌的8.8.8.8和8.8.4.4以及114的114.114.114.114和114.114.115.115都属于这一类DNS。你本地电脑上设置的DNS就是这类DNS
转发DNS:
负责接受用户查询,并返回结果给用户。但这个结果不是按标准的域名解析过程得到的,而是直接把递归DNS的结果转发给用户。它也具备缓存功能。他主要使用在没有直接的互联网连接,但可以连接到一个递归DNS那里,这时使用转发DNS就比较合适。其缺陷是:直接受递归DNS的影响,服务品质较差。比如我们用的路由器里面的DNS就是这一类,用路由器的朋友可以看下本地电脑的DNS一般都是192.168.1.1
1.递归服务器怎么知道根权威服务器的地址?
很简单,在递归服务器上都保存有一份根服务器的地址列表。最新的根服务器地址列表在这里可以得到:ftp://ftp.internic.net/domain/named.root
2.递归服务器每次查询域名都要向根那里找权威服务器吗?
不是的,一旦成功一次,递归服务器就会把权威服务器列表缓存下来(如COM顶级服务器列表可以缓存48小时)。
3.这些DNS都是什么人在管理?
本地递归服务器一般由电信运营商架设,服务于自己的用户,并有其管理,自然人也架设。根服务器与顶级域服务器由国际组织统一部署管理(实际控制器在美国政府)。对顶级域服务器来说销售商有可控的写入权。
DNS缓存
为了改善延时性能并且减少在因特网上到处传输的DNS报文数量, DNS广泛地使用了缓存技术
过程
在一个请求链中, 当某DNS服务器接收一个DNS回答时, 它能将映射缓存在本地存储器中
如果在DNS服务器中缓存了一台主机名/IP地址对, 另一个对相同主机名的查询到达该DNS服务器时, 该DNS服务器就能够提供所要求的IP地址, 即使他不是该主机名的权威服务器
由于主机和主机名与Ip地址间的映射不是永久的, DNS服务器在一段时间后 ( 通常为两天 )将丢弃缓存的信息
DNS记录和报文
共同实现DNS分布式数据库的所有DNS服务器存储了资源记录 (RR), RR提供了主机名到IP地址的映射
每个DNS回答报文包含了一条或多条资源记录
资源记录
(Name, Value, Type, TTL)
TTL是该记录的生存时间, 他决定了资源记录应当从缓存中删除的时间
Name和Vale的值取决于Type
| Name | Value | ||
|---|---|---|---|
| Type=A | 主机名 | 该主机名对应的IP地址 | 一条类型为A的资源记录提供了标准的主机名到IP地址的映射 |
| Type=NS | 域 | 知道如何获取该域中主机IP地址的权威DNS服务器的主机名 | 用于沿着查询链来路由DNS查询 |
| Type=CNAME | 别名为Name的主机对应的规范主机名 | 向查询的主机提供一个主机名对应的规范主机名 | |
| Type=MX | 别名为Name的邮件服务器的规范主机名 |
MX记录允许邮件服务器主机名具有简单的别名
为了获得邮件服务器的主机名, DNS客户端应当请求一条MX记录
为了获得其他服务器的规范主机名, DNS客户端应当请求CNAME记录
DNS报文
DNS只有两种报文, 查询报文和回答报文, 这两种报文有着相同的格式
前12个字节是部首区域
标志符
16比特,用于标志查询, 会被复制到对查询的回答报文中, 以便客户端匹配发送的请求和接受到的回答
标志字段
有很多东西
查询/回答标志位
表示是回答报文(1) 还是查询报文(0)
权威标志位
当所请求的是权威服务器时, 回答报文中该位会置为1
希望递归标志位
在该DNS服务器没有记录时希望进行递归查询时该位置1
递归可用标志位
回答希望递归时,如果该服务器支持递归查询, 则置1
问题区域
包含正在进行查询的信息
名字字段
类型字段
回答区域
对最初请求名字的记录
权威区域
其他权威服务器的记录
附加区域
其他有帮助的信息
在命令行中输入nslookup可以发送DNS查询报文
在DNS数据库中插入记录
在网上扒了张图,字真好看
5096
DNS脆弱性
这一块是拼凑出来的, 我尽量让他看起来不那么乱
分布式拒绝服务带宽洪泛攻击
向每个DNS跟服务器发送大量分组, 使得大多数合法的DNS请求得不到回答
有分组过滤器的保护, 大多数本地DNS服务器缓存了顶级域名服务器的IP地址
向顶级域名服务器发送大量DNS请求 -> DNS缓存技术
中间人攻击
截获来自主机的请求并返回伪造的回答
DNS毒害攻击
向一台DNS服务器发送伪造的回答,诱使服务器在它的缓存中接收伪造的记录
要求截获分组或遏制住服务器
还有就是控制注册域名用的邮箱, 修改域名绑定的IP
DNS劫持
攻击者一般是修改了本地路由器的DNS地址,从而访问了一个伪造的DNS服务器
用户端预防DNS攻击
直接通过 IP 地址访问网站,避开 DNS 劫持。
由于域名劫持往往只能在特定的网络范围内进行,因此一些高级用户可以通过网络设置让 DNS 指向正常的域名服务器以实现对目的网址的正常访问,例如将计算机首选 DNS 服务器的地址固定为 8.8.8.8