增强内部网关路由协议EIGRP
- 概述
- 消息格式
- 消息类型
- 可靠传输协议
- 邻居关系建立
- 度量计算
- DUAL算法相关概念
- 可行距离
- 报告(通告)距离
- 后继路由器
- 可行后继路由器
- 配置和排错
开放最短路径优先协议OSPF
- 概述
- 消息格式
- 消息类型
- 路由ID
- 邻接关系建立
- 度量计算
- 迪科斯特拉算法(Dijkstra,或称SPF)
- 多路访问网络中DR和BDR选择
- 配置和排错
增强内部网关路由协议EIGRP
概述
消息格式
EIGRP的一大特性是通过协议相关模块(protocol dependentmodules,PDM)支持多种协议,有IP,IPv6,IPX,AppleTalk四种,此处我们只学习IP协议相关的。EIGRP封装于IP数据包中,协议类型字段为0×58,采用三层组播地址224.0.0.10,二层组播地址为0100.5e00.000a。下表是数据包格式:
| 帧头 | IP数据包 | EIGRP数据包包头 | 类型/长度/值(TLV) |
EIGRP数据包包头
| 版本 | 操作码 | 校验和 |
| 标志 | ||
| 序列号 | ||
| 确认 | ||
| 自治系统号 | ||
| TLVs | ||
其中TLVs又分参数TLV,内部路由TLV,外部路由TLV
消息类型
EIGRP共有5种数据包类型,分别是:Hello,更新,查询,响应,确认。这些数据包由协议数据包包头的操作码(opcode)字段来决定
可靠传输协议
因为传输层采用实时传输协议(real time protocol,RTP),EIGRP支持可靠和不可靠传输。Hello数据包采用不可靠传输,其他几种数据包都采用可靠传输,即收到数据包后要进行确认
邻居关系建立
邻居关系的建立和维持是通过不断发送Hello数据包维持的,一般网络每5秒发送一次,dead时间是15秒,对于非广播多路访问网络(NBMA)的发送时间间隔为60秒,dead时间为180秒。邻居关系建立的条件有如下三个:
- 发送和收到Hello数据包
- 具有相同的AS号
- 具有相同的度量(K值)
度量计算
EIGRP的度量有带宽(bandwidth),延迟(delay),负载(load),可靠性(reliability),虽然最大传输单元(maximum transport unit,MTU)不是度量,但是在设置K值和路由重定向时需要指定,度量计算公式如下:
| Metric = (10000000/bandwidth + delay-of-sum/10)* 256 |
DUAL算法
DUAL的核心是保证了到达目的网络不会出现路由环路
可行距离(feasible distance,FD)
到达目的网络的所有路径中的最佳度量,这条路径会添加到路由表中
报告距离(reported/advertised distance,RD/AD)
只是从不同路由器角度对同一度量的不同称呼,比如路由器A发送通告给路由器B,这个度量对于A来说是可行距离,对于B来说是通告距离
可行性条件(feasible condition,FD)
当邻居通向特定网络的报告距离比本地路由通向相同网络的可行距离短时,即满足可行性条件
后继路由器(successor)
用于转发数据包的邻居路由,具有到达目的网络最小的开销,它会显示在路由表中
可行后继路由器(feasible successor)
满足可行性条件,但是没有当前的后继路由器的报告距离小的邻居路由器
配置和排错
配置命令
- #router eigrp xx 开启EIGRP,xx为自治系统号
- #network 192.168.1.0 0.0.0.255设置参与路由协议的网络(通配符子网掩码可以表示一个范围的网段,其中0表示必须匹配1表示不需要匹配)
- #passive-interface interface-id设置不参与路由协议的接口(设置被动接口的接口将也不会发送Hello数据包,这一点与RIP区分开)
- #no auto-summary不自动汇总
排错命令
- #sh ip eigrp neighbour
- #sh ip eigrp topology [all-links]查看拓扑结构,加上all-links时不符合可行性条件的条目也会列举出来
- #debug ip eigrp **查看eigrp产生的一些日志信息
开放最短路径优先协议OSPF
概述
消息格式
OSPF包封装于IP数据包中,协议代号为0×59,;采用组播地址224.0.0.5和224.0.0.6,前者代表所有路由器,后者代表DR和BDR
OSPF分组
| 帧头 | IP数据包 | OSPF数据包包头 | 数据 |
OSPF数据包包头
| 版本 | 类型 | 分组长度 | 路由器ID | 区域ID | 校验和 | 身份验证类型 | 身份验证 |
消息类型
| 类型 | 作用 |
| Hello | 发现邻居并在他们之间建立邻接(adjacency)关系 |
| 数据库描述(DBD) | 检查数据库之间是否同步 |
| 链路状态请求(LSR) | 向另一台路由器请求特定的链路状态 |
| 链路状态更新(LSU) | 发送请求的链路转台更新 |
| 确认(LSAck) | 对其他类型的分组确认 |
路由ID
用来表示路由器的IP的地址,有环回接口的用最高环回接口作为RID,如果没有用所有接口中最高的IP地址作为RID,路由ID还用于多路访问网络中DR和BDR的选择。
邻接关系的建立
邻接关系的建立和维持是通过不断发送Hello数据包维持的,一般网络每10秒发送一次,dead时间是40秒,对于非广播多路访问网络(NBMA)的发送时间间隔为30秒,dead时间为120秒。邻居关系建立的条件有如下三个:
- 具有相同的Hello发送和失效时间
- 区域ID相同
- 末节区域标记相同
度量计算
计算公式如下:
| Metric = 100000000 / bandwidth 或者自己通过ip ospf cost 命令自己设定 |
迪科斯特拉(Dijkstra)算法
Dijkstra算法的核心思想是让每台路由器通过泛洪得到的链路状态数据库构建一个以自己为根的全网目录树。大体过程是这样的:路由器启动起来自后,首先了解自身的直连网络,然后向邻居发送Hello数据包建立邻接关系,接着每个路由器建立链路状态数据包并泛洪给邻接路由器,邻居收到后继续泛洪给除接受接口的其他接口知道所有路由器保存了全网链路状态数据库,最后路由器执行SPF算法构建自己的SPF树同时计算最短路径并将相应条目添加到路由表中,由此完成了收敛
多路访问网络中DR和BDR的选择
多路访问网络中的OSPF问题是每两台路由器间都要创建邻接关系导致大量的邻接关系,而且由于OSPF初始化采用泛洪方式会导致流量很大。为了解决这一问题,采用选举指定路由器(designate router)然后通过DR做代表来减小避免上述问题的方法。一个有趣的类比是:多个人之间相互介绍肯定要比选一个人做代表然后一一向大家介绍每一个人所用的时间要多,这就是DR的作用,而BDR主要是用作备份。选举的方式如下:先比较路由器优先级,选择拥有最高优先级(优先级数字越大说明优先级越高)做DR,第二高的作为BDR,如果优先级相同则通过路由器ID来比较。
配置和排错
配置命令
- #router ospf xx开启OSPF,xx为进程号,本地有效
- #network 192.168.1.0 0.0.0.255 area 0参与路由协议的接口或者说网段并且制定区域ID
- #passive-interface 不参与路由协议的接口
- #router-id 10.1.1.1 手动指定RID
排错命令
- #sh ip ospf neighbor | database | interface
- #debug ip ospf *