相关名词
-
DNS(Domain Name System)(域名系统): 域名转换为IP地址(TCP/IP应用层协议)
-
ARP(Address Resolution Protocol)( 地址解析协议):是将IP地址转换为MAC地址(TCP/IP数据链路层协议)
-
LocalDNS (本地DNS服务器):一般是ISP提供
-
ISP(Internet Service Provider)(互联网服务提供商):(比如电信、联通和移动三大电信运营商);对于不同运营商间的互联互通,一般是采用BGP peering(对等)的方式进行
-
ICANN(The Internet Corporation for Assigned Names and Numbers)(互联网名称与数字地址分配机构):全世界域名的最高管理机构。
-
CNNIC(China Internet Network Information Center)(中国互联网络信息中心):是中国的管理和服务机构,行使国家互联网络信息中心的职责。
DNS解析流程
- 借用一张图,感觉看着舒服,出处:devconnected.com/how-to-flus…
- 不考虑每部分DNS缓存的情况下,DNS解析流程大致如下:
- 【递归查询】用户机器(比如浏览器)-> LocalDNS
- 【迭代查询】LocalDNS -> DNS根服务器(返回域服务器)
- 【迭代查询】LocalDNS -> 域服务器(返回DNS服务器列表)
- 【迭代查询】LocalDNS(选择一个DNS服务器) -> DNS服务器(返回域名对应的IP)(或返回其他权限服务器的IP地址,取决于域名的解析配置)
- 【迭代查询】LocalDNS -> 权限服务器(可选步骤,取决于上一步的返回)
- 用户机器(根据IP发送请求访问)
- 浏览器等各个部分一般会缓存DNS记录一段时间
- 请求发起方(浏览器)使用递归查询的方式请求;LocalDNS 使用迭代查询的方式请求
Q&A
去哪里可以注册域名?
- ICANN会把所有顶级域名分给各国的相关管理机构,管理机构再分给注册商。找到合适的注册商注册域名即可。
注册完域名怎么解析到相应的服务?
- 域名可以对应一个或多个ip,通过配置和发布使域名解析生效
- 通常情况下注册域名后,注册商会提供后台管理页面供你配置(供填写域名对应的dns服务器,解析到哪些目标ip等配置)(域名注册商一般都会自建权威域名解析服务器)
注册完域名后可以换注册商吗?
- 域名并不依赖平台的,注册完域名后应该有相应的管理密码和转移密码
- 有了域名的转移密码,就可以在其他注册商平台上进行转移
- 你可以在平台上直接配置域名解析,是因为平台帮你保管了域名的转移密码,ICANN或CNNIC认同这个域名由这个注册商管理
可以在多个DNS服务提供商配置域名解析?
- 在注册商提供的域名解析页面,可以配置多个DNS服务提供商配置进行域名解析(相当于做域名解析容灾)
运营商DNS和公共DNS
- 一般情况下,我们上网时,通过DHCP为我们的电脑分配一个ISP提供的LocalDNS,如果ISP做坏事,阻碍我们正常访问,这是可以使用公共DNS(不可靠的公共DNS同样会被域名劫持)。
- 公共DNS,是公共递归域名解析服务。
域名提供商和电信服务提供商之间DNS的关系?
- 域名提供商(域名注册商)(ICANN等授权的管理机构);电信服务提供商(ISP)
- ISP的DNS:LocalDNS
- 域名提供商的DNS (腾讯、阿里云等),将自己的dns服务的ip直接在各个ISP中进行登记,使得ISP的DNS服务能转发过来查找,得到域名对应的ip
自己创建的域名怎么让其他DNS服务器解析
- 除非用户自行设置指定你的dns服务公网ip,否则只有成为认证通过的注册服务商才行
- 比如阿里云域名的解析生效,第一步是 阿里云 DNS 必须首先生效,然后等待世界各地 Local DNS 生效,可以通俗的理解为各大电信运营管理的 DNS 需要及时同步 阿里云 DNS 解析记录,才能最终生效。 网站是否能访问,直接相关的是 Local DNS, 阿里 云解析都是实时生效的,一般只需几秒即可同步到各地 Local DNS 上,但各地 Local DNS 均有缓存机制,解析的最终生效取决于各运营商刷新时间。
DNS解析相关疑问
- DNS协议是应用层的协议,解析过程发生在用户态。
- DNS协议既使用了UDP,也使用了TCP,使用的端口号都为 53。大多数情况下 DNS 都使用 UDP 进行传输。
- DNS在区域传输的时候使用TCP协议,其他时候使用UDP协议;DNS区域传输的时候使用TCP协议
- 举个例子:浏览器返回某个HTTP服务
- 浏览器调用“DNS解析模块”发出UDP请求得到域名的ip(DNS 应用层)
- 浏览器调用TCP(内核系统调用)发出HTTP请求(TCP 传输层)
- TCP通过ARP协议得到mac地址 (ARP 数据链路层)
- “DNS解析模块” 是在哪里实现的?
- 程序自行解析实现(从/etc/resolv.conf中取出本地dns server地址列表, 发送DNS请求(UDP报文)并获得结果)
- 调用到c标准库的getaddrinfo或getnameinfo函数
- 要想知道getaddrinfo是如何查询信息的,可以用strace工具,追踪getaddrinfo函数 在执行时打开了哪些文件
- resolv.conf是各种操作系统域名系统解析器(DNS Resolver)的配置文件。每当一个程序需要通过域名来访问Internet上面的其它主机时,需要利用Resolver库函数将域名转换成对应的IP,然后才可进行访问。
- 域名系统解析器(DNS Resolver)并非一个可执行程序,而是C语言的一系列库函数,用于解析resolv.conf获取域名对应的IP。
- 操作系统中并不存在“DNS 查询”这个系统调用; 不同程序可能采用不同的策略获取名字对应的 IP 地址
dns-resolver相关
- docs.microsoft.com/en-us/windo…
- datacadamia.com/os/linux/re…
- DNS Resolver Module
- The DNS resolver module provides a way for kernel services to make DNS queries by way of requesting a key of key type dns_resolver. These queries are upcalled to userspace through /sbin/request-key.
Reference
- DNS、CDN加速和域名解析之间的关系
- 权威DNS、Local DNS、公共DNS有什么区别
- DNS用的是TCP协议还是UDP协议
- 超详细 DNS 协议解析
- DNS(域名解析协议)详解
- getaddrinfo工作原理分析
- Linux DNS 查询剖析