逻辑集中式控制。通用的"匹配加动作“抽象允许执行传统的 IP 转发以及其他功能(负载共享、防火墙功能和 NAT)
的丰富集合,而这些功能先前是在单独的中间盒中实现的。该控制器经一种定义良好的协议与每台路由器中的一个控制代理(CA)
进行交互,以配置和管理该路由器的转发表。CA 一般具有最少的功能,其任务是与控制器通信并且按控制器命令行事。这些 CA
既不能直接相互交互,也不能主动参与计算转发表。这是每路由器控制和逻辑集中式控制之间的关键差异。
在链路状态算法中,网络拓扑和所有的链路开销都是已知的。实践中这是通过让每个节点向网络中所有其他节点广播链路状态分组来完成的,其中每个链路状态分组包含它所连接的链路的标识和开销。在实践中,这经常由链路状态广播算法来完成。节点广播的结果是所有节点都具有该网络的统一、完整的视图。于是每个节点都能够像其他节点一样,运行
LS 算法并计算出相同的最低开销路径集合。
当一个运行 DV 算法的节点检测到从它自己到邻居的链路开销发生变化时,它就更新其距离向量,并且如果最低开销路径的开销发生了变化,向邻居通知其新的距离向量。
LS 与 DV 路由选择算法的比较
报文复杂性。我们已经看到 LS 算法要求每个节点都知道网络中每条链路的开销。这就要求要发送 O(|N||E|)个报文
。而且无论何时一条链路的开销改变时,必须向所有节点发送新的链路开销。DV
算法要求在每次迭代时,在两个直接相连邻居之间交换报文。我们已经看到,算法收敛所需时间依赖于许多因素。当链路开销改变时,DV
算法仅当在新的链路开销导致与该链路相连节点的最低开销路径发生改变时,才传播已改变的链路开销。
收敛速度。我们已经看到 LS 算法的实现是一个要求 O(|N||E|)个报文的 O(|N|^2)算法。DV 算法收敛较慢,且在收敛时会遇到路由选择环路。DV
算法还会遭遇无穷计数的问题。
健壮性。对于 LS 算法,路由器能够向其连接的链路广播不正确的开销。作为 LS 广播的一部分,一个节点也可损坏或丢弃它收到的任何区广播分组。但是一个
LS 节点仅计算自己的转发表;其他节点也自行执行类似的计算。这就意味着在 LS 算法下,路由计算在某种程度上是分离的,提供了一定程度的健壮性。在
DV 算法下,一个节点可向任意或所有目的节点通告其不正确的最低开销路径。更一般地,我们会注意到每次迭代时,在 DV
算法中一个节点的计算会传递给它的邻居,然后在下次迭代时再间接地传递给邻居的邻居。在此情况下,DV
算法中一个不正确的节点计算值会扩散到整个网络 。
当路由器通过 BGP 连接通告前缀时,它在前缀中包括一些 BGP 属性 (BGP attribute)。用 BGP 术语来说,前缀及其属性称为路由 (
route)。两个较为重要的属性是 AS-PATH 和 NEXT-HOP。AS-PATH 属性包含了通告已经通过的 AS 的列表,如我们在前面的例子中所见。为了生成
AS-PATH 的值,当一个前缀通过某 AS 时,该 AS 将其 ASN 加入 AS-PATH 中的现有列表。
IP 任播
BGP 还常被用于实现 IP 任播(anycast) 服务,该服务通常用于 DNS 中。
动机
在许多分散的不同地理位置,替换不同服务器上的相同内容
让每个用户从最靠近的服务器访问内容。
CDN 使用 IP 任波的方式
在 IP 任播配置阶段,CDN 公司为它的多台服务器指派相同的 IP 地址,并且使用标准的 BGP 从这些服务器的每台来通告该 IP
地址。当某台 BGP 路由器收到对于该 IP 地址的多个路由通告,它将这些通告处理为对相同的物理位置提供不同的路径当配置其路由选择表时,每台路由器将本地化地使用
BGP 路由选择算法来挑选到该 IP 地址的最好的路由。
路由选择策略
在路由选择算法中,实际上首先根据本地偏好属性选择路由,本地偏好值由本地 AS 的策略所确定。
为什么会有不同的 AS 间和 AS 内部路由选择协议?
策略。在 AS 之间,策略问题起主导作用。一个给定 AS 产生的流量不能穿过另一个特定的 AS, 这可能非常重要。类似地,一个给定
AS 也许想很好地控制它承栽的其他 AS 之间穿越的流量。我们已看到,BGP 承栽了路径属性,并提供路由选择信息的受控分布,以便能做出这种基于策略的路由选择决策。在一个
AS 内部,一切都是在相同的管理控制名义下进行的,因此策略问题在 AS 内部选择路由中起着微不足道的作用。
规模。扩展一个路由选择算法及其数据结构以处理到大量网络或大量网络之间的路由选择的这种能力,是 AS 间路由选择的一个关键问题。在一个
AS 内,可扩展性不是关注的焦点。首先,如果单个 ISP 变得太大时,总是能将其分成两个 AS, 并在这两个新的 AS 之间执行 AS
间路由选择。
性能。由于 AS 间路由选择是面向策略的,因此所用路由的质量通常是次要关心的问题。 我们的确看到了在 AS
之间,甚至没有与路由相关的开销概念。然而在一个 AS 内部,这种对策略的关心就不重要了,可以使路由选择更多地关注一条路由实现的性能级别。
网络控制功能:位于数据平面交换机外部。然而,与传统的路由器不同,这个软件在服务器上执行,该服务器与网络交换机截然分开且与之远离。控制平面自身由两个组件组成:
一个 SDN 控制器, 以及若干网络控制应用程序。控制器维护准确的网络状态信息机和主机的状态;为运行在控制平面中的网络控制应用程序提供这些信息;提供方法,这些应用程序通过这些方法能够监视、
编程和控制下面的网络设备。
可编程的网络。通过运行在控制平面中的网络控制应用程序、该网络是可编程的。这些应用程序代表了控制平面的“智力”,使用了由
SDN 控制器提供的 API 来定义和控制网络设备中的数据平面。
SDN 控制平面:SDN 控制器和 SDN 网络控制应用程序
通信层:SDN 控制器和受控网络设备之间的通信。显然,如果 SDN 控制器要控制远程 SDN
使能的交换机、主机或其他设备的运行,需要一个协议来传送控制器与这些设备之间的信息。
网络范围状态管理层。由 SDN 控制平面所做出的最终控制决定换机的流表以取得所希望的端到端转发,实现负载均衡,或实现一种特定的防火墙能力,将要求控制器具有有关网络的主机、链路、交换机和其他
SDN 控制设备的最新状态信息。
对于网络控制应用程序层的接口。控制器通过它的“北向“接口与网络控制应用程序交互。该 API
允许网络控制应用程序在状态管理层之间读/写网络状态和流表。当状态改变事件出现时,应用程序能够注册进行通告。可以提供不同类型的
API, 我们将看到两种流行 SDN 控制器使用 REST 请求响应接口与它们的应用程序进行通信。
OpenFlow 协议
OpenFlow 协议运行在 SDN 控制器和 SDN 控制的交换机或其他实现 OpenFlow API 的设备之间。OpenFlow 协议运行在 TCP 之上,使用
6653 的默认端口号。从控制器到受控交换机流动的重要报文有下列这些: