在DNS协议之前我就知道ARP协议。
如果说ARP协议是用来将IP地址转换为MAC地址,那么DNS协议则是用来将域名转换为IP地址(也可以将IP地址转换为相应的域名地址)。
我知道TCP/IP使用IP地址和端口号来识别网络上某台主机上的程序,为什么不使用域名直接通信呢?
1 .因为IP地址是固定长度,所以IPv4为32位,IPv6为128位,但是域名变长,不方便计算机的处理。
2. IP地址对用户来说很难记忆,但是域名很容易被用户使用。 例如,www.baidu.com这是百度的域名。
总结一点就是IP地址是面向主机的,而域名则是面向用户的。
hosts文件
域名与IP的对应关系保存在hosts文件中。
最初是通过互联网信息中心管理这个文件。 如果新计算机想接入网络,或者某台计算机的IP更改需要去信息中心申请更改主机文件。 其他计算机也需要定期更新才能连接到互联网。
但这太麻烦了,出现了DNS系统。
DNS系统所在组织的系统管理机关维持着系统内各主机的IP和主机名的对应关系。 当新计算机进入网络时,它会将该信息注册到数据库中,当用户输入域名时,它会自动询问DNS服务器,DNS服务器会搜索数据库以获得相应的IP地址
我们可以通过命令查看自己的主机文件:
在域名解析过程中,hosts文件的内容仍优先。 DNS理论知识一、DNS域名结构1、域名分层结构域名系统必须要保持唯一性。
为了达到唯一性,互联网在命名时采用了分层命名方法:
1 .各域名(本论文中只讨论英语域名) )是由字母(A-Z、A-Z、大小写相同)、数字(0-9)、连接器) -构成的标签列)
2 .标签序列的总长度不能超过255个字符,它由点编号分割为一个个标签(label )
3 .每个标签不得超过63个字符,每个标签可视为一个级别的域名。
4 .最低等级的域名写在左边,最高等级的域名写在右边。
域名服务主要是基于UDP实现的,服务器的端口号为53。
域名层次结构如下图所示。
eg :熟悉的,www.baidu.com
1.com:一级域名。 表示这是企业域名。 同一个班级里也有“net”“org”“非营利组织”等。
2. baidu:二级域名,指公司名称。
3. www:只是一种习惯用法。
2、域名分层域名可以划分为单独的子域,子域可以继续划分为子域,从而形成顶级域、第二域、三域(triple domain )等。
如下图所示。
其中,顶级域名分为国家顶级域名、通用顶级域名、反向域名。
国家顶级域名中国:cn、美国:us、英国uk…通用顶级域名com公司企业、edu教育机构、gov政府部门、int国际组织、mil军事部门、net网络、org非营利组织…反向域名arpa、反向域名
有了域名的结构,就需要解析域名,域名需要由全世界的域名服务器来解析。 域名服务实际上是安装了域名系统的主机。
从高到低的分层可以大致分为以下几类。
根域服务器对顶级域服务器进行分类后,本地域服务器无法解析的域名将查询顶级域服务器以管理在该顶级域服务器下注册的辅助域名权限当负责区域域名解析工作的本地域服务器发出DNS查询请求时,该查询请求首先被发送到本地域服务器。 注意:域服务器负责的范围或具有管理权限的范围称为区域
必须注意的是
1 .每层域名都有自己的域名服务,顶层为根域名服务
2 .各级域名服务器都知道下级域名服务器的IP地址
3 .为了进行灾难恢复,在每个级别至少安装两个以上的域名服务器
三、域名解析流程域名解析总体上分为以下几个流程:
)输入域名后,首先查找与自己主机对应的域名服务器,域名服务器首先查找自己数据库中的数据。
),则在上位域服务器中进行检索,依次类推
)3)只要追溯到根域名服务器,就一定能找到该域的IP地址
4 )域名服务器自身也进行某种缓存,缓存与访问过一次的域名相对应的IP地址,可以使检索过程高速化
具体可以记述如下。
1 .主机首先向本域名服务器进行递归查询
2 .本地域名服务器使用迭代查询查询根域名服务器
3 .根域名服务器将下一个要查询的顶级域名服务器的IP地址告知本地域域名服务器
4 .本地域名服务器查询顶级域名服务器
5 .顶级域名服务器向本地域名服务器发送下一步权限服务器的
IP地址6. 本地域名服务器向权限服务器进行查询
7. 权限服务器告诉本地域名服务器所查询的主机的IP地址
8. 本地域名服务器最后把查询结果告诉主机
如图所示:
上文我们提出了两个概念:递归查询和迭代查询
(1)递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机
(2)迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。
通俗地说,递归就是把一件事情交给别人,如果事情没有办完,哪怕已经办了很多,都不要把结果告诉我,我要的是你的最终结果,而不是中间结果;如果你没办完,请你找别人办完。
迭代则是我交给你一件事,你能办多少就告诉我你办了多少,然后剩下的事情就由我来办。