【转】DNS查询过程
DNS查询过程
DNS的查询过程是指在客户端通过DNS服务器将一个IP地址转换为一个FQDN(Fully Qualified Domain Name,完全合格的域名),或将一个FQDN转化为一个IP地址,或查询一个区域的邮件服务器的过程。
DNS查询分类
1)按查询方式:
(1)递归查询。 当DNS服务器接收到查询请求时,不论成功或失败,都会做出对应的响应。(发生在DNS客户端与DNS服务器之间)
(2)迭代查询。 DNS服务器根据自己的高速缓存或区域的数据,以最佳结果响应。如果DNS服务器无法解析,它可能返回一个指针。指针指向下级域名的DNS服务器,继续该过程,直到找到拥有所查询名字的DNS服务器,或知道出错、超时为止。(发生在DNS服务器之间)
2)按内容分类
(1)正向查询: 由域名查找IP地址。
(2)反向查询: 有IP地址查找域名。
DNS查询过程实例
1)客户端将www.redhat.com的查询提交给本地DNS服务器(递归查询)。
2)本地DNS服务器检查区域数据库,由于该服务器没有redhat.com的授权,它将查询传递到根服务器(“.”DNS服务器),请求解析主机名称。根名称服务器把“com”DNS服务器IP地址返回给本地DNS服务器(迭代查询)。
3)本地DNS服务器将请求发给“com”DNS服务器,该服务器根据请求将“redhat.com”DNS服务器IP地址返回给本地DNS服务器(迭代查询)。
4)本地DNS服务器向“redhat.com”DNS服务器发送请求,由于该服务器具有“www.redhat.com”记录,它将www.redhat.com的IP地址返回给本地DNS服务器。
5)本地DNS服务器将www.redhat.com的IP地址发送给客户端。
3. TCP or UDP
DNS名字服务器使用的端口无论对UDP还是TCP都是53。使用tcpdump观察的所有例子都是采用UDP协议的,这说明在一般情况下,DNS协议采用的UDP协议。只有当名字解析器发出一个查询请求,并且返回响应中的TC(删减标志)比特被设置为1时,它就意味着响应长度超过了512个字节(DNS协议使用UDP协议时的最大包长度),而仅返回前512字节。在遇到这种情况时,名字解析服务器通常使用TCP重发原来的查询请求,它将允许返回的响应超过512个字节。既然TCP能将用户的数据流分为一些报文段,它就能用多个报文段来传送任意长度的用户数据。
此外,当一个域的辅助名字服务器在启动时,将从该域的主名字服务器执行区域传送。辅助服务器将定时(通常是3小时)向主服务器进行查询以便了解主服务器数据是否发生变动。如果有变动,将执行一次区域传送。区域传送将使用TCP,因为这里传送的数据远比一个查询或响应多得多。
DNS使用UDP,名字解析器和名字服务器都要自己处理超时和重传。加之DNS查询和响应通常经过广域网,分组丢失率和往返时间的不确定性在广域网上比局域网上更大。这样对于DNS客户程序,一个好的等一会和超时程序就显得更重要了。
——————————————-
以上摘自《Linux服务器配置全程实录》一书
转自:http://www.jinlie.net/?p=638
最新文章
- iOS代码规范(OC和Swift)
- sourcesafe.light 开源项目启动
- hdu 4026 2011上海赛区网络赛F TSP ****
- 用Hibernate Tools生成Hibernate Mapping映射文件
- YUM软件管理
- eclipse 中忽略jsp, xml文件中的报错信息
- 数据中心基础设施自动化运维之puppet专项
- 【巧妙的模拟】【UVA 10881】 - Piotr's Ants/Piotr的蚂蚁
- 实战3--项目开始--准备:::资源分类, 日志系统, 写BaseDao
- 1593: [Usaco2008 Feb]Hotel 旅馆
- 基于Gulp + Browserify构建es6环境下的自动化前端项目
- [Error]Can't install RMagick 2.13.4. You must have ImageMagick 6.4.9 or later.
- shell判断进程是否存在
- 使用nginx代理kibana并配置登录验证
- java 类的初始化顺序
- FASTREPORT COM/ActiveX报表如何保存到C++项目中?
- Delphi和OutputDebugString
- 对比深度学习十大框架:TensorFlow 并非最好?
- c# dapper mysql like 参数化
- sql 字符串操作