如何通過LLDP獲取網絡拓撲?

  • 2019 年 12 月 10 日
  • 筆記

cloudman

主要專註於雲計算方向,openstack研發

熱愛技術和生活

導 言

在某些應用場景中,需要獲取網絡中的拓撲信息,比如服務器網口和交換機的連接關係。為了滿足這個要求,可以利用lldp協議,來實現該要求。

1

LLDP協議

LLDP(Link Layer Discovery Protocol)鏈路層發現協議,協議設計的主要目的是進行信息的通告,進而獲得關於網絡拓撲以及相關管理配置信息。這是一個二層協議,它提供了一種標準方式來發現鏈路連接關係的能力,使得接入網絡的一台設備可以將其主要的能力,管理地址,設備標識,接口標識等信息組織成不同的TLV(Type/Length/Value),並封裝在LLDPDU(Link Layer Discovery Protocol Data Unit,鏈路層發現協議數據單元)中,發送給接入同一個局域網絡的其它設備。

LLDP協議有四種工作模式:

TxRx:既發送也接收LLDP幀

Tx: 只發送不接收LLDP幀

Rx:只接收不發送LLDP 幀

Disable:既不發送也不接收

LLDP的工作原理

LLDP協議,從本質上來講就是一個信息發現和通告協議。設備中的LLDP實體維護了兩個MIB(Management Information Base) 庫,一個是local system MIB,用來維護本地設備的相關信息;一個是remote system MIB,用來維護遠端設備的相關信息。

LLDP 通過與相關的MIB庫交互來初始化並維護本地MIB,並經本地的相關信息通告出去,同時接收其他設備的通告信息,並將其更新到remote system MIB。通過這種方式,就可以獲取設備的鄰居信息。用戶就可以使用這兩個MIB 庫來完成自己的需求。

LLDP 報文格式

封裝有LLDPDU (lldp 協議的協議數據單元)的報文,稱之為LLDP幀。其封裝格式有兩種:Ethernet II 和 SNAP(Subnetwork Access Protocol,子網訪問協議)。我們經常使用的就是以太幀,所以這兒就重點說一下基於Ethernet II 的LLDP報文。

Destination MAC address:目的MAC地址,為固定的組播MAC地址0x0180-C200-000E。

Source MAC address:源MAC地址,為端口MAC地址或設備橋MAC地址(如果有端口地址則使用端口MAC地址,否則使用設備橋MAC地址)

Type:報文類型,固定為0x88CC。

Data:數據,為LLDPDU

FCS:幀檢驗序列

其中LLDPDU 就是封裝在LLDP報文數據部分的數據單元。只不過在組成LLDPDU之前,設備會先將本地的相關信息封裝成TLV,然後再將多個TLV組合成一個LLDPDU,封裝在LLDP報文的數據部分進行傳送。

LLDPDU 格式

每個LLDPDU 最多可以攜帶28種TLV,LLDP報文預訂,Chasis ID TLV, Port ID TLV, TTL TLV 和 End TLV 這四種是必須攜帶的,其餘的TLV則是可選的。

下面是一個基本TLV的list:

2

TLV 格式

TLV是組成LLDPDU的單元,其基本格式如下:

其中TLV Type 和 TLV Info String Length 稱為TLV的header, 剩下的信息就是TLV的數據部分,根據TLV Length字段的值,就可以拿到具體的TLV數據。

其中 TLV Type的定義和分配如下表:

其中type 0-8為基本的TLV集合,其中Mandatory 則為必須的TLV,必須包含在lldp 數據報文中。

3

獲取lldp鄰居信息

通過lldptool

linux提供了一個工具 lldptool 來查詢和管理lldp信息。在安裝了lldptool 相關工具的服務器上,我們可以獲取到該服務器的物理拓撲信息:連接的交換機和交換機的相關端口信息。

下面是我們從服務器抓取到的lldp 信息。

上圖中,我們可以看到,通過lldp ,抓取到該eth0網卡上聯的交換機名稱(System Name TLV),交換機端口(Port ID TLV)和 當前所述的VLAN信息(Port VLAN ID TLV)。

通過原始套接字,抓取lldp數據幀

當然除了使用lldptool 工具來獲取拓撲 信息,還可以自己通過抓取lldp 報文來分析相關的TLV信息,進而獲取相連的鄰居信息。

下面一個就是我通過原始套接字抓取的lldp 信息:

可以看到,列表中的每一項均為,key,value的 元組形式,其中key表示的就是TLV type,value就是該type的所表示的具體信息,當前是以二進制的形式,需要將二進制解碼為字符串,就可以得到與lldptool 一樣的拓撲信息。

 4 

參考

1.https://learningnetwork.cisco.com/docs/DOC-26851

2.https://blog.csdn.net/goodluckwhh/article/details/10948065

3.http://www.023wg.com/message/message/cd_feature_lldp_message_format.html

猜你還想看這些內容

●如何使用dex搭建一個身份認證系統?

●Ceph Bulestore磁盤空間分配初探

●搬運基礎服務到kubernetes,遇這3類大坑怎麼破?

· END ·

記得文末點個好看鴨~


點就完事兒了!