術語
中間系統IS:一台路由器
ES:一台主機
ES-IS:主機與路由器之間的通信協議
IS-IS:路由器之間用來相互宣告的協議
SNAP:與一個子網相連的接口稱為子網連接點
PDU協議數據單元:從一個節點的OSI層到另一個節點對等的OSI層的數據單元
NPDU:一個數據包就是一個網絡層協議數據單元
鏈路狀態PDU:執行與OSPF協議中的LSA等價功能的數據單元
10.1.1 IS-IS區域
一個中間系統可以是一台L1路由器,一台L2路由器,或L1/L2路由器
L1路由器:類似OSPF中非骨干內部路由器
L2路由器:類似OSPF中的骨干路由器
L1/L2路由器:類似OSPF中的ABR
cisco中使用命令is-type配置L1-only,L2-only或L1/L2類型,缺省情況下為L1/L2

區域間通信都必須經過L2區域,防止區域間路由選擇環路
缺省情況下L1/L2路由器不需要通告L2類型路由給L1類型路由器,因此,一台L1路由器無法知道自己區域外的路由,類似於OSPF中的完全末梢區域。
當L1/L2路由器發送第一次LSP進入到一個區域時,它將通過在LSP中設置“區域關聯位(Attached,ATT)”的二進制位通知其他L1路由器它可以到達其他區域
10.1.2 網絡實體標題 Network Entity Title,NET
> 缺省情況下,一台路由器至多有三個區域地址,利用命令max-area-address,可增加至254個
> 每台IS-IS路由器必須有一種在它所在的路由選擇域內唯一標識本身的方法,即系統ID
> 系統ID,類似OSPF中的router-ID。
>在一台ISIS路由器上,可以通過單一的地址同時定義區域ID和系統ID,即網絡實體標題 Network Entity Title,NET
一個NET地址的長度范圍可以是8-20個八位組字節,並可以描述為區域ID和一台設備的系統ID

NSAP選擇符(SEL):1個八位組字節的字段,設置為0x00
一個ISO地址的SEL設置為0x00時,這個地址就是一個NET地址,指明某個結點網絡層本身地址

無論是何種格式的地址,需要滿足以下規則:
*NET地址必須是以一個單個八位組的域開始,如:47.xxx
*NET地址必須是以一個單個八位組的域結束,並且應該設置為0x00(xxx.00)
如果SEL是非零的,IS-IS也會起作用,但是在一個CLNP/IP混合的路由器可能會出問題
*在思科路由器上,NET地址的系統ID必須是6個八位組字節
10.1.3 IS-IS的功能結構

網絡層由兩個子層組成:
子網獨立子層subnetwork indepent sublayer 為傳輸層提供一致的和統一的服務
子網依賴子層subnetwork dependent sublayer 為子網獨立子層的需求去存取數據鏈路層提供的服務
1.依賴於子網的功能
依賴於子網的功能是指子網的功能依賴於它的下層。
(1)IS-IS網絡類型
定義了兩種網絡類型:
廣播型子網:支持多路廣播的多路訪問數據鏈路
點到點或一般拓撲子網:可能是永久鏈路或動態鏈接鏈路
(2)鄰居路由器和鄰接關系
IS-IS路由器是通過交換IS-IS Hello PDU數據包信息來發現鄰居並形成鄰接關系的
Hello數據包每隔10S傳送一次
一台L1-only和一台L2-only不能形成鄰接關系,缺省情況下,cisco為L1/L2路由器
區域ID對鄰接關系的影響,可應用以下規則:
>兩台L1-only路由器只有在它們的AID匹配時才能形成一個L1鄰接關系
>兩台L2-only的路由在AID不同時,也能夠形成一個L2鄰接關系
>一台L1-only路由器和一台L1/L2路由器只有在它們的AID匹配時才能形成L1鄰接關系
>一台L2-only路由器和一台L1/L2路由器即是它們的AID不匹配,也能形成一個L2鄰接關系
>如果兩台L1/L2路由器AID匹配,可以同時形成L1和L2類型的鄰接關系
>如果兩台L1/L2路由器的AID不匹配,只能形成L2類型的鄰接關系
一旦鄰接關系建立成功,Hello數據包將擔當keepalive保活功能
抑制時間(hold time):用來通知鄰居路由器在宣告這台路由器無效之前,應該等待多長時間去偵聽下一個Hello包。
cisco路由器,默認抑制時間是Hello時間間隔的3倍(30s)
cisco使用命令isis hello-multiplier改變
注:與OSPF差異
兩個IS-IS鄰居之間hello時間間隔和保持時間間隔不需要一致,每台路由器會認同鄰居所通告的保持時間
ISIS在路由器之間能夠交換Hello包,就認為形成了鄰接關系
IS-IS鄰居表 show clns is-neighbor

第六列 Circuit Id
電路ID Circuit Id 一個八位組字節的數字
>路由器用它來唯一的標識IS-IS接口
>如果該接口和一個廣播型多路訪問網絡連接,那么這個電路ID是和該網絡上的指定路由器的系統ID相連,稱為LAN ID,更為准確 把電路ID稱為偽結點ID(Pseudonode ID)。
例:如圖,與E0相連的鏈路的LAND ID為0000.0C76.5B7C.02
指定路由器的系統ID為:0000.0C76.5B7C
偽結點ID為:02
第七列 Format
對於集成ISIS,此格式永遠為Phase V,用來說明OSI/DECnet Phase V。另一個唯一格式是DECnet Phase IV
(3)指定路由器
每台ISIS路由接口都被指定一個L1類型的優先級和L2類型的優先級,范圍0--127
cisco對於L1和L2路由器,缺省為64
通過命令isis priority改變
如果優先級為0,表示最低的優先級,仍可以稱為DR路由器
對於非廣播型的接口,不需要選舉指定路由器,因此將優先級設置為0
選取:
1.擁有高優先級的路由器將會稱為指定路由器
2.如果路由器優先級相同,那么擁有在數值上具有最高MAC地址的接口的路由器將成為指定路由器
ISIS較之OSPF缺陷:
>ISIS協議不選取備份指定路由器。如果ISIS指定路由器失效,將選取新的指定路由器。
>ISIS指定路由器相較於OSPF的指定路由器很不穩定。
OSPF指定路由器不會發生搶占。
ISIS協議中,如果一台新的ISIS路由器比現有指定路由器有更高的優先級,或優先級相同,但有更高MAC地址,那么新的ISIS路由器將成為指定路由器
2.獨立於子網的功能
(1)更新過程
更新過程update process的職責是構建L1和L2的鏈路狀態數據庫
L1的LSP在整個區域內泛洪,L2的LSP在所有L2的鄰接內泛洪
每個LSP都包含一個剩余生存時間,一個序列號,一個校驗和
>剩余生存時間remaining life 是一個老化時間或使用期限,LSP的剩余生存時間是從最大生存時間開始,遞減到0,
ISIS的最大生存時間MaxAge為1200s
ISIS的刷新時間間隔為15min減去一個最大不超過25%的隨機抖動變量。
如果剩余時間減到0,那么這個過期的LSP還會在路由器的鏈路狀態數據庫中保留60s,稱為零老化生存時間ZeroAgeLifetime
在一個點到點的子網上,路由器將直接發送L1和L2的LSP給鄰居
在一個廣播型的子網上:
LSP將以組播的方式發送到它的所有鄰居路由器
攜帶L1 LSP的幀會有一個0180.c200.0014的目的MAC地址,稱為:AllL1ISs
攜帶L2 LSP的幀會有一個0180.c200.0015的目的MAC地址,稱為:AllL2ISs
序列號數據包SNP 用來了解LSP的接受情況和維護鏈路狀態數據庫的同步情況
部分序列號報文PSNP
完全序列號報文CSNP
在一個點到點的子網上,路由器通過PSNP確認每一個LSP是否收到,通過以下信息來描述正在被確認的LSP
LSP ID
LSP的序列號
LSP的校驗和
LSP的剩余生存時間
當一台路由器在一個點到點的子網上發送一條LSP時,它會設置一個周期為minimumLSPTransmissionInterval的計時器,cisco路由器的缺省值為5s,缺省值通常為最適合的值。
在一個廣播型子網上,指定路由器會周期的以組播的方式發送CSNP,用來描述鏈路狀態數據庫中的每一個LSP,缺省周期為10s
過載overload OL位
路由器如果不能完整地存儲鏈路狀態數據庫,那么它將會在所發送的LSP數據包中設置一個過載位
show isis database 顯示ISIS鏈路狀態數據庫摘要

第一列 LSP ID
有始發路由器的系統ID連接2個八位組字節組成
第一個八位組是偽結點ID,如果這個八位組是非零的,LSP則是由一台DR路由器始發的
第二個八位組是LSP的編號
LSPID后的星號* 表示這條LSP數據包始發於正在查看的數據庫所在的路由器
第二列,第三列 每一個LSP的序列號和校驗和
第四列 抑制時間
LSP的剩余時間,以秒計數,
第五列
每一個LSP的區域關聯為ATT;區域分端為Partition,P;過載位OL
ATT位:L2和L1/L2路由器設置ATT位為1來指明它們含有到達其他區域的路由
P位:指始發路由器有支持區域分段修復的能力,cisco不支持
OL位:OL位設置為1,可能是始發路由器正處於內存過載狀態。
(2)決策過程
一旦更新過程建立了鏈路狀態數據庫,決策過程就將使用數據庫中的信息去計算一個最短路徑樹
ISIS使用以下度量計算最短路徑(一項必須,三項可選)
缺省度量Default-----每一台ISIS路由器必須支持和理解的度量
時延度量Delay-------可選項,反映子網的傳輸時延
代價度量Expense----可選項,反映一個子網的成本代價
差錯度量Error--------可選項,反映子網的出錯概率
cisco只支持缺省度量
cisco路由器上,無論接口類型,都會指定每個接口的缺省度量為10,使用isis metric可修改缺省度量
一條路徑的總代價可以看做是沿此路徑方向的每一個出站接口的單獨度量簡單相加
對於任何一條路由,ISIS的最大度量值為1023
ISIS擴展度量wide metric 具有32為度量,使用命令metric-style wide設置
ISIS路由器不僅分為L1和L2,還分為外部路由,內部路由
內部路由:到達ISIS路由選擇域內的目的地的路徑,L1路由總是內部路由
外部路由:到達ISIS路由選擇域外的目的地路徑,L2可能是內部路由,也可能是外部路由
如果達到目的存在多條可能的路由,那么L1的路由優先於L2的路由。
10.1.4 IS-IS的PDU格式
ISIS協議使用9中PDU類型來進行控制信息處理,並使用一個5位的類型號來標識每一個PDU數據包,

ISIS PDU數據包起始的8個八位組字節

域內路由選擇協議鑒別符
用來標識網絡層協議數據單元NPDU,在所有的ISIS PDU中,該字段的值為0x83
長度標識符
標識該固定頭部字段的長度,以八位組字節數表示
版本/協議ID擴展
當前始終設置為1
ID長度
用來標識該路由選擇域內使用的NSAP地址和NET的系統ID的長度。該字段取值為:
>1--8的整數,表示系統ID字段具有相同長度的八位組字節數
>0,表示系統ID字段的長度為6個八位組字節
>255,表示系統ID字段為空(0個八位組字節)
cisco路由器中系統字段的長度固定為6個八位組,在cisco路由器始發的PDU數據包中,這個ID長度字段始終為0
PDU類型
5位的字段,前三位為保留位,始終為0
版本號
當前始終設置為1,
保留位
當前設置為全0
最大區域地址數
表示該IS區域所允許的最大區域地址數量
>1--254整數,表示該區域實際所允許的最大區域地址數
>0,表示該IS區域最多只支持3個區域地址數
cisco默認為最多支持3個區域,該值始終為0,可通過命令max-area-address修改
1.TLV字段
在PDU專有字段之后,類型 長度 值 type length value

2.IS-IS Hello PDU格式

電路類型 Circuit Type
2位的字段,前6位為保留位,始終設置為0,用來指定路由器類型
01 L1路由器
02 L2路由器
11 L1/L2路由器
00 PDU數據包會被忽略
源ID source ID
發送該Hello數據包的路由器ID
抑制時間 Holding Time
鄰居路由器在宣告始發路由器失效之前,它所等待的接受下一個Hello數據包的間隔
PDU長度
整個PDU數據包長度的八位組字節數
優先級
用來選取DR的7位字段,可以設置成0--127之間的數值,數值越大優先級越高
LAN ID
指定路由器DR的系統ID加上一個八位組字節(偽結點ID)

與LAN Hello PDU區別:
本地電路ID代替了LAN ID字段
無優先級字段
在ISIS LAN Hello 數據包中可以使用下面多種TLV:
區域地址 類型1
中間系統鄰居 類型6
填充 類型8
認證信息 類型10
可選的校驗和 類型12
支持的協議 類型129
IP接口地址 類型132
重啟 類型211
多拓撲 類型229
IPv6接口地址 類型232
實驗用 類型250
(1)區域地址TLV

區域地址TLV是在始發路由器上配置,並用來通告該區域的地址,一台路由器可以配置多個區域地址
(2)中間系統鄰居TLV(Hello)

中間系統TLV
中間系統鄰居TLV列出本地路由器所有鄰居的系統ID
此TLV只能用在LAN Hello數據包中,
(3)填充TLV
填充TLV使用來填充一個Hello PDU的數據包,以使它達到允許的ISIS大小的最小值(1492字節),或該鏈路的MTU大小
由於一個值的最大長度為255字節,因此會使用多個填充TLV
它的內容經常被忽略,因此值字段可以為任意值,cisco默認設置為0
(4)認證信息TLV

認證信息TLV在配置認證時才會使用
認證類型字段包含一個0--255之間的數字,用來指定認證類型
IOS軟件支持明文口令認證,或HMAC-MD5認證
明文口令認證類型為1
HMAC-MD5認證類型為54
(5)支持的協議TLV

(6)IP接口地址TLV

IP接口地址TLV是指發出PDU數據包的接口地址或IP地址
長度為1個八位組字節,因此ISIS路由器接口理論上最多有63個地址
3.ISIS協議鏈路狀態PDU格式

L1 LSP和L2 LSP的格式是相同的,L1泛洪到整個區域,L2在L2區域內泛洪
PDU長度
整個PDU數據包的長度,用八位組字節數表示
剩余生存時間Remaining Lifetime
在確認一個LSP過期之前等待的秒數
LSP ID
可以是系統ID,偽結點ID,或LSP數據包的LSP編號
序列號
32位的無符號整數
校驗和
對LSP內容的校驗和
P位
分段區域修復位,cisco不支持,始終為0
區域關聯為(ATT)
一個4位的字段,用來指明始發路由器與一個或多個其他區域相連的。
在L1和L2的LSP數據中存在,但實際只和L1/L2路由器始發的L1 LSP數據包有關
位7 差錯度量
位6 代價度量
位5 時延度量
位4 缺省度量
cisco IOS僅支持位4 缺省度量,其余設置為0
過載位OL
中間系統類型(IS Type)
兩位的字段,用來指明始發路由器是L1路由器還是L2路由器
00 未用
01 L1
10 未用
11 L2
(1)中間系統鄰居TLV(LSP)

中間系統鄰居TLV用來在LSP中列出始發路由器的ISIS鄰居(包括偽結點)
虛擬標記Virtual Flag
長度為8位,取值只有0x01或0x00
在cisco路由器中該字段始終設置為0x00
R位
保留位,始終設置為0
I/E位
該位和每個度量相關,用來指明相關的度量是內部度量還是外部度量
缺省度量
一個6位的缺省度量,用來表示始發路由器到達所列出的鄰居的鏈路度量,大小范圍在0--63之間
S位
和度量相關,用來指明是否支持此度量。
0 支持
1 不支持
鄰居ID
指鄰居的系統ID,
如果鄰居是一台路由器,末尾的八位組設置為0x00
如果鄰居是偽結點,則系統ID就是指定路由器,末尾八位組就是偽結點的ID
(2)IP內部可達性信息TLV

IP內部可達性TLV列出了與通告該LSP的,路由器直連的路由選擇域內的IP地址和相關的掩碼信息。
這個TLV使用在L1和L2的類型的LSP,但是從來不會出現在偽結點LSP中。
(3)IP外部可達信息TLV
IP外部可達信息TLV列出了到達ISIS路由選擇域外部的IP地址和相關掩碼
(4)域間路由選擇協議信息TLV

域間信息類型
指定了在可變長度的外部信息字段中包含的信息類型
該字段設置為0x01 外部信息使用本地域間路由選擇協議方式
該字段設置為0x02 外部信息就是一個16位的自主系統號,用來標記所有后續的外部IP可達性條目,直到LSP的結尾或者下一個域間路由選擇協議信息TLV的出現。
4.ISIS協議序列號PDU報文

SNP通過描述數據庫中的部分或者全部的LSP信息,對ISIS鏈路狀態數據庫進行維護,也用來請求LSP,以及隱性或顯性的確認接收到的LSP
一台指定路由器DR會周期性的以組播方式發送完全序列號數據包CSNP,來描述偽節點數據庫中所有的LSP信息。
10.1.5 ISIS的擴展屬性
1.三方握手
在鄰居之間建立鄰接關系之前,鄰居必須確保它們之間形成雙向通信,確保該過程的形成稱為握手
ISIS協議使用三方握手機制,如果從鄰居收到了Hello數據包,本地路由器所發送的LAN Hello數據包就會在它的IS鄰居的TLV列出所有鄰居。
ISIS路由器在它所收到的LAN Hello數據包的IS鄰居TLV中看到自己的SYSID,那么就會認為雙向通信狀態已建立
