域名有哪些门道
IP协议的职责是“网际互联”,它在MAC层之上,使用IP地址把MAC地址转换成了四位数字,这就对网卡的MAC地址做了一层抽象。
MAC地址- IP地址-域名
域名的形式
域名是一个有层次的结构,是一串用'.'分隔的多个单词,最右边被称为顶级域名,然后是二级域名,层级关系向左依次降低。
最左侧是主机名,通常用来表明主机的用途。比如"www"表示提供万维网服务,"mail"表示提供邮件服务,不过这也不是绝对的,名字的关键是为了让我们容易记忆。
域名不仅可以代替IP地址,还有许多其他的用途。
在Apache、Nginx这样的Web服务器里,域名可以标识虚拟主机,决定由哪个虚机来对外提供服务。
域名本质还是个名字空间系统,使用多级域名就可以划分出不同的国家、地区、组织、公司、部门,每一个域名都是独一无二的,可以作为一种身份的标识。
比如Java的包机制就采用域名·作为命名空间,只是它是用反序。
XML里使用URI作为名字空间,也是间接是用了域名。
域名的解析
就像IP地址必须转换为MAC地址才能访问主机一样,域名也要转换为IP地址,这个过程就是域名解析。
目前全世界有几亿个站点,有十几亿网民,而每天网络上发生的HTTP流量更是天文数字。这些请求绝大多数是基于域名来访问网站的,所以DNS就成了互联网的重要基础设施。
DNS的核心系统是一个三层的树状、分布式服务,基本对应域名的结构:
- 根域名服务器(Root DNS server)
- 顶级域名服务器(Top-level DNS server)
- 权威域名服务器(Authoritative DNS server)
在这里根域名服务器是关键,它必须是众所周知的,否则下面的各级服务器就无从谈起了。
目前全世界共有13组根域名服务器,又有数百台的镜像,保证一定能够访问到。
有了这个系统之后,任何一个域名都可以在这个树形结构里从上至下的查询,就好像是把域名从右往左顺序走了一遍,最终就获得了域名对应的IP地址。
例如:你要访问"www.apple.com",就要进行下面的三次查询:
- 访问根域名服务器,它会告诉你".com"顶级域名
- 访问".com"的顶级域名,它会告诉你"apple.com"的域名服务器的地址
- 最后访问"apple.com"域名服务器,就得到了"www.apple.com"的服务器的地址
虽然核心DNS系统遍布全球,服务能力也很强很温迪昂,但也招架不住全世界网民都往这个系统里挤,即使不挤瘫痪,访问速度也会很慢。
所以在核心DNS之外,还有两种手段来减轻域名解析的压力,并且能够快速获取结果,基本思路就是“缓存”。
首先,许多大公司,网络运营商都会建立自己的DNS服务器,作为用户DNS查询的代理,代替用户访问核心DNS系统。这些“野生”服务器被称为非权威域名服务器。
其次,操作系统也会对DNS解析结果做缓存。
另外,操作系统里还有一个特殊的“主机映射”文件,通常是一个可编辑的文本,在Linux里是"/etc/hosts",在Windows里是"C:\WINDOWS\system32\dirvers\etc\hosts",如果操作系统在缓存里找不到DNS记录,就会找这个文件。
有了上边野生DNS服务器、操作系统缓存和hosts文件后,很多域名解析的工作就都不用“跋山涉水”了,直接在本地或本机就能解决。不仅方便了用户,也减轻了各级DNS服务器的压力,效率就大大提升了。
在Nginx里有这么一条配置指令"resolver",它就是用来配置DNS服务器的,如果没有它,那么Nginx就无法查询域名对应的IP,也就无法反向代理到外部网站。
此文章为11月Day6学习笔记,内容来源于极客时间《透视HTTP协议》,以梦为马,11月进步💪💪
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。