DNS域名解析过程

当用户在浏览器输入一个地址后,DNS解析成ip会有将近10个步骤。

第一步:
浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果有,解析结束。

第二步:
如果浏览器缓存中没有,则会查找操作系统缓存中是否有这个域名对应的DNS解析结果。就是操作系统里的hosts文件里配置的域名和IP的对应关系。

前面两个步骤都是本机完成的,到这里还没有涉及到真正的域名解析服务器,如果在本机中无法完成域名的解析,就会真正请求域名服务器来解析这个域名。

第三步:
怎么知道域名服务器呢?在网络配置中都会有DNS服务器地址这一栏,前面两步无法解析的域名,操作系统就会把这个域名发送给这里设置的LDNS,也就是本地区的域名服务器。
这个DNS通常都提供给你本地互联网接入的一个DNS解析服务。比如电信、联通、移动。
这个专门的域名解析服务器性能都很好,也会缓存解析结果,所以百分之80的解析过程到这里就结束了。
所以LDNS承担着主要的域名解析工作。

第四步:
如果LDNS还没有命中的时候,就直接到 Root Server域名服务器进行解析。

根域名服务器(Root Server):
根服务器主要用来管理互联网的主目录,全世界IPv4根服务器只有13台(这13台IPv4根域名服务器名字分别为“A”至“M”),1个为主根服务器在美国。其余12个均为辅根服务器,其中9个在美国,欧洲2个,位于英国和瑞典,亚洲1个位于日本。

第五步:
根域名服务器会返回给本地域名服务器(LDNS)一个所查询域的主域名服务器(gTLD server)地址。gTLD是国际顶级域名服务器。

第六步:
LDNS会再向根域名服务器返回的gTLD服务器发送请求。

第七步:
接受请求的gTLD服务器会查找并返回此域名对应的Name Server域名服务器的地址。
这个Name Server 通常就是你注册的域名服务器,例如在某个域名服务提供商申请的域名,那么这个域名的解析任务就由这个域名提供商的服务器来完成。

第八步:
Name Server域名服务器会查询存储的与和IP的映射关系表,根据域名得到IP,连同一个TTL值返回给DNS域名服务器。
TTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTL是IPv4包头的一个8 bit字段。
注意:TTL与DNS TTL有区别。二者都是生存时间,但一个指ICMP包的转发次数(跳数),一个指域名解析信息在DNS中的存在时间。

第九步:
返回该域名对应的TTL值和IP,LDNS会缓存这个IP和域名的对应关系,缓存时间由TTL值控制。

第十步:
把解析结果返回给用户,用户根据TTL值缓存在本地的系统缓存中。域名解析结束。

在这里插入图片描述
第一步和第二步在本机的请求过程不在图中。

### DNS域名解析过程详解 DNS域名解析是一个分层递归的过程,其主要目的是将人类可读的域名转换为机器可以理解的IP地址。以下是详细的解析流程: #### 1. 客户端发起请求 当用户在浏览器中输入一个域名时,客户端会先检查本地缓存是否有该域名对应的IP地址记录。如果有,则直接返回;如果没有,则进入下一步。 #### 2. 查询本地主机配置文件 如果未命中本地缓存,客户端会尝试查询本地主机配置文件(通常是`/etc/hosts`或`C:\Windows\System32\drivers\etc\hosts`),查看是否存在手动映射的域名与IP地址的关系[^2]。 #### 3. 请求本地域名服务器 (LDNS) 如果前两步均未能找到匹配项,客户端会向指定的本地域名服务器发送查询请求。此服务器通常由用户的互联网服务提供商(ISP)提供[^3]。 #### 4. LDNS 的处理逻辑 - **缓存命中**:如果本地域名服务器在其缓存中有目标域名的相关记录,则立即返回给客户端。 - **缓存未命中**:如果本地域名服务器无法解析该域名,它将以递归方式代替客户端继续向上级域名服务器请求解析[^4]。 #### 5. 向根域名服务器请求 本地域名服务器作为代理角色,首先联系根域名服务器(Root Server)。这些服务器负责指导如何定位顶级域(Top-Level Domain, TLD)的信息。例如,“com”、“org”等后缀分别指向不同的TLD服务器[^1]。 #### 6. 转发至权威名称服务器 根据根域名服务器提供的指引,本地域名服务器接着访问相应的TLD服务器获取更具体的子域信息。最终到达存储实际域名到IP映射关系的授权名称服务器(Authoritative Name Servers)[^1]。 #### 7. 返回结果并更新缓存 一旦获得确切的IP地址,这一路径上的每一环节都将把结果保存下来以便未来更快响应相同的请求。最后,原始请求者——即最初发出查询的应用程序收到所需的数据完整个过程。 ```python import dns.resolver def resolve_domain(domain_name): try: answers = dns.resolver.resolve(domain_name, 'A') for rdata in answers: print(f"The IP address of {domain_name} is {rdata.address}") except Exception as e: print(e) resolve_domain('example.com') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值