一、DNS协议
1. DNS 服务器
DNS 服务器:
- 作用:将域名映射为IP地址
- 特点:高并发、高可用
DNS层次结构:树状
- 根 DNS 服务器:返回顶级域DNS服务器IP地址
- 顶级域DNS服务器:返回权威DNS服务器IP地址
- 权威DNS服务器:返回相应主机的IP地址
2. DNS 解析流程
解析流程:
- 客户端发送DNS解析请求至本地DNS服务器(若通过DHCP配置,本地DNS由网络服务商自动分配,通常在网络服务器的某个机房)
- 本地DNS接收到来自客户端的请求后,先查找缓存,若缓存中存在域名IP映射,则直接返回;否则本地DNS请求根域名服务器
- 根DNS服务器接收到本地DNS的请求,根据后缀返回顶级域名服务器的地址(.com返回.com顶级域名服务器地址)
- 本地DNS服务器根据返回的信息,访问顶级域名服务器;顶级域名服务器根据域名信息返回权威DNS服务器地址
- 本地DNS服务器根据返回的权威DNS服务器地址,访问权威DNS服务器。权威DNS服务器查询后将对应的IP返回
- 本地 DNS将获取到的IP地址返回客户端
3. 负载均衡
a. 内部负载均衡
一个域名可以对应多个IP地址,域名解析时,只要配置策略,第一次返回第一个IP,第二次返回第二个(轮询法),以此类推即可
b. 全局负载均衡
场景:高可用应用部署在异地多机房,就近访问可以提高用户访问的响应时间
4. 示例:DNS 访问数据中心中对象存储上的静态资源
背景:
- 通过DNS访问数据中心中对象存储上的静态资源
- 全国有多个数据中心,托管在多个运营商,每个数据中心三个可用区
- 在每个数据中心中,都至少部署两个内部负载均衡器,内部负载均衡器后面对接多个对象存储的前置服务器(Proxy-server)。
客户端访问object.yourcompany.com域名的流程:
- 客户端请求本地DNS解析器
- 本地DNS解析器查看缓存,判断记录是否存在,存在则直接返回,否则请求本地DNS服务器
- 本地DNS服务器一般部署在客户端所在的运营商网络中,本地DNS服务器查看缓存中是否存在数据,否则递归请求根 DNS 服务器、顶级域名服务器、 权威 DNS 服务器,权威DNS服务器返回需要真实访问的IP
全局负载均衡器请求流程:(前提:两层GSLB,假设运营商是移动,访问的域名是object.yourcompany.com)
- 权威DNS服务器请求第一次GSLB时,通过查看本地DNS服务器所在的运营商,知道用户所在的运营商。通过CNAME的方式,通过另一个别名 object.yd.yourcompany.com,告知本地 DNS 服务器去请求第二层的 GSLB。
- 第二层 GSLB,通过查看请求它的本地 DNS 服务器所在的地址,获取用户所在的地理位置,然后将距离用户位置比较近的 Region 里面,六个内部负载均衡(SLB,Server Load Balancer)的地址,返回给本地 DNS 服务器。
- 本地 DNS 服务器将结果返回给本地 DNS 解析器
- 本地DNS解析器将结果缓存,并返回给客户端
- 客户端可以使用随机或者轮询的方式,访问返回的IP地址
二、HttpDNS
1. 传统 DNS 的问题
a. 域名缓存问题
场景:本地DNS可以在本地做缓存(访问权威DNS服务器后将结果存储在本地)
问题:
- 页面更新,用户会访问到老的页面
- 本地的缓存,会使得全局负载均衡失败
b. 域名转发问题
场景:若客户端A(在运营商T网络下)访问自己运营商的DNS服务器,运营商T去权威DNS服务器查询,权威DNS服务器可以获取运营商信息,从而返回一个部署在运营商T下的IP。同运营商访问,速度会快很多
问题:若运营商T将解析的请求转发给运营商K,K运营商查询权威DNS服务器,权威DNS服务器会获取到运营商K的信息,返回部署在运营商K下的服务的IP,进而导致跨运营商访问,导致访问速度慢
c. 出口 NAT 问题
问题:数据包通过网关时,会将私有IP转换成公有IP,权威DNS服务器无法通过IP地址来判断客户来自哪个运营商
d. 域名更新问题
场景:本地DNS服务器独立部署在不同地区不同运营商,缓存过期的处理策略也不一致。权威 DNS 服务器解析变更的时候,解析结果在全网生效的周期非常漫长
问题:有时候,DNS切换后,需要解析结果能快速生效。(例子:跨机房负载均衡和容灾多使用DNS来处理,若一个机房的服务出问题,更改权威DNS服务器后,更新的结果不能在短时间内生效,会导致很多用户访问异常)
e. 解析延迟问题
问题:DNS查询时需要递归遍历多个DNS服务器,会带来一定的时延
2. HttpDNS 的工作模式
HttpDNS:
- 不走传统的 DNS 解析,自己搭建基于 HTTP 协议的 DNS 服务器集群,分布在多个地点和多个运营商。
- 当客户端需要 DNS 解析的时候,直接通过 HTTP 协议进行请求DNS服务器集群,得到就近的地址
- HttpDNS 需要绕过默认的 DNS 路径,不能使用默认的客户端。
- 使用 HttpDNS 的,往往是手机应用,需要在手机端嵌入支持 HttpDNS 的客户端 SDK
HttpDNS 的工作模式:
- 在客户端的 SDK 里动态请求服务端,获取 HttpDNS 服务器的 IP 列表,缓存到本地。在不断地解析域名的过程中,SDK会在本地缓存 DNS 域名解析的结果
- 当客户端要访问一个域名时,会判断域名映射是否存在于缓存中,存在则直接返回。该缓存由客户端程序维护,不是由本地DNS缓存,因此可以灵活控制过期时间
- 若域名不存在于缓存,则在缓存的HttpDNS服务器IP列表中,选择一个IP发送请求,该请求会返回一个要访问的网站的IP列表
- 客户端通过获取手机的运营商、区域等信息,进行相对传统DNS更精准的全局负载均衡,选择更优的IP进行访问
- 当HttpDNS失效时,退化成传统的DNS来解析域名
3. HttpDNS 的缓存设计
HttpDNS的优点:
- 解析域名时,不需要本地DNS服务器递归调用,一个HTTP请求即可
- 缓存由客户端维护,可以灵活控制过期时间,更新时间
HttpDNS 的缓存设计策略:
- 客户端会将DNS解析结果缓存在内存中,也可以持久化到存储上。
- 客户端缓存没有命中,或缓存过期,则会发起一次解析。解析可以同步进行(直接调用 HttpDNS 的接口),也可以异步进行(后台开启解析任务,由后台任务调用 HttpDNS 的接口)
- 同步解析实时性好,但缓存通过失效时,需要请求多次HttpDNS。同步解析对应Cache-Aside(先读缓存,不命中读数据库,同时将结果写入缓存)
- 异步更新当有多个缓存失效时,可以合并请求,仅发一次HttpDNS即可。可以在缓存即将过期时,创建任务进行预加载。缺点时可能拿到过期数据。异步更新对应Refresh-Ahead 机制(业务仅仅访问缓存,当过期的时候定期刷新。)
4. HttpDNS 的调度设计
客户端:
- 可以获取客户端地区、运营商等信息,HttpDNS 服务端可以根据这些信息,选择最佳的服务节点访问。如果有多个节点,客户端还会考虑错误率、请求时间、服务器压力、网络状况等,进行综合选择
- 客户端在使用HttpDNS返回的 IP 访问业务应用后,客户端的 SDK 会收集网络请求数据,如错误率、请求时间等网络请求质量数据,并发送到统计后台,进行分析、聚合,以此查看不同的 IP 的服务质量。
服务端:
- 客户端可以通过HttpDNS管理接口配置不同种类的服务质量指标的优先级、权重。HttpDNS会综合服务质量指标和运营商、区域计算出排序
- HttpDNS智能调度计算结果也会缓存到客户端。客户端可以根据运营商来分维度缓存数据,使得不同运营商在本地缓存中获取到的域名映射地址不一样
三、CDN
1. CDN 分发系统架构
边缘节点:分布在各个地方的各个数据中心的节点
CDN分发系统架构:
- 边缘节点数目较多,节点所在的集群规模较小,不可能缓存下来所有东西
- 为了解决边缘结点缓存未命中的问题,增加了区域节点。区域节点规模更大,缓存的数据更多
- 区域节点之上是中心节点,中心节点相对于区域节点规模更大,缓存的数据更多。若中心节点数据还未命中,则需要回源网站访问
2. 客户端访问边缘结点流程
没有CDN时客户端访问流程:
- 客户端访问本地DNS服务器,若本地DNS服务器有缓存,直接返回,否则依次访问根DNS服务器、顶级域名DNS服务器、权威DNS服务器
- 权威DNS服务器返回IP地址,本地DNS服务器缓存并返回客户端
有DNS时客户端访问流程:
- 本地DNS服务器请求权威DNS服务器时,权威DNS服务器设置CNAME,返回新的域名(如www.web.cdn.com)
- 本地DNS服务器获取到新的域名后,访问新域名的权威DNS服务器,新域名的权威DNS服务器会返回CDN 网络的全局负载均衡器域名
- 本地DNS服务器请求解析CDN 的全局负载均衡器域名,全局负载均衡器综合各个指标返回一台CDN缓存服务器IP
- 本地DNS服务器获取边缘节点IP后,缓存并返回客户端,客户端访问该IP,获取数据
- 缓存服务器查找用户所需的内容是否存在,存在直接返回,不存在则请求上一级缓存服务器,直到拉取到数据为止
3. CDN缓存的内容
CDN可缓存内容:静态页面、图片、流媒体
缓存方法:
- 静态页面:内容的分发往往采取拉取的方式,当发现未命中的时候,再去上一级进行拉取
- 流媒体:采取主动推送的模式,将热点数据主动推送到边缘节点。对于流媒体,很多 CDN 还提供预处理服务(将视频转换为不同的码流、对视频进行分片)
防盗链:
- 当浏览器发送请求的时候,需要在header上带上referer 字段,告诉服务器是从哪个页面链接过来的。服务器可以限定只有本站的才可以访问
- 时间戳防盗链:客户端请求时,需要带上当前时间戳,连同加密字符串进行签名算法得到一个字符串。访问CDN时,需要带上签名字符串和截止时间戳。CDN服务端取出时间戳,判断时间戳是否过期,过期返回错误,否则使用相同的签名算法,利用客户端请求的时间戳和约定好的加密字符串计算出一个字符串。若客户端的字符串和CDN字符串一致,访问合法,CDN返回资源
4. 动态 CDN
场景:动态数据较难缓存
解决方法:
- 边缘计算的模式:定时从源数据那里同步存储的数据,然后在边缘进行计算得到结果
- 路径优化的模式:数据在源站计算,但数据的下发使用CDN网络(CDN结点较多,可以找到离源站近的CDN,通过CDN网络下发数据)
5. CDN网络优化
优化策略:
- 在 CDN 加速网络中可以调整 TCP 的参数,使得 TCP 可以更加激进地传输数据。
- 可以通过多个请求复用一个连接
四、数据中心
1. 数据中心涉及到的计算机网络概念
概念:
- 机架(Rack):服务器摆放在机架上
- 边界路由器(Border Router):数据中心的入口和出口也是路由器,由于在数据中心的边界,就像在一个国家的边境。为了高可用,边界路由器会有多个,且会连多个运营商
- TOR(Top Of Rack)交换机:每个机架上的服务器需要使用交换机连接起来,实现互通,这些交换机通常放在机架顶端,称为TOR交换机
- 汇聚层交换机:当一个机架放不下时,需要多个机架放置服务器,此时需要交换机将多个机架连接起来,这些交换机称为汇聚层交换机
- 网卡绑定:为了确保高可用,一台机器往往需要两个以上的网卡接入到 TOR 交换机,且多个网卡要像一张网卡一样工作
- 堆叠:交换机也需要实现高可用,因此可以将多个交换机形成一个逻辑的交换机,服务器通过多根线分配连到多个接入层交换机上,而接入层交换机多根线分别连接到多个交换机上,并且通过堆叠的私有协议,形成双活的连接方式。
- POD(Point Of Delivery)/可用区(Available Zone):汇聚层将大量节点相互连接在一起,形成一个集群。在这个集群里面,服务器之间通过二层互通,这个区域称为POD/可用区
- 核心交换机:连接多个可用区的交换机。核心交换机吞吐量更大,高可用要求更高,因此不仅仅需要堆叠,还需要部署多组核心交换机
2. 数据中心涉及的协议
a. 概述
涉及的协议:
- 数据中心往往就是路由协议中的自治区域(AS)
- 多线 BGP:数据中心有需要对外提供服务的机器,也有需要访问外部资源的机器,可通过BGP协议,获取内外互通的路由信息
- LACP协议:为了实现网卡绑定,服务器和交换机需要支持LACP协议,确保他们之间互相通信时,多个网卡聚合成为一个网卡,多个网线聚合成一个网线,在网线之间可以进行负载均衡。
b. TRILL协议
出现环路的处理方式:
- 方式1:不同的可用区在不同的二层网络,需要分配不同的网段。汇聚和核心之间通过三层网络互通的,二层都不在一个广播域里面,不会存在二层环路的问题。三层通过路由协议选择最佳的路径就可以了
- 方式2:集群规模非常大时,需要在核心以下,全部是二层互连,全部在一个广播域里面。此时若核心交换机组中包含多组核心交换机组,会出现环的问题,此时可引入TRILL协议(若使用STP,只有一组核心交换机工作,无法通过部署多组核心交换机扩大横向流量的能力)
RBridge:
- 运行 TRILL 协议的交换机称为 RBridge,是具有根据 MAC 地址进行路由转发的网桥设备
- Rbridage 之间通过链路状态协议运作,使用链路状态协议学习整个大二层的拓扑,知道访问哪个 MAC 应该从哪个网桥走;还可以计算最短的路径,也可以通过等价的路由进行负载均衡和高可用性。
TRILL 协议格式:
- Ingress RBridge:类似IP 头里面的源 IP 地址
- Egress RBridge:类似目标 IP 地址
- 外层的 MAC:目的外层MAC为下一跳RBridge,源为本地MAC
多链接透明互联协议运行流程(TRILL):
- 思路:二层模拟实现路由能力
- 假设:有一个包要从主机 A 发送到主机 B,中间要经过 RBridge 1、RBridge 2、RBridge X 等等,直到 RBridge 3。
- 在 RBridge 2 收到的包里面,分内外两层,内层就是传统的主机 A 和主机 B 的 MAC 地址以及内层的 VLAN。在外层首先加上一个 TRILL 头,里面描述这个包从 RBridge 1 进来的,要从 RBridge 3 出去,并且像三层的 IP 地址一样有跳数。然后再外面,目的 MAC 是 RBridge 2,源 MAC 是 RBridge 1,以及外层的 VLAN。
- 当 RBridge 2 收到这个包之后,首先看MAC是否等于本地MAC,如果是,要看自己是不是 Egress RBridge;如果不是,查看跳数是不是大于 0,若不是,通过类似路由查找的方式找到下一跳 RBridge X,然后将包发出去。RBridge 2 发出去的包,内层的信息是不变的,外层的目标MAC变成下一跳地址RBridge 3,外层源MAC变成RBridge 2,跳数要减 1。
- 如此一直转发,直到 RBridge 3,将外层解出来,发送内层的包给主机 B。
分发树:一个有环的图形成多棵树,不同的树有不同的 VLAN,有的广播包从 VLAN A 广播,有的从 VLAN B 广播,实现负载均衡和高可用
c. 叶脊网络
典型三层网络图:
- 南北流量:外部流量请求到内部机器或内部请求发送到外部
- 东西流量:数据经过内部交换机,在内部机器中拷贝
传统三层架构东西流量问题:服务器和服务器之间的通信,需要经过接入交换机、汇聚交换机和核心交换机。
叶脊网络:
- 叶子交换机(leaf):直接连接物理服务器,相当于接入交换机。两个叶交换机下的服务器需要通信,需要经由脊交换机进行转发
- 脊交换机(spine switch):相当于核心交换机。叶子交换机和脊交换机之间通过 ECMP 动态选择多条路径。脊交换机现在只是为叶子交换机提供一个弹性的 L3 路由网络。南北流量可以不用直接从脊交换机发出,而是通过与 leaf 交换机并行的交换机,再接到边界路由器出去。
参考资料:到底什么是叶脊网络?_鲜枣课堂-CSDN博客
五、VPN
1. 概述
VPN:虚拟专用网,利用开放的公众网络,建立专用数据传输通道,将远程的分支机构、移动办公人员等连接起来。
涉及的协议:乘客协议、隧道协议、承载协议
2. IPsec VPN
保证安全性机制:
- 私密性:VPN建立后,使用对称加密传输数据。传输对称加密秘钥时,使用因特网密钥交换(IKE)协议
- 完整性:
- 真实性:
认证方案:
- 预共享密钥:
- 数字签名验证:
IPsec VPN 协议簇中的协议:
- AH(Authentication Header):
- ESP(Encapsulating Security Payload):
IPsec VPN 协议簇中的算法:加密算法、摘要算法
IPsec VPN 协议簇中的两大组件:
- IKE 组件:
- SA(Security Association)组件:
3. IPsec VPN 的建立过程
建立过程:
a. 建立 IKE 自己的 SA
b. 建立 IPsec SA