上次博客主要总结回顾了应用层的一些知识,包括体系结构,HTTP协议,cookie等,今天主要来总结一下dns的知识。
DNS概述
DNS(Domain Name System),主要解决的问题:
- Internet上主机/路由器的识别问题(域名->IP地址)
DNS服务
- 域名向IP地址的翻译
- 主机别名
- 邮件服务器别名
- 负载均衡:Web服务器
IP地址是每一台主机的唯一标识符,而在我们真实上网过程中所用到的是便于我们记忆的域名。DNS是一个什么东西呢?它是一个域名解析系统,也是一个多层命名服务器构成的分布式数据库,作为应用层的协议主要功能就是完成域名的解析。为什么是分布式的呢,如果是集中式的会造成下面几个问题:
- 单点失败问题
- 流量问题
- 距离问题
- 维护性问题
如果我们使用一个或多个统一在一起一起服务,一旦机器换掉了,那么这个网络就要瘫痪了,这是单点失败问题。对于流量问题,想象一下几十台主机同时到某个服务器区请求,那么流量是巨大的,成本也是巨大的。距离问题的话,如果某台服务器在中国,美国人想要访问的话,还要横跨一个太平洋,这个成本也可想而知,还会造成时延问题。当然了集中式分布会造成一些列的维护性问题。所以我们采用分布式系统,如图:
第一层是根服务器,第二层是顶级域的域名服务器,比如com,org,edu等,再下面一级就是比较具体的,比如雅虎,亚马逊公司有自己的域名服务器,umass这个大学有自己的域名服务器,所以这样就构成了一个分布式层次式的数据库。
比如客户想要查询www.amazon.com的IP地址,分为以下这么几个步骤:
- 客户端查询根服务器,找到com域名解析服务器
- 客户端查询com域名服务器,找到amazon.com域名解析服务器
- 客户端查询amazon.com域名解析服务器,获得www.amazon.com的IP地址