当你在浏览器地址栏输入 baidu.com, 浏览器会做些什么?今天我们一起用上帝视角,看看都发生了哪些事
首先,baidu.com这样的地址也叫域名,但浏览器是用ip地址通信的,所以,在和目标服务器通信之前,域名(baidu.com)要转成ip才行,类似这样 39.156.70.37,那么浏览器如何查找对应的ip呢?
首先浏览器会先查找自身的缓存,以chrome为例,在地址栏输入:chrome://net-internals/#dns
运行结果
如果没有找到怎么办?再去系统hosts中查找。
#shell
#windows系统 hosts 文件地址
C:\Windows\System32\drivers\etc\hosts
#macOS系统
/etc/hostshosts还是没有怎么办?然后再去dns服务器查找,查看自己电脑的dns服务器地址
#shell
#查看本地dns服务器的ip
#windows系统查看dns服务器
ipconfig /all
如果运行正常,你将看到如图所示的dns服务器地址
#shell
#macOS查看本地dns服务器ip
cat /etc/resolv.conf下图是macOS系统示例
在指定的dns服务器上,还是找不到域名的ip,接下来dns服务器会去根服务器去找,就是分布在世界各地的13台根服务器,当然不是真的只有13台物理服务器,准确地讲应该是13个ip地址,下图就是13台根服务器ip地址和域名:
在自己的电脑上也可以模拟dns解析过程,下面以macOS为例。在上图找一台根服务器(任何一台都行),在命令行输入:
#shell
dig @192.36.148.17 baidu.com运行结果
命令执行完成后,上图红框内的部分就是顶级域名 .com 的dns服务器域名,上图中的 ADDITIONAL SECTION 显示了对应的ip, 我用第一个dns服务器地址,继续查找
#shell
dig @192.55.83.30 baidu.com运行结果
上面的命令执行完成后,在上图红框内,显示了 baidu.com 这个域名的 dns 服务器,ADDITIONAL SECTION 也是dns服务器域名对应的ip, 我们要找是baidu.com的ip,这里只是告诉我 baidu.com 这个域名的dns服务器是谁,我继续查找
这里我用dns服务器域名查找,当然用ip也是可以的
#shell
dig @ns2.baidu.com baidu.com运行结果
看到上图 ANSWER SECTION 部分,下面有两条ip地址,就是域名 “baidu.com”的ip地址,拿到ip地址后,我们验证一下对不对,这里我通过ping命令,可以查看域名对应的ip,如图所示:
运行结果
上面的命令执行完成后,可以看到ip地址为220.181.7.203,与ANSWER SECTION显示的地址一致,递归dns服务器就是这样工作的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。