什么是DNS,作用是什么?

DNS的作用:
DNS 的全称是 Domain Name System 或者 Domain Name Service,它主要的作用就是将人们所熟悉的网址 (域名)如“www.baidu.com” “翻译”成电脑可以理解的 IP 地址,这个过程叫做 DNS 域名解析。 打个比方,我们登百度的地址的时候,都是敲www.baidu.com,进行登陆,难道你会去敲IP地址登百度?明显,域名容易记忆。

访问一个网站的流程:
1.根据域名,进行DNS域名解析;
2.拿到解析的IP地址,建立TCP连接;
3.向IP地址,发送HTTP请求;
4.服务器处理请求;
5.返回响应结果;
6.关闭TCP连接;
7.浏览器解析HTML;
8.浏览器布局渲染;

DNS解析流程:
1) 浏览器缓存  当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在);  
2) 系统缓存  当浏览器缓存中无域名对应IP则会自动检查用户计算机系统Hosts文件DNS缓存是否有该域名对应IP;  
3) 路由器缓存  当浏览器及系统缓存中均无域名对应IP则进入路由器缓存中检查,以上三步均为客服端的DNS缓存;  
4) ISP(互联网服务提供商)DNS缓存  当在用户客服端查找不到域名对应IP地址,则将进入ISP DNS缓存中进行查询。比如你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找;  
5) 根域名服务器  当以上均未完成,则进入根服务器进行查询。全球仅有13台根域名服务器,1个主根域名服务器,其余12为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;  
6) 顶级域名服务器  顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器;  
7) 主域名服务器  主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确纪录;  
8)保存结果至缓存  本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接。

/////
注:
(1)本地DNS服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性.

(2)如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

win7-hosts文件地址:
C:\Windows\System32\drivers\etc

### DNS的定义及工作原理 DNS(Domain Name System,域名系统)是一个分布式数据库系统,用于实现域名和IP地址之间的相互映射[^3]。它的主要功能是为用户提供一种更便捷的方式访问互联网资源,而无需记忆复杂的IP地址。通过将域名解析为对应的IP地址(正向解析),或者将IP地址解析为域名(反向解析),DNS在互联网通信中起到了至关重要的作用。 #### DNS的功能 1. **域名解析**:DNS的核心功能是将易于记忆的域名(如www.example.com)转换为计算机可识别的IP地址(如192.168.1.1)。这种解析过程被称为正向解析[^2]。 2. **反向解析**:除了正向解析外,DNS还支持从IP地址到域名的解析,称为反向解析。 3. **负载均衡**:通过配置多个IP地址对应一个域名,DNS可以实现简单的负载均衡,从而提高服务的可用性和性能。 4. **缓存机制**:为了减少网络延迟并提高效率,DNS代理会缓存常用的解析结果,并根据TTL(Time-to-Live)值来管理这些缓存的有效期[^1]。 #### DNS的工作原理 1. **用户求**:当用户输入一个域名时,本地设备上的DNS客户端会发起一个DNS查询求。 2. **递归查询**:如果本地DNS缓存中没有该域名的解析记录,则DNS客户端会向配置的DNS服务器发出递归查询求。递归查询意味着DNS服务器负责继续查询直到找到答案。 3. **迭代查询**:DNS服务器可能需要向根服务器、顶级域(TLD)服务器以及权威DNS服务器进行多次迭代查询,以最终获取目标域名的IP地址。 4. **返回结果**:一旦找到对应的IP地址,DNS服务器会将结果返回给用户,并更新本地缓存以便后续更快地响应相同的查询求[^1]。 ```python # 示例代码:模拟简单的DNS解析过程 import dns.resolver def resolve_domain(domain_name): try: answers = dns.resolver.resolve(domain_name, 'A') for rdata in answers: print(f"域名 {domain_name} 的IP地址是: {rdata.address}") except dns.resolver.NoAnswer: print("未找到对应的IP地址") except dns.resolver.NXDOMAIN: print("域名不存在") resolve_domain("www.example.com") ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值