前言
前两篇记录了一下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缓存服务器。
- 浏览器访问www.xxx.com,发一个DNS请求,询问对应的IP是啥,并发给本地域名服务器(本地DNS)。 「何为本地NDS?」 如果通过DHCP配置,本地DNS由网络服务商(ISP),如电信、移动等自动分配,通常就在网络服务商的某个机房。
- 本地DNS收到请求,本地DNS缓存着一张域名和IP对应的表,如果找到则直接返回IP地址。如果没有,本地DNS会去询问根域名服务器对应的IP地址是啥,根域名服务器是最高层次的,不直接用于域名解析,当能说明可去哪解析。
- 根DNS收到本地DNS请求后,发现后缀是.com,返回顶级域名服务器的地址
- 本地DNS随即请求顶级域名服务器查询对应的IP,顶级域名服务器管理者二级域名,比如baidu.com,所以它返回权威DNS服务器的地址。
- 本地DNS拿到权威DNS服务器地址,请求获取对应的IP,权威DNS服务器查询后将对应的IP地址返回给本地DNS
- 本地DNS再将IP地址返回客户端,客户端和目标建立连接。
「本地设置域名和IP转换」
在linux机器上通过在文件“/etc/hosts”中配置域名对应的IP地址
「设置DNS域名服务器」
需要在“/etc/resolv.conf”文件中配置
添加如下内容
代码语言:javascript复制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,是因为分运营商和地域。不同运营商的客户,可以访问相同运营商机房中的资源,这样不跨运营商访问,有利于提高吞吐量,减少时延。
- 第一层 GSLB,通过查看请求它的本地 DNS 服务器所在的运营商,就知道用户所在的运营商。假设是移动,通过 CNAME 的方式,通过另一个别名 object.yd.yourcompany.com,告诉本地 DNS 服务器去请求第二层的 GSLB。
- 第二层 GSLB,通过查看请求它的本地 DNS 服务器所在的地址,就知道用户所在的地理位置,然后将距离用户位置比较近的 Region 里面,六个内部负载均衡(SLB,Server Load Balancer)的地址,返回给本地 DNS 服务器。
- 本地 DNS 服务器将结果返回给本地 DNS 解析器。
- 本地 DNS 解析器将结果缓存后,返回给客户端。
- 客户端开始访问属于相同运营商的距离较近的 Region 1 中的对象存储,当然客户端得到了六个 IP 地址,它可以通过负载均衡的方式,随机或者轮询选择一个可用区进行访问。对象存储一般会有三个备份,从而可以实现对存储读写的负载均衡。