目录
[2.1 路由(route)的概念](#2.1 路由(route)的概念)
[2.2 网络的图抽象](#2.2 网络的图抽象)
[2.2.1 边和路由的代价](#2.2.1 边和路由的代价)
[2.2.2 最优化原则](#2.2.2 最优化原则)
[2.3 路由的原则](#2.3 路由的原则)
[2.4 路由选择算法的分类](#2.4 路由选择算法的分类)
[2.5 link state 算法](#2.5 link state 算法)
[2.5.1 LS路由工作过程](#2.5.1 LS路由工作过程)
[2.5.2 链路状态路由选择(link state routing)](#2.5.2 链路状态路由选择(link state routing))
[2.6 距离矢量路由选择(distance vector routing)](#2.6 距离矢量路由选择(distance vector routing))
[2.7 LS 和 DV 算法 的比较](#2.7 LS 和 DV 算法 的比较)
[3.1 RIP( Routing Information Protocol)](#3.1 RIP( Routing Information Protocol))
[3.1.1 RIP 通告(advertisement)](#3.1.1 RIP 通告(advertisement))
[3.1.2 链路失效和恢复](#3.1.2 链路失效和恢复)
[3.1.3 进程处理](#3.1.3 进程处理)
[3.2 OSPF(Open Shortest Path First)](#3.2 OSPF(Open Shortest Path First))
[四、ISP之间的路由选择: BGP](#四、ISP之间的路由选择: BGP)
[4.1 层次路由](#4.1 层次路由)
[4.2 互联网AS间路由:BGP](#4.2 互联网AS间路由:BGP)
[4.2.1 BGP基础](#4.2.1 BGP基础)
[4.2.2 路径的属性& BGP 路由](#4.2.2 路径的属性& BGP 路由)
[4.2.3 BGP 路径通告](#4.2.3 BGP 路径通告)
[4.2.4 BGP报文](#4.2.4 BGP报文)
[4.2.5 BGP, OSPF, 转发表表项](#4.2.5 BGP, OSPF, 转发表表项)
[4.2.6 BGP 路径选择](#4.2.6 BGP 路径选择)
[4.2.7 热土豆路由](#4.2.7 热土豆路由)
[4.2.8 为什么内部网关协议和外部网关协议如此不同?](#4.2.8 为什么内部网关协议和外部网关协议如此不同?)
[五、SDN 控制平面](#五、SDN 控制平面)
[5.1 传统方式 VS SDN](#5.1 传统方式 VS SDN)
[5.2 流量工程](#5.2 流量工程)
[5.3 SDN特点](#5.3 SDN特点)
[5.4 SDN 架构](#5.4 SDN 架构)
[5.5 OpenFlow](#5.5 OpenFlow)
[5.6 SDN: 面临的挑战](#5.6 SDN: 面临的挑战)
[6.1 硬件组播](#6.1 硬件组播)
[6.2 网际组管理协议 IGMP 协议](#6.2 网际组管理协议 IGMP 协议)
[6.3 组路由选择协议](#6.3 组路由选择协议)
[七、ICMP: Internet Control Message Protocol](#七、ICMP: Internet Control Message Protocol)
一、导论
网络层功能
- 转发: 将分组从路由器的一个输入端口移到合适的输出端口------数据平面
- 路由: 确定分组从源到目标的路径------控制平面
2 种构建网络控制平面功能的方法:
- 每个路由器控制功能实现(传统)
- 逻辑上集中的控制功能实现(software defined networking,SDN)
传统方式:每一路由器(Per-router )控制平面
在每一个路由器中的单独路由器算法元件,在控制平面进行交互
SDN 方式:逻辑上集中的控制平面
一个不同的(通常是远程的)控制器与本地控制代理(CAs ) 交互。
二、路由选择算法
2.1 路由(route)的概念
- 路由: 按照某种指标(传输延迟,所经过的站点数目等)找到一条 从源节点到目标节点的较好路径
- 较好路径:按照某种指标较小的路径
- 指标:站数,延迟,费用,队列长度等,或者是一些单纯指标的加权平均
- 采用什么样的指标,表示网络使用者希望网络在什么方面表现突出,什么指标网络使用者比较重视
- 以网络 为单位进行路由(路由信息通告 + 路由计算)
- 网络为单位进行路由,路由信息传输、计算和匹配的代价低
- 前提条件是:一个网络所有节点地址前缀相同,且物理上聚集
- 路由就是:计算网络 到其他网络如何走的问题
- 网络到网络的路由 = 路由器-路由器之间路由
- 网络对应的路由器到其他网络对应的路由器的路由
- 在一个网络中:路由器-主机之间的通信,链路层解决
- 到了这个路由器就是到了这个网络
- 路由选择算法(routing algorithm ):网络层软件的一部分,完成路由功能
2.2 网络的图抽象
2.2.1 边和路由的代价
图:G(N, E)
N = 路由器集合 = { u, v, w, x, y, z }
E = 链路集合 = { {u, v}, {u, x}, {v, x}, {v, w}, {x, w}, {x, y}, {w, y}, {w, z}, {y, z} } 边有代价
- c(x, x') = 链路的代价(x, x')
- 上图中,c(w, z) = 5
- 代价可能总为1,或是 链路带宽的倒数,拥塞情况的倒数
Cost of path(x1, x2, ..., xn = c(x1, x2) + c(x2, x3) + ... + c(xn-1, xn)
**路由的输入:**拓扑、边的代价,源节点
**输出的输出:**源节点的汇集树
2.2.2 最优化原则
- 汇集树(sink tree )
- 此节点到所有其它节点的最优路径形成的树
- 路由选择算法就是为所有路由器找到 并使用汇集树
- 其实就是数据结构课程中的最短路径树
2.3 路由的原则
- 路由选择算法的原则
- 正确性(correctness) :算法必须是正确 的和完整的,使分组一站一站接力,正确发向目标站;完整:目标所有的站地址,在路由表中都能找到相应的表项;没有处理不了的目标站地址;
- 简单性(simplicity):算法在计算机上应简单:最优但复杂的算法,时间上延迟很大,不实用,不应为了获取路由信息增加很多的通信量;
- 健壮性(robustness) :算法应能适应通信量 和网络拓扑的变化:通信量变化,网络拓扑的变化算法能很快适应; 不向很拥挤的链路发数据,不向断了的链路发送数据;
- 稳定性(stability):产生的路由不应该摇摆
- 公平性(fairness):对每一个站点都公平
- 最优性(optimality):某一个指标的最优,时间上,费用 上,等指标,或综合指标;实际上,获取最优的结果代价较高,可以是次优的
2.4 路由选择算法的分类
全局或者局部路由信息?
全局:
- 所有的路由器拥有完整的拓扑和边的代价的信息
- "link state" 算法
分布式:
- 路由器只知道与它有物理连接关系的邻居路由器,和到相应邻居路由器的代价值
- 叠代地与邻居交换路由信息、计算路由信息
- "distance vector" 算法
静态或者动态的?
- 静态:
- 路由随时间变化缓慢
- 动态:
- 路由变化很快
- 周期性更新
- 根据链路代价的变化而变化
- 路由变化很快
非自适应算法(non-adaptive algorithm):不能适应网络拓扑和通信量的变化,路由表是事先计算好的
自适应路由选择(adaptive algorithm):能适应网络拓扑和通信量的变化
2.5 link state 算法
2.5.1 LS路由工作过程
- 配置LS 路由选择算法 的路由工作过程
- 各点通过各种渠道获得整个网络拓扑 ,网络中所有链路代价等信息(这部分和算法没关系,属于协议和实现)
- 使用LS 路由算法,计算本站点到其它站点的最优路径(汇集树),得到路由表
- 按照此路由表转发分组(datagram方式)
- 严格意义上说不是路由的一个步骤
- 分发到输入端口的网络层
2.5.2 链路状态路由选择(link state routing)
- LS路由的基本工作过程
- 发现相邻节点,获知对方网络地址
- 测量到相邻节点的代价(延迟,开销)
- 组装一个LS分组,描述它到相邻节点的代价情况
- 将分组通过扩散的方法发到所有其它路由器 以上4 步让每个 路由器获得拓扑 和边代价
- 通过Dijkstra 算法找出最短路径(这才是路由算法)
- 每个节点独立算出来到其他节点(路由器=网络)的最短路径
- 迭代算法:第k 步能够知道本节点到k个其他节点的最短路径
1 、发现相邻节点,获知对方网络地址
- 一个路由器上电之后,向所有线路发送HELLO分组
- 其它路由器收到HELLO分组,回送应答,在应答分组中,告 知自己的名字(全局唯一)
- 在LAN 中,通过广播HELLO分组,获得其它路由器的信息,可以认为引入一个人工节点
2 、测量到相邻节点的代价( 延迟,开销)
- 实测法,发送一个分组要求对方立即响应
- 回送一个ECHO分组
- 通过测量时间可以估算出延迟情况
3 、组装一个分组,描述相邻节点的情况
- 发送者名称
- 序号,年龄
- 列表:给出它相邻节点,和它到相邻节点的延迟
4 、将分组通过扩散的方法发到所有其它路由器
- 顺序号:用于控制无穷的扩散 ,每个路由器都记录( 源路由器,顺序号 ),发现重复的或老的就不扩散
- 具体问题1:循环使用问题
- 具体问题2:路由器崩溃之后序号从0开始
- 具体问题3:序号出现错误
- 解决问题的办法:年龄字段(age )
- 生成一个分组时,年龄字段不为0
- 每个一个时间段,AGE 字段减1
- AGE 字段为0的分组将被抛弃
- 关于扩散分组的数据结构
- Source :从哪个节点收到LS分组
- Seq ,Age:序号,年龄
- Send flags :发送标记,必须向指定的哪些相邻站点转发LS分组
- ACK flags:本站点必须向哪些相邻站点发送应答
- DATA :来自source站点的LS分组
- 下面是节点B的数据结构
5、通过Dijkstra算法找出最短路径
- 路由器获得各站点LS分组和整个网络的拓扑
- 通过 Dijkstra 算法计算出到其它各路由器的最短路径(汇集树)
- 将计算结果安装到路由表中
- LS 的应用情况
- OSPF 协议是一种LS协议,用于Internet上
- IS-IS(intermediate system- intermediate system) : 被用于Internet 主干中,Netware
符号标记:
- c(i, j) :从节点 i 到 j 链路代价(初始状态下非相邻节点之间的 链路代价为∞)
- D(v) :从源节点到节点V的当前路径代价(节点的代价)
- p(v) :从源到节点V的路径前序节点
- N':当前已经知道最优路径的的节点集合(永久节点的集合)
LS路由选择算法的工作原理
- 节点标记 :每一个节点使用**(D(v)** ,p(v)) ,如:(3, B) 标记
- D(v) 从源节点由已知最优路径到达本节点的距离
- **P(v)**前序节点来标注
- 2 类节点
- 临时节点(tentative node):还没有找到从源节点到此节点的最优路径的节点
- 永久节点(permanent node ) N': 已经找到了从源节点到此节点的最优路径的节点
算法流程:
- 初始化
- 除了源节点外,所有节点都为临时节点
- 节点代价除了与源节点代价相邻的节点外,都为∞
- 从所有临时节点中找到一个节点代价最小的临时节点,将之变成永久节点(当前节点)W
- 对此节点的所有在临时节点集合中的邻节点(V)
- 如 D(v) > D(w) + c(w, v),则重新标注此点,(D(W) + C(W, V), W)
- 否则,不重新标注
- 开始一个新的循环
示例:
**算法复杂度:**n 个节点
- 每一次迭代:需要检查所有不在永久集合N中节点
- n(n + 1) / 2 次比较:O(n^2)
- 堆优化:O(nlogn)
可能的震荡:
- 链路代价 = 链路承载的流量
- 一开始都走轻载路径,然后轻载路径变成重载路径......如此往复,导致路径震荡
2.6 距离矢量路由选择(distance vector routing)
- 动态路由算法之一
- DV 算法历史及应用情况
- 1957 Bellman, 1962 Ford Fulkerson
- 用于ARPANET ,Internet(RIP) ,DECnet ,Novell , ApplTalk
- 距离矢量路由选择的基本思想
- 各路由器维护一张路由表,结构如图(其它代价)
-
-
- 各路由器与相邻路由器之间交换路由表
- 根据获得的路由信息,更新路由表
-
- 代价及相邻节点间代价的获得
- 跳数(hops ),延迟(delay),队列长度
- 相邻节点间代价的获得:通过实测
- 路由信息的更新
- 根据实测 得到本节点A到相邻站点的代价(如:延迟)
- 根据各相邻站点声称它们到目标站点B的代价
- 计算出本站点A 经过各相邻站点到目标站点B 的代价
- 找到一个最小的代价,和相应的下一个节点Z ,到达节点 B 经过此节点Z ,并且代价为A-Z-B 的代价
- 其它所有的目标节点一个计算法
示例:
距离矢量算法
- Bellman-Ford 方程(动态规划)
异步式, 迭代: 每次本地迭代 被以下事件触发:
- 本地链路代价变化了
- 从邻居来了DV的更新消息
分布式:
- 每个节点只是在自己的DV改 变之后向邻居通告
- 然后邻居们在有必要的时候 通知他们的邻居
每个节点:
- DV 的无穷计算问题
- DV 的特点
- 好消息传得快,坏消息传得慢
- 好消息的传播以每一个交换周期前进一个路由器的速度进行
- 好消息:某个路由器接入或有更短的路径
- 例子:目标是A,初始BCDE到A都不可达,然后每次不断传播
- 坏消息的传播速度非常慢(无穷计算问题)
- 例子: 某时刻,B 到A 不可达
- 第一次交换之后,B 从C 处获得信息,C 可以到达A (C -A , 要经过B 本身),但是路径是2 ,因此B 变成3 ,从C处走
- 第二次交换,C 从B 处获得消息,B 可以到达A ,路径为3 ,因此,C 到A 从B 走,代价为3
- 无限次之后 ,到A 的距离变成INF,不可达
- DV 的特点
- 水平分裂(split horizon )算法
- 水平分裂的问题:在某些拓扑形式下 会失败(存在环路)
- 解决方案:给相邻节点发通告的时候,如果下一个节点是自己关于某个目标节点的下一跳,那么发给对方的关于该目标节点的距离为不可达
- 这种解决方式只能减缓该情况的发生,不能杜绝,在环路中显然是无法避免的
- 例子:
- A,B 到 D 的距离为2,C到D的距离为1
- 如果C-D路径失败
- C获知到D为INF,从A,B获知到D的距离为INF,因此C认为D不可达
- A从C获知D的距离为INF,但从B处获知它到D的距离为2,因此A到B的距离 为3,从B走
- B也有类似的问题
- 经过无限次之后,A和B都知道到D的 距离为INF
2.7 LS 和 DV 算法 的比较
消息复杂度(DV 胜出)
- LS:有 n 节点,E 条链路,发送 报文O(nE)个
- 局部的路由信息;全局传播
- DV:只和邻居交换信息
- 全局的路由信息,局部传播
收敛时间(LS 胜出)
- LS :O(n^2) 算法
- 有可能震荡
- DV :收敛较慢
- 可能存在路由环路
- count-to-infinity 问题
健壮性: 路由器故障会发生什么 (LS胜出)
LS:
- 节点会通告不正确的链路代价(但是一个LS节点仅计算自己的转发表;其他节点也自行执行类似的计算,具有一定健壮性)
- 每个节点只计算自己的路由表
- 错误信息影响较小,局部,路由较健壮
DV:
- DV 节点可能通告对全网所有节点 的不正确路径代价(第一次从错误节点传给邻居,第二次从邻居外传......)
- 距离矢量
- 每一个节点的路由表可能被其它节点使用
- 错误可以扩散到全网
2 种路由选择算法都有其优缺点,而且在互联网上都有应用
三、自治系统内部的路由选择:OSPF
3.1 RIP( Routing Information Protocol)
- 在1982 年发布的BSD-UNIX中实现
- Distance vector 算法
- 距离矢量 :每条链路cost=1 ,# of hops (max = 15 hops) 跳数
- DV 每隔 30 秒和邻居交换DV ,通告
- 每个通告包括:最多25 个目标子网
3.1.1 RIP 通告(advertisement)
- DV :在邻居之间每30 秒交换通告报文
- 定期,而且在改变路由的时候发送通告报文
- 在对方的请求下可以发送通告报文
- 每一个通告: 至多AS (Autonomous System ) 内部的25 个目标网络的 DV
- 目标网络+跳数
- 一次公告最多25个子网 最大跳数为16
3.1.2 链路失效和恢复
- 如果180 秒没有收到通告信息-->邻居或者链路失效
- 发现经过这个邻居的路由已失效
- 新的通告报文会传递给邻居
- 邻居因此发出新的通告 (如果路由变化的话)
- 链路失效快速(?)地在整网中传输
- 使用毒性逆转 (poison reverse)阻止ping-pong回路 ( 不可达的距离:跳数无限 = 16 段)
3.1.3 进程处理
- RIP 以应用进程的方式实现:route-d (daemon)
- 通告报文通过UDP报文传送,周期性重复
- 网络层的协议使用了传输层的服务,以应用层实体的 方式实现
3.2 OSPF(Open Shortest Path First)
- "open": 标准可公开获得
- 使用LS 算法
- LS 分组在网络中(一个AS内部)分发
- 全局网络拓扑、代价在每一个节点中都保持
- 路由计算采用Dijkstra算法
- OSPF通告信息中携带:每一个邻居路由器一个表项
- 通告信息会传遍AS全部(通过泛洪)
- 在IP数据报上直接传送OSPF报文 (而不是通过UDP和TCP)
- IS-IS 路由协议:几乎和OSPF一样
OPSF "高级" 特性(RIP 中没有的)
- 安全:所有的OSPF报文都是经过认证的 (防止恶意的攻击)
- 允许有多个代价相同的路径存在 (在RIP协议中只有一个)
- 对于每一个链路,对于不同的TOS有多重代价矩阵
- 例如:卫星链路代价对于尽力而为的服务代价设置比较低,对实时服务代价设置的比较高
- 支持按照不同的代价计算最优路径,如:按照时间和延迟分别计算最优路径
- 对单播和多播的集成支持:
- Multicast OSPF (MOSPF) 使用相同的拓扑数据库, 就像在OSPF中一样
- 在大型网络中支持层次性OSPF
层次化的OSPF 路由
- 2 个级别的层次性 :本地,骨干
- 链路状态通告仅仅在本地区域Area范围内进行
- 每一个节点拥有本地区域的拓扑信息
- 关于其他区域,知道去它的方向,通过区域边界路由器(最短路径)
- 区域边界路由器: "汇总(聚集)"到自己区域内网络的距离,向其它区域边界路由器通告.
- 骨干路由器: 仅仅在骨干区域内,运行OSPF路由
- 边界路由器: 连接其它的AS's.
四、ISP之间的路由选择: BGP
4.1 层次路由
-
一个平面的路由
- 一个网络中的所有路由器的地位一样
- 通过LS ,DV,或者其他路由算法,所有路由器都要知道其他所有路由器(子网)如何走
- 所有路由器在一个平面
-
平面路由的问题
- 规模 巨大的网络中,路由信息的存储、传输和计算代价巨大
- DV:距离矢量很大,且不能够收敛
- LS:几百万个节点的LS分组的泛洪传输,存储以及最短路径算法的计算
- 管理 问题:
- 不同的网络所有者希望按照自己的方式管理网络
- 希望对外隐藏自己网络的细节
- 当然,还希望和其它网络互联
- 规模 巨大的网络中,路由信息的存储、传输和计算代价巨大
-
层次路由:将互联网分成一个个AS (路由器 区域)
- 某个区域内的路由器集合,自治系统 "autonomous systems" (AS)
- 一个AS 用**AS Number(ASN)**唯一标示
- 一个ISP 可能包括1 个或者多个AS
-
路由变成了:2 个层次路由
- AS 内部路由 :在同一个 AS 内路由器运行相同的路由协议
- "intra-AS" routing protocol:内部网关协议
- 不同的AS可能运行着不同的内部网关协议
- 能够解决规模和管理问题
- 如:RIP ,OSPF ,IGRP
- 网关路由器:AS边缘路由器 ,可以连接到其他AS
- AS 间运行AS 间路由协议
- "inter-AS" routing protocol:外部网关协议
- 解决AS 之间的路由问题,完成AS之间的互联互通
- AS 内部路由 :在同一个 AS 内路由器运行相同的路由协议
层次路由的优点
- 解决了规模问题
- 内部网关协议解决:AS 内部 数量有限 的路由器相互到达的问题,AS内部规模可控
- 如AS节点太多,可分割AS,使 得AS内部的节点数量有限
- AS之间的路由的规模问题
- 增加一个AS ,对于AS之间的路由从总体上来说,只是增加了一 个节点=子网(每个AS可以用一 个点来表示)
- 对于其他AS 来说只是增加了一 个表项,就是这个新增的AS如何走的问题
- 扩展性强:规模增大,性能不会减得太多
- 内部网关协议解决:AS 内部 数量有限 的路由器相互到达的问题,AS内部规模可控
- 解决了管理问题
- 各个AS可以运行不同的内部网关协议
- 可以使自己网络的细节不向外透露
4.2 互联网AS间路由:BGP
- BGP (Border Gateway Protocol) : 自治区域间路由协议"事实上的"标准
- "将互联网各个AS粘在一起的胶水"
- BGP 提供给每个AS 以以下方法:
- eBGP :从相邻的ASes那里获得子网可达信息
- iBGP:将获得的子网可达信息传遍到AS内部的所有路由器
- 根据子网可达信息和策略来决定到达子网的"好"路径
- 允许子网向互联网其他网络通告"我在这里"
- 基于距离矢量算法(路径矢量)
- 不仅仅是距离矢量,还包括到达各个目标网络的详细路径(AS 序号的列表)能够避免简单DV算法的路由环路问题
eBGP ,iBGP 连接
4.2.1 BGP基础
- BGP 会话 :2 个BGP 路由器("peers ")在一个半永久的TCP 连接上交换BGP 报文:
- 通告向不同目标子网前缀的"路径"(BGP是一个"路径 矢量"协议)
- 当AS3 网关路由器3a 向AS2 的网关路由器2c 通告路径:AS3 ,X
- 3a 参与AS 内路由运算,知道本AS 所有子网X信息
- 语义上:AS3 向AS2 承诺,它可以向子网X转发数据报
- 3a 是2c 关于X 的下一跳(next hop)
4.2.2 路径的属性& BGP 路由
- 当通告一个子网前缀时,通告包括 BGP 属性
- prefix + attributes = "route"
- 2 个重要的属性:
- AS-PATH :前缀的通告所经过的AS列表:AS 67 AS 17
- 检测环路:多路径选择
- 在向其它AS 转发时,需要将自己的AS号加在路径上
- NEXT-HOP : 从当前AS 到下一跳AS 有多个链路,在NETX-HOP 属性中,告诉对方通过那个 I 转发.
- 其它属性:路由偏好指标,如何被插入的属性
- AS-PATH :前缀的通告所经过的AS列表:AS 67 AS 17
- 基于策略 的路由:
- 当一个网关路由器 接收到了一个路由通告,使用输入策略 来接受或过滤(accept/decline .)
- 过滤原因例1:不想经过某个AS,转发某些前缀的分组
- 过滤原因例2:已经有了一条往某前缀的偏好路径
- 策略也决定了是否向它别的邻居通告收到的这个路由信息
- 当一个网关路由器 接收到了一个路由通告,使用输入策略 来接受或过滤(accept/decline .)
4.2.3 BGP 路径通告
- 路由器AS2.2c 从AS3.3a 接收到的AS3 ,X 路由通告 (通过 eBGP)
- 基于AS2 的输入策略,AS2.2c 决定接收AS3 ,X的通告,而且通过 iBGP)向AS2的所有路由器进行通告
- 基于AS2的策略,AS2路由器2a通过eBGP向AS1.1c路由器通告 AS2,AS3,X 路由信息
- 路径上加上了 AS2自己作为AS序列的一跳
网关路由器可能获取有关一个子网X的多条路径,从多个eBGP 会话上:
- AS1 网关路由器1c从2a学习到路径:AS2,AS3,X
- AS1网关路由器1c从3a处学习到路径AS3,X
- 基于策略,AS1路由器1c选择了路径:AS3,X ,而且通过iBGP 告诉所有AS1 内部的路由器
4.2.4 BGP报文
- 使用TCP 协议交换BGP 报文.
- BGP 报文:
- OPEN: 打开TCP连接,认证发送方
- UPDATE: 通告新路径 (或者撤销原路径)
- KEEPALIVE:在没有更新时保持连接,也用于对 OPEN 请求确认
- NOTIFICATION: 报告以前消息的错误,也用来关闭 连接
- BGP 报文:
4.2.5 BGP, OSPF, 转发表表项
4.2.6 BGP 路径选择
- 路由器可能获得一个网络前缀的多个路径,路由 器必须进行路径的选择,路由选择可以基于:
- 本地偏好值属性: 偏好策略决定
- 最短AS-PATH :AS的跳数
- 最近的NEXT-HOP路由器:热土豆路由
- 附加的判据:使用BGP标示
- 一个前缀对应着多种路径,采用消除规则直到留下一条 路径
4.2.7 热土豆路由
- 2d 通过iBGP 获知,它可以通过2a 或者2c 到达X
- 热土豆策略:选择具备最小内部区域代价的网关作为往X 的出口(如:2d选择2a,即使往X可能有比较多的AS跳 数):不要操心域间的代价!
4.2.8 为什么内部网关协议和外部网关协议如此不同?
- 策略
- Inter-AS: 管理员需要控制通信路径,谁在使用它的网络 进行数据传输;
- Intra-AS : 一个管理者,所以无需策略;
- AS内部的各子网的主机尽可能地利用资源进行快速路由
- 规模
- AS间路由必须考虑规模问题,以便支持全网的数据转发
- AS 内部路由规模不是一个大的问题
- 如果AS 太大,可将此AS 分成小的AS;规模可控
- AS之间只不过多了一个点而已
- 或者AS内部路由支持层次性,层次性路由节约了表空间, 降低了更新的数据流量
- 性能
- Intra-AS: 关注性能
- Inter-AS: 策略可能比性能更重要
五、SDN 控制平面
- 互联网络网络层:历史上都是通过分布式、每个路由器的实现
- 单个路由器包含了:交换设备硬件、私有路由器OS( 如:思科IOS)和其上运行的互联网标准协议(IP, RIP, IS-IS, OSPF, BGP)的私有实现
- 需要不同的中间盒来实现不同网络层功能:防火墙, 负载均衡设备和NAT...
- ~2005: 点燃重新思考互联网控制平面的兴趣
5.1 传统方式 VS SDN
传统方式:每一路由器(Per-router) 控制平面
在每一个路由器中的单独路由器算法元件,在控制平面进行交互
SDN 方式:逻辑上集中的控制平面
一个不同的(通常是远程的)控制器与本地控制代理(CAs) 交互
为什么需要一个逻辑上集中的控制平面?
- 网络管理更加容易:避免路由器的错误配置,对于通信流的弹性更好
- 基于流表的转发(回顾一下OpenFlow API),允许"可编程 "的路由器
- 集中式"编程"更加容易:集中计算流表然后分发
- 传统方式分布式"编程"困难:在每个单独的路由器上分别运行分布式的算法,得到转发表(部署和升级代价低)
- 而且要求各分布式计算出的转发表都得基本正确
- 控制平面的开放实现(非私有)
- 新的竞争生态
类比: 主框架到PC 的演变
5.2 流量工程
流量工程: 传统路由比较困难
5.3 SDN特点
5.4 SDN 架构
数据平面交换机
- 快速,简单,商业化交换设备 采用硬件实现通用转发功能
- 流表被控制器计算和安装
- 基于南向API(例如OpenFlow ),SDN控制器访问基于流的交换机
- 定义了哪些可以被控制哪些不能
- 也定义了和控制器的协议 (e.g., OpenFlow)
SDN 控制器(网络OS )
- 维护网络状态信息
- 通过上面的北向API和网络 控制应用交互
- 通过下面的南向API和网络 交换机交互
- 逻辑上集中,但是在实现上通常由于性能、可扩展性、容错性以及鲁棒性采用分布式方法实现
网络控制应用
- 控制的大脑: 采用下层提供 的服务(SDN控制器提供的 API),实现网络功能
- 路由器 交换机
- 接入控制 防火墙
- 负载均衡
- 其他功能
- 非绑定:可以被第三方提供 ,与控制器厂商以通常上不同,与分组交换机厂商也可以不同
SDN 控制器里的元件
5.5 OpenFlow
- 控制器和SDN交换机交互的协议
- 采用TCP 来交换报文
- 加密可选
- 3种OpenFlow报文类型
- 控制器>交换机
- 异步(交换机>控制器 )
- 对称 (misc)
SDN: 控制/ 数据平面交互的例子
5.6 SDN: 面临的挑战
- 强化控制平面:可信、可靠、性能可扩展性、 安全的分布式系统
- 对于失效的鲁棒性: 利用为控制平面可靠分布式系统的强大理论
- 可信任,安全:从开始就进行铸造
- 网络、协议满足特殊任务的需求
- e.g., 实时性,超高可靠性、超高安全性
- 互联网络范围内的扩展性
- 而不是仅仅在一个AS的内部部署,全网部署
六、IP组播
IP 数据报的三种传输方式
- 单播
- 单播用于发送数据包到单个目的地,且每发送一份单播报文都使用一个单播IP地址作为目的地址。是一种点对点传输方式。
- 广播
- 广播是指发送数据包到同一广播域或子网内的所有设备的一种数据传输方式,是一种点对多点传输方式。
- 组播( 多播)
- 当网络中的某些用户需要特定数据时,组播数据发送者仅发送一次数据 ,借助组播路由协议为组播数据包建立组播分发树 ,被传递的数据到达距离用户端尽可能近的节点后才开始复制和分发 ,是一种点对多点传输方式
- 组播提高了数据传送效率。减少了主干网出现拥塞的可能性。组播组中的主机可以是在同一个物理网络,也可以来自不同的物理网络(如果有组播路由器的支持,即运行组播协议的路由器)。
IP组播地址让源设备能够将分组发送给一组设备。属于多播组的设备将被分配一个组播组 IP 地址 (一群共同需求主机的相同标识)。
组播地址范围为224.0.0.0~239.255.255.255(D类地址),一个D类地址表示一个组播组。只能用作分组的目标地址 。源地址总是为单播地址。
- 组播数据报也是"尽力而为",不提供可靠交付,应用于UDP
- 对组播数据报不产生ICMP差错报文。
- 并非所有D类地址都可以作为组播地址。
6.1 硬件组播
同单播地址一样,组播IP地址也需要相应的组播MAC地址在本地网络中实际传送帧。
- IANA规定,将01:00:5E :00:00:00~01:00:5E :7F:FF:FF用于IP组播地址到以太网组播地址的映射。
- 注意:IP---MAC映射关系不是唯一的
- 余下24bit,因为D类有5位不用,使得剩下24bit最高位不用,然后剩下的23位来自D类IP地址
- 收到多播数据报的主机,还要在IP层利用软件进行过滤,把不是本主机要接收的数据报丢弃。
6.2 网际组管理协议 IGMP 协议
IGMP协议让路由器知道本局域网上是否有主机 ( 的进程) 参加或退出了某个组播组
IGMP所处位置:
ROUND 1 :
- 某主机要加入组播组时,该主机向组播组的组播地址发送一个IGMP报文,声明自己要称为该组的成员。本地组播路由器收到IGMP报文后,要利用组播路由选择协议把这组成员关系发给因特网上的其他组播路由器
ROUND 2 :
- 本地组播路由器周期性探询本地局域网上的主机,以便知道这些主机是否还是组播组的成员。
- 只要有一个主机对某个组响应,那么组播路由器就认为这个组是活跃的
- 如果经过几次探询后没有一个主机响应,组播路由器就认为本网络上的没有此组播组的主机,因此就不再把这织的成员关系发给其他的组播路由器
组播路由器知道的成员关系只是所连接的局域网中有无组播组的成员。
IGMP v1 报文格式:
6.3 组路由选择协议
- 组播路由选择协议目的是找出以源主机为根节点的组播转发树。
- 构造树可以避免在路由器之间兜圈子
- 对不同的多播组对应于不同的多播转发树:同一个多播组,对不同的源点也会有不同的多播转发树。
组播路由选择协议常使用的三种算法:
- 基于链路状态的路由选择
- 基于距离-向量的路由选择
- 协议无关的组播(稀疏/密集)
组播路由选择协议尚未标准化,所以知道有这三类就行。
七、ICMP: Internet Control Message Protocol
IP 协议是一种不可靠无连接的包传输 。当数据包经过多个网络传输过程中,可能出现错误、目的主机不响应、包拥塞和包丢失等。为了处理这些问题,在IP层引入了一个子协议 ICMP (Internet Control Message Protocol ,因特网控制报文协议)
ICMP 报文格式和类型
- ICMP处在网络层,但是是 在IP协议的上面
- ICMP消息由IP数据报承载
- ICMP报文可以被IP协议层、传输层协议(TCP或UDP)和用户进程使用。
- ICMP协议有两种报文:
- 查询报文
- 差错报文
- 对错误的ICMP差错报文不会产生另一个ICMP差错报文
ICMP 报文的主要类型( 部分)
检查目的站的可达性
- 为了诊断目的而设计:
- 源主机IP软件要为数据报选路
- 源---目的站之间的路由器必须正在运行,且正确为数据报选路
- 目的主机必须正在运行,且ICMP和IP软件都在工作
- 返回路径上的路由器必须有正确的路由
- 最常用的调试工具是利用回送请求和回送回答报文来测试目的站的可达性
分组网间探测,Ping 程序
- 用来测试主机或路由器间的连通性
- 应用层直接使用网际层的ICMP(没有通过运输层的TCP或UDP)
- 使用ICMP回送请求和回答报文
测试网络连通性的ping程序
利用了ICMP协议类型8的回显请求和类型0的回显应答完成
跟踪路由tracert 程序
- 用来测试IP数据报从源主机到达目的主机要经过哪些路由器
- Windows版本
- tracert命令
- 应用层直接使用网际层ICMP
- 使用了ICMP回送请求和回答报文以及差错报告报文
- Unix版本
- traceroute命令
- 在运输层使用UDP协议
- 仅使用ICMP差错报告报文
时间戳请求和回答
- 两个机器(主机或路由器)可使用时间戳请求和时间戳回答报文来确定IP数据报在这两个机器之间来往所需的往返时间。
- 它也可用作两个机器中的时钟的同步。
- ICMP类型
- 请求:类型=13
- 回答:类型=14
ICMP 地址掩码请求与响应
- 向局域网上的路由器发送地址掩码请求报文,得到主机的掩码
- 请求:类型=17
- 回答:类型=18
ICMP 差错报告报文共有以下五种:
- 终点不可达
- 当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种错误。
- 源点抑制
- 当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
- 时间超过
- 当路由器收到一个目的IP地址不是自己的IP数据报,会将其生存时间TTL字段的值减1。若结果不为0,则将该IP数据报转发出去:若结果为0,除丢该IP数据报外,还要向源点发送时间超过报文
- 另外,当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过报文。
- 参数问题
- 当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。
- 改变路由(重定向)
- 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)
以下情况不应发送ICMP差错报告报文
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
- 对具有多播地址的数据报都不发送ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
八、小结
- 网络层控制平面的方法
- 每个路由器控制(传统方法)
- 逻辑上集中的控制 (software defined networking)
- 传统路由选择算法
- 在互联网上的实现:RIP , OSPF, BGP
- SDN控制器
- 实际中的实现:ODL, ONO