节点 x 的距离向量 $D_x$ ,即节点 x 到每个目的节点 y 的估计费用; $Dx = [D_x(y) | y \in N ]$ 节点 x 每个邻居的距离向量 $D_v$ ,即 x 的邻居 v 到每个目的节点 y 的估计费用,$Dv = [D_v(y): y \in N]$
如何更新距离向量?
每个节点不断向邻居发送其距离向量的 copy;
当节点 x 收到一个邻居 v 的新距离向量,先保存,并用 B-F 公式更新自己的距离向量: $D_x(y)=min_v{c(x,v)+D_v(y)}$ 从所有经邻居 v 到节点 y 的费用中选取最小路径费用
若距离向量发生改变,将新的距离向量通知给邻居。
当距离向量不再变化,算法终止,此时$D_x(y)$收敛到$d_x(y)$,即得到节点 x 到节点 y 的最低费用路径。
多次重复从邻居接收更新距离向量、重新计算选路表项、并向邻居发送更新通知的过程,直到没有更新报文
算法进入静止状态,直到某个链路费用发生改变为止。
DV
练习 考虑如图所示的子网,该子网使用了距离-向量算法,下面的向量刚刚到达路由器 C: 来自 B 的向量为(5,0, 8,12,6,2); 来自 D 的向量为(16,12,6,0,9,10); 来自 E 的向量为(7,6,3,9,0,4); 经过测量,C 到 B、D 和 E 的延迟分别为 6,3 和 5,那么 C 到达所有结点的最短路径是?
各个向量对应元素的意思是(A,B,C,D,E,F),路由节点 X 到其他节点 X’所需要的延迟。(注:这里是 C 经 B、C 经 D、C 经 E,再到目标节点的延迟) 如图写出过后,从这些向量中的所有元素中选出各对应点里面的延迟最小值的,组成一个新向量,即(11,6,0,3,5,8)
Distance-Vector Algorithm: Link-Cost Changes and Link Failure
t1:z 收到来自 y 的更新报文,并更新自己的距离表,此时到节点 x 的最低费用减为 2,并通知其邻居 y;
t2:y 收到来自 z 的更新报文,并更新自己的距离表,此时到节点 x 的最低费用不变仍为 1。不发送更新报文,算法静止。 当 x 与 y 之间费用减少,DV 算法只需两次迭代到达静止状态。节点之间链路费用减少的“好消息”在网络中能迅速传播,即 good news travels fast
某链路费用增加时情况 假设 x 与 y 之间的链路费用从 4 增加到 60 链路费用变化前 $D_y(x)=4, D_y(z)=1, D_z(y)=1, D_z(x)=5$
t0 :y 检测到链路费用从 4 变为 60。更新到 x 的最低路径费用 $D_y(x)=min{c(y,x)+ D_x(x), c(y,z)+ D_z(x)}=min{60+0,1+5}=6$ 此时 $D_y(x)=6, D_y(z)=1, D_z(y)=1, D_z(x)=5$ 经节点 z 到 x 费用最低,此新费用错误,发给节点 z。
t1 :z 收到新费用,更新其到 x 的最低路径费用 $D_z(x )=min{ c(z,x)+ D_x(x), c(z,y)+ D_y(x)}=min{50+0,1+6}=7$ 此时 $D_y(x)=6, D_y(z)=1, D_z(y)=1, D_z(x)=7$ 经节点 y 到 x 费用最低,发给节点 y。
t2:y 收到新费用,更新到 x 的最低路径费用 $D_y(x)=min{c(y,x)+ D_x(x), c(y,z)+ D_z(x)}=min{60+0,1+7}=8$ 经节点 z 到 x 费用最低,发给节点 z。 …… 节点 y 或 z 的最低费用不断更新。 产生选路回环(routing loop):为到达 x, y 通过 z 选路,z 又通过 y 选路。即目的地为 x 的分组到达 y 或 z 后,将在这两个节点之间不停地来回反复,直到转发表发生改变为止。上述循环将持续 44 次迭代 (y 与 z 之间的报文交换),直到 z 最终算出它经由 y 的路径费用大于 50 为止。并确定:z 到 x 的最低费用路径:zxy 到 x 的最低费用路径:yzx 说明:链路费用增加的“坏消息”传播很慢,即 bad news travels slow 当链路费用增加很大,会出现无穷计数(count-to-infinity)问题。如链路费用 c(y,x)变为 10000,c(z,x)变为 9999 时。
针对上面的问题,引出**毒性逆转(poisoned reverse)**思想:如果 z 通过 y 路由选择目的地 x,则 z 将通告 y,它到 x 的距离是无穷大,也就是 z 将通告$D_z(x)=\infty$。毒性逆转可以完全解决计数到无穷的问题吗?不能,如果三个以上节点的环路,则不能被毒性逆转技术检测
A Comparison of LS and DV Routing Algorithms
消息复杂度 LS 算法:知道网络每条链路的费用,需发送 $O(nE)$个报文;当一条链路的费用变化时,必须通知所有节点 DV 算法:迭代时,仅在两个直接相连邻居之间交换报文;当链路费用改变时,只有该链路相连的节点的最低费用路径发生改变时,才传播已改变的链路费用 收敛速度 LS 算法:需要 $O(nE)$个报文和 $O(n^2)$的搜寻,可能会振荡 DV 算法:收敛较慢。可能会遇到选路回环,或计数到无穷的问题。 健壮性 当一台路由器发生故障、操作错误或受到破坏时,会发生什么情况? LS 算法:路由器向其连接的一条链路广播不正确费用,路由计算基本独立(仅计算自己的转发表),有一定健壮性。 DV 算法:一个节点可向任意或所有目的节点发布其不正确的最低费用路径,一个节点的计算值会传递给它的邻居,并间接地传递给邻居的邻居。一个不正确的计算值会扩散到整个网络。
随着路由器规模增大和管理自治的要求,可以通过将路由器组织进自治系统(Autonomous System,AS)来解决。在一个自治系统内运行的路由算法叫做自治系统内部路由选择协议(intra-autonomous system routing protocol),不同自治系统内的路由器可以运行不同的区域内路由协议
当分组跨越多个 AS 进行路由时,我们需要一个自治系统间路由协议(inter-autonomous system routing protocol)。在因特网中,所有的 AS 运行相同的 AS 间路由选择协议,称为边界网关协议(Broder Gateway Protocol,BGP)。
The Role of BGP
BGP 是事实上的标准,它为每个 AS 提供了一种手段
从相邻 AS 获取子网的可达性信息 Obtain prefix reachability information from neighboring ASs,向该 AS 内部的所有路由器传播这些可达性信息 Advertising BGP Route Information。
基于该可达信息和 AS 策略,决定到达子网的“最好”路由 Determine the “best” routes to the prefixes.
In BGP, packets are not routed to a specific destination address, but instead to CIDRized prefixes, with each prefix representing a subnet or a collection of subnets.
BGP 是一种 AS(自治区域)外部路由协议,主要负责本自治区域和外部的自治区域间的路由可达信息的交换。因此,它所关心的拓扑结构是 AS(自治区域)的拓扑结构。转发表根据 AS 内和 AS 间选路算法而配置;AS 域内和 AS 域间的选路项用于目的端在域外的选路,AS 域内的选路项用于目的端在域内的选路。
除了作为 Internet 的 AS 间路由协议外,BGP 还经常用于实现 IP 任播服务,该服务通常用于 DNS。
常见的应用场景可抽象为:在许多不同的分散地理位置的不同服务器上复制相同的内容,并让每个用户从最近的服务器访问内容。 具体的例子包括: CDN 可以在不同国家/地区的服务器上复制视频和其他对象。DNS 系统可以在世界各地的 DNS 服务器上复制 DNS 记录。
How does Anycast work? Anycast network routing is able to route incoming connection requests across multiple data centers. When requests come into a single IP address associated with the Anycast network, the network distributes the data based on some prioritization methodology. The selection process behind choosing a particular data center will typically be optimized to reduce latency by selecting the data center with the shortest distance from the requester. Anycast is characterized by a 1-to-1 of many association, and is one of the 5 main network protocol methods used in the Internet protocol. What is the difference between Anycast and Unicast? Most of the Internet works via a routing scheme called Unicast. Under Unicast, every node on the network gets a unique IP address. Home and office networks use Unicast; when a computer is connected to a wireless network and gets a message saying the IP address is already in use, an IP address conflict has occurred because another computer on the same Unicast network is already using the same IP. In most cases, that isn’t allowed. Using Anycast means the network can be extremely resilient. Because traffic will find the best path, an entire data center can be taken offline and traffic will automatically flow to a proximal data center.
软件定义网络(SDN,SoftwareDefinedNetwork)源自美国斯坦福大学 CleanState 研究组提出的一种新型网络创新架构,可通过软件编程的形式定义和控制网络,具有控制平面和转发平面分离及开放性可编程的特点。 SDN 的核心理念是,希望应用软件可以参与对网络的控制管理,满足上层业务需求,通过自动化业务部署,简化网络运维。如果把现有的网络看成手机,那 SDN 的目标就是做出一个网络界的 Android 系统,可以在手机上安装升级,同时还能安装更多更强大的手机 APP。
SDN 并不是一个具体的技术,它是一种网络设计理念,规划了网络的各个组成部分(软件、硬件、转发面和控制面)及相互之间的互动关系。
过去几十年里,IP 网络一直是全分布式的,战功卓著,解决了各种客户需求。今天 SDN 是为了未来更好更快的实现用户需求。并不是有什么需求通过传统方法不能做到,只是 SDN 做得更快、更好、更简单。
IP 网络的生存能力很强,得益于其分布式架构。当年美国军方希望在遭受核打击后,整个网络能够自主恢复,这样就不能允许网络集中控制,不能存在中心结点,否则在这个中心节点丢一颗核弹,整个网络就瘫痪了,由此才导致了互联网的研究和诞生。
但正是这种全分布式架构导致了许多问题:看看现在的 IP 网络管理多复杂,举个运营商部署 VPN 的例子:要配置 MPLS、BFD、IGP、BGP、VPNV4、要绑定接口…且需要在每个 PE 上配置;当新增加一个 PE 时,还需要回去修改每个涉及到的 PE。现在各厂家的网络设备都太复杂了。如果您准备成为某个厂商设备的百事通,你需要掌握的命令行超过 10000 条,而其数量还在增加。 如果你准备成为 IP 骨灰级专家,你需要阅读网络设备相关 RFC 2500 篇,如果一天阅读一篇,你知道要看多久能看完?6 年多!而这只是整个 RFC 的 1/3,其数量还在增加。此外,这些协议标准都是在解决各种各样的控制面需求,而这些需求都是需要经过需求提出、定义标准、互通测试、现网设备升级来完成部署,一般要个 3~5 年才能完成部署。这样的速度,已经 Hold 不住网络上运营业务的 OTT 们的各种快速网络调整需求,必须想办法解决这个问题。 Google 的网络分为数据中心内部网络(IDC Network)及骨干网(Backbone Network,也可以称为 WAN 网)。其中 WAN 网按照流量方向由两张骨干网构成,分别为:第一,数据中心之间互联的网络(Inter-DC WAN,即 G-scale Network),用来连接 Google 位于世界各地之间的数据中心,属于内部网络 Google 选择使用 SDN 来改造数据中心之间互联的 WAN 网(即 G-scale Network) 促使 Google 使用 SDN 改造 WAN 网的最大原因是 当前连接 WAN 网的链路带宽利用率很低。GoogleWAN 网的出口设备有上百条对外链路,分成很多的 ECMP 负载均衡组,在这些均衡组内的多条链路之间 用的是基于静态 Hash 的负载均衡方式, ,最主要的应用是流量工程,最主要的控制手段是软件应用程序。