1. 程式人生 > >鏈路層鏈路發現協議(LLDP)講解

鏈路層鏈路發現協議(LLDP)講解

一、LLDP協議概述 

隨著網路技術的發展,接入網路的裝置的種類越來越多,配置越來越複雜,來自不同裝置廠商的裝置也往往會增加自己特有的功能,這就導致在一個網路中往往會有很多具有不同特性的、來自不同廠商的裝置,為了方便對這樣的網路進行管理,就需要使得不同廠商的裝置能夠在網路中相互發現並互動各自的系統及配置資訊。 
LLDP(Link Layer Discovery Protocol,鏈路層發現協議)就是用於這個目的的協議。LLDP定義在802.1ab中,它是一個二層協議,它提供了一種標準的鏈路層發現方式。LLDP協議使得接入網路的一臺裝置可以將其主要的能力,管理地址,裝置標識,介面標識等資訊傳送給接入同一個區域網絡的其它裝置。當一個裝置從網路中接收到其它裝置的這些資訊時,它就將這些資訊以MIB的形式儲存起來。
這些MIB資訊可用於發現裝置的物理拓撲結構以及管理配置資訊。需要注意的是LLDP僅僅被設計用於進行資訊通告,它被用於通告一個裝置的資訊並可以獲得其它裝置的資訊,進而得到相關的MIB資訊。它不是一個配置、控制協議,無法通過該協議對遠端裝置進行配置,它只是提供了關於網路拓撲以及管理配置的資訊,這些資訊可以被用於管理、配置的目的,如何用取決於資訊的使用者。

二、LLDP結構

LLDP的框架結構如圖所示:

此圖也表明LLDP就是一個資訊發現與通告協議,LLDP的實體主要維護了兩個MIB庫,一個 local system MIB,一個remote system MIB。從其名字也可以看出,一個用於維護本地相關的裝置MIB資訊,一個用於維護遠端裝置MIB資訊。

LLDP通過與上圖中右側的幾個MIB庫互動來初始化並維護 local system MIB,並將本地的相關資訊通告出去;同時當接收到來自其它裝置的資訊時就將其更新到remote system MIB中。通過這種工作方式,一個裝置就可以將自己的資訊通告出去並獲得網路中其它裝置的相關資訊,最終獲得反應網路拓撲以及其它配置資訊的兩個MIB庫。這兩個庫可以被其使用者用來完成各種功能。

需要說明的是LLDP資訊的通告以及接收處理不受埠的STP狀態的影響。

三、LLDP基本概念

1.LLDP幀格式

封裝有 LLDPDU 的報文稱為 LLDP 幀,其封裝格式有兩種:Ethernet II 和 SNAP(Subnetwork Access Protocol,子網訪問協議)。 

1.1Ethernet II格式封裝的LLDP幀 

 

上圖是以Ethernet II格式封裝的LLDP幀,其中各欄位的含義如下: 

  • DA:目的 MAC地址,為固定的組播 MAC地址 0x0180-C200-000E。 
  • SA:源 MAC地址,為埠 MAC地址或裝置MAC地址(如有埠地址則用埠MAC地址,否則用裝置MAC地址)。 
  • Type:幀型別,為 0x88CC。 
  • Data:資料,為 LLDPDU。 
  • FCS:幀檢驗序列。

1.2 SNAP格式封裝的LLDP幀

 
上圖是以SNAP格式封裝的LLDP幀,其中各欄位的含義如下: 

  • DA:目的MAC地址,為固定的組播 MAC地址 01-80-C2-00-00-0E。 
  • SA:源MAC地址,為埠MAC地址或裝置MAC地址(如果有埠地址則用埠MAC地址,否則用裝置MAC地址)。 
  • Type:幀型別,為 0xAAAA-0300-0000-88CC。 
  • Data:資料,為 LLDPDU。 
  • FCS:幀檢驗序列。

1.3 目地地址

目地地址實際上包括三個,分別為01-80-C2-00-00-0E,01-80-C2-00-00-03,01-80-C2-00-00-00。這三個地址分別用於不同的目地,它們可以跨越不同的網路。

  • 01-80-C2-00-00-0E,也被稱為Nearest Bridge組地址:無論是Two-Port MAC Relay (TPMR)元件還是S-VLAN元件還是C-VLAN元件,還是802.1D網橋都不能轉發目地為該地址的幀。簡單的說任何型別的網橋都不能轉發目地為該地址的幀,目地為該地址的幀被限制在連線兩個網橋介面的連線上傳輸。
  • 01-80-C2-00-00-03,也被稱為Nearest non-TPMR Bridge組地址:對於目地地址為該地址的幀,Two-Port MAC Relay (TPMR)元件將成為一箇中繼器,即不接收它。而S-VLAN元件,C-VLAN元件,以及802.1D網橋不能轉發它,而是需要進行接收並處理。因此目地地址為該地址的幀將跨越TPMR。
  • 01-80-C2-00-00-00,也被稱為Nearest non-Customer Bridge組地址:對於目地地址為該地址的幀,Two-Port MAC Relay (TPMR)元件以及S-VLAN元件將成為中繼器,即不接收它。而C-VLAN元件,以及802.1D網橋不能轉發它,而是需要進行接收並處理。因此目地地址為該地址的幀將跨越TPMR以及S-VLAN。

TPMR以及S-VLAN,C-VLAN都是802.1Q中的概念,包括這三者的網路以及各個地址的作用範圍如下圖所示:


2. LLDPDU

LLDPPDU是LLDP的有效負載,用於承載要傳送的訊息。LLPDU的格式如下圖所示:

 

LLDPDU採用了TLV的格式,即type+lenght+value的格式,type表示TLV的型別,length是以位元組為單位的TLV的長度,value是該TLV的值。其中Chassis ID TLV,Port ID TLV Time To Live TLV以及End Of LLDPDU TLV是強制的,必須包含的部分,除此之外在TLV Time To Live TLV和End Of LLDPDU TLV之間可以包含0個到多個可選的其它TLV。

3. TLV

TLV是組成 LLDPDU的單元,每個 TLV都代表一個資訊。LLDPDU的TLV可以分為兩大類:

  • 被認為是網路管理的基礎的TLV集合,所有的LLDP實現都需要支援。
  • 組織定義的TLV擴充套件集和,包括 802.1組織定義 TLV、802.3組織定義TLV以及其他組織定義的TLV。這些TLV用於增強對網路裝置的管理,可根據實際需要選擇是否在 LLDPDU中傳送。 

TLV的基本格式如圖所示:

 

TLV的型別域的定義及分配如下圖所示:

 

其中type0-8屬於基本的TLV集合。對於其中的Mandatory的TLV,它是必須包含在LLDP中的。
組織定義TLV集合的格式如下圖所示:

 

其中:

  • OUI:組織機構的ID。
  • organizationally defined subtype:組織自定義的型別。
  • organizationally defined information string:傳輸的資訊。

4. 基礎TLV集合的TLV定義

幾個強制的必須包含的TLV的定義如下。非強制的可以參考IEEE802.1AB。

4.1 End Of LLDPDU TLV

該TLV用於標識LLDPDU的結束。其格式如下:

 

由於length=0,因此它不包含value域。

4.2 Chassis ID TLV

該TLV用於通告該LLDPDU傳送者的chassis ID。由於有很多方式可用來標識一個chassis,因此在該類TLV中包含一個子型別域用於告訴接收者,傳送者的chassis ID採用的是哪一種標識方式。其格式如圖所示:

 

每個LLDPDU必須包含且僅包含一個該型別的TLV。由於chassis ID實際上是用於標識裝置的,因此在連線可用時它應該保持不變。
chassis子型別所可能的取值如圖所示:

 

4.3 Port ID TLV

它用於標識傳送該LLDPDU的裝置的埠。類似於chassis ID,有很多方式可以標識一個Port,因此該TLV也包含一個子型別域。其格式如下圖所示:

 

每個LLDPDU必須包含一個且只能包含一個該型別的TLV。同時,當埠可用時,從該埠傳送出去的LLDPDU的該TLV應該保持不變。
其子型別的可能取值如下圖所示:

 

4.4 Time To Live TLV

該TLV用於告訴接收端,它接收到的這些資訊的有效期有多長。其格式如圖所示:

 

TTL的時間單位是秒,由於只有2個位元組長,因而最大有效時間是65536秒。如果在這個時間到期了還沒有新的LLDPDU被收到,則該TLV所屬的那個LLDPDU攜帶的資訊會被從MIB中刪除。如果收到了新的LLDPDU,則:

  • 如果TTL不為0,則會用新收到的LLDPDU的資訊替換MIB庫中的相應的資訊(即與該LLDPDU的傳送者相關的MIB資訊,LLDP使用Chassis ID + Port ID來判斷是否來自於同一個源,這也是要求這兩者保持不變的原因)。
  • 如果TTL為0,則刪除相應的MIB庫中的資訊(即與該LLDPDU的傳送者相關的MIB資訊)。因此TTL為0的LLDPDU又被稱為SHUTDOWN LLDPDU。

每一個LLDPDU必須包含且只能包含一個該型別的TLV。

四、工作機制

LLDP是一個用於資訊通告和獲取的協議,但是需要注意的一點是,LLDP傳送的資訊通告不需要確認,不能傳送一個請求來請求獲取某些資訊,也就是說LLDP是一個單向的協議,只有主動通告一種工作方式,無需確認,不能查詢、請求(比如像ARP協議那樣請求某個IP的MAC地址)。
LLDP主要完成如下工作:

  1. 初始化並維護本地MIB 庫中的資訊。
  2. 從本地MIB 庫中提取資訊,並將資訊封裝到LLDP 幀中。LLDP幀的傳送有兩種觸發方式,一是定時器到期觸發,一是裝置狀態發生了變化觸發。
  3. 識別並處理接收到的LLDPDU幀
  4. 維護遠端裝置LLDP MIB 資訊庫。
  5. 當本地或遠端裝置MIB資訊庫中有資訊發生變化時,發出通告事件。

1.LLDPDU傳送

1.1 傳送機制

LLDPDU的傳送可以被如下事件觸發:

  • 與本地MIB資訊庫相關聯的定時器txTTR到期時,這將確保遠端接收系統中的相關資訊不會因為TTL到期而過期。
  • 本地MIB資訊庫中的資訊發生了改變時,會立即傳送LLDPDU,這將保證改變能及時被更新。
  • 如果一個“新鄰居”被識別,將會啟用快速傳送機制,在很短的時間內連續傳送指定數量(txFastInit,預設值為4)的LLDPDU,以確保“新鄰居”能被快速更新。如果遠端系統MIB資訊庫因為過載(tooManyNeighbors)而不能容納新的鄰居資訊,則會為了避免過多的PDU傳輸而抑制快速傳送行為。

LLDP的常規傳送時間是建立在系統的tick之上的,間隔為1秒一個,為了防止在共享介質的LAN(shared media LAN)中同時出現大量的LLDPDU(因為接入同一個LAN的多個系統的時間是同步的,因而多個系統上的基於tick的1秒定時器可能同時到期),傳送定時器引入了一個隨機的抖動,這就使得常規的LLDP幀的傳送間隔時間的平均值仍是1秒,但是具體到某一次到期時間可能並不是準確的1秒。
同時為了防止在有多個埠需要傳送LLDPDU的系統中,所有的埠的定時器都在同一時間到期,因而標準建議將採用某種機制將多個傳送例項的定時器到期時間給錯開,以避免一個系統在同一時刻傳送大量的LLDPDU。

1.2 傳送狀態機

LLDPDU的傳送狀態機如圖所示

  對於該狀態機:
  • 為了防止過於頻繁的重新初始化傳送狀態機,在LLDP的傳送狀態機中引入了一個延時,該延時限制了在關閉傳送狀態機後,必須至少等待多長時間才能重新初始化傳送狀態機。
  • 是否傳送SHUTDOWNLLDPDU由本地的LLDP工作狀態決定。
  • 是否傳送正常的LLDPDU由txNow和txCredit決定。這兩個變數都由傳送定時器狀態機更新。txNow決定是否傳送,而txCredit則是一個信用量,決定了可以傳送的量,如果是0則不允許傳送,只有大於0的值才允許傳送,每傳送一個該值就減1。更重要的是在本地資訊快速改變時,txCredit即允許連續傳送多個LLDPDU,但是又對可以連續傳送的LLDPDU幀數做了限制,這使得本地狀態的快速改變可以及時被通告出去,但是又不能無限傳送導致網路出現大量LLDPDU幀。

1.3傳送定時器狀態機

LLDP傳送定時器狀態機如圖所示:

  localChange表示本地資訊是否發生改變;txTTR表示下一次定時器到期的時間;newNeighbor表示是否發現了新的鄰居,並由接收狀態設定,由該狀態機清除;txTick表示基於系統時間的1秒定時器是否到期。
對於該狀態機:
  • SIGNAL_TX用於觸發傳送,它會將txNow設定為允許傳送,並設定本地資訊發生改變為FALSE,如果當前不是在快速傳送狀態(txFast = 0)就設定傳送定時器下次到期時間為msgTxInterval(msgTxInterval預設為30秒,取值範圍1-3600秒),否則設定傳送定時器下次到期時間為msgFastTx(msgFastTx預設值為1秒,取值範圍1-3600秒)
  • 如果本地資訊發生了改變,就立即進入SIGNAL_TX
  • 如果定時器到期,則如果txFast大於0,則將其減1並進入SIGNAL_TX,否則直接進入SIGNAL_TX
  • 如果發現了新鄰居,則首先將發現新鄰居的標識更新為沒有發現新鄰居,然後如果當前已經處於快速傳送狀態就直接進入傳送定時器到期狀態(以觸發一次立即傳送),否則設定txFast的值為txFastInit的值(txFastInit預設值為4,取值範圍1-8)
  • 如果基於系統時間的1秒定時器到期,則給txCredit增加信用量,其最大值為txCreditMax,txCreditMax是一個取值在1到10之間的值,預設值為5。
這裡有取值範圍的幾個變數都是可配置的變數。
從上述兩個狀態機的工作狀態可以看出,傳送定時器狀態機用於維護信用量以及是否允許傳送LLDPDU幀,而傳送狀態機根據這兩個資訊來決定是否傳送。
另外需要注意的是LLDP所使用的所有定時器操作都是基於“基於系統時間的1秒定時器的”,每當這個定時器到期時它除了會將txTick設定為TRUE外,還會處理其它的定時功能。

2.LLDPDU 接收

2.1 接收機制

LLDP幀的接收由3個階段組成:幀的識別、幀的校驗以及LLDP遠端MIB資訊庫更新。

2.1.1 幀的識別

幀識別由在LLDP/LSAP(鏈路服務訪問點)進行,檢查的內容是幀的目的地是否是LLDP的組播MAC地址,幀的型別是否是LLDP。

2.1.2 幀的驗證

該過程會首先根據TLV的格式定義依次校驗Chassis ID TLV,Port ID TLV, Time To Live TLV,如果這三個TLV都存在且有效,才會進一步的解碼可選的TLV直到遇到End Of LLDPDU TLV,然後根據獲得的資訊更新遠端MIB資訊庫。

2.1.3 遠端MIB資訊庫更新

在前兩步都通過之後,LLDPDU的接收者就需要根據解析出來的資訊更新遠端MIB資訊庫。在MIB資訊庫中,LLDP使用chassis ID + Port ID來標識、儲存來自不同源的資訊。

  • 如果遠端MIB庫中已經有對應於該chassis ID + Port ID的資訊,則使用收到的幀中的新的TTL來更新TTL。並用對於收到的新的LLDPPDU中的每一種type,如果有變化就進行更新,如果某種type原來不存在,則需要將其新增到MIB庫中。
  • 如果實現不支援某種型別的type,則
    • 如果type不是127,則按照基本TLV的格式將其儲存到遠端MIB庫,儲存格式為type, length,value。
    • 如果type是127,則按照組織定義TLV的格式將其儲存到遠端MIB庫,儲存格式為type, length,value,OUI,組織自定義子型別,以及資訊域。

更新時,如果需要新增新的chassis ID + Port ID的表項,或者為某個chassis ID + Port ID新增新的TLV,則可能遇到沒有記憶體的問題,標準沒有規定必須如何處理,只是給出了一些建議:

  • 忽略新的LLDPDU的資訊
  • 刪除最舊的資訊以釋放空間給新的資訊
  • 隨機刪除一些舊的資訊以釋放空間給新的資訊

LLDPDU 攜帶的TTL(Time To Live)值會影響接收端的處理方式,如果它不為0,則更新相應資訊的老化時間,如果接收到的LLDPDU 中的TTL 等於0,則將立刻老化掉相應的資訊(即與該LLDPDU的傳送者相關的MIB資訊)。
如果一個chassis ID + Port ID標識的資訊的TTL超時,則相應的MIB資訊會被刪除。

2.2 接收狀態機

LLDPDU的接收狀態機如圖所示:

 

3. LLDP工作模式

LLDP可以工作在多種模式下:

  • TxRx:既傳送也接收LLDP 幀。
  • Tx:只發送不接收LLDP 幀。
  • Rx:只接收不傳送LLDP 幀。
  • Disable:既不傳送也不接收LLDP 幀(準確的說,這並不是一個LLDP的狀態,這可能是LLDP功能被關閉了,也可能是裝置就不支援)。

由於LLDP可以單獨工作在傳送或接收模式下,因此LLDP協議的實現需要支援單獨初始化傳送或者接收功能。當工作模式發生變化時,需要根據老的/新的工作模式來關閉/打開發送或者接收的功能。

(轉載自:http://blog.csdn.net/goodluckwhh/article/details/10948065)

相關推薦

發現協議LLDP講解

一、LLDP協議概述  隨著網路技術的發展,接入網路的裝置的種類越來越多,配置越來越複雜,來自不同裝置廠商的裝置也往往會增加自己特有的功能,這就導致在一個網路中往往會有很多具有不同特性的、來自不同廠商的裝置,為了方便對這樣的網路進行管理,就需要使得不同廠商的裝置能夠在網路

計算機網絡之狀態路由選擇算法LS

alt 一次 更新 最小 fff nag 狀態 imu n) 一、準備知識 ????????鏈路狀態路路由選擇算法是一種全局式路由選擇算法。在此算法中,我們是假設所有網絡拓撲和鏈路費用都是已知的(實踐中通常是通過讓每個結點向網絡中所有其他節點廣播鏈路狀態分組來完成的)【OS

分散式監控追蹤分析與實踐

背景 隨著網際網路架構的擴張,分散式系統變得日趨複雜,越來越多的元件開始走向分散式化,如微服務、訊息收發、分散式資料庫、分散式快取、分散式物件儲存、跨域呼叫,這些元件共同構成了繁雜的分散式網路,那現在的問題是一個請求經過了這些服務後其中出現了一個呼叫失敗的問題,只知道有異常

ApiTesting全自動化測試框架 - 初版釋出

簡介 此框架是基於Python+Pytest+Requests+Allure+Yaml+Json實現全鏈路介面自動化測試。 主要流程:解析介面資料包 ->生成介面基礎配置(yml) ->生成測試用例(yaml+json) ->生成測試指令碼(.py) ->執行測試(pyte

微服務架構之:父專案及服務註冊與發現中心Eureka搭建

1、建立spring boot父專案 (1.1)file---new----project: (1.2)選擇spring initializr,選擇自己本地安裝的jdk。點選next (1.3)填寫自己的專案資訊,next: (1.4)選擇core-devtools

資料鏈差錯檢測:CRC迴圈冗餘檢驗

1、迴圈冗餘檢驗(CRC): 在傳送端,先把資料劃分為祖,假定每組K個位元。現假定待傳送的資料M = 101001(k=6)。CRC運算就是在資料M後面新增提供差錯檢測的n位冗餘碼,然後構成一個幀傳送出去,一共傳送(k+n )位。在所要傳送的資料後新增冗餘碼,顯然增大了資

IP選與動態選協議

(參考文獻)TCP/IP詳解,卷1:協議 選路是IP最重要的功能之一。需要進行選路的資料報可以有本地主機產生,也可以由其他主機產生。在有一種情況下,主機必須配置成一個路由器,否則通過網路介面搜到的資料報,如果目的地址不是本機就要丟棄。 在以上圖中有一個路由守護程式(d

P1807 最長_NOI導刊2010提高07

接下來 for pac ext 輸入輸出 etc while out string 洛谷——P1807 最長路_NOI導刊2010提高(07) 題目描述 設G為有n個頂點的有向無環圖,G中各頂點的編號為1到n,且當為G中的一條邊時有i <

【SSH進階之】Hibernate基本映射

tor res 主動 tran clas oid 支持包 lose 包括 【SSH進階之路】Hibernate基本原理(一) ,小編介紹了Hibernate的基本原理以及它的核心。採用對象化的思維操作關系型數據庫。 【SSH進階之路】Hibernate搭建開發環境+簡單

【計算機網絡】數據交換技術和多復用技術的正nao確(can)打開方式

分割 image user 信號 也不能 soft 所有 什麽是 收費 交換的作用 數據交換是計算機網絡中兩個終端進行數據傳輸的方式,它又可以分成兩種類型:電路交換和分組交換。很顯然,問題的核心在於“交換”,那麽我們首先要思考的是:交換的作用

達內-linux基礎-day07-聚合接和防火墻策略管理初級

達內-linux基礎-day07-聚合鏈接和防火墻策略管理(初級)############################################################################### 配置聚合連接(網卡綁定)team,聚合連接(也稱為鏈路聚合)– 由多塊網卡(tea

刪除排序表中的重復元素簡單

pan ret margin nsf ace 刪除 nor bold -c 這道題比較簡單,不做過多的描述 給定一個排序鏈表,刪除所有重復的元素每個元素只留下一個。 樣例 給出 1->1->2->null,返回 1->2->null 給出 1

DBA成長之---mysql數據庫服務

連接查詢 過程 where 存在 arc nat 唯一索引 rest nal 管理表記錄 增加insert into 庫.表 values(字段值列表);insert into 庫.表(字段值列表) values(字段值列表);insert into 庫.表 values(

計算機網絡相關:應用協議:HTTP

toc connect html文本 con 也不會 http服務 lang 代碼 保存 前言 復習下計算機網絡的知識並記錄 正文 定義:HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協

數據結構-線性表的式存儲相關算法C語言實現

存儲位置 lib 方法 lis 逆序 順序 程序 查詢 c語言 鏈表的簡單介紹 為什麽需要線性鏈表 當然是為了克服順序表的缺點,在順序表中,做插入和刪除操作時,需要大量的移動元素,導致效率下降。 線性鏈表的分類 按照鏈接方式: 按照實現角度: 線性鏈表的創建和簡單遍歷

小白學習之,網絡編程

多人 困難 get err lose imp 出現 popen one 一,socket進階 在前面的博客中講到了一些基本的計算機網絡知識,有一點也是為我在要考傳輸與交換看到一個題,然後就看到說ARP屬於網絡層,因為ARP協議跟網絡相關,但是我前面的博客說的是ARP協議屬於

區塊學這個就夠了-DLT

sys sensu 對賬 支付 app -s 狀態 轉發 其它 三種不同的框架 Hyperledger Fabric、R3 Corda三種框架在可能的應用領域上分別具有完全不同的想法。Fabric和Corda的開發是受具體用例驅動的。其中,Corda的用例來自於金融服務行業

區塊ico發幣的基本流程

服務 合成 edge 自動化腳本 聯網 互聯網 區塊 繼續 國外 今天卓誌就帶你完整的了解區塊鏈發幣的流程。這是第一篇。首先我們來明確一下概念。什麽是區塊鏈?區塊鏈(英文:Blockchain)是由一串使用密碼學方法產生的數據塊組成的,每一個區塊都包含了上一個區塊的哈希值(

MySQL服務本地接成功,遠程失敗10060

size bin 我們 mark nbsp blog b2c span csdn 通過CMD命令行修改數據庫表的一個字段的值,實現連接,訪問。 第一步、找到MYSQL軟件安裝所在的bin目錄; (1)cd\當前目錄 (2)指定MYSQL安裝的bin目錄 (3)輸入 -h

Pthon學習之 第四篇 Python基礎

pri bsp programs -s alt 如果 lex class 算數運算 1.運算符:+ - *(乘法) /(除法) %(求余) //(求商) **(求冪) 2.成員運算:in not in:判斷單個字符或者子序列在不在字符串中。(n