六、IS-IS工作过程
1、第一步:建立邻居关系
IS-IS网络中所有路由器之间实现通信,主要通过以下几个步骤:
(1)邻居关系建立:
邻居关系建立主要是通过HELLO包交互并协商各种参数,包括链路类型(level-1/level-2),Hold time,网络类型,支持协议,区域号,系统ID,PDU长度,接口IP等。
(2)链路信息交换:
与OSPF不同,ISIS交互链路状态的基本载体是LSP(link state PDU),不是LSA。交互的过程没有像OSPF协议经历了多个阶段,主要是通过CSNP和PSNP两种协议报文来同步,请求以及确认链路状态信息(承载的是链路状态信息摘要),而链路状态信息的详细拓扑和路由信息是由LSP报文传递。
(3)路由计算:
SPF计算和OSPF基本一样的,但ISIS算法分离了拓扑结构和IP网段,加快了网络收敛速度。
(1)邻居关系建立
邻居关系,IS-IS目前只支持点对点(P2P)和广播多路访问网络(BMA)。其他的网络中需要进行额外的配置才能支持,如:在帧中继等特殊环境下,可以通过创建子接口支持P2P的网络类型。
邻居关系的建立主要是通过HELL O包交互并协商各种参数,包括电路类型(level-1/2),hold time,网络类型,支持协议,区域号,系统ID,PDU长度,接口IP等。
ISIS建立邻居关系的必要条件:区域ID号、认证、最多区域地址(max-area-address,Level-2不协商该参数)
OSPF建立邻居关系的必要条件:Hello时间、Hold Time、区域ID号、认证(在广播网络中还需要协商:掩码)
1)ISIS建立邻居关系原则
1)只有同一层次的相邻路由器才有可能成为邻居。
2)对于Level-1的路由器来说,Area ID区域号必须一致。
3)链路两端的ISIS接口的网络类型必须一致。
4)相同的MTU值。
5)只有同一网段的相邻路由器才有可能成为邻居。
6)相同认证。
7)在P2P网络中,system-id长度要一致,最大区域地址数要相同。
(2)IS-IS邻居状态
与OSPF协议不同,IS-IS协议一共定义了三种邻居状态,如下所示:
1、Down:邻接关系的初始状态。没有收到邻居Hello包时处于Down状态。
2、Initiated:收到邻居Hello包(IIH),但是在Hello包中没有发现自己的信息(报文中的邻接列表未包含路由器自身的SystemID),也称为one-way状态。
3、Up:收到邻居Hello包(IIH),并发现自己的信息(邻接列表中包含路由器自身的System ID)。
可以看出,IS-IS仅仅根据Hello包的交互情况来定义自己的状态,并没有链路状态信息的相关状态。
(3)IS-IS邻居建立过程
1)广播型链路邻居关系建立
在默认情况下是三次握手,但是可以修改为两次握手方式。在广播型链路上,IS-IS协议的目的组播地址:
L1级别的为0180-C200-0014
L2级别的为0180-C200-0015
在广播型链路上,IS-IS邻居的建立采用三次握手机制,流程如下:
R1及R2通过千兆以太接口互联,这两台直连的Level-1路由器建立邻接关系的过程如下:(上左图)
- 在Down状态下,R1组播发送Level-1 LAN IIH(LAN Hello报文),此报文中邻接列表为空。
- R2收到此报文后,检测到neighbor字段不包含本地MAC地址,将邻接状态标识为Initial。然后,R2再向R1回复Level-1 LAN IIH,此报文中标识R1为R2的邻接。
- R1收到此报文后,检测到neighbor字段中包含了本地的MAC地址,将自己与R2的邻接状态标识为Up。然后R1再向R2发送一个标识R2为R1邻接的Level-1 LAN IIH。
- R2收到此报文后,将自己与R1的邻接状态标识为Up。这样,两个路由器成功建立了邻接关系。
- 广播网络中需要选举DIS,在邻接关系建立后,路由器会等待两个Hello报文间隔,再进行DIS的选举
1、R1先在GEO/O/0接口上激活了IS-IS,缺省时该接口的网络类型为Broadcast,由于R1是Level-1路由器,因此GEO/O/0接口的Level为Level-1,它将在该接口上周期性地发送Level-1 LAN IIH,这些PDU以组播的形式发送,目的MAC地址是0180-c200-0014,该Level-1 LAN IIH中记录了R1的系统ID(0000.0000.0001),此外,还包含多个TLV,其中区域地址TLV记录了R1的区域ID(49.0012)
2、R2在其GEO/O/0接口上收到了R1发送的Level-1 LAN IIH,它会针对PDU中的相关内容进行检查(例如检查对方与自己是否处于相同的区域),检查通过后,R2在其IS-IS邻居表中将R1的状态设置为Initial(初始化),并在自己从GEO/O/0接口发送的Level-1 LAN IIH中增加IS邻居TLV,在该TLV中写入R1的接口MAC地址,用于告知R1:“我发现你了”
3、R1收到该Level-1 LAN IIH后,在其IS-IS邻居表中将R2的状态设置为Up,然后在自己从GEO/O/0接口发送的Level-1 LAN IIH中增加IS邻居TLV,并在该TLV中写入R2的接口MAC地址。
4、R2收到该IIH后,在其IS-IS邻居表中将R1的状态设置为Up。如此一来,两台路由器的IS-IS邻居关系就建立起来了邻居关系建立起来之后,R1与R2依然会周期性交互IIH,LSP的交互及LSDB同步过程也将在邻居关系建立起来之后进行。
此外,在R1及R2的邻居关系建立过程中,DIS也会被选举产生LSDB完成同步后,DIS会周期性地在该广播网络中泛洪csNP。
本例描述的是级别-1邻居关系的建立过程,级别-2的情况类似,只不过设备之间使用级别-2局域网IIH建立邻居关系,并且该PDU的目的MAC地址是另一个组播MAC:0180-c200-0015.
在广播链路上,使用LAN IIH报文执行三次握手建立邻居关系。如下左图:
- RTA发送IIH报文,报文中包含自己的系统ID,邻居状态为:null(不知道邻居是谁),
- RTB接收到了报文之后,发现RTA发送过来的报文里面没有自己的系统ID,RTB进入初始化状态(initialized),然后给RTA发送自己IIH报文,里面包含了自己的系统ID,并宣告邻居是RTA,
- RTA收到之后进入UP状态,并回复IIH报文,RTB收到之后进入UP状态,此时邻居关系建立完成。然后进行DIS选举。
只有收到邻居发过来的Hello PDU有自己的system ID才会up,排除了链路单通的风险。
2)P2P链路邻居关系建立
在P2P类型,IS-IS协议的目的组播地址:0900-2B00-0005。
(如上右图)与广播型链路稍有区别,P2P链路上建立IS-IS邻居可以采用根据配置采取三次握手或者两次握手的方式建立IS-IS邻居关系。
在P2P网络中,当路由器采用两次握手建立邻居关系时,步骤非常简单,只需要进行两次的报文交互即可(两次握手),两次握手只要路由器收到对端发来的Hello报文,就单方面宣布邻居为up状态,建立邻居关系,不过容易存在单通风险。
P2P链路上,当采用两次握手建立邻接关系时,只要路由器收到对方的Hello包,状态就处于UP状态。邻居建立更快,但是可靠性较差。
在接口模式上执行命令:isis ppp-negotiation 2-way //接口邻接关系建立方式改为两次握手
在接口模式上执行命令:isis ppp-negotiation 3-way
当对端路由器使用两次握手时,本端也会兼容对端路由器的两次握手机制。本端链路采用三次握手机制与对端建立邻接关系,但是不兼容对端两次握手建立邻接关系方式。
在接口模式上执行命令:isis ppp-negotiation 3-way only
在RFC3373中,默认P2P采用了三次握手的方式。通过三次发送P2P的IS-IS Hello PDU最终建立起邻居关系,与广播链路邻居关系的建立情况相同。
方式 | 建立邻居形式 | 优\缺点 | 可靠性 |
Way 方式 | 只要设备收到IS-IS Hello报文,就会单方向建立起邻居关系 | 缺点:当链路状态反复波动引起CSNP报文丢失,导致LSDB在一个完整的LSP报文更新周期内不能达到同步。 当路由器间存在两条及以上的链路时,如果某条链路上到达对端的单向状态为Down,而另一条链路同方向的状态为Up,路由器之间还是能建立起邻接关系。导致没有检测到故障的路由器在转发报文时仍然试图通过状态为Down的链路导致报文丢失。 | 低 |
3-way方式 | 通过三次发送P2P的IS-IS Hello PDU最终建立起邻居关系 | 优点:保证在双方状态都为Up时建立邻居,实现报文安全传输。 | 高 |
3)建立邻居方式判定
那么运行IS-IS协议的路由器是如何判定对端如何与自己建立邻居呢?
如果采用两次握手建立邻接关系,则Hello报文的TLV字段不会出现P2P Adjacent State字段,而当采用三次握手建立邻接关系时,Hello报文的TLV字段会出现P2P Adjacent State字段。凭借P2P Adjacent State字段,就可以通过对端发送的Hello包从而判定对端建立邻居的方式了。
当采用三次握手方式建立邻居时发送的Hello数据包:
当采用两次握手方式建立邻居时发送的Hello数据包:
2、第二步:链路状态数据库同步(链路信息交换)
当邻居状态UP后,开始进行LSDB同步,发送CSNP和PSNP两种协议报文来同步,请求以及确认链路状态信息(承载的是链路状态信息摘要),而链路状态信息的详细拓扑和路由信息是由LSP报文传递。(与OSPF不一致;OSPF进行LSDB同步是需要建立邻接关系,而ISIS是直接进行LSDB同步,不涉及邻居状态的改变)
链路状态信息的载体
1、LSP PDU——用于交换链路状态信息
实节点LSP
伪节点LSP(只在广播链路存在)
2、SNP PDU——用于维护LSDB的完整与同步,且为摘要信息。
CSNP(用于同步LSP)
PSNP(用于请求和确认LSP)
协议报文都分为Level-1和Level-2两种,在MA网络中所有协议报文的目的MAC都是组地址:
Level-1地址为:0180-C200-0014
Level-2地址为:0180-C200-0015
(1)广播网络(MA)中LSP的同步过程
广播网络中新加入路由器与DIS同步LSDB数据库的过程:(上左图)
假设新加入的路由器RTC已经与RTB(DIS)和RTA建立了邻居关系。
建立邻居关系之后,RTC将自己的LSP发往组播地址(Level-1:01-80-C2-00-00-14;Level-2:01-80-C2-00-00-15)。这样网络上所有的邻居都将收到该LSP。
该网段中的DIS会把收到RTC的LSP加入到LSDB中,并等待CSNP报文定时器超时(DIS每隔10秒发送CSNP报文)并发送CSNP报文,进行该网络内的LSDB同步。
RTC收到DIS发来的CSNP报文,对比自己的LSDB数据库,然后向DIS发送PSNP报文请求自己没有的LSP(如RTA和RTB的LSP就没有)。
RTB作为DIS收到该PSNP报文请求后向RTC发送对应的LSP进行LSDB 的同步。
注意:MA网络CSNP报文只由DIS组播发送,时间默认为10秒。
举例说明步骤
A、B图书馆的合作越来越大,并确立了以图书馆B为老大的联盟(DIS)老大负责维护发送书籍清单等任务,这时C图书馆也加入了进来(MA网络)。
这时图书馆A和B的图书数据库已经同步(LSDB同步),图书馆C加进来之后,为了表达诚意,直接给老成员A和B送了自己独有的实体书(LSP),老大B收到了书之后,将书籍加入到联盟的图书数据库中(将RTC的LSP信息加入到LSDB中),然后为了联盟的共同稳定发展,老大定期(10s)在联盟内部发送书籍清单(CSNP),来保证三家图书馆的书籍都是全的。
由于图书馆C是刚加入进来的,他还没有A、B的书籍,当收到老大B发送的书籍清单之后(CSNP)C看了清单,列举了C没有的书籍,然后给老大发送请求(PSNP),老大知道了之后,就给C寄出实体书籍(LSP:注意:这里的是伪节点LSP)
(2)点到点网络(P2P)中的LSP同步过程
(上右图)建立邻居关系之后,RTA与RTB会先发送CSNP给对端设备。如果对端的LSDB与CSNP没有同步,则发送PSNP请求索取相应的LSP。
假定RTB向RTA索取相应的LSP,此时向RTA发送PSNP。RTA发送RTB请求的LSP的同时启动LSP重传定时器,并等待RTB发送PSNP作为收到LSP的确认。
如果在接口LSP重传定时器超时后,RTA还没有收到RTB发送的PSNP报文作为应答,则重新发送该LSP直至收到RTB的PSNP报文作为确认。
注意:P2P网络CSNP报文只发送一次,邻居建立之后就立刻发送。
举例说明步骤
- B两个图书馆(RTA、RTB)建立了友好的合作关系(建立邻居),两个图书管商量着合作,A图书馆历史书较多,B图书馆小说较多。两家想要互相补充一下各自所缺的书籍。
这时A图书馆首先发送给B图书馆一份书籍清单,清单上包含了A图书馆所有的书籍名称(CSNP:摘要信息)告诉B,我图书馆所有的书都在这份清单上,你没有的向我拿我再给你寄过来实体书。
图书馆B收到之后,列出了B没有的书,然后发送请求告诉图书馆A这些书是我没有的(PSNP请求)。
图书馆A知道之后,就按照B发送过来的清单拿来实体书,然后打包发送给图书馆B(LSP:全部信息),图书馆B收到实体书之后,非常的开心,发送了一份感谢信给图书馆A(PSNP:确认),但是由于某些原因,感谢信丢失了。
图书馆A没有收到。过了一段时间之后(LSP重传定时器超时)图书馆A认为B没有收到A送出去的实体书,出于担心,A又重新寄了一份实体书过去(重新发送LSP),图书馆B又收到了一份实体书,再次很感谢,这时他也明白了上次的感谢信A应该是没有收到,于是重新发送了一份感谢信给A(重传PSNP:确认)
对应的OSPF中也可拿这个举例,原理不变,只是报文变了一下而已。
(3)IS-IS LSP新旧判断
当一个IS-IS路由器收到一条本地已经存在的LSP时,就要进行LSP新旧判断机制,然后根据判断结果进行不同的处理。
LSP新旧判断采用如下机制:
1、若收到的LSP序列号大于本地LSP,就替换为新报文,并广播新LSP内容;若收到的LSP序列号小于本地的LSP序列号,则不接受该报文,同时向收到该报文的接口发送本地LSP报文。
2、若收到的LSP和本地的LSP序列号相等,则判断剩余老化时间是否为0,若为0,则表示为最新的LSP。剩余老化时间为0的LSP常常被产生该LSP的路由器用来删除一条LSP。但是,不能使用这种方式修改一条LSP。
PS:在默认情况下,ISIS路由器每隔15分钟(即900s)周期性的泛洪更新LSP,同时序列号(seq)加1。而ISIS一条LSP的老化时间默认为20分钟(即1200s)除了要等待20分钟外,还要等待60s的零老化时延。重传时间5s。
3、若收到报文序列号相同,且Remaining Time都不为0,则比较checksum,越大越优先。
4、若checksum相同,则认为是相同的LSP。
LSP的处理机制
产生新的LSP的原因:
ISIS相关接口UP或down或邻居UP或者DOWN
引入的IP路由发生变化
区域间的IP路由发生变化
接口被赋予了新的metric值
周期性更新
3、第三步:路由计算
SPF计算和OSPF基本一样的,但ISIS算法分离了拓扑结构和IP网段,加快了网络收敛速度。
当网络达到收敛状态,即完成了LSDB同步的过程,IS-IS就将使用链路状态数据库中的信息执行SPF路由计算,得到最短路径树,之后利用该最短路径树构建转发数据库,即建立路由表。
IS-IS协议使用链路开销计算最短路径,在华为路由器上,接口的缺省开销值为10,且可以通过配置修改。一条路由的总代价为沿此路由路径方向的每一个出接口的开销值简单相加。到达某个目的地可能存在多条路由,其中代价最小的为最优路由。
对于Level-1路由器来说,路由计算具有另外一个功能:为区域间路由选择计算到达最近的Level-2路由器的路径。当一台Level-1-2路由器与其他区域相连时,路由器将通过在它的LSP中设置ATT位为1来通告这种情况,对于Level-1路由器,路由计算过程将选择开销最小的Level-1-2路由器作为它区域间的中介路由器。
(1)IS-IS的计算特点:
在本区域内路由器第一次启动的时候执行的是Full-SPF算法。
后续收到的LSP更新,如果是部分拓扑的变化执行的iSPF计算。
如果只是路由信息的变化,执行的就是PRC计算。
由于采用拓扑与网络分离的算法,路由收敛速度得到了加强。
(2)SPF计算过程
Step 1:单区域LSDB同步完成
Step 2:生成全网拓扑结构图
Step 3:以本节点为根生成最短路径树
Step 4:默认跨越每个节点开销一样
1)Level-1路由器的路由计算
R1是Level-1路由器,只维护Level-1LSDB,该LSDB中包含同属一个区域的R2、R3、R1自己产生的Level-1 LSP。
R1根据LSDB中的Level-1LSP计算出Area49.0001内的拓扑,和到达区域内各个网段的路由信息。
R2及R3作为Area49.0001内的Level-1-2路由器,会在它们向该区域下发的Level-1LSP中设置ATT标志位,用于向区域内的Level-1路由器宣布可以通过自己到达其他区域。R1作为Level-1路由器,会根据该ATT标志位,计算出指向R2或R3的默认路由。
2)Level-1路由器的次优路径的问题
缺省时,R1只能通过指向R2或R3的默认路由到达区域外部,但是R1距离R2和R3路由器的Cost值相等,那么当R1发送数据包到192.168.20.0/24时,就有可能选择路径2,导致出现次优路径。
4)Level-1-2路由器的路由计算
R2及R3都维护Level-1 LSDB,它们能够通过这些LSDB中的LSP计算出Area 49.0001的路由。
R2及R3都维护Level-2 LSDB,它们能够通过这些LSDB中的LSP计算出Area 49.0002的路由。
R2及R3将到达Area 49.0001的路由以Level-2 LSP的形式发送到Area 49.0002。
5)Level-2路由器的路由计算
R4及R5作为Level-2路由器,只会维护Level-2 LSDB,它们能够根据该LSDB计算出到达全网各个网段的路由。
整个华为数通学习笔记系列中,本人是以网络视频与网络文章的方式自学的,并按自己理解的方式总结了学习笔记,某些笔记段落中可能有部分文字或图片与网络中有雷同,并非抄袭。完处于学习态度,觉得这段文字更通俗易懂,融入了自己的学习笔记中。如有相关文字涉及到某个人的版权利益,可以直接联系我,我会把相关文字删除。【VX:czlingyun 暗号:CSDN】