ISIS是一個分級的鏈接狀態路由協議,基於DECnet PhaseV 路由算法。ISIS可以在不同的子網上操作,包括廣播型的LAN、WAN和點到點鏈路。ISIS是一個鏈接狀態協議,實際上與OSPF非常相似,它也使用Hello協議尋找鄰居節點,使用一個傳播協議發送鏈接信息。ISIS消息使用序列號,但它只是一個簡單的加法計數器。當計數器計到最大值時,一個ISIS路由器沒有別的選擇,只能偽造一個錯誤觸發對所有舊信息的刷新。然而,因為序列號有3 2 比特長,使得到達最大值之前有很大的序列號空間,所以這不是什么問題。但是,至少存在兩個技術問題:ISIS使用一個小的度量值(6 比特),嚴重限制了能與它進行轉換的信息;而且鏈接狀態也只有8 比特長,路由器能通告的記錄只有256個。一個非技術問題是ISIS受OSI約束,使得與OSPF相比它的發展比較緩慢。這個限制的原因是由於SPF的要求;但現在的Wide-metric使這個范圍變成24位的擴展解決了這個問題。 但現在的ISIS在非OSI即RFC方面(Integrated)ISIS有了很多的擴展使得他的發展比OSPF更容易實現對新的要求的支持如IPV6或者TE而且更簡單易實現
一個路由器是intermediate system(IS),一個主機就是end system(ES),在一個主機和路由器之間運行的協議叫ES-IS,路由器與路由器之間運行的協議是IS-IS
一個subnetwork屬下的接口叫:subnetwork point of attachment(SNPA),它只是一個概念上的東西,實際上它是一個subnetwork提供的服務點,由SNPA定義的,不是實際的物理界面,SNPA的概念特性對應於子網的概念特性。
PDU:就是一個OSI層上的一個節點到它的另一端(peer)的對應層上的節點,所以一個幀也叫做Date Link PDU(DLPDU),也因此一個網絡層的packet也叫做network PDU(NPDU),這個date unit功能類擬於OSPF的LSA,我們稱它為Link State PDU(LSP),與LSA不同的是它封裝在OSPF報頭之后,然后才到IP數據包。
an LSP is itself a packet.
=====================
ISIS AREAS
=====================
ISIS和OSPF一樣建立一個雙層分級結構拓撲,但和OSPF不同的是ISIS划分area是連接中,也就是說兩台路由器中間來划分area
L1_Router---------|----------L2_Router
以上的豎線就是ISIS划分的area的地方,而OSPF則不是,它是在一個路由器當中划分的,一個路由器中只要有兩個接口接到不同的area,這個路由器就叫做ABR
area0-------ABR_Router------area1
ISIS中對路由器的稱呼又和OSPF又所不同,它只有三類,一個是完全在一個area內的,OSPF叫內部路由器,ISIS叫L1,而OSPF的ABR在ISIS中叫做L1/L2,還有一類是backbone里的路由器,全都叫做L2,這樣,L1/L2路由器就會維護兩個line state datebase,而與ABR不同的是,L1/L2路由器不通告L2的路由給L1,因此所有的L1路由器永遠不會知道area外的路由,這種情況和OSPF的tutally stubby area是非常像的,如果L1內的路由目的地是在自已的area以外,這個L1路由將被轉發到一個L1/L2路由器上,而L1/L2路由器傳送一個L1的路由到另一個area時,它在LSP設置一個bit叫Attached(ATT) bit9來告訴別的L1路由器這條路由可以到達。
OSPF用spf算法來計算一個area內的路由器,而ISIS在這一點上也是不同的,它在區域間 (inter-area) 時所使用的方法也是LS算法。
ISIS中L1/L2路由器維護兩個分離的L1和L2的link state datebase,將計算完全獨立的L1和L2拓撲自已SPF tree。
ISO 10589 中說ISIS路由器可以使用virtual link來連接物理分離的area到backbone,這和OSPF是一樣的,但是這個功能CISCO就做不到的,反而別的路由器生產商可以做到。
=================
AREA ID
=================
一個L1,也就是說完全在一個area內的路由器,它的area ID或者說area address是與該路由器的全部參數有關,也就是說不是什么一個接口的最高IP地址就能決定一個area ID,這和OSPF又是大大的不同。ISIS可以有上限為三個的area address,這在area transitions的是候是很有用的。
在一個domain中,一個ISIS的路由器一定要有一個唯一標識,這可以用system ID來完成,這個system ID與OSPF的router ID是一樣的,area ID和sytem ID可以用一個地址,==========both the area ID and the system ID are defined on an ISIS router by a single address the network entrigy title。
注:system ID就是router ID,在area內的時候做識別用,area ID則在area之間做識別用。
=================
Network Entity Titles
=================
雖然ISIS使用TCP/IP,但它仍然是CLNP協議,因而ISIS中跑的數據包叫CLNS PDUs,這樣子就算一個完全是IP環境,一個ISIS的路由器也一定有ISO地址,ISO地址就是一個network address,ISO 8348.10 描述network entity titles,長度可以是8-20 字節(octetes)它描述該設備area ID and system ID,
注:NET是為一個ISIS路由進程指定的區域地址和系統標識。該參數可以是一個地址,也可以是一個名字。
ISO為不同的系統設計了很多東西給Network entity titles,這個NET的地址格式可以有很大的靈活性和擴展性。NET可長可短,包含的信息可多可少,這要看你的需要,但是有一點要記住,在一個routing domain里,system ID的長度一模一樣!一般來說是6個字節,也一般使用標識的接口的MAC的地址。當然,system ID在一個routing domain一定要是是獨一無二的。
==================
ISIS Functionla Organization
==================
OSI model 中的network layer是由兩小layer組成的,一個是subnetwork independetn sublayer, 下面的半層是subnetwork dependent sublayer,根據名字來看就知道dependent sublayer與下面的date link layer有着莫大的關系,而independent layer則獨立的layer。當然,network layer要再細分會分成更復雜,但這時不細講了。
subnetwork dependent functions
它把不同類型的date link的幀規律化,再上交給dependent layer
下面是它的具體功能:
-從指定的不同的subnetwork接收或者發送PDUs。
-在subnetwork交換ISIS的hellp PDUs來發現鄰居和建立adjacentcies,
-維護adjacencies
-鏈路信號分離,或者說傳送OSI的PDUs的過程和傳送IP數據包的過程
OSPF中定義了四種網絡類型,而ISIS中只有兩個,呵呵,這就太好了,總算看到比OSPF簡單的東西了,以前在看OSPF四種拓撲時曾暈倒數次,這下對這里應該快速瀏覽一下就行了吧。
ISIS只有兩種類型,一種是broadcast subnetwork 和 point to point 或者說是 general topology subnetworks,
broadcast subnetwork 就算於OSPF的multi-access
p to p 就是nonbroadcast, subnewwork 可以是 PVC,像T1,又或者用動態來建立,如x.25的SVCs。
好了,這里拓撲就已經講完了
======================
neighbors and adjacencies
======================
ISIS用交換ISIS hello PDUs發現鄰居,10秒發一次,這和OSPF又是一樣的 ,改這個參數用 isis hello-interval 命令
雖然這個hello PDUs在broadcast和p to p 這兩種拓撲中略有一點不同,但是本質信息卻是相同的,如自已的識別,能力,發hello的接口參數。如果兩個鄰居各自能力和接口參數協商好了,那他們就成為adjacent了。
ISIS的L1和L2的鄰居是分開來========isis froms separate adjacencies for L1 and L2 neighbors. L1 router from L1 adjacencies with L1 and L1/L2 neighbors, and L2 router from L2 adjacencies with L2 and L1/L2 neighbors. neighboring L1/L2 router from both an L1 adjcacnecy and an L2 adjacency. 一個L1和L2路由器不會adjacent關系
一旦adjacency的關系建立后,hello PDUs就扮演keepalive的角色,呵呵,好熟悉喔
關於hold time 的概念下面舉一個例子,A路由器在hello中還有一個hold time的參數,通知它的鄰居B在宣告A路由器完蛋前需要等等下一個hello的時間有多久,如果我沒記錯的話OSPF好像是4次。這么說他比OSPF收斂要快10秒了。改這個參數用 isis hello-multiplier,呵呵,命令太多,比較難記,不過很多命令都有規律,一般改OSPF的東西前面的命令是 ip ospf,不懂時打個?號就行了,而改ISIS的東西用 isis ? 試試
如果想看ISIS的neighbor表可以用:show clns is-neighbors
在這個命令中
system id 和 interface就不說了,state 可以是 init 表明鄰居是adjacent,priority參數是選DR時用的(broadcast network)
circuit ID的意思是這樣的,它的第一個字節說的是ISIS接口的唯一標識,如果這個接口是在一個broadcast multiacess network里,那ciscuit ID 將與DR的system ID並置,就是接在一起的意思。和這個全部東西加起來就是大家所知的LAN ID,(又來一個新的ID,faint)或者叫它pseudonde(匿名)ID更好一些,下面舉個例子
circuit ID是0000.0c76.5b7c.02
system ID是0000.0c76.5b7c
pseudonode ID是02
最后一個是adjacency的格式:
intergrated ISIS的格式永遠是phase v OSI/DECnet phase V.
indicating OSI/DECnet phase v. the only other adjacency format is DECnet phase IV.
今天狀態不錯,看了好多,雖然ISIS看過一次,但是這樣細看時才發現,原來很多好東西都漏掉了,這樣看真是很慢,但是很扎實,以后只要略復習一兩次就可以記得很牢,看來磨刀不誤砍柴功是有點道理的,cisco的東西好像很多,多得不可能看完,但其實很多東西都是重復的,只是高級的東西往往要把初級的先講一次,所以厚厚的資料往往令人心底發寒,還加上網絡的東西不是獨立的,所以講某些知識點的時候常要涉及到別的知識,雖然這些別的知識可能已經講過,但為了能完整的介紹該知識點,只好把所有涉及的東西都講一遍,所以這也是造成書厚的原因,所以學一個就要吃掉一個,這樣以后就可以跳跳跳了。否則基礎不好,以后動則牽動你那不牢的根基,學習來會倍感無趣,最終變成為了該死的前錢途而學,這樣本來看書的享受時間會變成強迫式的惡性循環,那你的路就難走了。不過我覺得我說的比轉適合有一定路由器操作經驗的人,沒有這類經驗的人最需要的就是實驗環境,否則很難吃掉知識點,就算是吃了也消化不了,所以轉化知識成為身體的一部份,這才是最最最緊迫的。
========================
Designated Routers
========================
在broadcast multi-access中,ISIS選舉一個DR,這和OSPF是一樣的,ISIS定義一個路由器為一個虛的點(pseudonode), 這個虛的點和OSPF的DR是一樣的,所有的路由器都向這個點發送通告,也就是說所有的路由器都是隸屬於虛點的。
ISIS在broadcast multiaccess里和所有的neighbor 建立adjacendies關系(不止和DR)。每一個路由器multicasts它LSPs給自已的所有的neighbor,DR使用一個叫做Sequence number PDUs (SNPs)的PUDs系統來確保LSPs的flooding的可靠傳達。
ISIS的DR選擇很簡單,接口有一個L1的priority和L2的priority,范圍是從0到127,cisco的缺省是64,要改這個參數用 isis priority 命令
路由器在它的hello里塞入priority,L1的塞進給L1 hello,L2的塞給L2的hello,如果priority設置為0,那這個路由器永遠不能成為DR,又因為一個接口有兩個priority,所以他可能成為L1的DR,而在L2只是普通角色,又或者成為L2的DR,在L1只是普通角色。
把circuit ID附到system ID上是很有必要的,因為一個路由器可以做為幾個area內的DR,加上這個后才能保證到LAN ID是網絡內唯一標識。
ISIS的DR選擇非常簡單,比OSPF要簡單得多,首先,ISIS沒有BDR,如果DR完蛋,新的DR會馬上選舉,而且OSPF中DR一旦產生就不會更改(failed除外),就算是后加的路由器的優先權比原來的DR要高,也不能篡位,但是ISIS就不同了,只要加一個優先權更高的,甚至優先權一樣,但是system ID高一點點,都將奪取DR的位置,隨着這個新的DR的產生,新的LSPs就會flooded,這就是所謂的一朝君主一朝臣了。
========================
subnetwork independent functions
========================
這個層定義一個CLNS如何傳送數據包貫穿CLNP的網絡和這些服務是如何被提交到傳輸層的。這一共是四個過程,update,decision,forwarding和receive process forwarding 和 receice process 沒有什么好說的了,只是轉發和接收PDUs而已,沒有什么希奇的。
the update process
------------------------
update負責建立最新的L1和L2 link state datebase,L1 LSPs flooded到整個area,L2 LSPs flooded給所有的L2的adjacencies,這個范圍在 IS-IS PDU formats 里有描述的。
每一個LSP包括一個 remaining lifetime, a sequence number and Checksum. remaining lieftime和OSPF中有所不同的是,LSA是從0開始增加到最大的數,而LSP是從最大的數減少到0,ISIS的最大數為1200,也就是20分鍾,這個數字放在link state datebase,這個值會周期性更新,refresh時間是15分種,在lifetime還沒有expire就Refresh,前后約25%左右的lifetime就reflesh,如果兩個時間相差太大,LSP的lifetime到了0,還沒有reflesh,那LSP在link state datebase中會保持到60秒,這中做ZeroAgeLifetime.
這段話說當一個router收到的LSP的Checksun是錯誤的時候,他會更新/清除這條他的datebase中的LSP-通過把這個LSP的Remain Lifetime值設置為0並把這條LSP flooding出去。 這個purge的行為使得產生這個LSP的Router收到這條remain-lifetime 置0的LSP后發出一條新的LSP。 這是ISIS與OSPF Purge的一個區別,在OSPF中只有產生這條LSA的Router才能Purge這個LSA, 而在ISIS中任何收到這個checkSum錯誤的router都可以Purge 這個錯誤的LSA by set remain-lifetime=0
a error-prone subnetwork, 允許接收的路由器開啟清洗這個動作會大大增加越LSP traffic,為了克服這種事,加入ignore-lsp-error命令,這樣接收的路由器就會忽視這個錯誤的LSP,而不是take the action of purge。因為LSP中有SNP(Sequence Number)所以接收路由器知道有一個LSP沒有收到。
sequence number是一個無符號的,32 bit 線性號碼,當一個路由器開始啟動一個LSP,一個sequence number設成 1 , 同時,每一個隨后的LSP都以加 1 來增長,當增長到最大的時候(0xFFFFFFFF),ISIS 會關閉它最少21分鍾(maxage+ZeroAgeLifetime),這樣來冼掉在datebase里的舊的LSP。
p to p 時,路由器直接傳L1和L2 LSPs到鄰居,broadcast subnetwork, LSPs使用multiast到所有的鄰居,frame 攜帶的L1 LSPs有一個MAC目標地址0180.c200.0014,叫做All1ISs,L2的是0180.c200.0015,叫做All2ISs.
ISIS使用SNPs來承認和接收LSPs來維護link state datebase的同步。一共有兩類SNPs,一個叫partial SNPs(PSNPs), 另一個叫 complete SNP(CSNPs).點對點使用PSNPs來明確(explicitly)承認收到LSPs,這包括下面內容:
The LSPs ID
The LSP's Sequence Number
The LSP's Checksum
The LSP's Remaining Lifetime
在p to p subnetwork, 當一個路由器傳送一個LSP時,它設置一個周期性的timer叫minimum LSP Transmission intervval. 如要在路由器接收到一個PSNP的承認之前timer expire,一個新的LSP將被送出,CISCO的這個timer缺省值是5秒,更改這個timer用: isis retrnsmit-interval。
在broadcast subnetworks, 路由器不會對LSPs發送承認包,只是周期性multicasts一個CSNP來描述每一個在link state datebase 的LSP. 缺省的CSNP周期性間隔為10秒,更改這個timer用:isis csnp-interval, L1 CSNPs multicast 到 allL1lSs(0180.c200.0014), L2 CSNPs multicast 到 AllL2lSs(0180.c200.0015)
當一個路由器收到一個CSNP,它比較PDU里面的LSPs summarized,如果路由器有一個LSP和CSNP不匹配或者一個更新的LSP,路由器multicasts這個LSP到網絡,如果另一個路由器先傳送一個LSP,那它就不會發送和這個(收到)LSP一樣的LSP出去了,如果一個路由器的datebase沒有包括所有的CSNP內的LSP列表,或者如果datebase的LSP比較老,路由器multicase一個PSNP,列出它需要的LSPs,雖然PSNP是multiaccess, 卻只有DR才會回復。
ISIS有一項有趣的能力,如果它的內存不足或者不能繼續記錄完全的link state base,它會發出信號通知別的路由器,這種內存超載的情況也許是因為area允許的網絡過大的結果,如果一個路由器不能完成全部的link state datebase,它將設置一個自已的LSP的bit來標示,這就叫做OverLoad(OL)bit
The OL bit 告訴路由器可能無法做出正確的路由決定,因為它的datebase還沒有完成,而別的路由器仍然傳輸數據包給這個路由器,但是不使用它來傳輸數據,除非這個OL的bit被清除掉,因為OL bit令到路由器的hop along不能繼續,也就是說被標識為OL的路由器不能做為下一跳,因此這個OL bit常常被人叫做hippiby bit.
內存的分配應該夠L1和L2的datebase用,但是一個路由器可以一層(L1或者L2)在超載環境,而正另一層在正常的環境,如果你想設置ISIS為一個終端節點,你可以手動設置手動設置OL,命令是:set-overload-bit
show isis database 顯示ISIS的link state database匯總
===========================
The Decision Process
===========================
一旦update process建立了link state database, decision process就使用datebase里的信息來計算shortest path tree, 然后這條最短路徑樹來建立一個forwarding database(route table). L1路由和L2路由在這里是分開來計算的。
===========================
ISIS metrics
===========================
ISO 10589指定下列metrics(一個是必需的,三個是可選的)做為ISIS來計算最短路徑
Default: 這個metric一定要被所有的ISIS支持和明白
Delay: 這個可選的metric顯示一個subnetwork的通過延遲
Expense:這個可選metric顯示一個subnetwork的代價
Error: 這個可選metric顯示subnetwork的剩余錯誤問題,這有點像IGRP/EIGRP的reliability metric
每一個metric用0-63來表達,每一種metric都是用分開的單獨路由來計算的,因此,如果一個系統支持所有的四種metrics,SPF就要L1和L2計算四次,每一個到目的地的路由器SPF可能被反復計算,cisco只支持defualt metric。
cisco分配一個default metric 10 到所有的接口,不管是哪一類的接口,isis metric可以更改這個值,L1和L2可以分別被更改。
全部的路由代價是一個outgoing接口的各個metric的總和,最大可設為1023, this small maximum is frequently pointed out as a limitation of ISIS because it leave little room for metric granularity in largo internetworks. the flip side of this criticism, however, is that limiting the metric to 1023 makes the SPF algorithm more efficient
ISIS不止把路由器分成L1和L2,還分成internal or external。 內部路由的意思是目標在同一個ISIS routing domain內,外部路由的意思就是目標在ISIS routing domain以外,所以L2路由器總可以做internal or external,而L1只能永遠做internal.
如果有多個到某個目的地的可行性路由,L1路徑優先於L2的路徑,如果路徑支持可選的metric,則優先於缺省metric,(記住,cisco只支持缺省metric,因此這一條對CISCO不適用),在metric 支持的level,最低的優先,如果有多個同等cost的路徑在route table,CISCO的ISIS可以使用load balancing,最多可以是六條。
在剛才update process提到的LSP ID的最后一個octet,叫做LSP number,用來跟蹤LSP的碎塊,decision process之所以要留意LSP number主要是因為以下幾點
首先,如果一個datebase中沒有描述帶有LSP number 為0 的LSP 和一個非0的lifetime,decision process將不會處理任何從相同系統來的,帶有非0的LSP number,以下舉個例子,如果一個LSP ID是0000.0c76.5b7c.00-01,和0000.0c76.5b7c.00-02存在datebase中,但是datebase沒有LSP ID 為0000.0c76.5b7c.00-00的LSP,那前面的兩個LSPs就不會被處理,這個方法確保殘缺不全的LSP破壞routing decision的精確性。
decision 只接受那些來自帶有LSP number 為 0 的LSP,如下面的信息可被接受
datebase Overload bit的設置
IS type field的設置
area address option field的設置
就是說如果收到的LSP的第一個包如果不是第一個FRAGMENT的話,就會被忽略, 例如 49.0001.0010.0100.1001.02-00 (01,02....ff) 這個LSP就是被Fragment的因為這個LSP里的內容大於MTU的話就會被fragment. 只有第一個即最后一位是-00的LSP的fragment的setting才被接受(this section from playfair)