DNS理解
前言
英译汉的时候会掩盖很多本质,导致很多问题稀里糊涂,问的人不知道怎么说,回答的人也是答非所问。
DNS是Domain Name System缩写,不是Domain Name Server,或者Domain Name Software。有的时候还有个名词叫 Name Server,汉语就不翻译了,越翻译越混乱。下面2篇文章介绍了这两者区别。
What is the difference, if any, between DNS server and name server?
The Difference Between DNS and Name Servers
Are Domain Name Server and Name Server the same thing?
在学习dig和nslookup的时候遇到了DNS record types(域名系统记录类型),再次记录一下,后续再更新
DNS系统中,常见的资源记录类型有
- 主机记录(A记录):RFC 1035定义,A记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上。
- 别名记录(CNAME记录): RFC 1035定义,CNAME记录用于将某个别名指向到某个A记录上,这样就不需要再为某个新名字另外创建一条新的A记录。
- IPv6主机记录(AAAA记录): RFC 3596定义,与A记录对应,用于将特定的主机名映射到一个主机的IPv6地址。
- 服务位置记录(SRV记录): RFC 2782定义,用于定义提供特定服务的服务器的位置,如主机(hostname),端口(port number)等。
- NAPTR记录:RFC 3403定义,它提供了正则表达式方式去映射一个域名。NAPTR记录非常著名的一个应用是用于ENUM查询。
域名系统 (Domain Name System, DNS)一种因特网的通讯协议名称,提供这种服务的软件有很多,比如(Berkeley Internet Name Domain, BIND)。
FQDN

类比
hostname相当于 “张三“,全国叫张三的几千万,怎么区分?
domain main相当于加上户籍地址,将张三进一步细化。
FQDN = hostname + domain name,相当于四川省.成都市.成华区.建设北路2段4号张三
现实情况
在互联网上很多主机hostname都叫www,但是他们的domain name都不一样,例如 www.google.com.tw, www.seednet.net, www.hinet.net 等等,他们的domain name分别是.google.com.tw, .seednet.net, .hinet.net 等等。
学数据结构的时候,二叉树事递归定义的。DNS与二叉树类似,上一层的FQDN相当于下一层的domain name。

注:图片引自http://linux.vbird.org/linux_server/0350dns.php,只为说明DNS分层递归定义情况。如有问题请告知,及时删除。
注:小数点.不一定区分hostname与domain name
TLDs(Top Level Domains)

注:图片引自http://linux.vbird.org/linux_server/0350dns.php,只为说明DNS分层递归定义情况。如有问题请告知,及时删除。
root DNS server用.表示

顶层域名 = 通用顶层域名 + 国家码顶层域名
通用顶层域名:包括.com .org .gov .edu .net .mil .jobs .info .asia等等
国家码顶层域名:包括.uk .jp等等
https://www.slashroot.in/what-dns-zone-file-complete-tutorial-zone-file-and-its-contents
https://www.slashroot.in/how-dns-works
DNS分层查询
DNS是分层的,每一层DNS server认为他下边的client (这些client其实也都是DNS server)都是hostname,他只需要维护 hostname<—>IP address的映射即可。域名解析的过程 和 快递流程是一样的,其解析过程是从大范围到小范围,对应域名上是自右向左。快递首先回查ccTLDs,属于中国。然后查看属于哪个省,一看四川。再看属于哪个市,继而哪个区,那个街道,那个小区,哪号楼,那个房间。。。

上图中的DNS server在Linux里面指的是/etc/resolv.conf 里面配置的DNS server。一旦解析域名成功,DNS server会缓存一份,以防止其他主机有类似请求。缓存是有时效的,超过指定时间缓存作废,在执行一边DNS解析过程(即经过 . 在向下一层查询的过程)。
客户机只要只想互联网上任何一个DNS服务器就能解析全球的域名。
DNS理解的更多相关文章
- [C#]网络编程系列专题二:HTTP协议详解
转自:http://www.cnblogs.com/zhili/archive/2012/08/18/2634475.html 我们在用Asp.net技术开发Web应用程序后,当用户在浏览器输入一个网 ...
- 转:【专题二】HTTP协议详解
我们在用Asp.net技术开发Web应用程序后,当用户在浏览器输入一个网址时就是再向服务器发送一个HTTP请求,此时就使用了应用层的HTTP协议,在上一个专题我们简单介绍了网络协议的知识,主要是为了后 ...
- 专题二:HTTP协议详解
我们在用Asp.net技术开发Web应用程序后,当用户在浏览器输入一个网址时就是再向服务器发送一个HTTP请求,此时就使用了应用层的HTTP协议,在上一个专题我们简单介绍了网络协议的知识,主要是为了后 ...
- dig理解DNS的解析过程 - 阿权的书房
关于DNS的常识,可以阅读附录的一些参考资料.本文旨在尝试举例用dig命令理解这个过程,并非权威知识,仅供参考.测试域名为阿权的书房的域名 www.aslibra.com 和 www.163.com. ...
- 理解DNS
理解DNS 写在前面: 目前,我们大部分的网络通信都是基于TCP/IP协议的,而TCP/IP又基于IP地址作为唯一标识进行通信,随着需要记忆的IP地址数量的增多,肯定会超出我们的记忆能力范围,但如果使 ...
- 理解OpenShift(2):网络之 DNS(域名服务)
理解OpenShift(1):网络之 Router 和 Route 理解OpenShift(2):网络之 DNS(域名服务) 理解OpenShift(3):网络之 SDN 理解OpenShift(4) ...
- 简单理解DNS解析流程(一)
0x0 简单理解dns DNS服务器里存着一张表 表中放着域名和IP地址,域名和IP地址以映射关系保存,即一对一 浏览器访问某个域名,实际上是访问它的ip地址 所以浏览器需要知道域名对应的ip地址 如 ...
- 深入理解 DNS
深入理解 DNS 简介 DNS(Domain Name System)域名系统,它是一个将域名和 IP 地址相互映射的一个分布式数据库,把容易记忆的主机名转换成主机 IP 地址. DNS使用 TCP ...
- 不为人知的网络编程(九):理论联系实际,全方位深入理解DNS
本文原作者:selfboot,博客地址:selfboot.cn,Github地址:github.com/selfboot,感谢原作者的技术分享. 1.引言 对于 DNS(Domain Name Sys ...
随机推荐
- spark在windows的配置
在spark-env.cmd添加一行 FOR /F %%i IN ('hadoop classpath') DO @set SPARK_DIST_CLASSPATH=%%i 修改:log4j.prop ...
- iOS-AVPlayer
MPMoviePlayerController足够强大,几乎不用写几行代码就能完成一个播放器,但是正是由于它的高度封装使得要自定义这个播放 器变得很复杂,甚至是不可能完成.例如有些时候需要自定义播放器 ...
- 【C# 开发技巧】如何防止程序多次运行
一.引言 最近发现很多人在论坛中问到如何防止程序被多次运行的问题的,如: http://social.msdn.microsoft.com/Forums/zh-CN/6398fb10-ecc2-4c0 ...
- 《Fluid Engine Development》 学习笔记4-预测校正不可压缩SPH-PCISPH
传统SPH方案的主要问题之一是时间步长限制.在原始的SPH中,我们首先从当前设置计算密度,使用EOS计算压强,应用压力梯度,然后运行时间积分.这个过程意味着只需要一定的压缩量就可以触发内核半径内的压力 ...
- 【POJ - 2010】Moo University - Financial Aid(优先队列)
Moo University - Financial Aid Descriptions 奶牛大学:奶大招生,从C头奶牛中招收N(N为奇数)头.它们分别得分score_i,需要资助学费aid_i.希望新 ...
- AMD, CMD, CommonJS和UMD
我的Github(https://github.com/tonyzheng1990/tonyzheng1990.github.io/issues),欢迎star 今天由于项目中引入的echarts的文 ...
- MySQL主从复制与读写分离实践
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 目录: 介绍 MySQL的安装与配置 MySQL主从复制 MySQL读写分离 编译安装lua 安装配置MySQ ...
- jquery的ajax设置为同步
在使用$.get或者$.post的时候,前面加上 $.ajaxSettings.async = false; 使用完之后再设置为异步 $.ajaxSettings.async = true; 而在使用 ...
- python-继承之多继承
class BaseRequest(): pass class RequestHandler(BaseRequest): def serve_forever(self): print('Request ...
- 《Mysql 一条 SQL 更新语句是如何执行的?(Redo log)》
一:更新流程 - 对于更新来说,也同样会根据 SQL 的执行流程进行. - - 连接器 - 连接数据库,具体的不做赘述. - 查询缓存 - 在一个表上有更新的时候,跟这个表有关的查询缓存会失效. - ...