拓扑
配置IP地址,注意每台设备上都配置一个lo0,过程省略
配置ISIS协议
R1(config)#router isis
R1(config)#log-adjacency-changes # 邻居状态变化显示
R1(config-router)#net 49.0001.0000.0000.0001.00
R1(config-if)#int range e0/0 , lo0
R1(config-if-range)#ip router isis
=============================================
R2(config)#router isis
R2(config)#log-adjacency-changes
R2(config-router)#net 49.0001.0000.0000.0002.00
R2(config-router)#int range e0/0 -1 , lo0
R2(config-if-range)#ip router isis
=============================================
R3(config)#router isis
R3(config)#log-adjacency-changes
R3(config-router)#net 49.0001.0000.0000.0003.00
R3(config-router)#int range e0/0 -1 , lo0
R3(config-if-range)#ip router isis
=============================================
R4(config)#router isis
R4(config)#log-adjacency-changes
R4(config-router)#net 49.0002.0000.0000.0004.00
R4(config-router)#int range e0/0 -2 , lo0
R4(config-if-range)#ip router isis
=============================================
R5(config)#router isis
R5(config)#log-adjacency-changes
R5(config-router)#net 49.0003.0000.0000.0005.00
R5(config-router)#int range e0/0 , lo0
R5(config-if-range)#ip router isis
检查路由条目,以及是否可以全网互联
R5#sh ip route
1.0.0.0/24 is subnetted, 1 subnets
i L2 1.1.1.0 [115/40] via 192.168.45.4, 00:00:28, Ethernet0/0
2.0.0.0/24 is subnetted, 1 subnets
i L2 2.2.2.0 [115/30] via 192.168.45.4, 00:00:28, Ethernet0/0
3.0.0.0/24 is subnetted, 1 subnets
i L2 3.3.3.0 [115/30] via 192.168.45.4, 00:00:28, Ethernet0/0
4.0.0.0/24 is subnetted, 1 subnets
i L2 4.4.4.0 [115/20] via 192.168.45.4, 00:00:28, Ethernet0/0
5.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 5.5.5.0/24 is directly connected, Loopback0
L 5.5.5.5/32 is directly connected, Loopback0
i L2 192.168.24.0/24 [115/20] via 192.168.45.4, 00:00:28, Ethernet0/0
i L2 192.168.34.0/24 [115/20] via 192.168.45.4, 00:00:28, Ethernet0/0
192.168.45.0/24 is variably subnetted, 2 subnets, 2 masks
C 192.168.45.0/24 is directly connected, Ethernet0/0
L 192.168.45.5/32 is directly connected, Ethernet0/0
i L2 192.168.123.0/24 [115/30] via 192.168.45.4, 00:00:28, Ethernet0/0
R5#ping 1.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
ISIS基础概念
- 链路状态协议
- 在cisco设备上ISIS的管理距离为115
- 最早的时候对通信的过程理解,出现了两大阵营,一个是面向连接,一个是无连接
- 面向连接认为通信前必须要建立连接,然后针对这个连接操作数据。代表协议栈:TCP/IP
- 无连接认为通信前无需建立连接,可以做到低延迟,减少网络资源消耗。代表协议栈:CLNS/CLNP
- ISIS在设计的时候,是针对CLNS/CLNP协议栈的,但是ISIS并没有非常依赖CLNP地址,所以后期开发团队稍微修改了ISIS的代码,变成了集成版本ISIS(DUAL ISIS)。相比较OSPF非常依赖IP地址,ISIS更加的灵活。
- ISIS
三个表
邻居表
R2#show isis neighbors
System Id Type Interface IP Address State Holdtime Circuit Id
R1 L1 Et0/0 192.168.123.1 UP 21 R3.01
R1 L2 Et0/0 192.168.123.1 UP 26 R3.01
R3 L1 Et0/0 192.168.123.3 UP 7 R3.01
R3 L2 Et0/0 192.168.123.3 UP 9 R3.01
R4 L2 Et0/1 192.168.24.4 UP 9 R4.01
System ID
- 是系统ID,类似于OSPF中的Router-ID,不过这个system-id会和主机名做对应
R2#show isis hostname # 这个命令可以看到主机名和系统ID的对应关系 Level System ID Dynamic Hostname (notag) 2 0000.0000.0001 R1 * 0000.0000.0002 R2 2 0000.0000.0003 R3 2 0000.0000.0004 R4 2 0000.0000.0005 R5
Type
- 是用来标识当前邻居的一个类型
- 目前有两种类型
- L1:level-1的邻居关系
- L2:level-2的邻居关系
- state
- init
- down
- up
- Holdtime
- ISIS每隔10秒发送一次hello,用于维护邻居关系
- 当30s没收到hello消息,那么判定邻居失效
Circuit ID
- 术语电路地址,其实就是主机名.接口编号
R2#show clns neighbors System Id Interface SNPA State Holdtime Type Protocol R1 Et0/0 aabb.cc00.1000 Up 23 L1 IS-IS R3 Et0/0 aabb.cc00.3000 Up 8 L1 IS-IS R4 Et0/1 aabb.cc00.4000 Up 9 L2 IS-IS
查看clns邻居关系
SNPA
- 在以太网中就是MAC地址
- 在其他类型的网络中,是数据链路层的地址
链路状态数据库
R2#show isis database
IS-IS Level-1 Link State Database:
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 0x00000022 0x9555 1185/1199 0/0/0
R2.00-00 * 0x0000001D 0x01CA 1186/* 0/0/0
R2.01-00 * 0x00000008 0x70D9 1182/* 0/0/0
R3.00-00 0x00000015 0x4870 1190/593 1/0/0
R3.01-00 0x0000001B 0x4363 1190/846 0/0/0
IS-IS Level-2 Link State Database:
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 0x00000024 0x8DB6 1190/244 0/0/0
R2.00-00 * 0x0000002B 0x310F 1197/* 0/0/0
R3.00-00 0x00000030 0x59DA 1185/1198 0/0/0
R4.00-00 0x00000019 0x2789 1190/931 0/0/0
R4.01-00 0x00000008 0x25A8 1190/692 0/0/0
R4.02-00 0x00000008 0x3794 1190/770 0/0/0
R5.00-00 0x0000000D 0x4FD4 1190/619 0/0/0
R5.01-00 0x00000008 0x5D6C 1190/718 0/0/0
- LSPID
- LSP接收的主机名.伪节点ID-分片ID
- Seq Num
- 每收到一个更新就加一,初始位0x00000001最大为0xffffffff,当最大值之后,再次加一,就回变成0x00000000,然后就回停止isis,直到再次更新的到来。
- LSP Holdtime/Rcvd
- ISIS的LSP消息寿命为1200s,当路由器更新这个消息之后,就回开始倒数计时,当更新了900s之后,就回再次更新消息,其他路由器收到了之后就回刷新倒计时。
ATT/P/OL
- ATT:默认路由器标记
- P:区域修复,类似于OSPF中的虚链路
- OL:overload,意思是路由器超载了,流量如果有别的路线,就尽量绕开这个路由器
路由表
R5#sh ip route isis 1.0.0.0/24 is subnetted, 1 subnets i L2 1.1.1.0 [115/40] via 192.168.45.4, 00:00:28, Ethernet0/0 2.0.0.0/24 is subnetted, 1 subnets i L2 2.2.2.0 [115/30] via 192.168.45.4, 00:10:28, Ethernet0/0 3.0.0.0/24 is subnetted, 1 subnets i L2 3.3.3.0 [115/30] via 192.168.45.4, 00:00:28, Ethernet0/0 4.0.0.0/24 is subnetted, 1 subnets i L2 4.4.4.0 [115/20] via 192.168.45.4, 00:54:30, Ethernet0/0 i L2 192.168.24.0/24 [115/20] via 192.168.45.4, 00:54:30, Ethernet0/0 i L2 192.168.34.0/24 [115/20] via 192.168.45.4, 00:54:30, Ethernet0/0 i L2 192.168.123.0/24 [115/30] via 192.168.45.4, 00:00:28, Ethernet0/0
名词解释
OSI术语 | OSI术语解释 | IP中“类似” |
---|---|---|
IS | 中间系统 | 路由器 |
ES | 终端系统 | PC主机,手机等等 |
PDU | 数据单元 | 数据包 |
NSAP | 用来标识一个服务的地址 | IP+端口号 |
NET | 不区分服务的NSAP地址,只能标识哪个节点 | IP |
SNPA | 数据链路层用的地址 | MAC地址 |
SysID | 上面中间系统的ID | OSPF中的Router-ID |
LSP | 链路状态数据单元 | OSPF中的LSA |
LSPDB | 链路状态数据库 | OSPF中的LSDB |
伪节点 | OSPF中的DR |
ISO编址
NSAP地址
一台路由器多个接口需要多个IP地址来标识
一个路由器只需要一个NSAP就可以标识了,不同的接口使用术语电路(circuit)来标识
- AFI
- 1字节的授权和格式标识符
- 可以确定这个地址的功能和格式,在TCP/IP中几乎无用
- 当时规定了49为私有地址,所以现在TCP/IP中配置ISIS,我们习惯性都以49开头
- IDI
- 可变长的初始域标识符
- 用于表示子域,在TCP/IP中不写
- Area
- 大致类同IP中的子网
- 2字节,现在用来表示ISIS设备所属的区域
- SystemID
- 6直接系统ID
- 一台设备可以配置多个NSAP地址,但是系统ID必须一样
NSEL
- 用于识别流量应该被系统哪个进程使用
- 在TCP/IP中,都是0
将IP地址变成systemID的做法是这样的,比如:
- ISIS路由器必须一整台都属于同一个区域
- 规定不同区域的路由器只能建立L2的邻居关系,也就是L2是用来连接区域间的
- L1是区域内部的路由器
- L1和L2是指路由器的角色,L1和L2邻居关系是指接口的邻居类型
默认情况下ISIS路由器是同时具备L1和L2功能的,被称为L1/L2路由器
推荐如上图这样,在一个区域边界的路由器上开启L2功能,这样就可以变为L1/L2路由器,负责区域内外链路状态的传递。
ISIS区域内的路由学习情况,类似于OSPF的T-stub区域的情况,也就是L1路由器不能学习到其他区域的路由以及ISIS的外部路由。并且会产生一条默认路由指向最近的L1/L2路由器。
下面查看R1的路由表
R1#sh ip route isis
2.0.0.0/24 is subnetted, 1 subnets
i L1 2.2.2.0 [115/20] via 192.168.123.2, 00:00:03, Ethernet0/0
3.0.0.0/24 is subnetted, 1 subnets
i L1 3.3.3.0 [115/20] via 192.168.123.3, 00:00:03, Ethernet0/0
4.0.0.0/24 is subnetted, 1 subnets
i L2 4.4.4.0 [115/30] via 192.168.123.3, 00:19:03, Ethernet0/0
[115/30] via 192.168.123.2, 00:19:03, Ethernet0/0
5.0.0.0/24 is subnetted, 1 subnets
i L2 5.5.5.0 [115/40] via 192.168.123.3, 00:19:03, Ethernet0/0
[115/40] via 192.168.123.2, 00:19:03, Ethernet0/0
i L1 192.168.24.0/24 [115/20] via 192.168.123.2, 00:00:03, Ethernet0/0
i L1 192.168.34.0/24 [115/20] via 192.168.123.3, 00:00:03, Ethernet0/0
i L2 192.168.45.0/24 [115/30] via 192.168.123.3, 00:19:03, Ethernet0/0
[115/30] via 192.168.123.2, 00:19:03, Ethernet0/0
我们发现R1依旧可以学习其他区域的路由,这个是因为默认情况下所有路由器在开启ISIS的时候都是L1/L2路由器,这样的话R1就会和R2和R3建立两种邻居状态,一个是L1还有一个是L2的,维持多个邻居状态会更加消耗系统的资源,所以我们不应该这样做。
router isis
is-type level-1
# 把R1改成Level-1的路由器
检查R1的邻居状态
R1#show isis neighbors
System Id Type Interface IP Address State Holdtime Circuit Id
R2 L1 Et0/0 192.168.123.2 UP 22 R3.01
R3 L1 Et0/0 192.168.123.3 UP 7 R3.01
检查R1的路由表
R1#show ip route isis
i*L1 0.0.0.0/0 [115/10] via 192.168.123.3, 00:00:36, Ethernet0/0
[115/10] via 192.168.123.2, 00:00:36, Ethernet0/0
2.0.0.0/24 is subnetted, 1 subnets
i L1 2.2.2.0 [115/20] via 192.168.123.2, 00:00:36, Ethernet0/0
3.0.0.0/24 is subnetted, 1 subnets
i L1 3.3.3.0 [115/20] via 192.168.123.3, 00:00:36, Ethernet0/0
i L1 192.168.24.0/24 [115/20] via 192.168.123.2, 00:00:36, Ethernet0/0
i L1 192.168.34.0/24 [115/20] via 192.168.123.3, 00:00:36, Ethernet0/0
我们查看R2的ISIS邻居表
R2#show isis neighbors
System Id Type Interface IP Address State Holdtime Circuit Id
R1 L1 Et0/0 192.168.123.1 UP 25 R3.01
R3 L1 Et0/0 192.168.123.3 UP 8 R3.01
R3 L2 Et0/0 192.168.123.3 UP 7 R3.01
R4 L2 Et0/1 192.168.24.4 UP 8 R4.01
R2和R3其实不需要两个邻居关系,他们同属于49.0001区域,但是R2和R3都不能设置为L1路由器,因为它们还负责和其他区域相连,可以修改接口的角色
interface Ethernet0/0
isis circuit-type level-1
R2#show isis neighbors
System Id Type Interface IP Address State Holdtime Circuit Id
R1 L1 Et0/0 192.168.123.1 UP 25 R3.01
R3 L1 Et0/0 192.168.123.3 UP 6 R3.01
R4 L2 Et0/1 192.168.24.4 UP 9 R4.01
DIS
和OSPF类似,在一个MA(多路访问)网络中,需要选择一个指定路由器来收集其他邻居的更新消息,然后发送给所有成员,在OSPF中是DR来做这个事情,在ISIS中,是由PSN(伪节点)来做的。
伪节点其实是一个逻辑上的路由器,真实做伪节点工作的是DIS。
一个广播域中所有的路由器都会和PSN建立邻居关系,就像OSPF中一个广播域所有路由器都会和DR和BDR建立Full的邻居关系。
DIS的hello时间是1/3的正常hello时间,也就是3.3秒。也就意味着10s没有收到DIS的hello,就回重新选举DIS,而这个时候其他的路由器并没有到30s断开邻居。
DIS的选举(在ISIS中,DIS是可以被抢占的):
ISIS将自己的消息都封装在数据链路层之后,而OSPF是封装在网络层之后,也就是ISIS的封装效率更高
有三种类型的PDU:IS-IS、ES-IS和CLNP
IS-IS的PDU有4种:
- Hello
- 由于建立和维护邻居关系
- ESH
- ES发送到IS的hello
- ISH
- IS发送到ES的hello
- IIH
- IS-IS之间的hello
- LSP
- 用来发布链路状态信息,类似于OSPF的LSA
- CSNP(完全序列号PDU)
- 用来请求完整的数据库信息
- PSNP(部分序列号PDU)
- 用来确认和请求链路状态信息
ISIS报文格式
- Hello
TLV是类型长度和值,用于携带ISIS各种消息
Level1 TLV字段 | |||
---|---|---|---|
TLV | 类型值 | 定义来源 | 备注 |
Area address | 1 | ISO10589 | 列出了路由器上配置的区域地址组。它只出现在非伪节点的 LSP 中,并且如果 LSP 被划分成不同的片段,那么该 TLV 字 段出现在第一段。 |
中间系统邻 接路 由 器 IS reachability | 2 | ISO10589 | 列举邻接的 L1-router,注意啊,我们这小节说的是 L1 router LSP 的 TLV 字段啊。这里头除了包含邻接 IS 的系统 ID,还有 一堆 metric |
终端系统邻 接路 由 器 | 3 | ISO10589 | 只在 L1 router 的 LSP 中出现。列举了邻接的 L1-router 和终 端主机。例如通过 ES-IS 协议搜寻到的 ISO CLNP 工作站。 |
认证信息 | 10 | ISO10589 | 用于认证 |
IP 内部可达性信息 | 128 | RFC1195 | 列举了直连的 IP 地址前缀列表,它只在非伪节点 LSP 中使用。 每个 IP 前缀分配了一堆的 metric。 |
支持协议 Protocols support | 129 | RFC1195 | 列举了集成型 IS-IS 协议支持的第三层协议,目前只有 CLNP (NLPID 0x81)和 IP(0xCC) |
IP 接口地址 | 132 | RFC1195 | 包含源路由器上配置的一个或多个 IP 地址,在 CISCO IOS 中 为最高的 loopback 口 IP |
Level2 TLV字段 | |||
---|---|---|---|
TLV | 类 型 值 | 定义来源 | 备注 |
Area address | 1 | ISO10589 | 列出了路由器上配置的区域地址组。 |
中间系统邻 接路 由器IS reachability | 2 | ISO10589 | |
分离指定层 2 中间系 统 | 4 | ISO10589 | 这种 TLV 通过在 L2 router 之间建立一条穿过骨干网的虚链路 来支持区域修复 |
前缀邻接路由器 | 5 | ISO10589 | 搜集可达的 NSAP 前缀信息,它只用于区域间 ISO CLNP 路 由选择(level2 路由) |
认证信息 | 10 | ISO10589 | 用于认证 |
IP 内部可达性信息 | 128 | RFC1195 | 列举了直连的 IP 地址前缀列表 |
支持协议 Protocols support | 129 | RFC1195 | 列举了集成型 IS-IS 协议支持的第三层协议,目前只有 CLNP (NLPID 0x81)和 IP(0xCC) |
IP 外部可达性信息 | 130 | RFC1195 | 收集通过其他路由协议得到的 IP 路由信息 |
域间路由选 择协 议 信息 | 131 | RFC1195 | 暂不支持 |
IP 接口地址 | 132 | RFC1195 | 包含源路由器上配置的一个或多个 IP 地址,在 CISCO IOS 中 为最高的 loopback 口 IP |
邻居关系
邻居关系的建立条件
- 只有同一层次的相邻路由器才可能建立邻居
- 对于L1路由器而言,area ID必须一致
- 检查相邻路由器直连的网段,必须是同一个网段才可能建立邻居
MTU需要一样,因为ISIS在发送CSNP之类的消息的时候,如果过长,会进行分片,但是如果两边MTU不一致,会导致消息丢失。在hello消息中,会使用padding将数据大小直接填充到MTU值。
建立过程
- A发送IIH给B,根据接口或者路由器的角色,发送目的MAC不一样
- 发送地址为L1,01:80:c2:00:00:14(这个是数据链路层的MAC组播)
- 发送地址为L2,01:80:c2:00:00:15(这个是数据链路层的MAC组播)
- B收到IIH之后,检查本地的邻接数据库,查看IIH中System ID是否存在
- 如果存在,就忽略IIH,并且更新计时器
- 如果不存在,就添加邻居,但是状态写成init,然后发送IIH回应
- A收到了IIH回应之后,再次发送IIH消息
- B再次收到A的IIH之后,将邻居关系设置位UP
互相发送CSNP,开始同步数据库内容
触发更新条件
- 邻接关系UP或Down
- ISIS相关接口Up或Down
- 引入的IP路由发生变化
- 区间的IP路由发生变化
- 接口的metric值发生变化
周期性更新
ISIS度量值
Default Metric
- 所有ISIS路由器都支持,与带宽成反比,越小越优
- 在Cisco设备上,不支持根据带宽来计算,每经过一个接口加10,变成跳数类似
- Delay Metric
- 链路的传输延迟,不支持
- Expense Metric
- 链路的传输开销,不支持
Error Metric
- 链路的出错概率,不支持
默认路由
只能在L2或者L1/L2路由器上注入默认路由
router isis default-information originate
路由汇总
只能在区域边缘的L1/L2路由器上做
router isis summary-address 172.16.0.0 255.255.0.0 level-2
overload-bit
一台路由器如果资源不足,它可能就无法维护完整的链路状态数据库,数据流量到达此台设备可能就无法得到正常的转发,因此它有告知或者告警其他路由器的能力,具体的做法是在其自己产生的LSP中将Overload-bit置位。
router isis set-overload-bit