DNS(Domain Name System)域名系统
如何解决主机和路由器的识别问题:
IP地址(一串数字,不利于人类使用)和域名(标识主机) 在网络层时主要使用IP地址来标识主机,但是我们人常用域名来标识主机。
关于域名:
自己的电脑是没有域名的,计算机只有计算机名。 域名是互联网大家用来识记找到相应网站的一种方法,如果需要这项服务,可以上域名注册网站申请
域名和IP地址之间如何映射:
DNS(域名解析系统):将域名映射为IP地址
DNS是由多层命名服务器构成的分布式数据库,也是应用层协议(在协议之上有应用软件协助完成映射工作)
DNS的服务:域名和IP的映射/主机的别名/邮件服务器别名/负载均衡(当域名向IP地址进行翻译时,可以提供多个映射(IP地址),比如百度网站需要提供服务给全中国人民,那么它的服务器就肯定不止一个,甚至可能是一个服务器农场,多个IP可以进行负载均衡)
为什么不使用集中式的DNS?
单点失败:如果一台集中式的服务器坏掉了,那么整个相关网络瘫痪
流量问题:几十亿台主机访问流量太大
距离问题:距离太远就会产生时延
维护性:可维护性也差
分布式的代价:查询次数多
分布式层次式数据库:
Root DNS Servers
com DNS Server org DNS Server edu DNS servers
yahoo.com amzon.com DNS server pbs.org DNS Server poly.edu DNS server
客户端想要查询www.amazon.com的IP:
当本地域名解析服务器无法解析时,就先访问root DNS进行查询,然后查询com DNS,然后查询 amazon.com的域名解析服务器,获得www.amazon.com的IP地址。
本地域名解析服务器:
不严格属于层级体系,每个ISP都有一个本地域名服务器。
当主机进行DNS查询时,查询被发送到本地域名服务器,本地域名服务器作为proxy代理转发给域名解析服务系统。
DNS查询方法:
迭代查询:
本地主机要求访问baidu.COM,先查询本地域名解析服务器,没有然后申请查询root DNS Server,然后root返回给local,告诉它TLD DNS Server的地址,让local去查询TLD DNSServer,然后TLD返回authoritative DNS Server的地址给local,让local去查询authoritative DNS Server,然后local去查询authoritative,然后authoritative返回baidu.COM的IP地址,local再返回给本地主机。
递归查询:
本地主机→local→root→TLD→authoritative然后原路返回。
DNS记录缓存:
只要一个域名解析服务器获得域名-IP映射,就会缓存这个映射,然后就会提高响应速度。例如:你第一次访问baidu.com可能需要10s,过了一会,第二次访问时,他已经缓存了这个IP域名解析,所以速度会更快。但是也要注意,一段时间过后,缓存的映射就会失效。本地域名服务器一般会缓存顶级域名服务器的映射,所以很少访问根域名服务器。
我们已经知道DNS中会有域名缓存,那么缓存的资源是如何记录的呢?(DNS记录)
资源记录(Resource records): RR format(name,value,type,ttl)
| type | name | value | |
| A | 主机域名 | IP地址 | |
| NS | 域(edu.cn) | 该域的权威域名解析服务器的主机域名 | |
| CNAME | 某一个真实域名的别名 | 真实域名 |
| MX | name | 与name相对应的邮件服务器 |
DNS协议:
查询query和回复reply的协议
查询和回复的消息格式相同
消息的头部: identification(16位查询编号,回复使用相同编号)+flags



