CCIE SP-ISIS 抓包分析邻接关系
基础概念
1. ISIS是个什么协议
ISO(国际标准化组织,发布众多标准,如OSI七层模型,现在的ISO 9001认证等)在1990年发布了10589标准,后被ITU(国际电信联盟)定义为ISIS。它最开始被用于为CLNS(Connectionless Network Service, 无连接网络服务,非IP环境)以及ITU发布的其他路由协议提供路由信息。由于良好的扩展性,所以后续被IETF加入了很多扩展功能,使其支持IP。
2. CLNS编制
CLNS利用NSAP(Network Service Access Point,网络服务)来编织,NSAP中定义了一堆名词,每次看完都会忘,索性就不要记了,对于IP工程师来说,一般不会涉及这些知识,只要知道在路由器中如何编制就可以了,如果确实需要,那么回头再查资料即可。
一个例子带过:
47.0012.0010.0100.1001.00
Area:47.0012
System ID:0010.0100.1001 一般有环回地址转换而来,这里是1.1.1.1
NSEL:00 服务标识符,始终为00
注:两个路由器必须在同样的Area下才能建立Level1的邻居关系;对于Level2没有这个限制,因为Level2相当于OSPF的域间,骨干路由。另外不管Level1/2都要有唯一的System ID。
3. ISIS报文的目的地址
ISIS所有报文都是通过组播发送的
level1:01:80:c2:00:00:14
level2:01:80:c2:00:00:15
实例解释
为了更好的理解,以一个实验为例来说明这些报文:
R1(F1/0)———-(F1/0)R2
R1的配置:
interface Loopback0 ip address 1.1.1.1 255.255.255.255 ! interface FastEthernet1/0 ip address 10.1.1.1 255.255.255.0 ip router isis core ! router isis core net 47.0012.0010.0100.1001.00 passive-interface Loopback0
R2的配置:
interface Loopback0 ip address 2.2.2.2 255.255.255.255 ! interface FastEthernet1/0 ip address 10.1.1.2 255.255.255.0 ip router isis core ! router isis core net 47.0012.0020.0200.2002.00 passive-interface Loopback0
1. Hello报文
同OSPF一样,ISIS会发送Hello信息来维持邻居关系,以最大MTU发送,注意两边的MTU,也可以关掉Hello Padding,下面是TCP/IP卷1的LAN Hello插图:
下面是LAN 初始Hello的详细抓包信息,在PDU中没有看到neighbor的信息,说明还没收到对端的Hello:
收到对端Hello后,在Hello中会多一项,如下图所示。另外在LAN中,需要根据SNAP选举DIS,类似OSPF的DR概念,SNAP(注意这不是NSAP,这是子网接入点,用端口的MAC来标识)高的会被选为DIS,跟DR不一样的是DIS是会抢占的。
2. LSP报文
类似OSPF的LSU报文,确认邻居后,R1和R2分别发送LSP宣告邻居信息和本路由器的路由信息(包括学来的路由),如下图所示,在PDU里包含“IS Reachability”和“IP Internal reachability”。注意:DIS伪节点仅仅作为维系邻接关系用,从伪节点的LSP中可以看到仅有邻居信息,而正常的网络信息是封装在真实节点的LSP中的:
R1#show isis da l2
IS-IS Level-2 Link State Database:
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
R1.00-00 * 0x00000012 0x52D3 671 0/0/0
R2.00-00 0x00000012 0x7B8F 939 0/0/0
R2.01-00 0x0000000C 0x2108 1172 0/0/0
R1#show isis da l2 R2.01-00 de
IS-IS Level-2 LSP R2.01-00
LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL
R2.01-00 0x0000000C 0x2108 1153 0/0/0
Metric: 0 IS R2.00
Metric: 0 IS R1.00
3. CSNP报文
类似OSPF中的DBD报文,包含发送路由器的所有ISIS路由信息摘要,在LAN中,只有DIS每10s发送一次,如下图所示,可以看到R2把伪节点(LSPID后面带01的)信息放入CSNP一起发给所有ISIS路由器。
4. PSNP报文
类似OSPF的LSR报文,部分路由信息更新,当路由器收到DIS发过来的CSNP后,会对比自己的数据库,如果少了哪项,就发送PSNP请求哪项,为了更好的看到效果,我又加一台路由器R3,跟R2建立连接,配置一样,不再说明,在R1上用“clear isis *”清掉所有数据库,看PSNP报文信息,如下图所示:
抓包总结分析
在R1—R2—R3这种环境下,断掉R1并清掉数据库(由于ISIS不会自动清掉数据库中的信息,即使端口down了也不会,除非LSP超时,所以要在R2和R3上同样手动执行clear),开始抓包,重新连上R1,分析抓包:
No.Time Source Destinat Prot Length Info 8 6.485000 ca:00* all-le-2 ISIS 1514 L2 HELLO, System-ID: 0010.0100.1001 10 6.516000 ca:01* all-le-2 ISIS 1514 L2 HELLO, System-ID: 0020.0200.2002 12 7.422000 ca:00* all-le-2 ISIS 1514 L2 HELLO, System-ID: 0010.0100.1001 14 7.485000 ca:01* all-le-2 ISIS 1514 L2 HELLO, System-ID: 0020.0200.2002 !---交互Hello信息 18 7.610000 ca:01* all-le-2 ISIS 69 L2 LSP, LSP-ID: 0020.0200.2002.01-00, Sequence: 0x00000001, Lifetime: 1199s !---R2发送伪节点LSP,里面只有R1个R2的邻居关系,无路由可达信息 20 8.407000 ca:00* all-le-2 ISIS 1514 L2 HELLO, System-ID: 0010.0100.1001 23 10.438000 ca:01* all-le-2 ISIS 1514 L2 HELLO, System-ID: 0020.0200.2002 !---R1承认R2是DIS 27 11.610000 ca:01* all-le-2 ISIS 138 L2 LSP, LSP-ID: 0020.0200.2002.00-00, Sequence: 0x00000005, Lifetime: 1199s !---R2发送自己的LSP,包含邻居信息(与R3的邻居关系)及路由可达信息(没有R1的) 28 11.641000 ca:00* all-le-2 ISIS 115 L2 LSP, LSP-ID: 0010.0100.1001.00-00, Sequence: 0x00000019, Lifetime: 1199s !---R1发送自己的LSP,包含邻居信息(与R2的邻居关系)及路由可达信息(没有R2和R3的) 31 13.063000 ca:01* all-le-2 ISIS 1514 L2 HELLO, System-ID: 0020.0200.2002 32 13.235000 ca:01* all-le-2 ISIS 151 L2 LSP, LSP-ID: 0030.0300.3003.00-00, Sequence: 0x00000005, Lifetime: 1197s !---R2发送R3的LSP,R3已经学到R1的LSP,所以在此LSP中已包含R1的路由信息 34 14.220000 ca:01* all-le-2 ISIS 132 L2 CSNP, Source-ID: 0020.0200.2002.00, Start LSP-ID: 0000.0000.0000.00-00, End LSP-ID: ffff.ffff.ffff.ff-ff !---到了DIS发送CSNP(完整数据库摘要)的时间了,里面包含的不是最新的信息,如R2的LSP Seq是0x00000005 36 15.251000 ca:00* all-le-2 ISIS 60 L2 PSNP, Source-ID: 0010.0100.1001.00 !---R1用CSNP匹配自己的数据库,发现没有R3伪节点的LSP,发送PSNP请求,设置序列号为0x0 37 15.298000 ca:01* all-le-2 ISIS 69 L2 LSP, LSP-ID: 0030.0300.3003.01-00, Sequence: 0x00000002, Lifetime: 617s !---R2把R3伪节点的LSP发送给R1 !---至此R1有了自己的LSP,R2的LSP,R2伪节点的LSP,R3的LSP,R3伪节点的LSP 39 15.579000 ca:01* all-le-2 ISIS 1514 L2 HELLO, System-ID: 0020.0200.2002 41 16.595000 ca:01* all-le-2 ISIS 162 L2 LSP, LSP-ID: 0020.0200.2002.00-00, Sequence: 0x00000006, Lifetime: 1199s !---之前说CSNP不是新的,现在R2已经更新了自己的数据库,所以发送更新LSP,Seq是0x00000006,不过从11.61到现在用了5s? !---虽然收到LSP,但SPF不是立即计算的,SPF正常的间隔是5s,可用“spf-interval”改 43 16.673000 ca:00* all-le-2 ISIS 151 L2 LSP, LSP-ID: 0010.0100.1001.00-00, Sequence: 0x0000001a, Lifetime: 1199s !---R1收到所有LSP,更新自己的LSP然后发送更新,从11.641到现在用了5s?原因同上 44 18.283000 ca:00* all-le-2 ISIS 1514 L2 HELLO, System-ID: 0010.0100.1001 45 18.517000 ca:01* all-le-2 ISIS 1514 L2 HELLO, System-ID: 0020.0200.2002 48 21.548000 ca:01* all-le-2 ISIS 1514 L2 HELLO, System-ID: 0020.0200.2002
博主写的时候顺便把用了哪句命令清理数据库,用哪句命令抓包也写下来嘛,想验证下但是不知道怎么打。
“clear isis *”就可以了,另外抓包是用wireshark,不是命令