DNS 域名解析过程?

    作者简介:五月君,Nodejs Developer,慕课网认证作者,热爱技术、喜欢分享的 90 后青年,欢迎关注 和 Github 开源项目 https://www.nodejs.red

    为了方便记忆,我们通常会通过域名的方式访问网站,例如直接在浏览器地址栏输入 就可得到一个请求响应,但是在计算机网络通信时是只能识别 IP(127.0.0.1) 地址的,为什么我直接输入一串字母就可以访问呢?这背后的功劳就要归功于我们的 “翻译官” DNS 也就是域名系统,它会将我们的域名转换为 IP 地址进行工作。

    做为面试来讲,通常也是一个经常被拷问的面试点,不论你是做前端、后端或者运维都建议去学习下,以下会列出 DNS 解析的步骤:

    当我们访问一个 URL,例如 www.nodejs.red 会优先查找浏览器的 DNS 缓存,如果命中就会返回,未命中就会继续下一步,查找操作系统的缓存。

    当你修改了本地 hosts 域名的指向也就是下面即将要讲的,会发现浏览器刷新之后并没有生效,例如 Chrome 浏览器,网上有很多答案告诉你打开 chrome://net-internals/#dns 工具,通过 Clear Host Cache 来清除,然而浏览器缓存并没有发生变化,以下有一个视频演示可参考

    如果浏览器的 DNS 缓存没有命中,则查看操作系统中是否有域名对应的 IP,位于操作系统的 hosts 文件,hosts 文件位置如下所示:

    • Mac /private/etc/hosts
    • Ubuntu /etc/hosts

    做一个测试,通过修改本地 hosts 文件,我将 wwww.nodejs.red 这个域名映射为自己写的一个程序

    一个 Node.js 应用

    修改本地 hosts

    本地 hosts 文件增加以下代码,将 这个域名映射为 127.0.0.1 这个域名

    将域名 www.nodejs.red 转发到 端口上,使用 https 的方式访问,以下这块属于 Nginx 方面的知识,不懂的可以去网上查看。

    浏览器地址栏输入 www.nodejs.red 之后如下所示,已被解析到我上面写的 Node.js 应用程序

    修改 hosts 文件实现域名映射,这个通常在本地做开发时候可能会用到

    浏览器 DNS 缓存系统(OS)缓存 均无映射,则请求会发送到路由器缓存中检查

    举个例子,假设你用的中国联通服务提供商,则会进入联通的 DNS 缓存服务器中查找。