计算机网络自顶向下方法::网络层::控制平面
概述 转发表和流表计算、维护和安装的两种方法 每路由器控制。每台路由器中都包含转发和路由选择功能。每台路由器有一个路由选择组件,用于与其他路由器中的路由选择组件通信,以计算其转发表的值。这种每路由器控制的方法在因特网中已经使用了几十年。OSPF 和 BGP 协议都是基于这种每路由器的方法进行控制的。 逻辑集中式控制。通用的"匹配加动作“抽象允许执行传统的 IP 转发以及其他功能(负载共享、防火墙功能和 NAT) 的丰富集合,而这些功能先前是在单独的中间盒中实现的。该控制器经一种定义良好的协议与每台路由器中的一个控制代理(CA) 进行交互,以配置和管理该路由器的转发表。CA 一般具有最少的功能,其任务是与控制器通信并且按控制器命令行事。这些 CA 既不能直接相互交互,也不能主动参与计算转发表。这是每路由器控制和逻辑集中式控制之间的关键差异。 “逻辑集中式"控制意味着就像路由选择控制服务位于单一的集中服务点那样获取它们,即使该服务出于容错和性能扩展性的原因,很可能经由多个服务器实现。 SDN 采用了逻辑集中式控制器的概念,而这种方法在生产部署中得到了越来越多的应用。 路由选择算法 其目的是从发送方到接收方的过程中确定一条通过路由器网络的好的路径(等价于路由)。通常,一条好路径指具有最低开销的路径。 第一种分类方式:根据该算法是集中式还是分散式来划分 集中式路由选择算法 用完整的、全局性的网络知识计算出从源到目的地之间的最低开销路径。具有全局状态信息的算法常被称作链路状态(Link State,LS) 算法,因为该算法必须知道网络中每条链路的开销。 分散式路由选择算法 路由器以迭代、分布式的方式计算出最低开销路径。没有节点拥有关于所有网络链路开销的完整信息。相反,每个节点仅有与其直接相连链路的开销知识即可开始工作。然后,通过迭代计算过程以及与相邻节点的信息交换,一个节点逐渐计算出到达某目的节点或一组目的节点的最低开销路径。 第二种分类方式:根据算法是静态的还是动态的进行分类 静态路由选择算法 路由随时间的变化非常缓慢,通常是人工进行调整如人为手工编辑一条链路开销) 动态路由选择算法 随着网络流量负载或拓扑发生变化而改变路由选择路径。一个动态算法可周期性地运行或直接响应拓扑或链路开销的变化而运行。虽然动态算法易于对网络的变化做出反应,但也更容易受诸如路由选择循环、路由振荡之类问题的影响。 第三种分类方式:根据它是负载敏感的还是负载迟钝的进行划分 负载敏感算法 链路开销会动态地变化以反映出底层链路的当前拥塞水平。如果当前拥塞的一条链路与高开销相联系,则路由选择算法趋向于绕开该拥塞链路来选择路由。 负载迟钝 当今的因特网路由选择算法(如 RIP、OSPF 和 BGP)都是负载迟钝的(load-insensitive),因为某条链路的开销不明确地反映其当前或最近的拥塞水平。 链路状态路由选择算法 在链路状态算法中,网络拓扑和所有的链路开销都是已知的。实践中这是通过让每个节点向网络中所有其他节点广播链路状态分组来完成的,其中每个链路状态分组包含它所连接的链路的标识和开销。在实践中,这经常由链路状态广播算法来完成。节点广播的结果是所有节点都具有该网络的统一、完整的视图。于是每个节点都能够像其他节点一样,运行 LS 算法并计算出相同的最低开销路径集合。 距离向量路由选择算法 距离向量(Distance-Vector,DV) 算法是一种迭代的、异步的和分布式的算法。说它是分布式的,是因为每个节点都要从一个或多个直接相连邻居接收某些信息,执行计算,然后将其计算结果分发给邻居。说它是迭代的,是因为此过程一直要持续到邻居之间无更多信息要交换为止。说它是异步的,是因为它不要求所有节点相互之间步伐一致地操作。 链路开销改变与链路故障 当一个运行 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 算法中一个不正确的节点计算值会扩散到整个网络 。 因特网中自治系统内部的路由选择:OSPF 规模。随着路由器数目变得很大,涉及路由选择信息的通信、计算和存储的开销将高得不可实现。当今的因特网由数亿台主机组成。在这些主机中存储的路由选择信息显然需要巨大容量的内存。在所有路由器之间广播连通性和链路开销更新所要求的负担将是 巨大的!在如此大量的路由器中迭代的距离向量算法将肯定永远无法收敛!显然,必须采取一些措施以减少像因特网这种大型网络中的路由计算的复杂性 。 管理自治。因特网是 ISP 的网络,其中每个 ISP 都有它自己的路由器网络。ISP 通常希望按自己的意愿运行路由器,或对外部隐藏其网络的内部组织面貌。在理想情况下,一个组织应当能够按自己的愿望运行和管理其网络,还要能将其网络与其他外部网络连接起来。 在相同 AS 中的路由器都运行相同的路由选择算法并且有彼此的信息。在一个自治系统内运行的路由选择算法叫作自治系统内部路由选择协议。 开放最短路优先 (OSPF) OSPF 路由选择及其关系密切的协议 IS-IS 都被广泛用千因特网的 AS 内部路由选择。 OSPF 是一种链路状态协议,它使用洪泛链路状态信息和 Dijkstra 最低开销路径算法。使用 OSPF, 一台路由器构建了一 幅关于整个自治系统的完整拓扑图(即一幅图)。于是,每台路由器在本地运行 Dijkstra 的最短路径算法,以确定一个以自身为根节点到所有子网的最短路径树。各条链路开销是由网络管理员配置的管理员也许会选择将所有链路开销设为 1, 因而实现了最少跳数路由选择,或者可能会选择将链路权值按与链路容量成反比来设置,从而不鼓励流量使用低带宽链路。OSPF 不强制使用设置链路权值的策略(那是网络管理员的任务),而是提供了一种机制(协议),为给定链路权值集合确定最低开销路径的路由选择。 使用 OSPF 时,路由器向自治系统内所有其他路由器广播路由选择信息,而不仅仅是向其相邻路由器广播。每当一条链路的状态发生变化时(如开销的变化或连接/中断状态的变化),路由器就会广播链路状态信息。即使链路状态未发生变化,它也要周期性地(至少每隔 30 min 一次)广播链路状态。OSPF 协议还要检查链路正在运行(通过向相连的邻居发送 HELLO 报文 ),并允许 OSPF 路由器获得相邻路由器的网络范围链路状态的数据库 。 优点 安全。能够鉴别 OSPF 路由器之间的交换(如链路状态更新)。 多条相同开销的路径。当到达某目的地的多条路径具有相同的开销时,OSPF 允许使用多条路径。 对单播与多播路由选择的综合支持。 支持在单个 AS 中的层次结构。一个 OSPF 自治系统能够层次化地配置多个区域每个区域都运行自己的 OSPF 链路状态路由选择算法,区域内的每台路由器都向该区域内的所有其他路由器广播其链路状态。 ISP 之间的路由选择:BGP 在因特网中,所有的 AS 运行相同的 AS 间路由选择协议,称为边界网关协议(Broder Gateway Protocol, BGP)。正是这个协议将因特网中数以千计的 ISP 黏合起来。 BGP 的作用 从邻居 AS 荻得前缀的可达性信息。特别是,BGP 允许每个子网向因特网的其余部分通告它的存在。一个子网高声宣布“我存在,我在这里”,而 BGP 确保在因特网中的所有 AS 知道该子网。如果没有 BGP 的话,每个子网将是隔离的孤岛,即它们孤独地存在,不为因特网其余部分所知和所达。 确定到该前缀的“最好的“路由。一台路由器可能知道两条或更多条到特定前缀的不同路由。为了确定最好的路由,该路由器将本地运行一个 BGP 路由选择过程(使用它经过相邻的路由器获得的前缀可达性信息)。该最好的路由将基于策略以及可达性信息来确定 。 通告 BGP 路由信息 对于每个 AS, 每台路由器要么是一台网关路由器(gateway router)要么是一台内部路由器(internal router)。网关路由器是一台位于 AS 边缘的路由器,它直接连接到在其他 AS 中的一台或多台路由器。内部路由器仅连接在它自己 AS 中的主机和路由器 。 在 BGP 中,每对路由器通过使用 179 端口的半永久 TCP 连接交换路由选择信息。每条直接连接以及所有通过该连接发送的 BGP 报文,称为 BGP 连接 (BGP connection)。此外,跨越两个 AS 的 BGP 连接称为外部 BGP (eBGP) 连接,而在相同 AS 中的两台路由器之间的 BGP 会话称为内部 BGP (iBGP) 连接 。在真实的网络中,从某个给定的路由器到某个给定的目的地可能有多条不同的路径,每条通过了不同的 AS 序列 。 确定最好的路由 当路由器通过 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 体系结构具有 4 个关键特征 基于流的转发:SDN 控制的交换机的分组转发工作,能够基于运输层、 网络层或链路层首部中任意数量的首部字段值进行。 数据平面与控制平面分离:数据平面由网络交换机组成,交换机是相对简单(但快速)的设备,该设备在它们的流表中执行“匹配加动作”的规则。控制平面由服务器以及决定和管理交换机流表的软件组成。 网络控制功能:位于数据平面交换机外部。然而,与传统的路由器不同,这个软件在服务器上执行,该服务器与网络交换机截然分开且与之远离。控制平面自身由两个组件组成: 一个 SDN 控制器, 以及若干网络控制应用程序。控制器维护准确的网络状态信息机和主机的状态;为运行在控制平面中的网络控制应用程序提供这些信息;提供方法,这些应用程序通过这些方法能够监视、 编程和控制下面的网络设备。 可编程的网络。通过运行在控制平面中的网络控制应用程序、该网络是可编程的。这些应用程序代表了控制平面的“智力”,使用了由 SDN 控制器提供的 API 来定义和控制网络设备中的数据平面。 SDN 控制平面:SDN 控制器和 SDN 网络控制应用程序 通信层:SDN 控制器和受控网络设备之间的通信。显然,如果 SDN 控制器要控制远程 SDN 使能的交换机、主机或其他设备的运行,需要一个协议来传送控制器与这些设备之间的信息。 网络范围状态管理层。由 SDN 控制平面所做出的最终控制决定换机的流表以取得所希望的端到端转发,实现负载均衡,或实现一种特定的防火墙能力,将要求控制器具有有关网络的主机、链路、交换机和其他 SDN 控制设备的最新状态信息。 对于网络控制应用程序层的接口。控制器通过它的“北向“接口与网络控制应用程序交互。该 API 允许网络控制应用程序在状态管理层之间读/写网络状态和流表。当状态改变事件出现时,应用程序能够注册进行通告。可以提供不同类型的 API, 我们将看到两种流行 SDN 控制器使用 REST 请求响应接口与它们的应用程序进行通信。 OpenFlow 协议 OpenFlow 协议运行在 SDN 控制器和 SDN 控制的交换机或其他实现 OpenFlow API 的设备之间。OpenFlow 协议运行在 TCP 之上,使用 6653 的默认端口号。从控制器到受控交换机流动的重要报文有下列这些: 配置。该报文允许控制器查询并设置交换机的配置参数 。 修改状态。该报文由控制器所使用,以增加/删除或修改交换机流表中的表项,且设置交换机端口特性。 读状态。该报文被控制器用于从交换机的流表和端口收集统计数据和计数器值。 发送分组。该报文被控制器用于在受控交换机从特定的端口发送出 一个特定的报文。 流删除。该报文通知控制器已删除一个流表项,例如由于超时,或作为收到“修改状态"报文的结果。 端口状态。交换机用该报文向控制器通知端口状态的变化。 分组入。一个分组到达交换机端口,并且不能与任何流表项匹配,那么这个分组将被发送给控制器进行额外处理。匹配的分组也被发送给控制器,作为匹配时所采取的一个动作。“分组入“报文被用于将分组发送给控制器。 ICMP: 因特网控制报文协议 ICMP 被主机和路由器用来彼此沟通网络层的信息。ICMP 最典型的用途是差错报告。 在某个位置,IP 路由器不能找到一条通往 HTTP 请求中所指定的主机的路径、该路由器就会向你的主机生成并发出一个 ICMP 报文以指示该错误。 另一个有趣的 ICMP 报文是源抑制报文。这种报文在实践中很少使用 。其最初目的是执行拥塞控制,即使得拥塞的路由器向一台主机发送一个 ICMP 源抑制报文,以强制该主机减小其发送速率。 网络管理和 SNMP 网络管理框架 管理服务器(managing server)是一个应用程序,通常有人的参与,并运行在网络运营中心 (NOC) 的集中式网络管理工作站上。管理服务器是执行网络管理活动的地方,它控制网络管理信息的收集、处理、分析和/或显示。 被管设备 (managed deyjce) 是网络装备的一部分(包括它的软件),位于被管理的网络中。在一个被管设备中,有几个所谓被管对象 (managed object) 。这些被管对象是被管设备中硬件的实际部分(例如,一块网络接口卡只是一台主机或路由器的一个组件)和用于这些硬件及软件组件的配置参数(例如,像 OSPF 这样的 AS 内部路由选择协议)。 一个被管设备中的每个被管对象的关联信息收集在管理信息库(Management Information Base, MIB) 中,我们将看到这些信息的值可供管理服务器所用 在每个被管设备中还驻留有网络管理代理 (network management agent) ,它是运行在被管设备中的一个进程,该进程与管理服务器通信,在管理服务器的命令和控制下在被管设备中采取本地动作。 网络管理框架的最后组件是网络管理协议 (network management protocol ) 。该协议运行在管理服务器和被管设备之间,允许管理服务器查询被管设备的状态,并经过其代理间接地在这些设备上采取行动。代理能够使用网络管理协议向管理服务器通知异常事件(如组件故障或超过了性能阙值)。重要的是注意到网络管理协议自己不能管理网络。恰恰相反,它为网络管理员提供了一种能力,使他们能够管理网络。 简单网络管理协议 SNMP 是一个应用层协议,用于在管理服务器和代表管理服务器执行的代理之间传递网络管理控制和信息报文。SNMP 最常使用的是请求响应模式,其中 SNMP 管理服务器向 SNMP 代理发送一个请求,代理接收到该请求后,执行某些动作,然后对该请求发送一个回答。请求通常用于查询(检索)或修改(设置)与某被管设备关联的 MIB 对象值。 SNMP 第二个常被使用的是代理向管理服务器发送的一种非请求报文,该报文称为陷阱报文(trap message) 。陷阱报文用于通知管理服务器,一个异常情况(例如一个链路接口启动或关闭)已经导致了 MIB 对象值的改变。