浅析 AnyCast 技术

Posted by Mike on 2018-06-28

在讲解任播 (AnyCast) 前,我们先来说说 TCP/IP 协议里常见的几种数据传输方式单播、组播、广播。

什么是单播

  • 单播概念

单播(Unicast)是指封包在计算机网络的传输过程中,目的地址为单一目标的一种传输方式。每次只有两个实体相互通信,发送端和接收端都是唯一确定的。它是现今网络应用最为广泛,通常所使用的网络协议或服务大多采用单播传输,例如一切基于 TCP 的协议。

  • 单播地址

在 IPv4 网络中,0.0.0.0 到 223.255.255.255 属于单播地址。

  • 单播优点
  1. 服务器及时响应客户机的请求。
  2. 服务器针对每个客户不同的请求发送不同的数据,容易实现个性化服务。
  • 单播缺点
  1. 服务器针对每个客户机发送数据流,服务器流量=客户机数量×客户机流量。在客户数量大、每个客户机流量大的流媒体应用中服务器不堪重负。

  2. 现有的网络带宽是金字塔结构,城际省际主干带宽仅仅相当于其所有用户带宽之和的 5%。如果全部使用单播协议,将造成网络主干不堪重负。现在的 P2P 应用就已经使主干经常阻塞,只要有 5% 的客户在全速使用网络,其它用户网速将严重受损,而将主干网络带宽在短时间内扩展 20 倍几乎是不可能。

什么是多播

  • 多播概念

多播(Multicast,台湾又译作多点发送、多点广播或群播,中国大陆又译作组播)是指把信息同时传递给一组目的地址。它使用策略是最高效的,因为消息在每条网络链路上只需传递一次,而且只有在链路分叉的时候,消息才会被复制。

与多播相比,常规的点到点的传递被称作单播。当以单播的形式把消息传递给多个接收方时,必须向每个接收者都发送一份数据副本。由此产生的多余副本将导致发送方效率低下,且缺乏可扩展性。不过,许多流行的协议用限制接收者数量的方法弥补了这一不足(例如:XMPP)。

  • 多播地址

多播组可以是永久的也可以是临时的。多播组地址中,有一部分由官方分配的,称为永久多播组。永久多播组保持不变的是它的 IP 地址,组中的成员构成可以发生变化。永久多播组中成员的数量都可以是任意的,甚至可以为零。那些没有保留下来供永久组播组使用的 IP 多播地址,可以被临时多播组利用。

以太网传输单播 IP 报文的时候,目的 MAC 地址使用的是接收者的 MAC 地址。但是在传输多播报文时,传输目的不再是一个具体的接收者,而是一个成员不确定的组。所以使用的是多播 MAC 地址。

多播 MAC 地址是和多播 IP 地址对应的。IANA 规定,多播 MAC 地址的高 24 位为 0x01005e,低 23 位的 MAC 地址为多播 IP 地址的低 23 位。

由于 IP 多播地址的后 28 位中只有 23 位被映射到 MAC 地址,这样就会有 32 个 IP多播地址映射到同一 MAC 地址上。

多播地址分配情况

  1. 224.0.0.0 - 224.0.0.255 为预留的多播地址(永久组地址),地址 224.0.0.0 保留不做分配,其它地址供路由协议使用。
  2. 224.0.1.0 - 224.0.1.255 是公用多播地址。
  3. 224.0.2.0 - 238.255.255.255 为用户可用的多播地址(临时组地址),全网范围内有效。
  4. 239.0.0.0 - 239.255.255.255 为本地管理组播地址,仅在特定的本地范围内有效。

永久的多播地址分配情况

  1. 224.0.0.0 基准地址(保留)
  2. 224.0.0.1 所有主机的地址 (包括所有路由器地址)
  3. 224.0.0.2 所有多播路由器的地址
  4. 224.0.0.3 不分配
  5. 224.0.0.4 DVMRP 路由器
  6. 224.0.0.5 所有 OSPF 路由器
  7. 224.0.0.6 OSPF DR/BDR
  8. 224.0.0.7 ST 路由器
  9. 224.0.0.8 ST 主机
  10. 224.0.0.9 RIP-2 路由器
  11. 224.0.0.10 Eigrp 路由器
  12. 224.0.0.11 活动代理
  13. 224.0.0.12 DHCP 服务器/中继代理
  14. 224.0.0.13 所有 PIM 路由器
  15. 224.0.0.14 RSVP 封装
  16. 224.0.0.15 所有 CBT 路由器
  17. 224.0.0.16 指定 SBM
  18. 224.0.0.17 所有 SBMS
  19. 224.0.0.18 VRRP
  • 多播优点
  1. 需要相同数据流的客户端加入相同的组共享一条数据流,节省了服务器的负载。
  2. 由于多播协议是根据接受者的需要对数据流进行复制转发,所以服务端的服务总带宽不受客户接入端带宽的限制。IP 协议允许有 2 亿 6 千多万个(268435456)组播,所以其提供的服务可以非常丰富。
  3. 此协议和单播协议一样允许在 Internet 宽带网上传输。
  • 多播缺点
  1. 与单播协议相比没有纠错机制,发生丢包错包后难以弥补,但可以通过一定的容错机制和 QOS 加以弥补。

  2. 现行网络虽然都支持组播的传输,但在客户认证、QOS(指一个网络中能够利用各种基础技术,为指定的网络通信提供更好的服务能力。QOS 是网络的一种安全机制,用来解决网络延迟和阻塞等问题的一种技术。)等方面还需要完善。

  3. 尽管 IP 多播是一个非常令人满意的概念模型,但它对于网络内部的状态需求要比仅提供尽力而为服务的 IP 单播模型大得多,在这一点上已经遭到了一些人的批评。更糟的是,到目前为止还没有一种机制能保证 IP 多播模型可以被扩展到足以容纳数以百万计的发送者和多播组的地步,而这往往又是使完全通用的多播应用成为商用互联网中的实际应用的必要条件。

什么是广播

  • 广播概念

广播(Broadcast)是指封包在计算机网络中传输时,目的地址为网络中所有设备的一种传输方式。实际上,这里所说的所有设备也是限定在一个范围之中,称为广播域。

并非所有的计算机网络都支持广播,例如 X.25 网络和帧中继都不支持广播,而且也没有在整个互联网范围中的广播。IPv6 亦不支持广播,广播相应的功能由多播代替。

通常,广播都是限制在局域网中的。比如:以太网或令牌环网络,因为广播在局域网中造成的影响远比在广域网中小得多。

  • 广播地址

以太网和 IPv4 网都用全 1 的地址表示广播,分别是 ff:ff:ff:ff:ff:ff 和 255.255.255.255。

  • 广播优点
  1. 网络设备简单,维护简单,布网成本低廉。
  2. 由于服务器不用向每个客户机单独发送数据,所以服务器流量负载极低。
  • 广播缺点
  1. 无法针对每个客户的要求和时间及时提供个性化服务。
  2. 网络允许服务器提供数据的带宽有限,客户端的最大带宽=服务总带宽。例如有线电视的客户端的线路支持 100 个频道(如果采用数字压缩技术,理论上可以提供 500 个频道),即使服务商有更大的财力配置更多的发送设备、改成光纤主干,也无法超过此极限。也就是说无法向众多客户提供更多样化、更加个性化的服务。
  3. 广播禁止在 Internet 宽带网上传输。

什么是任播

  • 任播概念

Anycast 最初是在 RFC1546 中提出并定义的,根据 RFC1546 的说明 IPv4 的任播地址不同于 IPv4 的单播地址,它建议从 IPv4 的地址空间分配出一块独立的地址空间作为任播地址空间。

Anycast 提供的是一种无状态的、尽力而为的服务,目前对于 Anycast 的中文译称主要有任播、泛潘、选播等。任播的基本概念是从物理主机设备中分离出的逻辑服务标识符,任播地址可以根据服务类型来分配,使得网络服务担当一个逻辑主机的角色。

RFC1546 定义的这种任播没有得到广泛的使用,在 1998 年的 RFC2373 规定了 IPv6 寻址体系结构。在这个文档中改进了任播的定义:发送到一个任播地址的报文被传送到由该地址标识的接口之一(根据路由协议的距离量度最近的一个)。RFC2373 定义的 IPv6 的任播模型没有限制路由选择的下部结构,也没有限制可使用该服务的上部协议。

RFC3513 (废弃了 RFC 2373)中,进一步对任播进行了定义:任播地址被分配给两个以上的接口 (一般指不同 IP 地址的节点) ,而发送到这个地址上的分组被路由到最近的接口。这里最近可以是指路由器跳数、服务器负载、服务器吞吐量、客户和服务器之间的往返时间 (RTT,round trip time)、链路的可用带宽等特征值 (metric) 决定。

在实际应用中,任播 (Anycast) 是一种网络寻址和路由的策略。Anycast 采用将一个单播地址分配到处于 Internet 中多个不同物理位置的主机上,发送到这个主机的报文被网络路由到路由协议度量的最近的目标主机上。

例如:在 IP 网络上通过一个 Anycast 地址标识一组提供特定服务的主机,同时服务访问方并不关心提供服务的具体是哪一台主机(比如:DNS 或者镜像服务),访问该地址的报文可以被 IP 网络路由到这一组目标中的任何一台主机上。

  • 任播与单播、广播和组播区别
  1. 在单播中,在网络地址和网络节点之间存在一一对应的关系。
  2. 在广播和多播中,网络地址和网络节点之间存在一对多的关系。每一个目的地址对应一群接收可以复制信息的节点。
  3. 在任播中,网络地址和网络节点之间存在一对多的关系。每一个地址对应一群接收节点,但在任何给定时间,只有其中之一可以接收到传送端来的信息。
  4. 在互联网中,通常使用边界网关协议来实现任播。
  • 任播优点
  1. 不同客户端将访问不同目的主机,此过程对客户端透明,从而实现了目的主机的负载均衡。
  2. 当任意目的主机接入的网络出现故障,导致该目的主机不可达时,客户端请求可以在无人为干预的情况下自动被路由到目前可达的最近目的主机,在一定程度上为目标主机提供了冗余性。
  3. 当目的主机受到 DoS 攻击而无法到达时,由于网络不可到达,客户端请求也将路由到其它目的主机上。而在 DDoS 攻击时,由于任播的负载均衡效应,避免了单台目的主机承受所有攻击流量,因此在一定程度上为目的主机提高了安全性。
  4. 因为任播利用路由度量到最近的目的主机,提高了客户端响应速度。
  • 任播缺点
  1. 使用任播中的共享单播地址不能作为客户端发起请求,因为请求的响应不一定能返回到发起的任播单播地址。因此,目前任播仅适合一些特定的上层协议。从目前的实际应用来看,任播最广泛的应用是 DNS 的部署。

什么是 BGP Anycast

BGP Anycast 就是利用一个或多个 AS 号码在不同的地区广播相同的一个 IP 段。利用 BGP 的寻路原则,越短的 AS Path 会选成最优路径,从而优化了访问速度。

BGP Anycast 相较于 IP Anycast 多了一个 BGP AS,也就是说宣告的这段 IP 拥有独立的 AS 号,属于独立的自治域。

阿里的 DNS 就是一个典型的 BGP AnyCast 服务,本质上 BGP Anycast 就是不同服务器用了相同的 IP 地址。

AnyCast 的实现原理

  • 配置 AnyCast 节点组

  1. 配置三个节点的 AnyCast 组
  2. 组的三个节点都使用相同的 IP 地址 10.5.0.1
  • 配置 AnyCast 的等价路由

  1. 客户端接入路由宣告相同目标地址三条路由
  2. 三条路由的度量值 (Metric) 值等价
  3. 可使用静态或动态协议
  • 配置 AnyCast 的多路由节点

  1. 经过之前的配置连续的数据包可被送到不同的任播节点
  • AnyCast 不同源节点的路由选择

  1. 经过之前的配置来自不同节点的流量可被路由到不同的节点
  2. 接收数据包的服务器有单播路由决定
  3. 所以通讯模型适用于单个请求或单个响应的协议

域内基于 IPv4 的 AnyCast 服务

  • 地址的选择
  1. 目前的做法是从单播 IP 地址空间分配任播地址。
  2. 指定任播使用的子网(尽量小)。

利于域间的路由宣告。
常用的指定是 24。
子网有可能不会附加任何接口。

  • 主机的配置
  1. 配置主机接收流量的任播地址(配置与回环口)
  2. 配置每个主机的唯一管理地址

配置回环口地址

1
$ ifconfig lo:1 10.5.0.1 netmask 255.255.255.255 up

查看回环口地址

1
2
3
4
$ ifconfig lo:1
lo:1: flags=73 mtu 65536
inet 10.5.0.1 netmask 255.255.255.255
loop txqueuelen 1 (Local Loopback)
  • 服务的配置

具体的业务配置(例如DNS),这里不详述。

  • 网络的配置

A. 域内的配置

如果配置的服务完全在你的路由域内,则只需要考虑域内配置,条件如下:

  1. 所有的任播节点都在域内
  2. 多个域内的位置

需要配置路由将任播流量传递给服务器。

B. 静态的 IGP 路由配置

  1. 在路由器上配置静态路由(主机路由),确保路由通过域传播。
  2. 方案优点: 无需服务中断即可重定向服务器。
  3. 方案缺点: 服务器故障没有状态检测。

C. 动态的 IGP 路由配置

  1. 在任播服务器上运行基于主机路由的守护进程,如 GateD、Zebra 或 Quagga。
  2. 任播服务器本身是路由的发起者。
  3. 当主机停机时,路由被自动撤销。
  4. 方案优点:可检测到任播服务器的状态。
  5. 方案缺点:任播服务器需要自建服务不可用路由自动撤销的机制。

域外基于 IPv4 的 AnyCast 服务

  • 配置原则
  1. 域外的实现基于 BGP 协议
  2. 域外的配置方式遵守传统 BGP 基本规则
  • 网络设置步骤
  1. 宣告全球唯一的 AS 号
  2. 宣告直连的网段
  3. 宣告邻居路由的 AS 号和 IP 段
  • 服务配置步骤
  1. 配置服务去监听任播 IP

参考文档

http://www.google.com
http://t.cn/RBkIvnV
http://t.cn/RBkpQfh
http://t.cn/8Ftlhp9
http://t.cn/RrAJNQ6
http://t.cn/RGCgN9e