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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章