網絡編程和自動化基礎-42

2022-01-02 Open Networking
本篇開始介紹網絡可編程性堆棧中的第一種編碼格式:可擴展標記語言 (XML)。XML用於對網絡可編程協議的消息進行編碼。某些協議(例如NETCONF )僅支持XML。XML是第一個在XML/JSON/YAML系列中開發的數據表示語言。正如您將看到的,XML不僅是三種編碼方案中最古老的,而且也是最強大的。您還將了解XSD(XML Schema Definition)的詳細信息,它用於提高XML對複雜應用程式的能力。XML是一種元標記語言,用於處理信息結構。「元」是指XML能夠使用元數據來更好地處理信息,而「標記」是指它使用各種標籤來定義數據的結構。XML被設計為人類可讀和機器可讀;它很容易被人類閱讀和修改,當正確標記時,它很容易被機器讀取。

在網絡自動化和編排領域,數據結構是關鍵要素之一。事實上,對於所有涉及多個組件之間的任何數據交換的分布式應用程式,數據結構是至關重要的。XML的主要目標是為數據存儲和表示創建適當的數據結構。1998年,在網際網路得到廣泛發展的時期,XML被開發用來補充HTML,HTML專注於數據可視化。XML使用戶能夠創建任何數據結構,因為它沒有任何預定義的標籤名稱或值。此外,XML文檔所支持的數據類型也存在局限性。這種靈活性在創建應用程式時非常有用;但是,重要的是要有一種機制來檢查值的內容,以防止XML文檔中的數據超出應用程式支持的範圍。因此,XML的進一步發展導致了XML DTD(文檔類型定義)和XML模式的引入,它們為XML文檔的內容添加了嚴格的約束,使其更加正式。

最新的XML標準於2008年發布,得到了負責更新標準的全球資訊網聯盟 (W3C) 的支持 (https://www.w3.org/standards/xml/core)。IETF概述了2003年RFC3470中開發IETF協議時使用XML的一般準則。

儘管是一種相對較舊的語言,但XML仍然廣泛用於網絡自動化和應用程式通信。在網絡自動化中,XML最流行的應用是通過NETCONF管理網絡元素。NETCONF消息的有效載荷是一個XML文件,其中包含配置網絡元素或獲取其狀態所需的所有信息。

對於應用程式到應用程式的通信,W3C還開發並支持了一種稱為SOAP(簡單對象訪問協議)的基於XML的協議。NETCONF通過SSH運行,而SOAP依賴於HTTP。(SOAP規範由W3C的XML協議工作組維護,直到該工作組於2009年關閉。)基於JSON數據編碼的REST框架現在比SOAP更常用於應用程式之間的通信。XML在數據結構方面非常靈活,因為您使用的所有標籤都是在創建數據結構時自己創建的。對於NETCONF應用程式,XML結構遵循網絡作業系統存儲其配置的資料庫的內部結構;在某些情況下,它可能類似於命令行界面(CLI)層次結構,而在其它情況下,它可能有所不同。儘管具有很大的靈活性,但要使XML語法正確,仍需要遵循某些格式規則。

XML文檔構建塊

為了讓您熟悉XML,下例顯示了一個XML文檔。

在XML語法中,標籤由 < 和 > 字符構成。有兩種類型的標籤——開始標籤(例如,<vpn>)和結束標籤(例如,</vpn>)——它們總是成對出現的。由這些標籤構成的存儲單元稱為元素。最頂層的元素稱為根元素,每個XML文檔只能有一個根元素。

開始和結束標籤之間的所有內容都是與標籤對表示的鍵相關聯的值。通常,XML中的所有內容都應該有一個開始標籤和一個結束標籤,但此規則有兩個例外:在下例中,您可以看到XML文檔基於父/子關係。標籤 <vpn> 是 <customer> 和 <contact> 條目的父項,<contact> 和 <customer> 是 <vpn> 的子項。通常,子元素在行首用一些空格進行可視化標記,XML處理器會忽略這些空格。下例顯示了對XML處理器具有相同含義的數據表示。XML文檔中的父/子關係的數量沒有限制,如下例所示,它擴展了上例中的XML文檔。

正如您在示例中看到的,多個實體可能在單個父項中具有相同的名稱,每個實體都用於數組或列表數據結構。總的來說,所有子元素從根元素開始形成一個樹結構。在這個例子中,標籤 <enabled/> 是一個空的元素標籤。

您可以創建自己的標籤,但遵循幾個命名約定很重要:

標籤名可以包含任何字母、數字以及符號(例如,、、:、和)。

標籤不能以數字或符號(例如 - 或 .)開頭。

標籤不能以XML的任何變體開頭,例如xml、XML或XmL。

標籤區分大小寫;例如 <vpn> 和 <Vpn> 是兩個完全不同的標籤。

標籤命名有五種主要方法:

全部小寫:例如,<vpn>

全部大寫:例如,<VPN>

駝峰式大小寫:例如,<VirtualPrivateNetwork>

小寫的第一個單詞後跟駝峰式:例如,<virtualPrivateNetwork>

下劃線分隔的單詞:例如,<virtual_private_network>雖然推薦使用這五種樣式,但您可以使用其它格式,只要您遵循前面的約定即可。預定義實體用於在使用某些符號時避免歧義。XML標籤中可以使用多種符號,但它們需要遵循特定規則。例如,將小於 (<) 或大於 (>) 符號與開始標籤一起使用會造成混淆(<> 或 >>)。下表列出了允許您表達符號而不產生歧義的預定義實體。

XML屬性、注釋和命名空間

您可能在之前示例發現了一個更重要的概念:屬性。例如,在該示例 <site id='1'> 中,站點id是一個屬性,而'1'是它的值。必須始終在單引號或雙引號中提供值。屬性是元數據,您可以將其視為有關數據的數據。屬性值可用於為XML處理器標識有關如何處理數據的附加信息,但它不是數據本身,因此它不能包含應用程式處理的值。

在網絡自動化方面,XML屬性廣泛用於NETCONF消息中,如下例所示。在上例,屬性操作指示 NETCONF 應用程式它應該用NETCONF消息的XML正文中提供的數據替換原始接口配置。此外,在將配置應用到目標網絡設備後,<description> 標籤值中的預定義元素將呈現為local router > remote router 。上例引入了另一個重要的XML概念:注釋。XML注釋與任何程式語言中的注釋一樣,提供解釋代碼但未被應用程式處理的附加信息。如果您與團隊一起處理XML文檔以幫助彼此更好地理解數據結構,則應該使用注釋。XML中的注釋以 <!-- 開頭,以 --> 結尾。為防止歧義和XML錯誤,注釋不應在末尾以外的任何地方包含雙連字符 (--)。雖然一般來說XML屬性是任意的鍵/值對,可以幫助XML解析器處理信息(還可以幫助您通過應用某些標籤來構造數據),但也有一些特定屬性是必需的用例,您將在後面了解。

正如前面提到的,當你使用XML時,你可以定義你的XML標籤,只要你遵循前面概述的約定。但是,這種自由可能會導致問題。下例顯示了一個文檔,其中相同的標籤具有不同的含義。

注意,在示例中,有兩個 <sites> 標籤包含完全不同的數據:第一個關注創建客戶BGP IP MPLS VPN所需的技術信息,而第二個包含物理地址。標籤名稱中可能有錯誤;或者,提供的XML文件可能由不同的程序使用,其中需要不同的信息。有一種方法可以在單個文檔中以不同的方式使用相同的標籤名:使用名稱空間。XML名稱空間是一個特定屬性,它定義了用於處理XML文檔特定部分的XML詞彙表。下例將XML名稱空間添加到上例中的XML文檔中。

在這個例子,xmlns屬性的值是一個URI(統一資源指示符)。xmlns是繼承的,這意味著每個子項都從其父項繼承XML命名空間。XML解析器將URI作為字符串處理,它不一定表示可以在Internet上訪問的真實網頁(儘管可能)。通常,解析器使用xmlns屬性將數據傳送到相應的軟體進行進一步處理。應用程式可以正確處理XML名稱空間,但對於人類來說,可能很難跟蹤所有父/子關係並了解特定元素屬於哪個字典。為了克服這種歧義,XML引入了前綴的概念,用於將某個標籤顯式映射到某個命名空間,如下例所示。

在XML命名空間聲明期間,前綴被定義為xmlns:prefix——例如,上例中的xmlns:pr1和xmlns:pr2。定義命名空間後,所有標籤都必須以prefix:tag形式的適當前綴值開頭,例如,pr1:vpn或pr2:sites。在示例中,您可以看到兩個命名空間都在根元素中聲明,然後使用前綴映射到相應的標籤。

W3C不強制要求使用XML名稱空間。如果默認名稱空間(例如xmlns="URI")和帶前綴的名稱空間(例如xmlns:prefix="URI")都未定義,則元素隱式地與任何XML名稱空間無關。但是,某些依賴於XML的協議(例如NETCONF)要求從根元素開始就存在xmlns屬性。

在使用XML時,您還需要了解更多規則。首先,您必須始終嚴格遵守創建數據結構的父/子關係規則。下例顯示了正確和不正確的XML文檔。

在上例的第一部分中,結束標籤 </sites> 和 </site> 被錯誤地放置。使用專業的XML編輯器很容易發現這種類型的錯誤,但是使用控制臺文本編輯器(例如Linux上的vim),很容易犯這樣的錯誤。如果您創建自己的數據結構,則可以通過創建正確的標籤名稱來避免此錯誤。不幸的是,在許多已建立的YANG模塊(例如Cisco IOS XR)中,幾個相鄰的標籤非常相似(例如,標籤 <interfaces> 是 <interface> 的父級)。父標籤和子標籤的順序不正確會導致XML文檔處理出錯。

關於XML格式,您應該了解的另一件重要事情是開始標籤和結束標籤之間的所有內容都是一個值。如果有前導或尾隨空格,如下例所示,它們被視為值。

在示例的XML文檔中,關鍵客戶的值為NPF_cust1,以前導空格開頭,關鍵聯繫人的值為 info@npf .cust1,後綴為兩個空格。因為這些空間被視為值的一部分,所以在處理XML文檔時,任何涉及將值與其它值進行比較的操作都可能導致不希望的結果。

如果您遵循到目前為止描述的所有規則,將創建格式良好的XML文檔。XML文檔必須格式正確才能被正確處理。如果XML文檔包含語法違規,則它的格式不正確。XML處理器無法正確處理此類文檔,任何依賴於該文檔的應用程式都可能會失敗。

對於基於XML的應用程式,必須先解析、分析和處理整個XML文檔,然後才能完成任何進一步的活動(例如對網絡元素的更改)。因此,建議您將XML文檔保持在相當小的範圍內。否則,應用程式的性能可能會受到嚴重影響。

網絡編程和自動化基礎-41

網絡編程和自動化基礎-40

網絡編程和自動化基礎-39

網絡編程和自動化基礎-38

技術交流群(僅限行業和技術交流,嚴禁廣告,非誠勿擾):

相關焦點

  • 網絡編程和自動化基礎-43
    它確保元素vpn正好有兩個子元素:customer和contact。它確保每個子項(customer和contact)都有某種文本信息,包括零字符串(用於沒有輸入時)。正如本節前面提到的,DTD可能位於單獨的文件中,也可能是初始XML文檔的一部分。帶有DTD的聯合XML文檔如下例所示。
  • 網絡編程和自動化基礎-32
    URI表示為字符序列,大致由兩部分組成:方案和根據特定方案規定的標準格式化的字符串。該方案是接入網絡協議,如HTTP、FTP或Telnet 。模式和後面的字符串用冒號分隔。後面將詳細討論URI的一般語法。URL代表統一資源定位器。URL是映射到特定訪問機制(即網絡協議)的URI。在這種情況下,方案是網絡協議,例如FTP、HTTP、HTTPS、gopher、mailto或Telnet。
  • 自動化程式語言的未來
    未來的自動化操作可能使用多種程式語言,對於程式設計師來說,了解哪些語言是可用的、適合於哪些領域,以及如何用其創建可讀、有資源支持的代碼將至關重要。梯形圖邏輯,是可編程邏輯控制器(PLC)的主要程式語言之一。它簡單易用,並以圖形方式表示繼電器觸點和線圈。
  • 【讓調參全部自動化】自動機器學習,神經網絡自主編程(代碼與訣竅)
    KDnuggets 的主編 Matthew Mayo 寫了一篇文章介紹了 AutoML 的概念,以及為什麼要做自動機器學習。本文後附 AI 軟體工程師 Thibault Neveu 發表在 Medium 的文章,介紹他如何訓練神經網絡自動編程。在過去幾年,自動機器學習(AutoML)成了一個研究的熱點。
  • 職場提升新技能,風變編程Python讓繁瑣的工作自動化
    自動化辦公也稱辦公自動化(英語:Office Automation),簡稱OA,指的是應用計算機、電子設備和軟體,來數位化地創建、收集、存儲、處理,並傳播完成辦公室任務所需的信息。自動化辦公是一個廣泛的概念,並沒有特指某一項技術。因此我們可以把一切通過數位化方式完成的辦公室任務,並帶來效率提升的應用叫做自動化辦公。
  • Python程控儀器自動化(2)網絡分析儀例程
    本文是射頻儀器程控方法和系列python例程代碼的第2篇,網絡分析儀。
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    ,然後再根據自 己的需求和規劃選擇學習其他方向課程,學完後一定要多實踐 總目錄 零基礎全能篇(4套課程) 實用編程技巧進價(1套課程) 數據分析與挖掘(8套課程) 辦公自動化(3套課程) 機器學習與人工智慧(7套課程) 開發實戰篇(4套課程) 量化投資(2套課程) 網絡爬蟲(
  • "Selenium+Python自動化技術與實戰"——自動化測試基礎——1(持續更新)
    關鍵點是程式語言。機器學習一個程式語言,輕鬆和簡單到令人髮指的地步:安裝上去,機器就學會了。好在人類學習程式語言也不是特別難的事情。有了程式語言,就有了人機交流的橋梁,剩下的事情,是幫機器挑選工具。做對應的測試,找到對應的工具,這樣自動化就自動起來了。
  • Python程式設計師的聖經:《Python編程快速上手:讓繁瑣工作自動化》
    然而現實不會一帆風順,學程式語言必須要持之以恆!Python學習者需要持之以恆,並在學習中成長。與Python有關的書有上百本,然而沒有任何一本書可以與下面這本書相媲美:《Python編程快速上手:讓繁瑣工作自動化》。學習者僅需要深入閱讀這本書。
  • 【java網絡】編程基礎
    Java 網絡編程
  • java網絡編程之基礎知識點總結
    概述本文是網絡編程系列的第一篇文章,所以不講代碼,主要是網絡編程的一些基礎知識,下面的這些知識點主要是對java網絡編程這本書的歸納與整理。有興趣的同學可以看看。我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。
  • 我這個編程小白是怎麼實現自動化程序交易的?(非廣告非條件單)
    7月4號我曾經寫過一篇文章叫《零基礎編程小白挑戰投資策略自動化交易(一)》(連結),可能標題和內容都比較枯燥,這篇文章只有195次閱讀,就算讀了的朋友應該也覺得很無聊,早就忘了吧。可是這篇文章對我來說很重要,為了實現裡面的目標,我最近一個多月除了上班、帶娃、寫公眾號以外的業餘時間,基本上都撲在電腦前面努力研究。
  • Hadoop基礎-MapReduce編程模型(一)-以wordcount和sort為例
    在<<Hadoop基礎-不使用分布式系統怎麼做並行計算>>中提到了做並行計算需要解決的幾個問題。
  • 網絡編程基礎學習筆記2:socket接口及網絡編程三要素
    對於網絡編程而言,由於其底層語言是通過C語言來實現的,所以建議在學習的時候使用C語言來進行學習!網絡編程中常用的socket接口如下:socket()接口,用於創建socket;bind():用於綁定socket到本地地址和埠,通常由服務端調用(客戶端一般直接由connect直接主動去連結服務端);listen():用於開啟監聽模式,TCP專用;accept():用於伺服器等待客戶端連接,該情況一般在阻塞狀態下產生
  • 自動化專業解讀――自動化學習、研究和就業方向
    學好自動化:多學多做通實務自動化基礎課重、專業課多,是著名的「通吃」專業,而自動化專業培養見效快,人才適應性好,也是在以「精」聞名的理工專業裡較為不同的。大一的基礎課整個信息學院都大同小異由許多基礎課組成,比如數學和物理。
  • 瞻博網絡宣布計劃收購Apstra 通過領先的意圖網絡和自動閉環保障...
    Apstra將成為這一策略的加持者,通過將其基於多供應商開放架構的下一代網絡自動化與瞻博網絡數據中心網絡組合產品(基於為下一代數據中心和雲網絡設計的經過驗證的開放式可編程高等級作業系統此外,瞻博網絡交換機一直以EVPN-VXLAN架構能力而有別於競爭對手,現在與Apstra進行了集成,可以自動部署服務,安全地實施變更,促進自動化數據中心的架構管理和簡約運營。
  • 瞻博網絡宣布計劃收購Apstra,通過領先的意圖網絡和自動閉環保障...
    瞻博網絡旨在運用人工智慧驅動的自動化改變雲時代建設、運營和保障方式。Apstra將成為這一策略的加持者,通過將其基於多供應商開放架構的下一代網絡自動化與瞻博網絡數據中心網絡組合產品(基於為下一代數據中心和雲網絡設計的經過驗證的開放式可編程高等級作業系統Junos)結合在一起,可以加快這一策略的進程。在公有雲和私有雲建設者駛入自主運行網絡?
  • 系統管理利器,5種適合中型企業的基礎架構自動化工具
    過去在很長一段時間中,基礎架構的安裝、配置、維護等相關的工作都需要手動完成,需要IT團隊中的許多人都參與其中,手工過程存在很大的人為錯誤風險,導致應用程式可用性,安全性和性能不佳。隨著DevOps的崛起,讓基礎架構的自動化成為了可能。現在,有多種工具可以執行基礎結構的創建、部署、管理任務。
  • Linux C網絡編程[Socket]
    現在的跨平臺網絡編程框架很多,如Java的SSH,C/C++的Boost等。  現在的分布式框架很多,如Hadoop等。  我的任務是把一個C/C++程序做成分布式,要求的不配環境,基本屬於純計算的,結果很小。所以選擇了Socket。
  • SDN解讀:網絡虛擬化和網絡編排
    SDN解讀:網絡虛擬化和網絡編排 SDN的一個重要目標是實現可以動態分配的靈活網絡。雖然SDN的本質是實現集中控制和網絡可編程性,但網絡虛擬化和網絡編排也同樣重要。