DNS原理4-递归和迭代查询

dns迭代查询和递归查询定义及区别 DNS系统是用来解析完全限定域名(fully qualified domain name (FQDN))为相应ip地址的,这个解析过程叫做域名解析(name resolution)。 递归查询时,dns client只发一次解析请求,返回的结果只有两种:name resolution(查询成功)或 错误消息(查询失败)。递归查询发生在dns client和local dns server之间。 迭代查询发生在local dns server和其它dns servers之间,迭代查询并不强制要求返回name resolution,也就是其它dns servers如果知道域名解析则返回解析结果,也可以返回referral。 以浏览器访问www.baidu.com为例: 浏览器首先会检查两个地方是否有之前解析google网站的记录,一个地方是电脑上的缓存(window上查看dns缓存:ipconfig/displaydns),另一个是hosts文件。 假设这两地方都没有解析记录,电脑(dns client)将向我的local dns server发起查询:“我想知道www.baidu.com的ip地址”;从dns client到local dns server的查询称为递归查询,dns client要求获得一个明确的结果(name resolution或error message),local dns server负责返回解析结果。 假设local dns server上没有缓存www.baidu.com的ip地址,接下来就是进行迭代查询,迭代查询期间,其它dns servers不知道ip地址的话,会简单返回referral,具体如下: local dns server首先向根域服务器发起查询,根域服务器只负责顶级域解析,如.com, .edu, .org等,这里根域服务器返回.com顶级域服务器地址,同时也称为根域服务器返回一个referral。 接着local dns server向.com顶级域名服务器发起查询,.com顶级域名服务器返回baidu.com权威服务器地址。 然后local dns server向baidu.com权威服务器地址发起查询,baidu.com权威服务器返回www.baidu.com的ip地址。 最后local dns server把解析结果返回给电脑(dns client)。 电脑(dns client)收到结果后,把ip地址缓存起来,供下次使用;local dns server也会缓存解析结果,这样网络中的其它电脑就可以直接拿到结果了,而不需要再走一遍迭代查询流程。 总结下,dns递归查询发生在dns client和local dns server之间,local dns server负责响应dns client的请求,当local dns server不知道域名ip时,则向其它dns servers发起迭代查询,并返回最终结果给dns client。 这里递归查询是从电脑端角度看,迭代查询是从local dns server角度。dns client设置使用的DNS服务器一般都是递归服务器,它负责全权处理客户端的DNS查询请求,直到返回最终结果。而DNS服务器之间一般采用迭代查询方式。...

June 23, 2021 · 1 min

DNS原理3-dns服务器

四种DNS服务器 DNS服务器(Domain Name Server,域名服务器)是进行域名和与之相对应的IP地址进行转换的服务器。DNS服务器中保存了一张域名和与之相对应的IP地址的表,以解析消息的域名。 所有 DNS 服务器都属于以下四个类别之一:递归解析器、根域名服务器、TLD 域名服务器和权威性域名服务器。在典型 DNS 查找中(当没有正在进行的高速缓存时),这四个 DNS 服务器协同工作来完成将指定域的 IP 地址提供给客户端的任务(客户端通常是一个存根解析器 - 内置于操作系统的简单解析器)。 递归解析器(也称为 DNS 解析器或local dns server) 是 DNS 查询中的第一站。递归解析器作为客户端与 DNS 域名服务器的中间人。从 Web 客户端收到 DNS 查询后,递归解析器将使用缓存的数据进行响应,或者将向根域名服务器发送请求,接着向 TLD 域名服务器发送另一个请求,然后向权威性域名服务器发送最后一个请求。收到来自包含已请求 IP 地址的权威性域名服务器的响应后,递归解析器将向客户端发送响应。 大多数 Internet 用户使用他们 ISP 提供的递归解析器,但还有其他可用选择;例如 Cloudflare 的 1.1.1.1。 根域名服务器每个递归解析器都知道 13 个 DNS 根域名服务器,它们是递归解析器搜寻 DNS 记录的第一站。根服务器接受包含域名的递归解析器的查询,根域名服务器根据该域的扩展名(.com、.net、.org 等),通过将递归解析器定向到 TLD 域名服务器进行响应。根域名服务器由一家名为 Internet 名称与数字地址分配机构(ICANN)的非营利组织进行监督。 注意,尽管有 13 个根域名服务器,但这并不意味着根域名服务器系统中只有 13 台计算机。根域名服务器有 13 种类型,但在世界各地每个类型都有多个副本,它们使用 Anycast 路由来提供快速响应。如果您将根域名服务器的所有实例加在一起,您将有 632 台不同的服务器(截至 2016 年 10 月)。...

June 20, 2021 · 2 min

DNS原理2-域名介绍

域名空间结构 根域:标识为 . 点,对应全球13组根域名服务器以英文字母A到M依序命名,域名格式为字母.root-servers.net。其中有11个是以任播技术在全球多个地点设立镜像站。比如中国大陆在北京有两台编号为L的镜像,编号为F、I、J的镜像各一台,共5台;香港有编号为D、J的镜像各2台,编号为A、F、I、L的镜像各一台,共8台;台湾则有编号为F、I、J各一台,共3台。如下图截止2019年根域和镜像服务器数量 顶级域(Top Level Domain,简称TLD),如.com, .cn, .top等,顶级域分为三类 通用顶级域名gTLDs(generic top-level domains),诸如 .com(商业机构) .org(非营利性组织) .net(网络服务机构)等 国家顶级域名ccTLDs(country code top-level domains),诸如 .cn(中国) .uk(英国) .us(美国) .jp(小日本) 国家地区顶级域被IANA委托给国家性的域名注册管理机构来管理,比如德国的DENIC、英国的Nominet、中国大陆的CNNIC、台湾的TWNIC等。 新通用顶级域名(New gTLD),如通用的.xyz、代表“高端”的.top、代表“红色”的.red、代表“人”的.men等 子域名(二级域名),即顶级域名的子域名(也有叫主域名),如 example.com, example.net, example.top 等 三级域名,即二级域名的子域名,如 abc.example.com, abc.example.net 等 以此类推,在上一级域名最左侧进行域名级别的拓展,def.abc.example.com、def.abc.example.net、def.abc.example.org等 域名组织机构 ICANN(互联网名称与数字地址分配机构)是一家非营利私人组织,是互联网的管理机构。 ICANN 负责域名系统 (DNS) 的技术运营,并负责制定政策来规定互联网的名称和地址的工作原理。 InterNIC 和IANA是由 ICANN 运营的两个组织。 InterNIC:网络信息中心 (InterNIC) 提供关于域名注册服务的信息。 IANA(互联网号码分配机构)是一家互联网地址指派机构,管理国际互联网中使用的IP地址、域名和许多其它参数的机构。IANA 将对所有其他网域(非根网域)的管辖权委托给其他域名注册管理机构。负责运营域名系统根区域、委派顶级域名的管理,并负责.int和.arpa两个域名的管理。 域名注册管理机构是管理一个或多个顶级或下级域名的组织。例如,Verisign 负责维护若干个顶级域名,包括 .com、.net 和 .name 域名。域名注册管理机构通过IANA获得某个顶级域名的管辖授权。 每个域名注册管理机构均管理着其管辖范围内域名和子域名的管理数据。此类数据管理包括含有每个域名的域名服务器地址和注册者信息的区文件。 国家及地区顶级域(Country code top-level domains,ccTLD)被IANA委托给国家性的域名注册管理机构来管理,比如德国的DENIC、英国的Nominet、中国大陆的CNNIC、台湾的TWNIC等。 截至 2019 年 9 月,已有 30 家域名注册管理机构获准在我国境内运营和管理 112 个顶级域(详见表2),135 家域名注册服务机构(域名注册商)获准按相应的域名注册服务项目提供服务...

June 6, 2021 · 1 min

DNS原理1-nameserver

name servers介绍及历史 本篇文章我们会讨论互联网世界里最重要和不可避免的资源,我们每个人有意或无意地使用它。 网络中的每台机器都是由一个ip(数字地址)标识。这个地址可以被网络中的其它机器使用,以便进行通信。在没有和这个ip地址相关的名称时,ip地址难以记忆,即使本地网络少量机器地址也难以记住,更不用说网络中成千上万机器地址了。 最初主机文件(hosts file, hosts file介绍看这里)的概念是为了解决这个问题而诞生的,网络中的每一台机器都有一个主机文件(Un*x下是/etc/hosts),记录了主机名称(computer name/host name)跟IP地址映射关系(dns出现后也可以记录域名和ip映射关系),转换为IP地址就是在这里完成的。有了hosts file,只要记住主机名称即可,通过目标机器的主机名称来访问目标机器,不需要再记ip地址了。 但随时间推移,网络中机器越来越多且不同网络间通信需求,hosts file方式暴露了一些问题: 每次出现新机器时,网络中其它机器都要更新映射关系 没有有效的机制,通知这些机器去更新映射关系 随时间推移,主机文件越来越大,很难维护 hosts file适用于机器较少的本地网络,不适用于分布在不同网络上的大量机器场景 在1970年中期,name server(名称服务器)的概念出现了。这个name server背后的基本思想是,人们发现名称比起数字更容易记,特别是当名称描述资源的一些属性时。而名称转换为ip的问题与计算机网络本身一样古老。 当网络中有name server时,网络中的其它机器只要知道name server的ip地址以及目标机器或网站的名称。有了这些信息后就可以跟name server请求目标机器的ip地址。 中心化的name server服务器比起hosts file主机文件方案要好的多,因为现在有了专门用于名称到地址映射的中心化服务器,网络中机器只要记住它的ip,然后向它发起查询请求即可返回名称对应的ip地址。 中心化的name server主要好处是机器修改ip地址后,不需要通知网络中其它机器了,机器ip修改后,只需要在name server上更新下最新ip地址即可。缺点也显而易见,服务器挂的话整个网络访问都不可用了,所以出现了多台name server的方案,一个作为master或primary,其它作为slave或secondary,如果master不可用则slave提供查询服务。 即使是多台name server的实现也有一些缺点: 随着网络中名称不断增加,name server从数百万个条目中检索信息变得非常困难,所以我们需要一种方法来组织这些名称。 想象单台name server每秒执行越来越多请求,这种情况下name server负载会增加,所以我们需要想办法分散负载。 我们需要一种机制来分离name server上的条目管理,以便不同管理员可以添加条目。 为了有效的管理名称或域名的解析(解析成IP地址)工作,随后设计了DNS(域名系统) DNS(Domain Name System) 域名系统 域名结构和域名系统是为了在大型分布式网络中组织和查找计算机ip地址而开发的。在域名结构出现之前,通过上文提到的hosts file来记录主机名称和ip地址映射关系 在介绍dns之前,先看下域名结构。 DNS系统设计成一个与域名结构类似的倒树层次化的dns名称服务器结构,树根叫root name server(根名称服务器),接着是TLD name server(顶级域名称服务器),TLD后是SLD name server(二级域/权威名称服务器) 完整的dns功能描述请查阅RFC 1034 1035 dns系统中,每个节点都被分配给一个权威机构或组织进行管理。负责特定节点的组织是该节点的权威。 现在位于dns系统层次顶端的是根名称服务器,它是由ICANN这个组织管理。 gTLD通用顶级域名称服务器如(.com, .net)等也是由ICANN管理并委托给注册管理机构,ccTLD国家顶级域名称服务器被授权给不同国家进行管理 在域名中,经常出现的www(如www.baidu.com)是主机名称,仅仅是个惯例,你也可以叫 xyz.baidu.com 当我在浏览器地址栏上输入www.example.com回车时会发生什么? 在名称服务器层级里,根名称服务器是最重要资源,当其它名称服务器查询不到信息时,它们首先会请求根名称服务器。 全球有13组根服务器: a.root-servers.net. b.root-servers.net. c....

May 23, 2021 · 2 min

一次DNS查询

域名查询过程 以用户在浏览器输入www.baidu.com为例,我们详细说明一下实际域名查询过程: 用户输入www.baidu.com,浏览器调用操作系统resolver发起域名查询,此处不考虑浏览器的域名缓存;resolver封装一个dns请求报文,并将其发给运营商分配的local dns地址(或者用户自己配置的公共dns); local dns查询缓存,如果命中则返回响应结果;否则向根服务器发起查询; 根服务器返回顶级域com的服务器地址。每一层级的DNS服务器都有缓存,实际都是先查缓存,没有缓存才返回下级域,此处不再重复; local dns查询com。com返回baidu.com地址; local dns查询baidu.com,baidu.com返回www.baidu.com对应记录结果。 名词解释 解析器 即resolver: 处于DNS客户端的一套系统,用于实现正向解析或者反向解析。 Local DNS(递归dns): 个人电脑使用的DNS server是路由器上的dns server,一般路由器使用运营商dns server,运营商(如缓存等)那查不到结果,则进入迭代dns查询(就是查询根服务器到权威dns返回结果)。 递归DNS可以理解为是一种功能复杂些的resolver,其核心功能一个是缓存、一个是递归查询。收到域名查询请求后其首先看本地缓存是否有记录,如果没有则一级一级的查询根、顶级域、二级域……直到获取到结果然后返回给用户。日常上网中运营商分配的DNS即这里所说的递归DNS。 权威DNS: 处于DNS服务端的一套系统,该系统保存了相应域名的权威信息。权威DNS即通俗上“这个域名我说了算”的服务器。 转发DNS: 转发DNS是一种特殊的递归。如果本地的缓存记录中没有相应域名结果时,其将查询请求转发给另外一台DNS服务器,由另外一台DNS服务器来完成查询请求。 公共DNS: 公共DNS属于递归DNS。其典型特征为对外一个IP,为所有用户提供公共的递归查询服务。

April 8, 2020 · 1 min