戰(zhàn)(上))
在該等背景情形之下, IETF于2006年12月首先發(fā)布了RFC 4741, 此即那個(gè)基于XML, 用以取代CLI、SNMP的網(wǎng)絡(luò)配置和管理協(xié)議 , 在接下來(lái)幾年歷經(jīng)多次修改調(diào)整加以修訂后, IETF又于2011年6月將涵蓋著RFC 6241作為最終稿予以再度發(fā)布。年齡雖說(shuō)不算小, 然而要是倒退10年, 你去問(wèn)一個(gè)網(wǎng)絡(luò)工程師什么是更別提YANG了, 大概率你會(huì)瞧見(jiàn)對(duì)方一臉懵地看著你, 因?yàn)槟菚r(shí)主流的思科IOS設(shè)備壓根不支持, 當(dāng)時(shí)思科對(duì)此并不感興趣, 而是自行弄出了分別在2007年和2012年誕生的WSMAWeb Agent和onePK這兩個(gè)API, 是自己關(guān)起門(mén)來(lái)搞的。若干年里, 順著思科的行進(jìn)軌跡, 從CCNA開(kāi)始, 歷經(jīng)CCNP, 再到CCIE, 一路艱難磨煉成長(zhǎng)起來(lái)的網(wǎng)絡(luò)工程師們?nèi)晃丛?tīng)聞過(guò)存在著這樣一項(xiàng)極為小眾的技術(shù), 其在書(shū)本中不會(huì)被講授, 考試時(shí)也不會(huì)有涉及, 工作期間基本上也用不上。時(shí)光流轉(zhuǎn), 過(guò)去十年情況不同了, 如今隨著SDN以及網(wǎng)絡(luò)運(yùn)維自動(dòng)化技術(shù)的迅猛興起此技術(shù)在誕生十多年后, 終于在傳統(tǒng)計(jì)算機(jī)網(wǎng)絡(luò)這個(gè)領(lǐng)域里獲得了一定程度的曝光機(jī)會(huì), 接著與gRPC一同借助這樣的時(shí)代契機(jī), 成功站在了風(fēng)口之上順勢(shì)騰飛起來(lái)。理論部分對(duì)于相關(guān)的理論部分而言, 互聯(lián)網(wǎng)絡(luò)上存在諸多的資料情形狀態(tài), 然而最為具有權(quán)威性的必然是RFC 6241, 在此處進(jìn)行一番總結(jié)之舉動(dòng)作出說(shuō)明呈現(xiàn)出來(lái):1. 那個(gè)被稱(chēng)之為的協(xié)議框架分成了四層, 自低向高依次是, 安全傳輸這一層, 消息處于這一層, 操作處于這樣一層還有內(nèi)容處于這樣一層:2. 其編碼格式是基于XML的, 基于XML去做網(wǎng)絡(luò)管理, 主要原因是看中了XML所具備的強(qiáng)大的數(shù)據(jù)表示能力, 對(duì)于初學(xué)者而言, XML實(shí)際上并不怎么友好, 比不上JSON、YAML那般易讀且容易上手, 不過(guò)這只是我個(gè)人的觀點(diǎn)。3. 網(wǎng)絡(luò)架構(gòu)乃是由客戶端以及服務(wù)器共同成構(gòu)的, 我們所用的主機(jī)即為客戶端所在之處, 服務(wù)器涉及的是被操控的交換機(jī)或者路由器, 其默認(rèn)所使用的端口是830并且能夠予以更改。4. 在協(xié)議里頭, 存在著一項(xiàng)關(guān)鍵的概念, 被稱(chēng)作數(shù)據(jù)集( ), 數(shù)據(jù)集具備這樣的作用, 那就是用于存放一份配置數(shù)據(jù)的備份, 其目的在于保障設(shè)備能夠從開(kāi)機(jī)之際的初始狀態(tài), 順利進(jìn)入到它能夠正常運(yùn)行的工作狀態(tài)(簡(jiǎn)單來(lái)講, 就是更改了配置以后需要進(jìn)行write操作, 否則重啟設(shè)備之后配置將會(huì)丟失)。數(shù)據(jù)集具體分為(類(lèi)似于思科的那種結(jié)構(gòu)), Start-up(類(lèi)似于思科的那種模式)和(思科IOS - XR會(huì)運(yùn)用到的那種類(lèi)型, 總共可以劃分出有三種類(lèi)型, 而其中唯有這樣一種情況, 是強(qiáng)制要求必須使用的。講完的理論部分下面再來(lái)看看YANG。什么是數(shù)據(jù)模型在講YANG之前我們首先需要知道什么是數(shù)據(jù)模型。數(shù)據(jù)模型所起的作用, 在于對(duì)一組帶有統(tǒng)一標(biāo)準(zhǔn)的數(shù)據(jù)予以描述, 并且利用清晰明確的參數(shù)以及模型, 把數(shù)據(jù)的呈現(xiàn)朝著標(biāo)準(zhǔn)化、規(guī)范化的方向轉(zhuǎn)變。打個(gè)比方, 不同的廠商之間, 對(duì)于一些屬于行業(yè)范疇的術(shù)語(yǔ)的規(guī)范以及具體參數(shù), 存在著較為顯著的差異, 比如說(shuō), 用于區(qū)分路由協(xié)議優(yōu)先級(jí)的要素, 在思科那邊被稱(chēng)作管理距離( )的事物, 到了另一邊卻被改稱(chēng)為Route , 并且, 它們給予各個(gè)路由協(xié)議的AD和RP值也是不盡相同的, 比如說(shuō), RIP在思科的AD是120, 在的RP為100 , 再比如說(shuō), OSPF在思科的AD為110, 而在這邊, OSPF還被劃分成OSPF (RP值為10), OSPF (RP值為150)。雖不同廠商間, 于某些技術(shù)標(biāo)準(zhǔn), 有著這般那般之差異, 然對(duì)絕大部分技術(shù), 其仍遵循統(tǒng)一標(biāo)準(zhǔn), 諸如VLAN。用來(lái)描述VLAN的數(shù)據(jù)無(wú)外乎如下幾點(diǎn)1. VLAN ID (1-4096的整數(shù)rw類(lèi)型)2. 作為用字符串來(lái)進(jìn)行代表的VLAN名稱(chēng), 其類(lèi)型為rw , 這就是VLAN Name了。3. VLAN狀態(tài)該狀態(tài)是以枚舉形式來(lái)體現(xiàn)的, 有表示為down/up的情況還有表示為/no的情形, 屬于ro類(lèi)型。有一套模型, 能看到類(lèi)似于這樣的情況, 它明確定義了數(shù)據(jù)的具體內(nèi)容, 還規(guī)定了其數(shù)據(jù)的類(lèi)型, 以及相應(yīng)的范圍, 并且包含rw、ro類(lèi)型, 像這樣的一套模型, 就被稱(chēng)作數(shù)據(jù)模型。YANGYANG 是一種語(yǔ)言, 這種語(yǔ)言是“以網(wǎng)絡(luò)為中心的數(shù)據(jù)模型語(yǔ)言” , 它在2010年10月被提出, 當(dāng)時(shí)是由IETF提出的, 那個(gè)時(shí)候是在RFC 6020中提出的, 2010年10月也就是終稿發(fā)布之前的一年, 其誕生的時(shí)候目的很明確, 它一開(kāi)始是專(zhuān)門(mén)為量身打造的建模語(yǔ)言, 不過(guò)現(xiàn)在它也被REST采用, 現(xiàn)在它還被其他協(xié)議采用。YANG模型(Model)YANG模型被劃分成標(biāo)準(zhǔn)Open或者以及私有這兩種類(lèi)別, 當(dāng)中標(biāo)準(zhǔn)類(lèi)別里較為知名的存在由IETF、IEEE等具有國(guó)際知名度機(jī)構(gòu)所制定的那種模型就中由IETF制定的YANG模型最為常見(jiàn)。除開(kāi)標(biāo)準(zhǔn)YANG模型以外, 各個(gè)廠家依據(jù)自家產(chǎn)品存有差異設(shè)計(jì)了擁有私有性質(zhì)的YANG模型, 像思科、、華為、、諾基亞等亦具自家的YANG模型。那其中思科的YANG模型, 它又被劃分成了Cisco和Cisco這兩部分, 這里面的前者, 是思科旗下所有諸如IOS-XE、IOS-XR、NX-OS那么些操作系統(tǒng)通用的YANG模型, 里頭的后者則是在一些操作系統(tǒng)上獨(dú)占的YANG模型。YANG模塊()模塊, 其為YANG所定義之基本單位, 一個(gè)模塊, 既能用以去定義一個(gè)單一的數(shù)據(jù)類(lèi)型, 又能夠去增加一個(gè)業(yè)已存在的數(shù)據(jù)模型以及其他的節(jié)點(diǎn)。這是一個(gè)名為ietf-的。它是經(jīng)IETF制定的。其作用是把設(shè)備端口參數(shù)予以描述的YANG模塊。在下載YANG模塊大部分標(biāo)準(zhǔn)的、私有(的 YANG 模型)存放在(某地方)上, 截至 2020 年 9 月, 標(biāo)準(zhǔn)模型里有由 IETF、IEEE、ETSI 等國(guó)際知名組織和協(xié)會(huì)制定的 YANG 模塊, 而私有模型中有由包含思科、華為、諾基亞、富士通在內(nèi)的廠商自己制定的 YANG 模塊。上述所有標(biāo)準(zhǔn)以及私有的YANG模型, 還有與之對(duì)應(yīng)的模塊, 我們能夠借助git clone來(lái)進(jìn)行下載。git clone https://github.com/YangModels/yang.git下載完成以后, 當(dāng)前的目錄之中多出了一個(gè)被叫做yang的子目錄, 在這個(gè)子目錄里, yang//ietf/RFC內(nèi)部存放著全部經(jīng)由IETF制定而成的YANG模塊, 這里面還涵蓋上面我們所舉例子里邊的ietf-模塊不在截圖范圍之內(nèi)。用cat ietf-.yang查看該模塊的內(nèi)容你或許會(huì)發(fā)問(wèn), 怎會(huì)跟上邊咱們所舉例子里的ietf - 模塊內(nèi)容不一樣呢, 是由于上面那個(gè)例子之中, 我們是以樹(shù)形格式也就是Tree View去展開(kāi)ietf - 模塊的, 而在這兒運(yùn)用cat查看的卻是該模塊的源代碼, 我們能夠借助pyang這個(gè)模塊, 以樹(shù)形格式的形態(tài)去查看一個(gè)YANG模塊的詳細(xì)結(jié)構(gòu)。Pyang那專(zhuān)為YANG單獨(dú)開(kāi)發(fā)的開(kāi)源模塊Pyang, 具備三個(gè)主要功能, 其一, 是用于驗(yàn)證YANG模塊代碼的精確性, 其二, 是把YANG模塊轉(zhuǎn)變?yōu)槠渌袷饺缥覀冎八v的樹(shù)形格式, 其三, 是自YANG模塊里生成代碼, 在此我們著重講述怎樣利用Pyang將剛才提到的ietf-.yang這個(gè)模塊轉(zhuǎn)化為樹(shù)形格式。首先通過(guò)pip下載安裝pyang循著路徑, 回到那名為 yang//ietf/RFC 的目錄之下, 借助命令 pyang -f tree ietf - 所具備有的功能, 能夠把那被稱(chēng)作 ietf - 的 YANG 模塊, 轉(zhuǎn)變?yōu)闃?shù)形模式予以查看。實(shí)驗(yàn)環(huán)節(jié)先闡述完理論之后, 緊接著開(kāi)展實(shí)驗(yàn)。此實(shí)驗(yàn)的環(huán)境極為簡(jiǎn)單, 僅僅是一臺(tái)7主機(jī)與一臺(tái)思科3850的交換機(jī)進(jìn)行直接連接。實(shí)驗(yàn)拓?fù)渲鳈C(jī)操作系統(tǒng) 7交換機(jī)型號(hào)WS-C3850-48P-SOS版本用于交換機(jī)之處: 是IOS-XE 16.09.05 , 此版本名為Fuji。主機(jī)IP: 172.16.224.27交換機(jī)IP: 172.16.224.28實(shí)驗(yàn)設(shè)計(jì)的端口為交換機(jī)的/0/33其初始配置如下開(kāi)始實(shí)驗(yàn)前先提幾點(diǎn)使用的重點(diǎn)實(shí)驗(yàn)步驟: 首先是要在交換機(jī)上進(jìn)行開(kāi)啟操作, 其方法是比較簡(jiǎn)單的, 是在全局模式下面輸入 -yang 以及 ssh ( ssh 是可選的, 前面理論部分已經(jīng)講述過(guò)了, 默認(rèn)所使用的是 SSH 作為安全傳輸層協(xié)議, 所以 ssh 這條命令默認(rèn)情況下就是處于開(kāi)啟狀態(tài)的, 并不需要特意去進(jìn)行配置) 就可以達(dá)成。其余的關(guān)于交換機(jī)的初始配置內(nèi)容, 像是開(kāi)啟 SSH 以及創(chuàng)建特權(quán)級(jí)別為 15 的用戶等, 就請(qǐng)讀者自己去完成, 在這里就不做講解了。SW(config)#netconf-yang SW(config)#netconf ssh (默認(rèn)是開(kāi)啟的)2. 回到主機(jī)通過(guò)SSH訪問(wèn)交換機(jī)的830端口3. 當(dāng)連接達(dá)成成功狀態(tài)之后, 交換機(jī)就會(huì)回復(fù)出一個(gè)hello包, 還會(huì)有一長(zhǎng)串的一連串內(nèi)容, 這一系列內(nèi)容就是該交換機(jī)所支持的yang model, 其中包括思科方面的, 還有IETF的, 鑒于回顯的內(nèi)容數(shù)量過(guò)多, 所以在下圖當(dāng)中僅僅截取了一部分內(nèi)容用來(lái)作為相應(yīng)的演示:4. 隨后, 我們進(jìn)行復(fù)制粘貼, 將下列 XML 代碼用于向交換機(jī)回復(fù)一個(gè) hello 包, 交換機(jī)不會(huì)做出任何回應(yīng), 之后 , 主機(jī)和交換機(jī)之間的便建立成功。urn:ietf:params:netconf:base:1.0]]]]這里簡(jiǎn)要講述一下XML語(yǔ)言之行文的格式以及所包含的內(nèi)容, XML指令是以起始的, 當(dāng)中:里5. 發(fā)送, 如下的, XML代碼, 向交換機(jī), 查詢(xún), Gi1/0/33端口, 的配置:1/0/33]]]]緊跟著, 交換機(jī)會(huì)針對(duì)一個(gè)rpc -reply包作出回復(fù), 這個(gè)包是下圖紅框里的那部分, 后續(xù)的內(nèi)容呢便是我們所請(qǐng)求的Gi1/0/33端口的配置信息, 這里涵蓋了該端口下面的內(nèi)容, 還有IP地址, 而IP地址此時(shí)是為空的。6. 要是你感覺(jué)交換機(jī)所回復(fù)的, 那個(gè)rpc - reply不太容易去讀, 那么你能夠把它從事后, 復(fù)制粘貼到Code ()里頭, 借由Code下面XML所提供的Tree View, 或者是藉由/, 從而使得交換機(jī)的rpc - reply內(nèi)容, 變得更加容易去讀。注意復(fù)制RPC-REPLY內(nèi)容時(shí)不要把末尾的使之放在其中整體一并執(zhí)行了復(fù)制操作, 在此方面其前提是它們并非屬于那種XML所定義的語(yǔ)言范疇里頭部分, 不然的話Code操作就將出現(xiàn)報(bào)錯(cuò)情況:7. 下面這段XML代碼的使用, 是接下來(lái)我們要用來(lái)查詢(xún)交換機(jī)的 , 請(qǐng)自行嘗試, 這里就不放截圖了:這里, 我是故意不做那個(gè)縮進(jìn)的, 目的在于告訴你一件事, 這件事就是 XML 并不存在對(duì)你實(shí)行嚴(yán)格要求代碼縮進(jìn)這一情況。]]]]8. 拿下面這段XML代碼借助它來(lái)給端口Gi1/0/33增加上一個(gè), 其包含的內(nèi)容是說(shuō)test XML, 表明這是我們經(jīng)由配置所達(dá)成的:1/0/33test XML]]]]這里, 我們運(yùn)用了前文理論部分所提及的基本操作, 一般而言, 其下面會(huì)銜接一個(gè), 用于表示需要去修改配置的目標(biāo), 此目標(biāo)表示的乃是數(shù)據(jù)集, 在這里, 我們所要更改的便是這個(gè)數(shù)據(jù)集也能夠使用/, 后面所講的是這里我們采用了前面講到的思科私有YANG模型。回到交換機(jī)上驗(yàn)證Gi1/0/33的配置9. 最后, 我們運(yùn)用下面這段XML代碼, 為Gi1/0/33配置一個(gè)IP地址, 此IP地址為10.1.1.2 , 子網(wǎng)掩碼是/24。1/0/33 10.1.1.2 255.255.255.0]]]]之后回到交換機(jī)上驗(yàn)證Gi1/0/33的配置和YANG相關(guān)的理論以及實(shí)戰(zhàn)講到這兒就先告一段落了。能夠看到, 借由復(fù)制粘貼XML代碼這種操作手段, 針對(duì)傳統(tǒng)工程師而言, 是極為不適應(yīng)的。雖說(shuō)不太易于運(yùn)用, 然而確實(shí)屬于SDN時(shí)代網(wǎng)工們須掌握的技能當(dāng)中的一項(xiàng)。下一篇呢, 我會(huì)接續(xù)講解專(zhuān)門(mén)面向客戶端所開(kāi)發(fā)的第三方模塊, 瞧瞧結(jié)合起來(lái)是否會(huì)更簡(jiǎn)便一些。