小引
当我们在浏览器中输入一个Url,并按下回车时,会经历以下几步: 1、解析出url中的域名 2、通过DNS服务将域名转化为IP地址 3、解析出url中的端口,通过IP地址和端口与对应的计算机建立TCP链接 4、在TCP链接上进行应用通信 5、关闭链接 第二步就是今天的主题
DNS全称是Domain Name System,中文是域名系统。首先它是一个分布式数据库,由分层的DNS服务器组成;其次,它是一个应用层协议,使得主机能够通过这个协议来查询分布式数据库,DNS协议运行在UDP之上,使用53号端口。
四种DNS服务器
1、首先查询本地hosts文件中是否可以解析,如果不可以则向本地DNS服务器请求解析。 2、本地DNS服务器如果缓存了请求的域名,则直接返回它的IP;如果没有缓存,则向根DNS服务器请求解析,根服务器返回对应的顶级域DNS服务器地址,本地服务器再向顶级域DNS服务器请求解析。(更多的情况是本地DNS服务器已经缓存了顶级域DNS服务器的地址,而跳过了访问根服务器这一步) 3、顶级域DNS服务器再次返回请求解析的域名对应的权威DNS服务器IP(也可能返回一个中间服务器地址,通过这个服务器得到权威DNS服务器IP),然后本地服务器通过这个权威DNS服务器得到最终需要的IP地址。 4、本地DNS服务器将得到的IP和对应的域名缓存起来,并返回给请求解析的主机。
这个过程中传输的都是DNS报文,报文中我们最需要关注的就是他的资源记录(RR)。资源记录是一个包含了四个字段的记录(Name,Value,Type,TTL)。最后一个字段代表了这个记录的生存时间,也就是缓存何时失效。而第一个字段Name和第二个字段Value,他俩的含义取决于第三个字段Type。Type有四种取值: ①当Type=A时,Name就是主机名,Value就是主机名对应的IP地址。 ②如果Type=NS,那么Name就是一个域(如baidu.com),Value是可以获得这个域中主机IP地址的权威DNS服务器的主机名。比如(baidu.com,dns.baidu.com,NS,TTL)就是一条类型为NS的记录。 ③如果Type =CNAME,则Name是一个别名,而Value是它的规范主机名。 ④如果Type = MX,Name是一个邮件服务器的别名,Value是它的规范主机名。
通过这个Type我们可以看出DNS至少有两个作用,一是IP映射,二是别名映射。其实除了这两个还有一个作用就是负载均衡。DNS服务器可以让一个主机名映射到一个IP集合,每次解析出IP集合中的一个IP。这样同一个服务的压力分散到了多个物理机上面,实现负载均衡。 (DNS三个作用:①别名映射 ②IP映射 ③负载均衡)
最后通过一个例子来结束这篇文章: 1、客户机请求解析 www.baidu.com,host文件中没有对应的记录,于是请求本地DNS服务器。 2、本地DNS服务器也难以完成解析,于是请求本地已经缓存的com顶级域DNS服务器,顶级域服务器返回了两条资源记录,一条是NS型(baidu.com,dns.baidu.com,NS,TTL),另一条是A型(dns.baidu.com,xxx.xxx.xxx.xxx,A,TTL)。 3、本地服务器收到这两条记录,知道了dns.baidu.com是权威DNS服务器,它的IP是xxx.xxx.xxx.xxx。于是访问这个服务器并得到www.baidu.com的IP地址,并通过这个IP地址建立TCP链接,在TCP链接上通过HTTP报文进行通信。