DNS and Band
DNS:域名系统
工作在应用层,是一种协议,同时监听UDP和TCP的53号端口
UDP响应查询请求
TCP响应辖区服务的
/etc/host
最初的时候里面都有一个你想访问的名称和里面的对应的关系。
但是随着网络的增大,host文件的管理和维护变得非常麻烦。
这时候,
国际名称地址分配机构想出了一个方法。
他们分别用于地址的分派,他们定期的通过更新ftp服务器里的host文件,则将所有的网站都铺开了。
但是随着互联网的爆炸式发展。
催生了DNS协议。
DNS协议是对host文件的扩展,它只不过对host文件进行了分片。
所有人在自己的服务器上做一个库,名称解析库。
当一旦发现有人要访问一个域名的时候,这个库会先到DNS上查找一下这个域名对应的ip。
但是,这样还是不行,互联网的爆炸速度太快。
于是DNS开启了自己的分层管理系统。
就像文件系统结构一样,自上而下的树状分层结构
最上面的叫根节点域名解析服务器
.
.com .net .org .cn .tw
一级域名 顶级域名 国家域名
ibm.|hp. <--------二级域
tech
↓
www www
比如ibm这有一个叫www的主机,则它的名字则自低往上
www.ib,.com.
www.tech.ibm.com.
一般能划分到63级域名,每一段最长可以达到127个
一般我们去注册的都是二级域
查询如何实现呢?
DNS的查询有两种类型:
递归查询
recursive
A去查询的时候,必须要一次就能知道答案
A去问B,B不知道,但是B知道C知道,所以B从C那获得了答案并且告诉了A
迭代查询
A去查询答案的时候,查询了很多次才终于查询出来的方式
A去问B,B不知道,但是B告诉A,C知道,所以A又去问C,C将答案告诉了A
在互联网上,用户一般是递归的方式向服务器查询的
作为服务器,在互联网上的查询永远是迭代的。它会自己去查所有的
所以,一般在互联网上应用是两段式的。
前半段递归,后半段迭代。
递归方式非常消耗资源,一般只对本地的客户端递归。
解析的方式
正向解析: NAME→IP
反向解析: IP→FQDN
解析的过程又是如何实现的呢?
在刚才那个树状的层次结构中,永远是上级知道下级,下级永远不知道上级在哪。
就像 ibm 永远不知道 .com在哪。
所以,只要是DNS服务器,它永远知道根在哪个地方。这个是必须知道的。
所以当www.ibm.com去找 www.hp.com的时候
DNS会直接找到根,根告诉DNS自己不知道,但是COM知道,于是DNS去找COM,然后COM告诉它HP可能知道,于是DNS去找HP。最终找到了www
全球一共有13个根节点,一个在日本,一个在欧洲,其他的都在美国。
而我们每次查询都绕道美国的话,就太慢了,所以我们国内都有镜像。我们的查询一般都是通过本地缓存来查询的。
sohu.com一般叫域名。
而
www.sohu.com则一般叫主机名
授权的过程其实就是 有个地方叫 3a 3a里面有个人它负责管理这里面所有的解析
主机为了标示自己功能的不同,有一个“记录类型”的东西
那么什么是记录呢?
DNS实际上是一个数据库,它自己里面包含了各种一个个的对应关系。
虽然都是对应关系,但是里面的记录是不一样的。
比较常见的记录类型:
1.FQDN --> IP : A记录(Address)
2.IP --> FQDN : 指针记录(PTR)
3.DOMAIN --> SERVER : NS (Name Server)
4.DOMAIN --> MTA : MX (Mail eXchanger)用于标示一个域的邮件域名是谁的
5.大麻子 -- > Jerry : CNAME 记录类型(正式名称记录类型)
6. : SOA (Start Of Authority)用于标明当前域的起始授权域类型
一般标示一个域的主域名服务器是谁的。
DNS服务器的类型:
主名称服务器和从名称服务器
为了保证服务的可用性,一般在一个域内,我们配置一个人主政,其他人辅政。
这就意味着,我们有三台服务器,每一台都能清楚的知道这个域内所有的主机名。但是如果当有一个新的主机获得了域名,则会在主服务器中(主政)创建/删除。其他的辅政的服务器,为了保证自己的信息跟主政的服务器一致,它会每过一段时间就去主政服务器上复制一份。这种保证同步的方式叫
区域传送:
axfr 完全区域传送 将所有的信息都传送
ixfr 增量区域传送 只将新增的信息都传送
一般来讲主服务器会主动通知从服务器来同步数据的。每当有新的东西进入的时候,就会主动通知。从服务器就立刻同步,而不根据设定的同步时间。
这样就直接避免了主服务器当机而从服务器没有获得更新的缺憾。
缓存服务器
加速访问,还能节约带宽
当第一个人访问过域名之后,第二个人如果再次访问,则直接从缓存中读取。而根本没有真正的去连接
转发器:
实现内外防火墙隔离的两台DNS服务器之间交互的
域
对于名称解析来讲:
正向和反向永远不能在同一屋檐下生存
正向:需要一个单独的数据库文件
反向:也需要一个单独的数据库文件。
我们有个域,这个域中会有2个文件,这个两个文件中则定义了所有正向和反向的名称解析。
这个文件就是一个区域。
区域是一个逻辑概念
域:则是一个逻辑概念。
这种传送一般是在主从服务器上进行的
一个域包含一个正向区域,一个反向区域。
域和区域没有固定的包含关系,一个域可以包含很多区域,
考虑到完整的关系,则每一个子域就有两个文件
一个用户想查询www.a.org的时候是如何工作的呢?
1.先去查找/etc/host文件,看看host文件中有没有对应的解析记录
2.查找本地的当前这个主机上的DNS缓存
3.通过一个客户端工具去查找第一个DNS服务器,
4.DNS服务器又要查找Server的缓存
5.如果没有缓存,则查看是否是自己解析的域。
有则联系本地的域
将结果返回给用户 authoritive 权威解析。【15:46】
---------------------
|非权威答案:不是本服务器的域,是直接从缓存中获得的
----------------------
6.之后找根……
此后会介绍如何简单实现域名解析.....请看第二篇文章