6 路由选择协议
路由选择协议规定了:互联网中有关的路由器应如何相互交换信息
6.1 有关路由选择协议的几个基本概念
1.理想的路由算法
路由选择协议的核心是路由算法。
理想的路由算法应该具有自适应性 :能够适应通信量和网络拓扑(网络中节点故障)的变化,可以静态或动态地路由选择。在通信量变化和某些节点发生故障使改变路由。
2.分层次的路由选择协议
自治系统 AS
内部网关协议 IGP (interior gateway protocol)
外部网关协议 EGP (exterior gateway protocol)
在这里,网关是路由器的意思
6.2 内部网关协议 RIP
1.工作原理
分布式(distributed)的基于距离向量的路由选择协议
距离向量:路由器到网络的距离(需要经过的路由器个数+1)
路由器到直接连接的网络距离为1
距离=16意味着不可达
重点:
-
和哪些路由交换信息?
只和相邻路由交换信息
-
交换什么信息?
交换自己的路由表(内容包括 [ 目标网络,跳数,下一跳 ]
-
什么时候交换?
经过一定时间间隔或网络拓扑改变(故障,某些路由断开)时
注意:主机不发给路由器信息,只有路由器发给主机。
2.距离向量算法(距离向量协议)
两个路由器X,Y相邻 X发送信息给Y
[目标Net,跳数,下一跳]
Y先把这个改成[目标Net,跳数+1,X] 因为是X发来的,所以下一跳必然是X
然后分类讨论:
Y的路由表里无该目标Net——>存下
Y的路由表里有该目标Net——> 下一跳是X ——> 更新(存下
——>下一跳不是X ——>比较两者跳数,存下跳数小的
该算法基于Bellman-Ford算法
最后使得 每个路由器 到 每个目的网络 的 路由 都是最短的
最新的RIP是 RIP 2, 支持 CIDR
RIP报文格式:[首部,路由部分],路由部分会填 ASN自治系统号 和 [ 目标网络,跳数,下一跳 ]
RIP报文作为UDP运输层报文数据部分,再交给IP报(RIP-> UDP -> IP)
3.坏消息传得慢
当网络出现故障时,要传很久才能传到
( N1 ) —X— [ R1 ] —— ( N2 ) —— [ R2 ]
因为假如一个路由器R1旁边的网络N1故障连不过去了,R1会将这个路由信息的跳数改为16 [N1, 16 , 直接]
但是可能还没来得及把这个信息传给R2,R2就传回给R1 [N1, 2, R1],意思是R2告诉R1可以通过R1到达N1
但是R1不会检查这里的下一跳是不是自己,就接收了这个信息
然后R1再给R2,R2给R1,不断累加跳数,最后两方才得到都是16的结果
RIP优点:实现简单,开销小
RIP缺点:
- 最大距离只有15
- 网络越大,开销越大
- 坏消息传得慢
6.3 内部网关协议OSPF
Open Shortest Path First 开放最短路径优先
1.协议OSPF基本特点
基于Dijkstra最短路径算法
是链路状态协议(link state protocol),和RIP不同,RIP是距离向量协议
重点三问:
-
和哪些路由发送信息?
本自治系统AS所有路由
使用泛洪法,不回头地疯狂外传
-
发什么信息?
与本路由器相邻的所有路由器的链路状态
链路状态:
1.本路由器和哪些路由器相邻
2.通往这些路由器的链路(即网络)的度量(代价:带宽,费用,距离etc)
-
什么时候发
每隔一段时间或链路状态变化时
从OSPF到路由表
所有的路由器建立起一个链路状态数据库(link state dataset),也就是全网的拓扑结构
是一个类似数据结构的图(带权重的路径),每个路由器从这个图用(Dijkstra等)算法建立自己的路由表
自治系统内的区域
一个OSPF的自治系统可以再分成多个区域,每个区域有32位的 【区域标志符】(点分十进制表示)
泛洪法只在区域内用,减少通信量
层次结构区域划分:
主干区域 0.0.0.0,区域 0.0.01,区域 0.0.0.2
主干区域和其他区域用 区域边界路由器 连通
该自治系统和其他自治系统用 自治系统边界路由器 连通
主干区域内的路由器叫 主干路由器
(OSPF还有一堆特点,不想记了
2.五种分组类型
-
问候分组 相邻路由器10s交换一次,得到对方是否可达;超过40s没收到说明不可达,修改链路状态数据库
剩下四种都是用来进行链路状态数据库的同步,使得两个路由器的链路状态数据库一样,即“完全邻接”
A,B路由器相邻,A向B发送数据库描述分组,B发现 有些A知道的路由信息 自己不知道,然后向A发送链路状态请求分组 ,请求这些信息
-
数据库描述分组 含有链路状态的摘要信息,即:我知道哪些路由器的信息
-
链路状态请求分组 交换数据库描述分组后,向对方发送链路状态请求分组,请求自己不知道的信息
-
链路状态更新分组 一个路由器的链路状态发生变化,就会使用泛洪法让该AS该区域内所有路由器知道,通过发送链路状态更新分组实现的
-
链路状态确认分组 如果是可靠的泛洪法,则发送链路状态更新分组后,受到的路由器会发送确认分组(收到重复的更新分组,只确认一次
OSPF报文格式:[首部,类型1至类型5的OSPF分组]
OSPF报文直接交给IP报(OSPF -> IP)
OSPF报文短,不需要分片
互联网规模大时,OSPF比RIP好很多
优点:链路状态数据库更新快(更新过程收敛得快
6.4 外部网关协议BGP
1.协议主要特点
现在用BGP-4
为什么不用OSPF?
- 整个互联网规模大,链路状态数据库太大,不好建路由表
- 难以算出路径的代价,每个AS内部的标准不同,所以只写可达性
为什么不用RIP??
最短路径未必最好,存在安全等问题,所以只找“较好”,不兜圈子即可
用 路径向量路由选择协议
2.BGP路由
自治系统中有两种路由器:边界路由器和内部路由器
eBGP
AS中的边界路由器会和相邻AS的边界路由器直接相连
下图中,R1、R2是边界路由器,它们通信前要建立TCP连接,也是eBGP连接
R1和R2是eBGP对等端
iBGP
R2和AS2的内部路由器通信,通信前也要建立TCP连接,也叫iBGP连接
(R2,R3)(R2,R4)(R2,R5)都是iGBP对等端(边界路由-内部路由)
AS内部iBGP对等端直接不可以互传,如R3,R4,R5之间
一个AS内部的iBGP是全接通的(这句话有待理解
iBGP和eBGP其实都是BGP协议,是一样的;只是iBGP内部对等端之间不能互相发送
BGP路由格式
BGP路由信息格式是:[子网前缀,BGP属性] 一般的BGP属性有 AS-PATH,下一跳,本地偏好 等
一般BGP路由信息格式是:[子网前缀,AS-PATH,下一跳]
比如这里发送的eBGP路由信息 [X,AS1,R1] ,就是告诉R2:从R1进去,经过AS1,就可以找到子网前缀X
目标子网前缀 | AS-PATH | 下一跳 |
---|---|---|
X | AS2 | R1 |
这里实际应为CIDR表示 | 实际为自治系统号(每经过一个AS就把ASN加进来 | 用路由接口的IP地址表示 |
从BGP路由到转发表
在这张图里,R4收到R2来的路由信息[X,AS1,R1],但它无法把这个路由信息加入路由表,因为它根本不知道怎么去R1. 所以R4会先把路由变成R2->R1->X,然后R4利用内部网关协议找怎么去R2,它找到要先经过R3,所以在转发表中加入[X, R3]
同样,其他路由器,R3,R5也会在转发表中加入到X的信息
3.三种自治系统AS
- 末梢AS 不进行转发工作,从其他AS收发分组,必须付费;多归属AS是一种末梢AS,连接多个AS,但不转发
- 穿越AS 中间人,把一个AS的传给另一个AS,通常是高速通信主干网
- 对等AS 实现协商的两个直连AS,彼此免费
BGP路由格式是 [ 子网前缀,AS-PATH,下一跳 ]
AS-PATH和兜圈子
这个AS-PATH就是一个AS的路径,每经过一个AS它就会把自己加入这个AS-PATH的最前面,每个AS收到后会先检查这个AS-PATH里有没有自己,防止兜圈子
比如AS3告诉AS1自己能到AS6,就是 [AS3,AS6]
AS1知道后,就可以告诉AS2 [AS1,AS3,AS6]
AS2再告诉AS3 [ AS2,AS1,AS3,AS6]
AS3收到后,发现里面有自己,就会把这个信息丢掉了,因为要避免“兜圈子”
4.BGP的路由选择
如上图所示,两个自治系统之间可以有多条路径,比如[ AS1, AS3, AS6 ]和[AS1, AS2, AS5, AS3, AS6]
究竟选哪一条路由?根据下面的优先级决定
-
本地偏好 LOCAL-PREF
BGP路由的属性中有一项是本地偏好(和AS-PATH同级),由管理员设置
从本地偏好值大的路径走
-
AS跳数最少
经过的自治系统AS少,但也许AS内部转发更多,这也是没办法的鸭
-
热土豆算法
尽快离开当前AS,找更近的边界路由器走
-
选BGP标识符(BGP ID)小的路由器
BGP报文首部有一个BGP标识符,每个路由器的接口有一个(具有多接口的路由器的BGP ID用IP地址中数值大的)
5.BGP的四种报文
对等端刚建立连接时,要交换整个BGP路由表,但之后只需要更新
-
OPEN
建立对等连接,A发给B OPEN,B回复A KEEPALIVE,表示接受连接
OPEN中商议了保持时间(取两方中小的数
-
KEEPALIVE
对等端之间每隔**保持时间的三分之一 **交换KEEPALIVE,表示协议正常工作(而不是交换BGP路由表
若保持时间内未收到对等端KEEPALIVE,认为它已经狗带了
如果保持时间设置为0,则不交换KEEPALIVE,默认正常工作
-
UPDATE
撤销路由(一次可以多个),增加路由(一次只能一个)
-
NOTIFICATION
发送检测到的差错
BGP优点:某个链路或路由器出现故障,会从许多邻站得到消息,选出新的路由,避免“坏消息传得慢”
ASN从2字节升级到4字节了,旧的BGP支持2字节,新的BGP支持4字节!
BGP报文作为TCP数据部分发送,再给IP(BGP->TCP->IP),四种BGP报文首部相同
6.5 路由器的构成
1.路由器的结构
路由器的任务是转发分组,一个分组进入路由器的输入端口,然后被一层一层处理,得到分组,分组根据首部的目的地址查找转发表,然后被送到合适的输出端口发送。
路由选择处理机 根据路由选择协议构造路由表,和相邻路由器交换路由信息,更新、维护路由表
分组转发部分包括:交换结构(交换组织),输入端口,输出端口(端口是硬件接口)(输入输出端口在路由器的线路接口卡上
交换结构根据转发表处理分组,可以认为是在路由器中的网络。
输入输出端口中的1,2,3表示 1:物理层,2:数据链路层,3:网络层处理模块,一层一层被剥开处理,比特->帧->分组
路由表和转发表的区别
路由表 [目的网络,下一跳IP] 路由表网络拓扑变化计算最优化,用软件实现
转发表 [目的网络,输出端口,某些MAC地址(比如下一跳以太网地址)] 转发表在意查找过程最优化,可以用硬件实现
如果接收分组是路由器之间 交换路由信息的分组(RIP/OSPF分组),把分组交给 路由选择处理机;
如果接受的是 数据分组,则按照分组首部的目的地址查找转发表,放到合适的输出端口。
转发表会被复制到每一个输入端口,称作”影子副本“,方便查找转发;路由选择处理及更新这些转发表的副本。
线速 vs 线路把分组传送到路由器的速率
线速:路由器处理分组的速率,也就是把输入端口移动到输出端口的速率,常用单位Mpps(百万分组每秒,每秒处理几百万个分组)
线路把分组传送到路由器的速率:可以是从别的路由器来的,也可以是发送给别的路由器的,对应下图的收到和发送
用 链路的比特率(bits/s )和 分组长度(bits/分组),可以算出 线速(分组/s)
当一个分组还在输入端口查找转发表等待转发时,输入端口的缓存队列进入新的分组,如果输入端口处理数据的速率比较慢,这个队列会溢出,导致分组丢失;
当一个分组从交换结构传入输出端口,而输出端口的队列还没有发送到输出链路,这个队列也会溢出,导致分组丢失。
线速,也就是查找转发的速率,也就是路由器处理分组的速率,等同于把输入端口移动到输出端口的速率,这个速率需要和收到分组、发送分组的数据做平衡
2.交换结构
-
最早的路由器
最早的路由器的路由选择处理机是用计算机的cpu,输入端口 收到分组后用 中断方式 通知 路由选择处理机,分组从输入端口->存储器,路由选择处理机 从分组首部 提取 目的地址,查找路由表,把分组复制到 输出端口。存储器的带宽(读写速率)是M分组/s,那么从输入到输出端口速度小于 M/2 分组/s
-
通过存储器
在输入端口进行 目的地址查找 和 分组在存储器的缓存(不需要路由选择处理机?
-
通过总线
通过总线把输入端口的分组传到输出端口,不需要路由选择处理机。但是同一时间只能有一个分组在总线上传送,后面的分组要排队等待
-
通过互联网络
这是一种纵横交换结构,分别有N个输入、输出端口,2N条总线。可以控制节点的闭合和断开来控制哪条线路连通,让输入端口和输出端口相连。水平总线之间不会互相影响,但是垂直总线同一时间还是只有一个分组,需要排队等待
7 IP多播
multicast
7.1 IP多播基本概念
单播:一对一,多播:一对多
服务器把一个视频发送给90台主机,只需要发送一次。服务器先把分组发给路由器,路由器把分组复制成多个副本,再转发给多个路由器。到达局域网后,局域网有硬件多播功能,不需要复制分组。
IP多播的分组叫 多播数据报
互联网中的多播靠 路由器 实现,上面有识别 多播数据报 的软件。可以运行多播协议的 路由器叫做 多播路由器
多播数据报的目的地址
在互联网进行多播叫IP多播,IP多播传送的分组使用 多播IP地址
一个多播组里有许多台主机,要把一个分组发送给所有主机,不能在 多播数据报 的 目的地址 写上所有主机的IP地址(因为太多了),而是写多播组的标识符。再把 主机IP地址 与 多播组的标识符 关联起来
多播组的标识符:IP地址中的D类地址。前四位是1110。范围是224.0.0.0到239.225.225.225,有28位,可以标志 2 28 2^{28} 228个多播组
多播数据报vs普通IP数据报:多播数据报的目的地址是IP地址的D类,首部协议字段是2,表示使用 网际组管理协议IGMP
多播地址只用于 目的地址 ,不用于 源地址 。不产生 ICMP差错报文,在PING命令后输入多播地址不会收到响应
和IP数据报一样多播数据报是“尽最大努力的交付”,不保证一定成功交付
IP多播有两种:
-
在本局域网硬件多播
-
在互联网范围进行多播
在互联网进行多播的最后阶段,还是要用硬件多播在局域网中交付分组
虚拟的多播主干网MBONE (Multicast Backbone On the IneterNEt),把分组传播给 地点分散 但 属于一个组 的多台主机。适应 交互式音频 、视频的多播
7.2 在局域网上进行硬件多播
IP地址的D类有28位可以设置,但是以太网多播时 在 48位的以太网MAC地址字段 中只有23位可以设置,前25位固定。即01-00-5E-00-00-00到01-00-5E-7F-FF-FF(其中1表示多播)
也就是说,IP多播地址28位 映射到 以太网多播地址23位,有5位多余。映射规则是:以太网地址后23位对应IP地址后23位。前5位不影响以太网地址
所以多个不同的IP多播地址会有同样的以太网多播地址
7.3 IGMP和多播路由选择协议
1.IP多播需要两种协议
网际组管理协议IGMP
网际组管理协议IGMP让路由器知道多播组的成员信息,知道谁在哪个多播组里。
IGMP有本地使用范围,它不知道IP多播组包含成员数量,不知道这些成员在哪些网络上。IGMP协议让连接在 本地局域网 上的多播路由器知道 本局域网 上是否有主机参加或退出了某个多播组
多播路由选择协议
多播路由选择协议让 不同局域网 的多播路由器协同工作,把多播数据报传送给互联网的所有组成员
多播路由选择协议的复杂之处
-
多播转发必须动态地适应多播组成员的变化,即使网络拓扑并没有变化。
因为有些组成员会随时加入或退出多播组,但没有退出网络
-
多播路由器转发多播数据报时,要考虑它从哪里来和到哪里去,因为虽然目的地址一样,但可能是从不同的地方出发,经过不同的路由器
-
多播数据报可以由不属于这个多播组的主机发出,也可以经过没有组成员接入的网络
2.网际组管理协议IGMP
最新版本IGMPv3
IGMP类似网际控制报文ICMP,使用IP数据报传递报文,但也向IP提供服务。我们把IGMP看成整个网际协议IP的组成部分
-
某主机加入新的多播组,该主机向这个多播组的多播地址发送IGMP报文。本地的多播路由器收到IGMP报文后,利用 多播路由选择协议 把这个 组成员关系 转发给互联网上其他多播路由器
-
本地多播路由器周期性地探询本地局域网上的主机,以便知道这些主机是否继续是组的成员。只要一台主机对某个组响应,多播路由器就认为这个组还活跃;如果几次探询还没有一个主机响应,多播路由器就认为这个组狗带了,不会再告诉其他多播路由器这个组的成员关系。
措施:
- 主机和多播路由器间通信都使用IP多播。IGMP报文尽量用硬件多播(?
- 多播路由器探询组成员关系时,不对每一个组发送一个询问报文,而是对所有组发送一个 请求信息的询问报文。默认125s发送一次
- 同一个网络上有多个多播路由器时,迅速选择其中一个多播路由器来探询主机的 成员关系,不引起IGMP通信量增大
- **分散响应 **IGMP的询问报文有一个数值N,意思是最长的响应时间(默认10s)。一台主机参加多个多播组,会对每一个多播组选择0-N之间不同的随机数,对应了发送每个响应经过的时延
- 采用抑制机制 同一个组中每一台主机会监听响应,如果本组其他主机先发送了响应,自己就不再发送响应
多播路由器不保留组成员关系的准确记录,因为局域网中使用硬件多播(???)。多播路由器只知道网络上是否还有一台本组的主机。
一台主机有多个进程加入了某个多播组,这台主机接受多播数据报时只接收一个副本,然后主机再本地复制发送给每一个进程
多播数据报的发送者和接收者都不知道一个多播组有多少成员,以及这个多播组有哪些主机成员
3.多播路由选择协议
多播路由选择实际上就是要找出多播转发树 ,源主机是根节点,叶节点是多播组的成员,其他节点是多播路由器。因为不会兜圈子,所以是树。
不同多播组对应不同的多播转发树;同一个多播组,不同源点有不同的多播转发树。M个源,N个多播组,有MxN棵树
三种方法转发多播数据报:
-
泛洪与剪除
适用于小的多播组,所有组成员接入的局域网邻接。
一开始,路由器使用泛洪的方法转发多播数据报
避免兜圈子,使用反向路径广播RPB(Reverse Path Broadcasting):每个路由器收到多播数据报后,先检查数据报是否是从 源点 经过 最短的路径 传送来的:也就是看本路由器到源点的 最短路径 上的第一个路由器是否是刚刚把多播数据报发来的路由器,如果是,则向其他所有方向转发多播数据报;如果不是就丢弃。
如果有几条长度一样的最短路径,选择临近的路由器中IP地址小的
比如这张图,R1收到后向R2、R3转发多播数据报,R2发现R1在最短路径,向R3转发。R3发现R2不在最短路径,就丢弃。
R7到源点有两条最短路径,其中R4的IP地址小于R5,所以数据报都从R4来。这样就得到了多播转发树,以后按照这个多播转发树转发多播数据报。
多播转发树上的某个路由器发现下游树枝没有该多播组成员,就把自己和下游树枝一起剪枝;嫁接:如果有新增加的树枝,再接入这个树中
-
隧道技术
隧道技术适用于多播组再地理上很分散的情况。
N1、N2支持多播,但R1、R2之间的网络不支持。所以R1把多播数据报加上普通数据报首部,作为单播数据报发给单一目的站R2,就好像一个隧道
使用隧道技术传送数据报又叫 IP中的IP(IP-in-IP)
-
基于核心的发现技术
适用于多播组的大小再较大范围内变化时?
对每一个多播组G指定一个核心路由器,给出它的IP单播地址。核心路由器创建出对应于多播组G的转发树,核心路由器作为根节点。
这样,就是为每一个多播组构建一棵 以核心路由器为根 的转发树,而不是为每一个源点构建一棵转发树。这样开销会减小。
一个路由器R1向 核心路由器R2 发送数据报,它在途中经过的每个路由器都要检查其内容(不懂,检查的是什么?
到达核心路由器后,判断:
如果R1发的是多播数据报,目的地址是G的组地址,R2就沿着转发树转发给所有组成员;
如果R1发的是请求加入多播组的数据报,R2就把这个信息加入路由,用隧道技术向R1转发每一个多播数据报的副本。
互联网的第一个多播路由选择协议:距离向量多播路由选择协议DVMRP
唯一成为互联网标准的协议:协议无关多播-稀疏方式 PIM-SM
基于核心的转发树 CBT
开放最短通路优先的多播扩展MOSPF
协议无关多播密集方式 PIM-DM
8 虚拟专用网VPN和网络地址转换 NAT
8.1 虚拟专用网VPN
Virtual Private Network
一个机构能申请到的IP地址数<机构内的主机数,很多机构内部主机不接入互联网,只需要 机构内部主机 之间通信。机构 自行分配 内部计算机 的IP地址,这些地址只在 机构内 有效,称为本地地址,互联网管理机构 分配的是全球地址
机构内主机可能需要和互联网连接,本地地址 不能和 互联网中的IP地址 重合(否则不知道发给机构里那台还是互联网中的那台,地址二义性)。所以采用专用地址,只能用于机构内部。互联网种的路由器对于 目的地址 是 专用地址 的数据报不进行转发。
专用地址有:10.0.0.0/8 , 172.16.0.0/12 , 192.168.0.0/16
这种专用IP地址的互联网络叫专用网、本地互联网网。在不同专用网中的专用IP地址可以相同,又叫 可重用地址。
一个机构的地理范围跨度很大,就需要利用 公用的互联网 作为本机构各个专用网之间的 通信载体 ,这样的专用网叫虚拟专用网VPN
“专用网”:机构内部的主机之间通信,不和外部交流
“虚拟”:没有真正使用通信专线,只是效果上和真正的专用网一样
下图两个场所的网络地址是专用地址10.1.0.0,10.2.0.0,通过公用的互联网构成VPN
每个场所至少要有一个路由器拥有合法的全球IP地址,如R1和R2,这种路由器对外的接口地址是 全球IP地址,对内的接口地址是 专用网本地地址
如果场所A的X和要和场所B的Y通信,数据报源地址和目的地址是专用地址S=10.1.0.1,D=10.2.0.3,数据报先发给R1,R1会对数据报加密、加上首部,封装成外部数据报,源地址 和 目的地址变成R1和R2的全球地址。R2收到后再解密,发给主机Y
A和B属于同一个机构,内部网络构成的VPN叫内联网;其他机构加入本机构的专用网,叫外联网。
外地个体员工接入公司专用网,叫远程接入VPN
8.2 网络地址转换NAT
network address translation
NAT用于专用网内部的主机和互联网的主机通信
在专用网连接到互联网的路由器安装NAT软件,这样的路由器叫NAT路由器,有至少一个有效的全球IP地址。
NAT工作原理
在 内部数据报 往外传时把 源地址 改为NAT中的 全球IP地址,在 外部数据报 往内传时把 目的地址 改为 NAT中的 专用网地址
NAT路由器有n个全球IP地址时,专用网内最多可以同时有n台接入互联网。专用网内主机轮流使用全球IP地址
通过NAT路由器的通信必须由专用网内的主机发起,否则不知道全球IP对应于内部哪一个主机(尚未分配?)。专用网内部的主机不能作为服务器用
待补充:有一个和运输层有关的内容
9 多协议标签交换MPLS
MultiProtocol Label Switching
多协议表示在MPLS的上层可以采用多种协议
MPLS采用 面向连接技术,每个分组带一个标签(整数),分组到标签交换路由器时,用标签值找转发表,比查路由表快。
MPLS是一种IP增强技术
特点:
1.支持面向连接的服务质量
2.支持流量工程,均衡网络负载
3.支持VPN
9.1 MPLS的工作原理
1.基本工作过程
传统IP网络,路由器查分组的网络前缀找下一跳IP地址,前缀长度不确定,花时间很多
MPLS在MPLS域的入口处给IP数据报打“标签”(label),然后对这些数据报用 硬件转发,使得转发过程加快很多。采用硬件技术对labelled数据报转发叫 标签交换,“交换”表示不上升到 第三层网络层 找转发表,直接在链路层用硬件交换。MPLS可以用于多种链路层协议,PPP、以太网、ATM等。
MPLS域中有许多彼此相邻的路由器,都支持MPLS,叫 标签交换路由器LSR(label swtiching router)LSR具有 标签交换 和 路由选择 两个功能:LSR使用路由选择功能构造转发表,再进行 标签交换 转发
-
MPLS域里的LSR使用标签分配协议LDP(label distribution protocol)交换报文 并找出和特定标签对应的路径标签交换路径LSP(如A->B->C->D),类似路由选择协议构造路由表。但是MPLS面向连接,路径上的第一个LSR就根据IP数据报的标签确定了交换路径,像虚连接一样
-
IP数据报进入MPLS域时,MPLS入口节点就会给它打标签(加一个MPLS首部),按照转发表转发给下一个LSR,以后的LSR也是根据标签转发
打标签也叫做 分类
基础的网络层分类只用了IP首部字段;大多数运营商实现了运输层分类,检查TCP/UDP首部协议端口号;个别实现了应用层分类,检查数据报内部和 有效载荷
-
由于在全网统一分配全局标签数值很困难,因此一个标签仅在两个LSR之间有意义, 分组每经过一个LSR,就会 转发 和 更换标签(根据下表把当前的 入标签 换成 出标签,叫 标签对换 label swaping)
-
IP数据报离开MPLS时,MPLS出口节点 把MPLS的标签去除,把数据报用普通方式发给路由器或主机
由入口LSR确定MPLS域以后的转发路径,称为显式路由选择
2.转发等价类FEC
所谓的转发等价类,就是指对于路由器来说”等价“的一类IP数据报,就是服务器一视同仁地把同一类的数据报从同样的接口转发到同一个下一跳。一类IP数据报中的共性多种多样,它们可能都到同一个网络,可能源地址和目的地址相同,也可能都具有某种服务质量需求。
这种分类是由网络管理员决定的。属于同样FEC的IP数据报会被指派同样的标签。
FEC可以用于负载均衡,也叫 流量工程(Traffic Engineering)或通信量工程
传统路由选择协议选择最短路径,MPLS时可以设置标签,把从H1来的设为第一类,走上路,H2来的设为第二类,走下路,可以使负载均衡
9.2 MPLS首部的位置与格式
在IP数据报 封装 成以太帧之前插入MPLS首部,也就是在IP数据报前多加一个MPLS首部
MPLS在数据链路层和网络层之间
MPLS首部格式:
-
标签值:20位,一般不会用很大数目
-
试验 :3位 保留用于试验
-
S:1位,表示栈,在有”标签栈“时使用
-
生存时间TTL:8位,防止MPLS分组在MPLS域中兜圈子
9.3 新一代的MPLS
标签分配协议LDP 比较复杂,扩展性差,无法做到基于 时延或带宽 等要求的流量调度。为了灵活选择流量的转发路径,要使用 资源预留协议RSVP,但它信令复杂,每个节点都需要维护一个庞大的链路信息数据库,不支持 等价多路径路由选择ECMP,只选择一条最优路径转发
使用段路由选择协议SR(segment routing),段是标签。SR依然用标签交换,但是不用LDP,减少了协议数量。SR由 源节点 为发送的报文指定路径,并将路径转换成 有序的段列表,即 MPLS标签栈,它封装在分组首部。网络中其他节点按照标签栈转发
网络有SDN控制器,得到全网拓扑信息和链路状态信息,为分组计算路径,给分组分配SR标签,指明路径
SR和IPv6联名->SRv6,SR-MPLS
10 软件定义网络SDN
10.1 SDN基本概念
SDN是一种网络体系结构
优点:基于SDN的专用广域网可以 提高网络带宽利用率,使网络运行更稳定,管理更高效简化,降低费用
SDN包括数据层面和控制层面
OpenFlow协议:在SDN体系结构中 控制层面和数据层面之间的通信接口,让控制层面的控制器 直接访问和操纵 数据层面的物理设备、虚拟设备。
SDN不是OpenFlow
SDN未规定必须使用OpenFlow
OpenFlow在逻辑上是集中式的,基于对流的控制
开放网络基金会Open Networking Foundation制定OpenFlow技术规范
SDN的广义的转发
传统的数据层面是根据转发表来转发分组,转发包括“匹配”和“动作:
-
“匹配”:查找网络前缀,进行最长前缀匹配
-
“动作”:把分组从指明的接口转发出去
SDN中,转发的功能更强大了,叫“广义的转发”。
-
“匹配”可以不仅看IP首部,还会看链路层、运输层的首部
-
“动作”不仅是转发分组,还可以 把目的地址一样的分组从不同接口转发出去(做负载均衡),可以重写IP首部(类似NAT中地址转换),还可以人为地阻挡、丢弃分组
SDN把所有层的数据单元统称 分组
SDN的广义转发中,“匹配+动作”的设备叫“分组交换机”或“OpenFlow交换机”,不只在网络层工作
流表
“流表”(flow table)取代了转发表
OpenFlow交换机 中的流表是由 远程控制器 控制的,远程控制器通过一个 安全信道 来用 OpenFlow协议 管理交换机中的流表。
OpenFlow是SDN远程控制协议和网络设备之间的通信协议;OpenFlow也是 网络交换功能 的 逻辑结构 的规约(这句话啥意思
一个流是穿过网络的一种分组序列,这些分组共享分组首部某些字段的值,比如一个流可以是有相同源IP地址和目的IP地址的所有分组。(类似于类
每个OpenFlow交换机有一个或以上的流表,每个流表有很多行,即多个流表项(flow entry),包括首部字段值(匹配字段)、计数器、动作
流表的结构
-
首部字段值(匹配字段):是一组字段,使入分组的对应首部与之相匹配。匹配不上就丢弃,或者发到远程控制器做其他处理。
这里的匹配字段涉及三个层的首部,可以处理链路层的帧、网络层的IP分组,也可以处理运输层的报文。 -
计数器:一组计数器。包括已经与该表项匹配的分组的数量,包括该表项上次更新到现在的时间
-
动作:一组动作。当分组匹配某个流表项时,①把分组转发到一个指定的端口,②或者丢弃这个分组,③或者把分组复制后再从多个端口发出去,④或者重写分组首部
流表的三个例子
S1、S2、S3是交换机,有四个接口
简单转发的例子
来自H5/H6发往H3/H4的分组,都走S3->S1->S2,但不直接走S3->S2
所以S3的流表项是:
通配符*表示: *号是什么都行,只要前面是10.3,就是H5/H6啦
转发(3)表示从端口3转发出去
S1的流表项是:
多了入口端:1
S2的流表项是:
负载均衡的例子
为了均衡S2-S1和S3-S1的通信量,规定从H3发到10.1. * .的分组,都走S2->S1,从H4发往10.1. * .,都走S2->S3->S1
S2的流表项是:
和MPLS类似
普通的转发无法实现这样的功能
防火墙的例子
S2中有防火墙,作用是:只接收和S3相连的主机发来的分组,不接收别的
S2的流表项:
10.2 SDN体系四个特征
-
基于流的转发,流表决定转发规则
SDN控制的交换机 分布在 数据层面,分组的转发可以基于三个层的首部字段。传统的路由器仅基于 IP分组首部
SDN的转发规则 写在交换机的流表里,流表是通过 SDN控制器 计算、管理、安装的
-
数据层面与控制层面分离,不在同一台设备上
传统的路由器中,数据层面和控制场面在同一个设备中,二者耦合(couple)紧密。在SDN中,把这两个 层面去耦合(decouple),这两个层面不在一个设备中
数据层面有许多交换机,在流表中执行“匹配+动作”的规则;控制层面由服务器和软件组成,它们决定和管理这些交换机中的流表
-
网络控制功能 位于数据层面(交换机)之外,用软件实现
SDN的控制层面 由软件实现,软件在不同的机器上,可能离交换机很远。SDN控制层面包括了两个构件:**SDN控制器 **和 网络控制应用程序
SDN控制器(网络操作系统)维护网络状态信息(链路、交换机和主机的状态),把这些信息提供给 控制应用程序,以及为 应用程序 提供 监视、编程、控制 网络设备 的方法
图中SDN控制器只有一个服务器,这只是逻辑上的,事实上总是多个分散的服务器协调工作
-
可编程的网络
控制层面的 网络控制应用程序 让网络可编程。应用程序相当于控制层面的“大脑”,SDN控制器 利用 应用程序指明和控制 数据层面。例如,“路由选择网络控制应用程序” 确定在源点和终点之间的路径,“接入控制应用程序”可以决定哪些分组在进入某个交换机时被阻挡住,还有“负载均衡应用程序”
SDN分散了网络的功能。传统网络的控制层面、数据层面和协议的实现都垂直集成在一个机器,由一个厂商提供。SDN分出了三个实体(交换机、SDN控制器、应用程序),可以由不同厂商提供
10.3 SDN控制器的三个层次
-
通信层
完成 SDN控制器 和 受控的网络设备 之间的通信。网络设备向SDN控制器传送本地观察到的事件(链路故障、设备新接入网络etc),SDN就可以掌握网络状态
通信层协议基本采用OpenFlow
通信层与数据层面之间的接口叫 南向API接口
-
网络范围的状态管理层
管理和维护全网的主机、链路、交换机和其他设备的状态 (比如流表中的计数器
确定流表、维护流表副本。
-
到网络控制应用程序的接口
SDN控制器与网络控制应用程序的交互通过北接口,通过这个API接口,应用程序 读写 状态管理层里的网络状态和流表。发生状态变化的事件时,应用程序通告这个网络事件并行动起来!例如,计算新的路径。
REST风格的API目前使用的多,REST是表述性状态传递,Intent是对操作的抽象描述
程序 提供 监视、编程、控制 网络设备 的方法
图中SDN控制器只有一个服务器,这只是逻辑上的,事实上总是多个分散的服务器协调工作
-
可编程的网络
控制层面的 网络控制应用程序 让网络可编程。应用程序相当于控制层面的“大脑”,SDN控制器 利用 应用程序指明和控制 数据层面。例如,“路由选择网络控制应用程序” 确定在源点和终点之间的路径,“接入控制应用程序”可以决定哪些分组在进入某个交换机时被阻挡住,还有“负载均衡应用程序”
SDN分散了网络的功能。传统网络的控制层面、数据层面和协议的实现都垂直集成在一个机器,由一个厂商提供。SDN分出了三个实体(交换机、SDN控制器、应用程序),可以由不同厂商提供
10.3 SDN控制器的三个层次
-
通信层
完成 SDN控制器 和 受控的网络设备 之间的通信。网络设备向SDN控制器传送本地观察到的事件(链路故障、设备新接入网络etc),SDN就可以掌握网络状态
通信层协议基本采用OpenFlow
通信层与数据层面之间的接口叫 南向API接口
-
网络范围的状态管理层
管理和维护全网的主机、链路、交换机和其他设备的状态 (比如流表中的计数器
确定流表、维护流表副本。
-
到网络控制应用程序的接口
SDN控制器与网络控制应用程序的交互通过北接口,通过这个API接口,应用程序 读写 状态管理层里的网络状态和流表。发生状态变化的事件时,应用程序通告这个网络事件并行动起来!例如,计算新的路径。
REST风格的API目前使用的多,REST是表述性状态传递,Intent是对操作的抽象描述