当前位置: 代码迷 >> 综合 >> 趣谈网络协议-数据中心
  详细解决方案

趣谈网络协议-数据中心

热度:9   发布时间:2023-12-16 19:55:04.0

一、DNS协议

 

1. DNS 服务器

DNS 服务器:

  • 作用:将域名映射为IP地址
  • 特点:高并发、高可用

DNS层次结构:树状

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

 2. DNS 解析流程

解析流程:

  1. 客户端发送DNS解析请求至本地DNS服务器(若通过DHCP配置,本地DNS由网络服务商自动分配,通常在网络服务器的某个机房)
  2. 本地DNS接收到来自客户端的请求后,先查找缓存,若缓存中存在域名IP映射,则直接返回;否则本地DNS请求根域名服务器
  3. 根DNS服务器接收到本地DNS的请求,根据后缀返回顶级域名服务器的地址(.com返回.com顶级域名服务器地址)
  4. 本地DNS服务器根据返回的信息,访问顶级域名服务器;顶级域名服务器根据域名信息返回权威DNS服务器地址
  5. 本地DNS服务器根据返回的权威DNS服务器地址,访问权威DNS服务器。权威DNS服务器查询后将对应的IP返回
  6. 本地 DNS将获取到的IP地址返回客户端

3. 负载均衡

a. 内部负载均衡

一个域名可以对应多个IP地址,域名解析时,只要配置策略,第一次返回第一个IP,第二次返回第二个(轮询法),以此类推即可

b. 全局负载均衡

场景:高可用应用部署在异地多机房,就近访问可以提高用户访问的响应时间

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

背景:

  • 通过DNS访问数据中心中对象存储上的静态资源
  • 全国有多个数据中心,托管在多个运营商,每个数据中心三个可用区
  • 在每个数据中心中,都至少部署两个内部负载均衡器,内部负载均衡器后面对接多个对象存储的前置服务器(Proxy-server)。

客户端访问object.yourcompany.com域名的流程:

  1. 客户端请求本地DNS解析器
  2. 本地DNS解析器查看缓存,判断记录是否存在,存在则直接返回,否则请求本地DNS服务器
  3. 本地DNS服务器一般部署在客户端所在的运营商网络中,本地DNS服务器查看缓存中是否存在数据,否则递归请求根 DNS 服务器、顶级域名服务器、 权威 DNS 服务器,权威DNS服务器返回需要真实访问的IP

全局负载均衡器请求流程:(前提:两层GSLB,假设运营商是移动,访问的域名是object.yourcompany.com)

  1. 权威DNS服务器请求第一次GSLB时,通过查看本地DNS服务器所在的运营商,知道用户所在的运营商。通过CNAME的方式,通过另一个别名 object.yd.yourcompany.com,告知本地 DNS 服务器去请求第二层的 GSLB。
  2. 第二层 GSLB,通过查看请求它的本地 DNS 服务器所在的地址,获取用户所在的地理位置,然后将距离用户位置比较近的 Region 里面,六个内部负载均衡(SLB,Server Load Balancer)的地址,返回给本地 DNS 服务器。
  3. 本地 DNS 服务器将结果返回给本地 DNS 解析器
  4. 本地DNS解析器将结果缓存,并返回给客户端
  5. 客户端可以使用随机或者轮询的方式,访问返回的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 的工作模式:

  1. 在客户端的 SDK 里动态请求服务端,获取 HttpDNS 服务器的 IP 列表,缓存到本地。在不断地解析域名的过程中,SDK会在本地缓存 DNS 域名解析的结果
  2. 当客户端要访问一个域名时,会判断域名映射是否存在于缓存中,存在则直接返回。该缓存由客户端程序维护,不是由本地DNS缓存,因此可以灵活控制过期时间
  3. 若域名不存在于缓存,则在缓存的HttpDNS服务器IP列表中,选择一个IP发送请求,该请求会返回一个要访问的网站的IP列表
  4. 客户端通过获取手机的运营商、区域等信息,进行相对传统DNS更精准的全局负载均衡,选择更优的IP进行访问
  5. 当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分发系统架构:

  1. 边缘节点数目较多,节点所在的集群规模较小,不可能缓存下来所有东西
  2. 为了解决边缘结点缓存未命中的问题,增加了区域节点。区域节点规模更大,缓存的数据更多
  3. 区域节点之上是中心节点,中心节点相对于区域节点规模更大,缓存的数据更多。若中心节点数据还未命中,则需要回源网站访问

2. 客户端访问边缘结点流程

没有CDN时客户端访问流程:

  1. 客户端访问本地DNS服务器,若本地DNS服务器有缓存,直接返回,否则依次访问根DNS服务器、顶级域名DNS服务器、权威DNS服务器
  2. 权威DNS服务器返回IP地址,本地DNS服务器缓存并返回客户端

有DNS时客户端访问流程:

  1. 本地DNS服务器请求权威DNS服务器时,权威DNS服务器设置CNAME,返回新的域名(如www.web.cdn.com)
  2. 本地DNS服务器获取到新的域名后,访问新域名的权威DNS服务器,新域名的权威DNS服务器会返回CDN 网络的全局负载均衡器域名
  3. 本地DNS服务器请求解析CDN 的全局负载均衡器域名,全局负载均衡器综合各个指标返回一台CDN缓存服务器IP
  4. 本地DNS服务器获取边缘节点IP后,缓存并返回客户端,客户端访问该IP,获取数据
  5. 缓存服务器查找用户所需的内容是否存在,存在直接返回,不存在则请求上一级缓存服务器,直到拉取到数据为止

3. CDN缓存的内容

CDN可缓存内容:静态页面、图片、流媒体

缓存方法:

  • 静态页面:内容的分发往往采取拉取的方式,当发现未命中的时候,再去上一级进行拉取
  • 流媒体:采取主动推送的模式,将热点数据主动推送到边缘节点。对于流媒体,很多 CDN 还提供预处理服务(将视频转换为不同的码流、对视频进行分片)

防盗链:

  1. 当浏览器发送请求的时候,需要在header上带上referer 字段,告诉服务器是从哪个页面链接过来的。服务器可以限定只有本站的才可以访问
  2. 时间戳防盗链:客户端请求时,需要带上当前时间戳,连同加密字符串进行签名算法得到一个字符串。访问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):

  1. 思路:二层模拟实现路由能力
  2. 假设:有一个包要从主机 A 发送到主机 B,中间要经过 RBridge 1、RBridge 2、RBridge X 等等,直到 RBridge 3。
  3. 在 RBridge 2 收到的包里面,分内外两层,内层就是传统的主机 A 和主机 B 的 MAC 地址以及内层的 VLAN。在外层首先加上一个 TRILL 头,里面描述这个包从 RBridge 1 进来的,要从 RBridge 3 出去,并且像三层的 IP 地址一样有跳数。然后再外面,目的 MAC 是 RBridge 2,源 MAC 是 RBridge 1,以及外层的 VLAN。
  4. 当 RBridge 2 收到这个包之后,首先看MAC是否等于本地MAC,如果是,要看自己是不是 Egress RBridge;如果不是,查看跳数是不是大于 0,若不是,通过类似路由查找的方式找到下一跳 RBridge X,然后将包发出去。RBridge 2 发出去的包,内层的信息是不变的,外层的目标MAC变成下一跳地址RBridge 3,外层源MAC变成RBridge 2,跳数要减 1。
  5. 如此一直转发,直到 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

4. 打包封装传输过程

六、移动网络