第十一章 单播路由选择协议(RIP、OSPF和BGP)
为通过的每一个网络指派一个代价(cost),称这个代价为度量(metric);度量可以基于服务的类型
静态路由表:人工设置表项的路由表
动态路由表:在互联网中某处有变化时自动地进行更新
域内或域间路由选择
一个自治系统(autonomous system,AS)就是在一个管理机构管辖下的一组和路由器。在自治系统内部的路由选择称为域内路由选择。在自治系统之间的路由选择称为域间路由选择
距离向量路由选择(distance vector routing)
视AS以及其所有路由器和网络如同一张由结点以及连接结点的线(边)的集合构成的图
Bellman-Ford算法
原理:如果结点i的所有邻站都知道到结点j的最短距离,那么求结点i和结点j之间的最短距离可以用结点i到每个领站之间的距离分别加上该邻站到结点就的最短距离,然后再从得数中选择最小的一个
步骤:
-
1、结点和它自己之间的最短距离和代价被初始化为0
-
2、一个结点和任何其他结点之间的最短距离被设置为无穷大。一个结点和任何其他结点之间的代价应当给定(如果两个结点之间没有直接连接,可设置为无穷大)
-
3、Bellman-Ford算法不断循环,直至最短距离向量不再发生改变为止
Bellman-Ford算法伪代码
距离向量路由选择算法
目的:为AS中的路由器创建路由表
步骤
-
1、在距离向量路由选择中,代价通常就是跳数(即在到达终点之前通过了多少个网络)。因此任意两个邻站之间的代价被设置1
-
2、每当路由器从它的邻站那里接收到一些信息时,它就要异步地更新自己的路由表,这个出来过程是分布式的
-
3、在路由器更新了自己的路由表之后,应当将结果发送给它的邻站,以便这些邻站也能更新它们的路由表
-
4、每个路由器至少应当保存每条路由的三个信息:目的网络、代价和下一跳。称完整的路由表为Table,表中的第i行为Tablei,第i行的三个列分别为Tablei.dest,Tablei,cost,tablei.next
-
5、把来自邻站的一跳路由信息称为一个R(记录),它只包含了两个信息:R.dest和R.cost。在收到的记录中不包含下一跳信息,因为下一跳就是发送方的源地址
在各个路由器上应用的距离向量算法伪代码
计数到无穷大(count of infinity)
二结点循环解决方法:定义无穷大、分割范围(split horizon)、分割范围和毒性逆转(poison reverse)
三结点的不稳定性
RIP
路由信息协议(Routing Information Protocol,RIP):一个在自治系统中使用的域内(内部)路由选择协议,基于距离向量路由选择的非常简单的协议
考虑因素:
-
1、在一个自治系统中,打交道的是路由器和网络(链路),被表示为结点
-
2、在路由表中的第一列定义的是一个网络地址
-
3、RIP使用的度量非常简单,它的度量称为跳数
-
4、无穷大被定义为16,表示在一个使用RIP的自制系统中,任何路由都不能超过15跳
-
5、“下一跳结点”这一列被定义分组为了到达终点而要发往的路由器的地址
RIP的报文格式
-
命令:8个字段,指明报文的类型:请求(1)或相应(2)
-
版本:8个字段,定义了版本
-
系列:16个字段,定义了所使用的协议系列,对于TCP/IP这个值为2
-
网络地址:定义了目的网络的地址,RIP为这个字段分配14个字节,可用于任何协议
-
距离:32个字段,定义了从发出通告的路由器一直到目的网络所经过的跳数
注:在这个报文中有一部分是重复出现的,每一个目的网络出现一次,把这部分称为表项(entry)
请求和响应
RIP使用两种类型的报文:请求和响应
响应:询问的响应再回到请求时才发出,包含了在对应的请求中指明的终点的信息;飞询问的响应则是定期发送,称为更新分组
请求:请求报文可以询问某些特定的表项或所有表项
RIP的计时器
定期计时器(periodic timer):控制更新报文的定期发送
截止期计时器(expiration timer):管理路由的有效性
**无用信息收集计时器(garbage collection timer):**为了邻站在某个路由被清除之前能够了解该路由是无效的
RIP版本2
报文格式
-
路由标记:这个字段携带了如自治系统号这样的信息,可用来使RIP
能够从域间路由选择协议中接收信息 -
子网掩码:4字节的字段携带的是子网掩码(前缀),RIPv2可支持无分类编址和CIDR
-
下一跳地址:这个字段表示下一跳地址
无分类编址:RIP两个版本之间最重要的区别
鉴别:为了保护报文防止未授权的通告
多播:RIP版本1使用广播方式吧RIP报文发送给每一个邻站,RIP版本2使用了全路由器(all-router)多播地址把RIP报文仅发送给这个网络上的RIP路由器
封装
RIP报文被封装在UDP用户数据报中,指派给RIP的是熟知端口520
链路状态路由选择
使用链路状态路由选择时,如果每个域的每一个结点都有这个域的完整拓扑(包括类型、代价和链路状态),那么这个结点就能使用Dijkstra算法构造一个路由表
构造路由表
在**链路状态选择(link state routing)**时,需要四组动作来确保每一个结点的路由表给出到达其他各结点的最小代价结点
-
1、每个结点先创建一个有关链路状态的分组,称为链路状态分组或LSP(Link State
Packet) -
2、以可靠和有效的方法向其他各个结点散发LSP,称之为洪泛(flooding)
-
3、为每个结点形成一个最短路径树
-
4、基于这个最短路径树计算路由表
链路状态分组的创建
产生LSP的场合
-
1、当这个域的拓扑发生变化时
-
2、基于定期更新
LSP的洪泛
-
1、产生LSP的结点把LSP的副本从它的每一个接口发送出去
-
2、结点把收到的LSP和可能已经有的副本进行比较
-
a、丢弃旧的LSP,保留新的
-
b、除去这个分组到达的那个接口外,从其他所有接口发送这个LSP副本
-
形成最短路径树(shortest path tree):Dijkstra算法
步骤
-
1**、初始化:**选择作为树的根的结点,并把它加到路径中
-
2、**循环:**重复下面两个步骤,直至所有结点都被加入到路径中
-
a、**加入下一个结点到路径中:**搜索不在路径中的结点。选择一个具有最小的最短距离的结点,,把它加入到路径中
-
b、更新:用刚才在第二步中移到路径中的结点来更新所有剩余结点的最短距离Dj
= minimum(Dj,Dj+Cij) 对所有剩余结点
-
Dijkstra算法伪代码
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/47f932e3292c46ee468aa2daa15e33e7.png)
开放最短路径优先(Open Shortest Path First,OSPF)
开放最短路径优先协议是一种基于链路状态路由选择的域内路由选择协议
区域(area)
OSPF把一个自治系统划分为若干区域,一个区域就是包含在自治系统中的一些网络、主机和路由器的集合
区域边界路由器(area border router):在一个区域边界的特殊路由器
主干路由器(backbone router):在主干中的路由器
链路的类型
四种类型的链路:点对点链路、穿越链路、残桩链路和虚拟链路
点对点链路(point-to-point link):直接连接两个路由器,中间没有任何其他的主机或路由器
穿越链路(transient link):连接若干个路由器的一个网络
残桩链路(stub link):仅连接一个路由器的网络
虚拟链路(virtual link):当两个路由器之间的链路断开时,管理员就要在它们之间用一条更长的路径来创建一条虚拟链路
OSPF分组
OSPF使用五种不同类型的分组:问候分组、数据库描述分组、链路状态请求分组、链路状态更新分组以及链路状态确认分组
公共首部
-
版本:8位字段,定义了OSPF协议的版本,目前是版本2
-
类型:8位字段,定义了分组的类型
-
报文长度:定义了包括首部在内的总报文长度
-
源路由器IP地址:32位字段,定义了发送这个分组的路由器的IP地址
-
区域标识:32位字段,定义了进行路由选择的区域
-
检验和:用来对整个分组进行差错检测但不包括鉴别类型和字段和鉴别数据字段
-
鉴别类型:16位字段,定义了在这个区域内使用的鉴别协议,目前定义了两种类型的鉴别:0表示没有鉴别,1表示口令
-
鉴别:64位字段,放的是鉴别数据的真正的值
链路状态更新分组(link state update packet)
OSPF运行的核心,路由器用它来通告自己链路状态
LSA通用首部
)
-
链路状态寿命:这个字段指出这个报文第一次产生后经历的秒数
-
E标志:若这个1位的字段置1,则表示这个区域为残桩区域
-
T标志:若这个1位的字段置1,则表示这个路由器能够处理多种类型的服务
-
链路状态类型:这个字段定义LSA的类型,共有五种不同通告类型:路由器链路、网络链路、汇总链路到网络、汇总链路到AS边界路由器和外部链路
-
链路状态标识符:这个字段的值取决于链路的类型
-
发送通告的路由器:这是发生这个报文的路由器的IP地址
-
**链路状态序号:**这是指派给每个链路状态更新报文的序号
-
链路状态检验和:这不是一个常见的检验和字段。使用一种特殊的检验和计算方法称为Fletcher检验和
-
长度:定义整个分组的长度,以字节为单位
路由器链路LSA
-
链路标识:这个字段的值取决于链路的类型
-
链路数据:这个字段给出关于该链路的附加消息
-
链路类型:基于这个路由器连接的网络的类型,供定义了四种不同类型的链路类型:点对点、穿越、残桩和虚拟
-
服务类型(TOS)数:这个字段定义了每一条链路所宣布的服务类型数
-
TOS 0的度量:定义了默认的服务类型(TOS 0)的度量
-
TOS:定义服务类型
-
度量:定义相应的TOS的度量
网络链路LSA
-
网络掩码:定义了网络掩码
-
连接的路由器:除非出现的字段定义了所有相连路由器的IP地址
汇总链路到网络LSA
-
网络掩码:定义了网络掩码
-
TOS:定义了服务类型
-
度量:定义了在TOS字段中定义的服务类型的度量
汇总链路到AS边界路由器LSA
外部链路LSA
其他分组
问候报文(hello message)
-
网络掩码:32位字段,定义了发送问候报文的网络的网络掩码
-
问候间隔:16位字段,定义了问候报文和问候报文之间间隔的秒数
-
E标志:1位标志,当它置1时,表示这个区域是残桩区域
-
T标志:1位标志,当它置1时,表示这个路由器支持多种度量
-
优先级:定义了路由器的优先级
-
停用间隔:32位字段,定义了在路由器认为某个邻站是停用的之前必须等候的时间,以秒为单位
-
指定路由器IP地址:32位字段,是发送这个报文的网络的指定路由器的IP地址
-
备份指定路由器IP地址:32位字段,是发送这个报文的网络的备份指定路由器的IP地址
-
邻站IP地址:可重复的32位字段,定义了已经同意成为这个发送路由器的邻站
数据库描述报文(database description message)
-
E标志:若发送通告的路由器是自治边界路由器,则这个1位的标志就置为1(E代表外部)
-
B标志:若发送通告的路由器是区域边界路由器,则这个1位的标志就置为1
-
I标志:若该报文是第一报文,则这个1位的初始化标志就置为1
-
M标志:若该报文不是最后一个报文,则这个1位的更多标志字段就置为1
-
M/S标志:这个1位字段是主/从位,它指出分组的来源:主(M/S = 1或从(M/S =
0) -
报文序号:32位字段,包含了报文的序号,用来使响应请求相匹配
-
LSA首部:20字节的字段在每一个LSA使用
链路状态请求分组(link state request packet)
链路状态确认分组(link state acknowledgement packet)
封装
OSPF分组被封装成IP数据报
路径向量路由选择(path vector routing)
可达性:AS需要一个列表,列出它内部存在的所有网络
路由表:如果AS之间能够彼此共享它们的可达性列表,那么每个路由器就能够建立一张路径向量路由表
防止环路:距离向量路由选择的不稳定性和环路的产生可以在路径向量选择中避免
聚合:路径向量路由选择协议通常支持CIDR记法和地址聚合
策略路由选择(policy routing):很容易地通过路径向量路由选择来实现
BGP
自治系统的类型:残桩AS、多归属AS和转接AS
残桩AS:残桩AS只有一个连接可达另一个AS
多归属AS有多条连接到达其他多个AS仍然只能是数据通信量的信源或信宿
转接AS:一种允许穿越通信量的多归属AS
CIDR:BGP使用无分类域间路由选择地址
路径属性
熟知属性(well-known attribute):强制的和自选的两种,熟知强制属性是在路由器的描述中必须出现的;熟知自选属性是每一个路由器必须知道的,但不一定要包括在每一个更新报文中
可选属性(optional attribute):传递的和非传递的,可选传递属性是没有实现这个属性的路由器必须传递给下一个路由器的;可选非传递属性则说明如果接收路由器没有实现这个属性,它必须丢弃这个属性
BGP会话
两个路由器之间使用BGP互相交换路由选择信息的行为发生在一次会话中。会话就是建立在两个BGP路由器之间的一个连接且该连接仅用于交换路由选择信息。为了建立一种可靠的环境,BGP使用TCP的服务
外部BGP(E-BGP)和内部BGP(I-BGP)
E-BGP:用于两个不同的自治系统内的发言人结点之间互相交换信息
I-BGP:用于一个自治系统内的两个路由器之间互相交换路由选择信息
分组的类型
BGP使用四种不同类型的报文:打开、更新、保活和通知
分组格式
公共首部
-
标记:16个字节字段,保留给鉴别用
-
长度:2个字节字段,定义了包括首部在内的报文总长度
-
类型:1个字节字段,定义了分组的类型
打开报文(open message)
**打开报文:**用于运行的BGP路由器需要打开与邻站的TCP连接请求
-
版本:定义了BGP的版本,当前版本是4
-
我的自治系统:定义了自治系统号
-
保持时间:定义了一方从另一方收到保活报文或更新报文之前所经过的最大秒数
-
BGP标识符:4字节字段,定义了发送打开报文的路由器
-
选项参数长度:打开报文还可以包含某些选项参数
-
选项参数:若选项参数长度的值不为零,则表示有某些选项参数
更新报文
更新报文是BGP协议的核心,被路由器用来撤销以前曾通告过的终点,或宣布到一个新终点的路由,或者两者皆有。BGP支持无分类编址和CIDR
-
不可行路由的长度:2个字节的字段,定义了下一个字段的长度
-
被撤销的路由:这个字段列出必须从以前通告的清单中删除的所有路由
-
路径属性长度:2个字节的字段,定义了下一个字段的长度
-
路径属性:定义了此报文所宣布的可达网络的路径(路由)属性
-
网络层可达性信息(NLRI):定义了此报文真正通告的网络,它有一个长度字段和一个IP地址前缀
保活报文
运行BGP协议的路由器(用BGP的术语称为对等路由器)定期地互相交换保活报文(在其保持时间截止之前),用来告诉对方自己是工作的
通知报文
当检测出差错状态或路由器打算关闭连接时,路由器就发送通知报文
-
差错码:这个字节定义了差错的种类
-
差错子码:1字节的字段,进一步定义了每一种差错的类型
-
差错数据:用来给出关于该差错的更多的诊断信息
封装
BGP报文封装成TCP报文段,并使用熟知端口179。