在第4章网络层介绍过,在互联网上,可以唯一标识一台主机的是它的IP地址。需要访问特定主机,以获得该主机提供的某种资源或者服务的人,只需要记住该主机的IP地址即可。使用应用时,将这个IP地址提供给自己的客户端程序,就可以让客户端程序顺利地访问特定主机的服务。
但是,纯粹由数字构成的IP地址,对于人类记忆来说是非常不友好的。即使是较短的IPv4地址,在经常使用的情况下,一般人也很难记住比几十个更多的地址,更不要说IPv6地址了。为了解决IP地址不易记忆的问题,人们提出了域名系统(Domain Name System,DNS)的概念。
有了DNS,人们只需要记住主机的域名即可。域名一般都由接近人类自然语言的字符串构成,利于记忆,标识一台主机用的是易于记忆的域名,记住了域名就相当于记住了主机。上网时,把记住的域名交给自己的客户端程序就行了,但是,互联网上真正标识一台主机的依然是IP地址,真正的通信主体——进程——之间使用的依然是IP地址。这就需要网络中有一种可以把人类记忆的域名转换为IP地址的机制。而DNS的作用,就是在应用进程寻访主机时,帮它把域名映射为对应的IP地址。此后,应用进程就可以方便地利用前面各章介绍过的各种协议完成后续的通信。这个域名到IP的映射过程对于用户来说是透明的,用户只是把域名提供给某个应用程序,应用程序自己去访问域名解析系统,获得对应的IP地址。
概括来说,IP地址的长度为固定的32 bit或者128 bit,人们不好记忆,但利于机器处理。机器的域名是类似自然语言的字符串,其长度不定,利于人们记忆,但不利于机器处理。DNS则实现了两者之间的映射。DNS提供域名和对应IP地址的操作过程,一般被称为域名解析(Domain Name Resolution,DNR)。
实现域名到IP的映射,从逻辑上来看是一个非常简单的事情,由一个字段的值获得与其对应的字段的值。有一定编程基础的人都可以实现一个完成类似功能的服务程序。其可以利用一个数据库存储域名到IP地址的映射关系;用一点简单的程序接收查询请求,从数据库获得映射结果,最后反馈给查询者,但是,DNS远没有这么简单。(www.xing528.com)
DNS难度的核心问题就是:数据量大,访问规模大,而且必须时刻保持可用。
任何简单的事情,一旦有了规模都将不再简单。目前,全世界的域名数量达到千万级别。全世界每天都有数以十亿计的用户提出域名访问。不仅访问量大,而且用户遍布全世界,凡有网络接入点处,皆可请求DNS解析。DNS解析服务如果中断,将影响全世界的网络访问。如果只设置单一的域名服务器,首先,该服务器在巨量的访问下会成为整个互联网的瓶颈;其次,互联网上距离该服务器远的那些用户访问时延会很长;最后,单一服务器的故障也将成为整个互联网的灾难。
所以,DNS必然是一个精心设计的分布式系统。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。