IS-IS(Intermediate System-to-Intermediate System intra-domain routing information exchange protocol,IS-IS路由協議)最初是國際標準化組織ISO(the International Organization for Standardization)為它的無連接網絡協議CLNP(ConnectionLess Network Protocol)設計的一種動態路由協議。
為了提供對IP的路由支持,IETF在RFC 1195中對IS-IS進行了擴充和修改,使它能夠同時應用在TCP/IP和OSI環境中,稱為集成化IS-IS(Integrated IS-IS或Dual IS-IS)。
IS-IS屬於內部網關協議(Interior Gateway Protocol,IGP),用於自治係統內部。IS-IS是一種鏈路狀態協議,使用最短路徑優先(Shortest Path First,SPF)算法進行路由計算。
l IS(Intermediate System):中間係統。相當於TCP/IP中的路由器,是IS-IS協議中生成路由和傳播路由信息的基本單元。在下文中IS和路由器具有相同的含義。
l ES(End System):終端係統。相當於TCP/IP中的主機係統。ES不參與IS-IS路由協議的處理,ISO使用專門的ES-IS協議定義終端係統與中間係統間的通信。
l RD(Routing Domain):路由域。在一個路由域中多個IS通過相同的路由協議來交換路由信息。
l Area:區域,路由域的細分單元,IS-IS允許將整個路由域分為多個區域。
l LSDB(Link State DataBase):鏈路狀態數據庫。網絡內所有鏈路的狀態組成了鏈路狀態數據庫,在每一個IS中都至少有一個LSDB。IS使用SPF算法,利用LSDB來生成自己的路由。
l LSP(Link State Protocol Data Unit或Link State Packet):鏈路狀態協議數據單元或鏈路狀態報文。在IS-IS中,每一個IS都會生成LSP,此LSP包含了本IS的所有鏈路狀態信息。每個IS收集本區域內所有的LSP生成自己的LSDB。
l NPDU(Network Protocol Data Unit):網絡協議數據單元,是ISO中的網絡層協議報文,相當於TCP/IP中的IP報文。
l DIS(Designated IS):廣播網絡上選舉的指定路由器,也可以稱為指定IS或偽節點。
l NSAP(Network Service Access Point):網絡服務接入點,即ISO中網絡層的地址,用來標識一個抽象的網絡服務訪問點,描述ISO模型的網絡地址結構。
(1) NSAP
如圖1所示,NSAP由IDP(Initial Domain Part)和DSP(Domain Specific Part)組成。IDP相當於IP地址中的主網絡號,DSP相當於IP地址中的子網號和主機地址。
IDP部分是ISO規定的,它由AFI(Authority and Format Identifier)與IDI(Initial Domain Identifier)組成,AFI表示地址分配機構和地址格式,IDI用來標識域。
DSP由HODSP(High Order DSP)、SystemID和SEL三個部分組成。HODSP用來分割區域,SystemID用來區分主機,SEL指示服務類型。
IDP和DSP的長度都是可變的,NSAP總長最多是20個字節,最少8個字節。
圖1 IS-IS協議的地址結構示意圖
(2) 區域地址
IDP和DSP中的HODSP(High Order DSP)一起,既能夠標識路由域,也能夠標識路由域中的區域,因此,它們一起被稱為區域地址(Area Address)。兩個不同的路由域中不允許有相同的區域地址。
一般情況下,一台路由器隻需要配置一個區域地址,且同一區域中所有節點的區域地址都要相同。為了支持區域的平滑合並、分割及轉換,一台路由器最多可配置3個區域地址。
(3) System ID
System ID用來在區域內唯一標識主機或路由器。它的長度固定為48bit(6字節)。
在實際應用中,一般使用Router ID與System ID進行對應。假設一台路由器使用接口Loopback0的IP地址168.10.1.1作為Router ID,則它在IS-IS使用的System ID可通過如下方法轉換得到:
l 將IP地址168.10.1.1的每一部分都擴展為3位,不足3位的在前麵補0;
l 將擴展後的地址168.010.001.001重新劃分為3部分,每部分由4位數字組成,得到的1680.1000.1001就是System ID。
實際System ID的指定可以有不同的方法,但要保證能夠唯一標識主機或路由器。
(4) SEL
SEL(NSAP Selector,有時也寫成N-SEL)的作用類似IP中的“協議標識符”,不同的傳輸協議對應不同的SEL。在IP中,SEL均為00。
(5) 路由方式
由於這種地址結構明確地定義了區域,Level-1路由器很容易識別出發往它所在的區域之外的報文,這些報文需要轉交給具有Level-2功能的路由器去處理。
Level-1路由器利用System ID進行區域內的路由,如果發現報文的目的地址不屬於自己所在的區域,就將報文轉發給最近的Level-1-2路由器。
Level-2路由器根據區域地址進行區域間的路由。
NET(Network Entity Title,網絡實體名稱)指示的是IS本身的網絡層信息,不包括傳輸層信息(SEL=0),可以看作是一類特殊的NSAP,即SEL為0的NSAP地址。因此,NET的長度與NSAP的相同,最多為20個字節,最少為8個字節。
通常情況下,一台路由器配置一個NET即可,當區域需要重新劃分時,例如將多個區域合並,或者將一個區域劃分為多個區域,這種情況下配置多個NET可以在重新配置時仍然能夠保證路由的正確性。由於一台路由器最多可配置3個區域地址,所以最多也隻能配置3個NET。在配置多個NET時,必須保證它們的System ID都相同。
例如NET為:ab.cdef.1234.5678.9abc.00,則其中Area為ab.cdef,System ID為1234.5678.9abc,SEL為00。
為了支持大規模的路由網絡,IS-IS在路由域內采用兩級的分層結構。一個大的路由域被分成一個或多個區域(Areas)。區域內的路由通過Level-1路由器管理,區域間的路由通過Level-2路由器管理。
(1) Level-1路由器
Level-1路由器負責區域內的路由,它隻與屬於同一區域的Level-1和Level-1-2路由器形成鄰居關係,維護一個Level-1的LSDB,該LSDB包含本區域的路由信息,到區域外的報文轉發給最近的Level-1-2路由器。
(2) Level-2路由器
Level-2路由器負責區域間的路由,可以與同一區域或者其它區域的Level-2和Level-1-2路由器形成鄰居關係,維護一個Level-2的LSDB,該LSDB包含區域間的路由信息。所有Level-2路由器和Level-1-2路由器組成路由域的骨幹網,負責在不同區域間通信,路由域中的Level-2路由器必須是物理連續的,以保證骨幹網的連續性。隻有Level-2路由器才能直接與路由域外的路由器交換數據報文或路由信息。
(3) Level-1-2路由器
同時屬於Level-1和Level-2的路由器稱為Level-1-2路由器,可以與同一區域的Level-1和Level-1-2路由器形成Level-1鄰居關係,也可以與同一區域或者其他區域的Level-2和Level-1-2路由器形成Level-2的鄰居關係。Level-1路由器必須通過Level-1-2路由器才能連接至其他區域。Level-1-2路由器維護兩個LSDB,Level-1的LSDB用於區域內路由,Level-2的LSDB用於區域間路由。
& 說明:
l 屬於不同區域的Level-1路由器不能形成鄰居關係。
l Level-2路由器是否形成鄰居關係則與區域無關。
圖2為一個運行IS-IS協議的網絡,其中Area1是骨幹區域,該區域中的所有路由器均是Level-2路由器。另外4個區域為非骨幹區域,它們都通過Level-1-2路由器與骨幹路由器相連。
圖2 IS-IS拓撲結構圖之一
圖3是IS-IS的另外一種拓撲結構圖。其中Level-1-2路由器不僅僅用來連接Level-1和Level-2路由器,而且還與其他Level-2路由器一起構成了IS-IS的骨幹網。在這個拓撲中,並沒有規定哪個區域是骨幹區域。所有Level-2路由器和Level-1-2路由器構成了IS-IS的骨幹網,他們可以屬於不同的區域,但必須是物理連續的。
圖3 IS-IS拓撲結構圖之二
& 說明:
IS-IS的骨幹網(Backbone)指的不是一個特定的區域。
IS-IS不論是Level-1還是Level-2路由,都采用SPF算法,分別生成最短路徑樹(Shortest Path Tree,SPT)。
對於類型是Level-1-2的路由器,可能需要與某個對端隻建立Level-1的鄰接關係,與另一個對端隻建立Level-2的鄰接關係。可以通過設置相應接口的路由層次類型來限製接口上所能建立的鄰接關係,如Level-1的接口隻能建立Level-1的鄰接關係,Level-2的接口隻能建立Level-2的鄰接關係。
對於Level-1-2的路由器,通過將某些接口配置為Level-2,還可以防止將Level-1的Hello報文發送到Level-2骨幹網上,從而節省帶寬。
通常情況下,IS-IS的區域也稱為Level-1區域,區域內的路由通過Level-1的路由器進行管理。所有的Level-2路由器構成一個Level-2區域。因此,一個IS-IS的路由域可以包含多個Level-1區域,但隻有一個Level-2區域。
Level-1區域必須且隻能與Level-2區域相連,不同的Level-1區域之間並不相連。
Level-1區域內的路由信息通過Level-1-2路由器發布到Level-2區域,因此,Level-2路由器知道整個IS-IS路由域的路由信息。但是,在缺省情況下,Level-2路由器並不將自己知道的其他Level-1區域以及Level-2區域的路由信息發布到Level-1區域。這樣,Level-1路由器將不了解本區域以外的路由信息,Level-1路由器隻將去往其它區域的報文發送到最近的Level-1-2路由器,所以可能導致對本區域之外的目的地址無法選擇最佳的路由。
為解決上述問題,IS-IS提供了路由滲透功能,使Level-1-2路由器可以將己知的其他Level-1區域以及Level-2區域的路由信息發布到指定的Level-1區域。
IS-IS隻支持兩種類型的網絡,根據物理鏈路不同可分為:
l 廣播鏈路:如Ethernet、Token-Ring等。
l 點到點鏈路:如PPP、HDLC等。
& 說明:
對於NBMA(Non-Broadcast Multi-Access)網絡,如ATM,需對其配置子接口,並將子接口類型配置為點到點網絡或廣播網絡。IS-IS不能在點到多點(Point to MultiPoint,P2MP)鏈路上運行。
在廣播網絡中,IS-IS需要在所有的路由器中選舉一個路由器作為DIS(Designated Intermediate System)。
Level-1和Level-2的DIS是分別選舉的,用戶可以為不同級別的DIS選舉設置不同的優先級。DIS優先級數值越高,被選中的可能性就越大。如果優先級最高的路由器有多台,則其中SNPA(Subnetwork Point of Attachment,子網連接點)地址(廣播網絡中的SNPA地址是MAC地址)最大的路由器會被選中。不同級別的DIS可以是同一台路由器,也可以是不同的路由器。
在IS-IS廣播網中,同一網段上的同一級別的路由器之間都會形成鄰接關係,包括所有的非DIS路由器之間也會形成鄰接關係。如圖4所示。
圖4 IS-IS廣播網的DIS和鄰接關係
DIS用來創建和更新偽節點(Pseudonodes),並負責生成偽節點的LSP,用來描述這個網絡上有哪些路由器。
偽節點是用來模擬廣播網絡的一個虛擬節點,並非真實的路由器。在IS-IS中,偽節點用DIS的System ID和一個字節的Circuit ID(非0值)標識。
使用偽節點可以簡化網絡拓撲,使產生的LSP數量較少,減少SPF的資源消耗。
& 說明:
IS-IS廣播網絡上所有的路由器之間都形成鄰接關係,但LSDB的同步仍然依靠DIS來保證。
IS-IS報文是直接封裝在數據鏈路層的幀結構中的。PDU(Protocol Data Unit,協議數據單元)可以分為兩個部分,報文頭和變長字段部分。其中報文頭又可分為通用報頭和專用報頭。對於所有PDU來說,通用報頭都是相同的,但專用報頭根據PDU類型不同而有所差別,如圖5所示。
圖5 PDU格式
所有的PDU都有相同的通用報頭格式,如圖6所示。
圖6 PDU頭格式
主要字段的解釋如下:
l Intradomain Routeing Protocol Discriminator(域內路由協議鑒別符):設置為0x83。
l Length Indicator(長度標識符):PDU頭部的長度(包括通用報頭和專用報頭),以字節為單位。
l Version/Protocol ID Extension(版本/協議標識擴展):設置為1(0x01)。
l ID Length(標識長度):NSAP地址和NET的ID長度。
l R(Reserved,保留):設置為0。
l Version(版本):設置為1(0x01)。
l Maximum Area Address(最大區域地址數):支持的最大區域個數。
Hello報文用於建立和維持鄰居關係,也稱為IIH(IS-to-IS Hello PDUs)。其中,廣播網中的Level-1路由器使用Level-1 LAN IIH,廣播網中的Level-2路由器使用Level-2 LAN IIH,點到點網絡中的路由器則使用P2P IIH。
它們的報文格式有所不同。廣播網中的Hello報文格式如圖7所示(灰色部分是通用報文頭)。
主要字段的解釋如下:
l Reserved/Circuit Type:高位的6比特保留,值為0。低位的2比特表示路由器的類型(00保留,01表示L1,10表示L2,11表示L1/2)。
l Source ID:發送Hello報文的路由器的System ID。
l Holding Time:保持時間。在此時間內如果沒有收到鄰居發來的Hello報文,則中止已建立的鄰居關係。
l PDU Length:PDU的總長度,以字節為單位。
l Priority:選舉DIS的優先級。
l LAN ID:包括System ID和一字節的偽節點ID。
點到點網絡中的Hello報文格式如圖8所示(灰色部分是通用報文頭)。
從圖中可以看出,P2P IIH中的多數字段與LAN IIH相同。不同的是沒有Priority和LAN ID字段,而多了一個Local Circuit ID字段,表示本地鏈路ID。
LSP(Link State PDUs,鏈路狀態報文)用於交換鏈路狀態信息。LSP分為兩種:Level-1 LSP和Level-2 LSP。Level-1路由器傳送Level-1 LSP,Level-2路由器傳送Level-2 LSP,Level-1-2路由器則可傳送以上兩種LSP。
兩類LSP有相同的報文格式,如圖9所示(灰色部分是通用報文頭)。
主要字段的解釋如下:
l PDU Length:PDU的總長度,以字節為單位。
l Remaining Lifetime:LSP的存活時間,以秒為單位。
l LSP ID:由三部分組成,System ID、偽節點ID(一字節)和LSP的分片號(一字節)。
l Sequence Numer:LSP的序列號。
l Checksum:LSP的校驗和。
l P(Partition Repair):僅與L2 LSP有關,表示路由器是否支持自動修複區域分割。
l ATT(Attachment):由L1/L2路由器產生,但僅與L1 LSP有關,表示產生此LSP的路由器(L1/L2路由器)與多個區域相連接。
l OL(LSDB Overload):表示本路由器因內存不足而導致LSDB不完整。其他路由器在得知這一信息後,就不會把需要此路由器轉發的報文發給它,但到此路由器直連地址的報文仍然可以被轉發。如圖10所示,假設正常情況下RouterA到RouterC的報文都是經過RouterB轉發,但如果RouterB的OL位置1,則RouterA會認為RouterB的路由不完整,從而將報文通過RouterD、RouterE轉發給RouterC,但到RouterB直連地址的報文不受影響。
l IS Type:生成LSP的路由器的類型。
時序報文SNP(Sequence Number PDUs)用於確認鄰居之間最新接收的LSP,作用類似於確認(Acknowledge)報文,但更有效。
SNP包括CSNP(Complete SNP,全時序報文)和PSNP(Partial SNP,部分時序報文),進一步又可分為Level-1 CSNP、Level-2 CSNP、Level-1 PSNP和Level-2 PSNP。
CSNP包括LSDB中所有LSP的摘要信息,從而可以在相鄰路由器間保持LSDB的同步。在廣播網絡上,CSNP由DIS定期發送(缺省的發送周期為10秒);在點到點鏈路上,CSNP隻在第一次建立鄰接關係時發送。
CSNP的報文格式如圖11所示(灰色部分是通用報文頭)。
PSNP隻列舉最近收到的一個或多個LSP的序號,它能夠一次對多個LSP進行確認。當發現LSDB不同步時,也用PSNP來請求鄰居發送新的LSP。
PSNP的報文格式如圖12所示:
PDU中的變長字段部分是多個TLV(Type-Length-Value)三元組。其格式如圖13所示:
圖13 TLV格式
不同PDU類型所包含的TLV是不同的。其中,Code值從1到10的TLV在ISO 10589中定義(有2類未在上表中列出),其他幾種TLV在RFC 1195中定義。