我们每天都要浏览很多的网页,那么当我们输入了一个网址(域名)的时候计算机是如何将域名转换为IP地址然后请求服务呢?IP与域名我们可以简单理解为每一个在互联网上提供服务的一台服务器或者是一组服务器,都有一个统一且唯一的公网IP地址,每一个请求可以根据ip地址找到对应的服务。目前的IP版本是IPV4,IP地址是32位(bit位)4字节,大约一共43亿个,但是并不是所有的IP地址可以做公网IP的,有一些IP因为特殊的作用被保留,例如192.168.*.*被用作局域网IP,所以实际上是没有43亿的。截止目前,所有的IPV4地址基本上已经消耗完了,唯一的解决方案就是推广IPv6协议,IPv6地址长128位(bit位)16字节,总地址数大约为2的128次方,号称可以为地球上每颗沙子分配一个IP地址。此外IPv6还支持在网络层对IP报文加密并校验,保证数据的安全性和完整性。IPv4与IPv6的区别无论是32位的IP地址还是64位的IP地址,都不方便记忆,且不能标示服务提供商的名称信息和性质,因此就提出了域名,域名通过小数点分隔开,最后面的是顶级域名,例如.com,.org,.cn等,每个域名都代表了不同的服务提供商地址或者组织性质。中间一般是服务提供商名和网络名,也可能只有一个。最前面的是www,World Wide Web的缩写。WWW是覆盖全球的客户机/服务器网络。下图是顶级域名代表的地区:顶级域名分布域名是为了方便记忆,但是在计算机网络通信的时候还是需要把域名转换为IP地址。如何转换呢? HOST首先计算机会查找本地的HOSTS,看本地HOSTS有没有缓存ip和域名的对应关系。如果有则域名解析成功。HOSTS缓存是为了提高域名解析速度,但是也存在安全隐患。一些黑客会通过修改操作系统HOSTS将域名解析到非服务提供商的IP地址,从而盗取用户信息,这就是所谓的域名劫持。此外,在局域网中,很少架设DNS服务器,我们很难记住服务器的IP,可以通过修改HOSTS文件,将ip地址和域名在HOSTS中映射,通过域名访问服务。下图中标出的部分就是域名和ip的映射,可以自己修改。HOSTS文件示例当然IP和域名的映射只是在本机生效,如果想全局生效,就要用到DNS服务。DNSDNS(Domain Name System)是域名服务协议,主要解决IP和域名映射的问题。上面提到修改HOSTS文件可以将IP和域名作映射,但是仅限于本机,不可能每台接入设备都修改自己的HOST,不仅麻烦而且存在安全隐患,所以就有了DNS服务。DNS是互联网的核心服务。比如说我们要访问头条的官网,不可能记住头条的IP地址,但是只要记得头条的域名就可以了,我们并没有在HOSTS文件配置头条域名和IP的映射,但是仍然可以正常找到域名对应的IP地址,这个就是DNS在发挥作用。具体解析过程如下:当在浏览器中输入域名时,首先会检测浏览器缓存中有没有这个域名对应的IP,如果有解析结束。如果没有,继续下一步。检查本机的HOSTS文件中有没有对应的记录,如果有解析结束,否则继续下一步。请求本地DNS服务器解析域名,本地DNS服务成为LDNS(Local Domain Name System)在每个地区都有,离我们不会太远,百分之八十的域名解析在这里可以完成。如果没有命中,继续下一步。由LDNS请求根域名服务(Root Server)解析。根域名服务器会根据被解析的域名的顶级域名返回给LDNS一个所查询域的主域名服务器(gTLD Server),国际顶尖域名服务器,如.com .cn .org等。LDNS向gTLD Server发送解析请求。gTLD查找并返回这个域名对应的Name Server的地址,Name Server是网站注册的域名服务器。Name Server查询域名和IP的映射关系,返回IP到LDNS。LDNS会缓存这个域名和IP地址的映射关系,下次解析同一个域名时就直接返回。LDNS返回给用户,用户操作系统会缓存域名和IP映射关系。解析结束。具体如图所示:DNS解析过程DNS解析服务是是互联网最重要的基础服务之一,例如前几天因为互联网顶级域名“.net”在F根服务器以及E根服务器的解析出现了故障,导致大量使用“.net”域名的网站和服务器从互联网“断开网络连接”,持续了大约3小时。目前全球共13台根域名服务器,分布如下:根域名服务器分布主根服务器在美国,剩下的12台辅根服务器中有9台在美国,英国,瑞典,日本各一台。中国作为全球最大的互联网用户,然而并没有根域名服务器,因此2015年中国下一代互联网工程中心联合发起了“雪人计划”,面向全球招募面向全球招募25个根服务器运营志愿单位,共同对IPv6根服务器运营。所以现在是13台旧的根域名服务器加上25台新的IPv6根域名服务器,IPv6根域名服务器分布如下:IPv6根域名服务器分布总结一下,当浏览器输入网址时会首先查找浏览器缓存,如果找到域名和IP的映射,如果找不到则会查找本地HOSTS,如果还是查不到会递归查询LDNS,如果LDNS找不到,则会去迭代查询高级的域名服务器,返回并缓存查询结果。拿到IP地址后,浏览器就可以请求服务并展示返回的结果了。