dns 域名解析协议

1.1 dns 的概念

        作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,基于C/S架构, 服务器端:53/udp, 53/tcp实际上,每一台 DNS 服务器都只负责管理一个有限范围(一个或几个域)内的主机域 名和 IP 地址的对应关系,这些特定的 DNS 域或 IP 地址段称为 zone(区域)。根据地址解 析的方向不同,DNS 区域相应地分为正向区域(包含域名到 IP 地址的解析记录)和反向区 域(包含 IP 地址到域名的解析记录)

        220.17.25.245  ip地址过长而且是数字,不方便记忆

        www.jd.com    域名都是有含义的,方便人们记忆

       一个dns服务器只管自己范围内的解析

1.2  域名的组成

www.baidu.com.       从左往右

主机名 .子域 .二级域.顶级域 根域

.  :根域

.com:顶级域  一级域。代表一种类型的组织机构或者国家地区,如:.net(网络供应商).com(工商企业).org(团体组织).edu(教育机构).gov(政府部门).cn(中国国家域名)

.baidu : 二级域。用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家网络部门统一管理,顶级域名下面设置的是二级域名,如:.com.cn.net.cn.edu.cn

www:主机名

根的dns服务器只能解析              主机名+根域

顶级域的dns服务器只能解析       主机名+顶级域+根域

二级域的dns服务器只能解析       主机名+二级域+一级域+根域

1.3 一次dns的解析过程

我要访问www.baidu.com. 服务器

第一步:先看我本机的host文件,如果有直接访问如果没有就要去找你设置缓存dns服务器

第二步:如果缓存服务器没有,直接反馈结果(递归),如果没有就需要迭代查询,直接去找根域服务器

第三步:由于根域服务器只能解析根无法解析www.baidu.com 但是根域服务器会让你去找一级域服务器

第四步:一级域发现自己也解不了,让你去找二级域

第五步:二级域发现这台服务器在自己的管理范围内,直接反馈结果给缓存服务器

第六步:缓存服务器再发给客户

1.4 迭代查询和递归查询

迭代查询:不给结果只给相关信息,需要自己动手

递归查询:直接反馈结果,不需要自己动手

1.5 打开网页经历的过程

输入www.baidu.com 打开网页——>dns域名解析(浏览器要和哪个服务器的哪个接口建立连接)——>浏览器与域名地址建立tcp连接(三次握手)——>http访问——>断开tcp连接(四次挥手)

1.6 dns软件bind

DNS服务器软件:bind,powerdns,dnsmasq,unbound,coredns

bind:服务器

bind-libs:相关库

bind-utils: 客户端

bind-chroot: 安全包,将dns相关文件放至 /var/named/chroot/

named:服务名称

主配置文件:/etc/named.conf

1.7 实操:搭建域名服务器正向解析

1.8 实操:配置主从dns服务器

主服务器

从服务区

### DNS域名解析协议中的迭代查询与非迭代查询 #### 迭代查询的工作机制 当客户端发出DNS查询请求时,在迭代查询模式下,本地域名服务器不会代替客户端执行完整的查询流程。相反,该服务器仅提供给客户端下一个应询问的权威域名服务器的信息。随后,客户端需自行联系这台新的服务器继续查询直到获得最终的结果[^3]。 对于每次转发,响应方都会告知请求者下一步应该去哪里寻找答案而不是直接给出目标资源的位置。这种方式减少了单个DNS节点上的负载并提高了系统的整体性能和稳定性[^1]。 #### 非迭代查询(递归查询)的工作机制 而非迭代查询即为通常所说的递归查询,则是由最初接收到查询申请的那个本地域名服务器负责完成整个查找过程。它会依次向上游直至根服务器去获取所需数据,并将结果返回给原始发问者。在此期间所有的中间环节都由这个初始接触点来处理,使得终端用户的操作变得简单易行[^4]。 这种做法虽然增加了某些特定DNS服务端的压力但是极大地方便了使用者因为它们不需要关心复杂的后台交互细节就可以得到想要的信息[^2]。 ```python def dns_query(query_type, domain_name): if query_type == 'recursive': result = perform_recursive_lookup(domain_name) elif query_type == 'iterative': result = client_perform_iterative_lookup(domain_name) return result def perform_recursive_lookup(domain_name): # Simulate a recursive lookup process where the server does all work. pass def client_perform_iterative_lookup(domain_name): next_server_to_ask = get_initial_nameserver() while not is_final_answer(next_server_to_ask): response = ask_next_server(next_server_to_ask, domain_name) next_server_to_ask = determine_next_step(response) final_result = fetch_data_from_authoritative_source(next_server_to_ask, domain_name) return final_result ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值