Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

谈谈 dns #1

Open
MrLeihe opened this issue Mar 18, 2021 · 0 comments
Open

谈谈 dns #1

MrLeihe opened this issue Mar 18, 2021 · 0 comments

Comments

@MrLeihe
Copy link
Owner

MrLeihe commented Mar 18, 2021

谈谈 DNS

DNS 全称 Domain Name System,即域名系统,它的作用很简单,就是通过域名找到 ip,它是一个将域名和 ip 相互映射的分布式数据库。

那么我们在浏览器输入 url 到返回 ip 的过程

  1. 解析 url

  2. DNS 查询,查询优先级如下(如果命中就不再继续往下查询):

  • 首先会在浏览器 DNS 缓存查找
  • 在系统的 hosts 文件中查看是否有对应域名的 ip 映射
  • 查询本地操作系统的 DNS 缓存
  • 向本地 DNS 服务器发起域名解析请求
  • 本地 DNS 服务器未完成解析,则向根域名服务器发起解析请求
  • 根域名服务器返回 gLTD (通用顶级域)域名服务器地址
  • gLTD 域名服务器接收请求并返回 Name server 服务器地址
  • Name server 服务器返回 ip 地址给本地 DNS 服务器
  • 本地 DNS 服务器返回结果给用户,并对解析结果进行缓存
  • 至此解析结束

比如解析test.baidu.com. ,是具体怎么解析成IP地址的呢?可以形容为,从右向左
. -> .com -> baidu.com. -> test.baidu.com
(1)请求根域名服务器,带着 test.baidu.com. ,根域名服务器发现是 .com 结尾,然后告诉你,我只知道 com顶级域名服务器 的IP地址,你去问问它试试
(2)然后浏览器就向 com顶级域名服务器 请求,带着 test.baidu.com. ,com顶级域名服务器 只知道 baidu.com. 所在的服务器地址,并不知道 test. 是啥(因为test.这二级域名,只有百度自己知道啊,因为是百度自己设定的,就像crm.credit.cn,是不是只有公司才知道crm是个啥?)。。。所以 com顶级域名服务器 会告诉你,我只知道baidu.com. 所在的IP地址,你去问问它把(百度公司的web服务器)
(3)然后就向 "百度公司域名服务器" 请求,带着 test.baidu.com. ,百度公司自己肯定知道 test 是个啥,所以百度公司,就把最后真正的IP地址,返回给浏览器,到此,迭代查询完成了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant