數據鏈路層學習之LLDP

2020-08-12 23:24:11

原文地址:https://blog.csdn.net/goodluckwhh/article/details/10948065

Table of Contents

一、LLDP協定概述 

二、LLDP結構

三、LLDP基本概念

1.LLDP幀格式

1.1 Ethernet II格式封裝的LLDP幀 

1.2 SNAP格式封裝的LLDP幀

1.3 目地地址

2. LLDPDU

3. TLV

4. 基礎TLV集合的TLV定義

4.1 End Of LLDPDU TLV

4.2 Chassis ID TLV

4.3 Port ID TLV

4.4 Time To Live TLV

四、工作機制 機製

1.LLDPDU發送

1.1 發送機制

1.2 發送狀態機

1.3發送定時器狀態機

2.LLDPDU 接收

2.1 接收機制 機製

2.2 接收狀態機

3. 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.1 Ethernet 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協定的實現需要支援單獨初始化發送或者接收功能。當工作模式發生變化時,需要根據老的/新的工作模式來關閉/打開發送或者接收的功能。