DNS域名解析系统

上古伪神

共 2628字,需浏览 6分钟

 ·

2021-05-19 16:12

前言

前两篇记录了一下UDP、广播和多播的相关笔记。

那么我们在打开TCP连接或者用UDP发送一个数据报之前,接收方往往是一个域名,例如xxx.com,此时需要将这个域名转换成IP地址,那么怎么进行转换的呢???

就是通过这个DNS域名系统进行转换。

今天就来记录一下DNS域名系统。

DNS域名系统

DNS域名系统(Domain Name System) 是一种用于TCP/IP应用程序的分布式数据库,提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。

DNS提供了允许服务器和客户程序相互通信的协议。

从应用的角度上看,对DNS的访问是通过一个地址解析器来完成的。

解析器通过一个或多个名字服务器来完成主机名和IP的相互转换。

在一个应用程序请求TCP打开一个连接或使用UDP发送给一个数据报之前,必须将一个主机名转换成IP地址。

每个节点的标识最长63字符,不区分大小写,任何一个节点的域名就是将该节点到最高层的域名串连起来,用“.”分割。

以“.”结尾的域名被称为绝对域名或完全合格的域名FQDN,例如:sun.tuc.noao.edu.

如果非“.”结尾,则认为该域名是不完全的。如果不完整的域名由两个或两个以上的标号组成,则认为它是完整的,或者在该域名的右边加上一个局部后缀,例如,域名sun加上局部后缀  .tuc.noao.edu.  成为完整的。

「顶级域名被分成三个部分:」

(1)arpa是用作地址到名字转换的特殊域

(2)7个3字符长的普通域

(3)所有2字符长的域被称为国家域,或地理域

描述
com商业组织
edu教育机构
gov其它美国政府部门
int国际组织
mil美国军事网点
net网络
org其它组织

我们日常能接触到的就是以com结尾的域名

比如学校的就是这样

至于后面的“.cn”域名表示的是我国顶级域名

DNS服务器

  • 根DNS服务器:返回顶级域DNS服务器的IP地址
  • 顶级域DNS服务器:返回权威DNS服务器的IP地址
  • 权威DNS服务器:返回相应主机的IP地址

DNS解析流程

为了提高DNS的解析性能,很多网络都会就近部署DNS缓存服务器。

  1. 浏览器访问www.xxx.com,发一个DNS请求,询问对应的IP是啥,并发给本地域名服务器(本地DNS)。

    「何为本地NDS?」 如果通过DHCP配置,本地DNS由网络服务商(ISP),如电信、移动等自动分配,通常就在网络服务商的某个机房。

  2. 本地DNS收到请求,本地DNS缓存着一张域名和IP对应的表,如果找到则直接返回IP地址。如果没有,本地DNS会去询问根域名服务器对应的IP地址是啥,根域名服务器是最高层次的,不直接用于域名解析,当能说明可去哪解析。

  3. 根DNS收到本地DNS请求后,发现后缀是.com,返回顶级域名服务器的地址

  4. 本地DNS随即请求顶级域名服务器查询对应的IP,顶级域名服务器管理者二级域名,比如baidu.com,所以它返回权威DNS服务器的地址。

  5. 本地DNS拿到权威DNS服务器地址,请求获取对应的IP,权威DNS服务器查询后将对应的IP地址返回给本地DNS

  6. 本地DNS再将IP地址返回客户端,客户端和目标建立连接。

「本地设置域名和IP转换」

在linux机器上通过在文件“/etc/hosts”中配置域名对应的IP地址

「设置DNS域名服务器」

需要在“/etc/resolv.conf”文件中配置

添加如下内容

nameserver 114.114.114.114

负载均衡

根据域名查询IP是一次DNS递归查询过程。本地DNS全权处理。在此过程中,DNS除了可以通过名称映射IP地址,还可以做另一件事,就是负载均衡。

DNS可以做内部负载均衡,域名和IP具有一对多的关系,配置域名比直接配置IP更具有灵活性。

DNS可以做全局负载均衡,高可用、就近访问

例如:DNS 访问数据中心中对象存储上的静态资源

假设全国有多个数据中心,托管在多个运营商,每个数据中心三个可用区(Available Zone)。对象存储通过跨可用区部署,实现高可用性。在每个数据中心中,都至少部署两个内部负载均衡器,内部负载均衡器后面对接多个对象存储的前置服务器(Proxy-server)。

对于复杂的应用、跨地域跨运营商的大型应用,则需要更加复杂的全局负载均衡机制,这就是全局负载均衡器(GSLB,Global Server Load Balance)。

权威DNS服务器中,一般通过配置CNAME的方式,给域名起一个别名,例如:www.vip.baidu.com,然后告诉本地DNS服务器,让它请求GSLB解析这个域名,GSLB就可以在解析这个域名的过程中,通过自身策略实现负载均衡。

图中画了两层的 GSLB,是因为分运营商和地域。不同运营商的客户,可以访问相同运营商机房中的资源,这样不跨运营商访问,有利于提高吞吐量,减少时延。

  1. 第一层 GSLB,通过查看请求它的本地 DNS 服务器所在的运营商,就知道用户所在的运营商。假设是移动,通过 CNAME 的方式,通过另一个别名 object.yd.yourcompany.com,告诉本地 DNS 服务器去请求第二层的 GSLB。
  2. 第二层 GSLB,通过查看请求它的本地 DNS 服务器所在的地址,就知道用户所在的地理位置,然后将距离用户位置比较近的 Region 里面,六个内部负载均衡(SLB,Server Load Balancer)的地址,返回给本地 DNS 服务器。
  3. 本地 DNS 服务器将结果返回给本地 DNS 解析器。
  4. 本地 DNS 解析器将结果缓存后,返回给客户端。
  5. 客户端开始访问属于相同运营商的距离较近的 Region 1 中的对象存储,当然客户端得到了六个 IP 地址,它可以通过负载均衡的方式,随机或者轮询选择一个可用区进行访问。对象存储一般会有三个备份,从而可以实现对存储读写的负载均衡。

往期推荐:

广播与多播

UDP是什么东西???

路由协议

网关和路由

CV工程师用不到的链路层知识点

星巴克气氛组电脑是如何获取IP的

浏览器发起HTTP请求后经历了什么?

推荐一个生产环境问题排查利器

MySQL系列文章

k8s全系列文章汇总


浏览 49
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报