一、域名的结构
二、DNS解析流程git
在进入正题以前能够先适当的引入IP概念,以便下面的流畅阅读。github
一、[什么是IP地址?](https://segmentfault.com/a/1190000022864573) IP地址至关于网络中的身份惟一认证ID
DNS:(Domain Name System)域名解析系统
域名解析系统,听着还挺费解的,咱们知道当咱们浏览器输入网址的时候,输入的是一串域名,例如:
www.google.com
,可是咱们在委托咱们的操做系统发送消息时,却不是靠域名来找到对应的服务器,靠的的IP地址(这是TCP/IP协议的要求)。这个时候,所须要作的就是经过域名解析,来拿到咱们的IP地址。
域名能够经过
.
拆分红几个部分,从右到左依次是:顶级域名、二级域名、三级域名...
因此当咱们输入网址,去请求资源的话,那它又是如何办到的呢?chrome
简单来讲:DNS解析过程属于应用层协议(不知道应用层也不影响解析流程),当咱们生成http报文以后,就会在查找浏览器/host/本地/网关/本地DNS服务器/IPS/根域名服务器等中是否有DNS缓存,若是有的话,优先取缓存数据,不然,会经过主机上运行的DNS客户端(咱们的计算机上会有相应的DNS客户端,又称DNS解析器)向DNS服务器发送查询报文,DNS服务器再根据查询消息返回响应内容。
域名、类型(表示域名对应什么类型的记录,类型为MX时,表示域名对应的是邮件服务器,类型为A时,对应的IP地址)、以及Class(Class的值用来识别网络信息,如今互联网没有其余网络,因此永远是IN)。DNS服务器会根据查询消息来查询对应的消息记录。
邮件的记录类型是MX,又称为邮件交换记录。它是经过邮件地址的”@“符号后面的域名,获得对应的邮件服务器。DNS服务器会返回邮件服务器的域名和优先级。(邮件地址有可能对应多个邮件服务器,须要根据优先级来判断哪一个服务器优先查询。数值越小越优先。)由于最终也须要获得邮件服务器的IP地址,因此拿到邮件的服务器域名后最终又会解析成IP地址返回客户端。
光说没用,咱们能够来演示一波,当咱们查询www.google.com时:segmentfault
DNS客户端的请求报文数组
;; QUESTION SECTION: ;www.google.com. IN A
DNS服务器返回的查询结果
只有1个A记录表明,只有一个IP地址。221是缓存时间,表明221s内不用从新查询。浏览器
;; ANSWER SECTION: www.google.com. 221 IN A 8.7.198.45
NS记录
即域名服务器记录(Name Server),用来指定该域名由那个DNS域名服务器解析。缓存
;; AUTHORITY SECTION: google.com. 51 IN NS ns4.google.com. google.com. 51 IN NS ns3.google.com. google.com. 51 IN NS ns1.google.com. google.com. 51 IN NS ns2.google.com.
DNS域名服务器的IP地址服务器
;; ADDITIONAL SECTION: ns1.google.com. 266 IN A 216.239.32.10 ns1.google.com. 197 IN AAAA 2001:4860:4802:32::a ns2.google.com. 280 IN A 216.239.34.10 ns2.google.com. 197 IN AAAA 2001:4860:4802:34::a ns3.google.com. 55 IN A 216.239.36.10 ns3.google.com. 104 IN AAAA 2001:4860:4802:36::a ns4.google.com. 299 IN A 216.239.38.10 ns4.google.com. 92 IN AAAA 2001:4860:4802:38::a
邮件的DNS查询
能够看到DNS服务器返回了五个服务器域名以及优先级。网络
想了解的能够 => 记录类型dom
直接上图吧~说太多都没有用~
hosts文件地址 Mac:/etc/hosts Windows 7: C:\\**Windows**\\System32\\drivers\\etc 咱们能够看到,下图中有域名对应着IP 就至关于告诉计算机,若是我访问这个域名,那你就去这个ip地址找资源吧~
说到这里,那咱们停一下,如今是否是有两个疑问
一、究竟什么是本地服务器呢?
二、若是本地有缓存又要怎么办?
留着最后回答~
咱们先来解释图中本地DNS服务器与DNS服务器之间的关系,以及什么是根服务器。
DNS服务器相互之间的联系是:管理下一级域名的服务器会将本身注册到管理上级域名的DNS服务器上。
因此,当咱们从根域名服务器一层层往下找,就能够找到当前域名所在的DNS服务器了。
前面说了域名的结构,可是在咱们的互联网中,还有一个鲜为人知的地方,叫作根域。它处于一级域名(顶级域名)的上方,根域没有本身的名字(不配有姓名),咱们在输入域名时常常省略了它。它是一个点,是的,就是一点”.”,若是要代表根域,那么域名就会写成这样:”www.youzan.com.”没在域名的最后加一个句号。通常都不会写句号。根域名服务器管理的不是全部的域名,而是管理一级域名的服务器所在地址,好比管理着com域名服务器的地址。
不少资料上说,全世界IPv4根域名服务器只有13台。 13台根域名服务器的名字是从A-M。 1个主根服务器在美国,其他为12个辅根服务器,美国(9),英国(1),瑞典(1),日本(1)。 有人是否是想问为何中国没有?嗯,就是没有。 (由于互联网起源于美国,一开始只有美国有互联网,大部分在美国无可厚非。) 可是中国有IPv4镜像根服务器。 编号相同的镜像根服务器使用同一个IP。 因此,其实上面的说法是不精准的,根域名服务器其实有不少台,可是服务器的IP地址只有13个。 题外话:IPv6根服务器中国有4个,一个主根,三个辅根。
主根和辅根的区别:主根和辅根的数据是一致的,当有新的域名出现时,会先更新到主根服务器,再复制到辅根服务器。
镜像服务器:至关于镜子里的你,除了不是真正的你,也具备你的特征。就像你的桌面图标生成一个快捷方式的图标同样。
如今咱们了解了DNS服务器之间的联系,那么咱们回到流程图中:
一、究竟什么是本地服务器呢?
当咱们打开网络配置的时候,会看到有一个DNS IP地址,这个IP地址则是咱们指向的本地DNS服务器地址。
不一样的操做系统设置方式不同,DNS服务器的地址能够是提早设置好的也能够是自动分配的,MacOS的长这样:
在咱们非手动设置的状况下:若是咱们的网络是直连的运营商网络,通常而言那咱们的本地DNS则是ISP运营商IP地址。
若是咱们设置了转发(使用了路由器),那咱们的地址极有多是192.168.1.1(如上图),路由器自己,咱们的路由器会将请求转发到上层DNS,也就是ISP运营商DNS服务器。
二、若是本地有缓存又要怎么办?
因此之后若是页面打不开了,能够先清除浏览器或者电脑的DNS缓存试试,看是不是由于本地的缓存致使域名解析错误。
清除DNS缓存: Mac(10.13.6): sudo dscacheutil -flushcache Window: ipconfig /flushdns 谷歌浏览器:chrome://net-internals/#events.
三、为何服务器的IP地址只有13个?
由于DNS查询用的是UDP,而不是TCP。 UDP 实现中能保证正常工做的最大包是 512 字节,因此只能13个根服务器地址。 想要了解更多,请进入[传送门](https://jaminzhang.github.io/dns/The-Reason-of-There-Is-Only-13-DNS-Root-Servers/)
四、IPv4与IPv6的区别
IPv4:由32位二进制数组成 IPv6:可由128位二进制组成 [详文可阅读](https://zhuanlan.zhihu.com/p/50747832)
五、为何须要域名解析,而不直接是IP?
一、域名好记,给你ip,你能够记几个ip地址哇 二、不一样域名能够对应同一个IP 三、服务器IP变了咋办 四、TCP/IP协议的须要
参考资料:
《网络是怎么链接的》