一個網管在做網絡維護過程中,經常會遇到交換機設備的更換、交換機之間連接關系的改變以及交換機所連接終端的改變,也經常需要處理各種網絡故障。
特別是較大的單位往往網絡拓撲結構會很復雜,交換機的數量可以達到幾十臺甚至上百臺,設備分布范圍可以達到幾十甚至上百公里。一般在層次上會將交換機分為核心層交換機、匯聚層交換機和接入層交換機,各層交換機下還可能級聯交換機或HUB,每個交換機都可能直接連接終端,形成一個復雜的樹形網絡系統。

圖1 含有多層交換機的局域網的典型應用場景
筆者所在單位的應用場景即是如此,這種情況下,動態地掌握交換機之間以及交換機與終端間的連接關系,可以大大提高網絡故障的處理效率,提高網絡維護水平。在實際工作中,筆者編寫了交換機接口關系查詢程序,實現了交換機接口連接情況的動態掌握。
如圖1所示,在較復雜的局域網中,交換機之間的連接關系構成一種樹形結構,設備之間的訪問需要跨越若干個交換機。不同的終端或服務器設備被劃分到不同的VLAN中,以實現減少廣播、隔離應用等目的。而要跨VLAN訪問,必須在本機設置網關,在圖1中,終端A、B屬于 VLAN138,服 務 器屬于VLAN137,終端A若想訪問服務器A,必須指定網關10.19.138.1,而該地址是具有路由功能的核心交換機中定義的VLAN138的地址。
圖中,交換機之間黑實線代表Trunk連接,例如交換機1.2與1.2.2之間的連接。Trunk可以通過所有VLAN,但需要兩端的交換機定義該VLAN并應用到直接連接終端或服務器的端口,例如交換機1.2.2的Fa1/2端口必須指定為VLAN138。所有交換機都有一個MAC表,每條記錄記載著所連接設備的MAC地址和接口的對應關系。同時,也有一個ARP表,每條記錄記載著設備IP地址與MAC地址的對應關系。
正常網絡應用情況下,只要設備連接到某交換機,就會在該交換機中存在一條MAC記錄;只要設備設置了到核心交換機的默認路由,就會在核心交換機中存在一條ARP記錄。
在默認情況下,除了本地端口外,CISCO交換機ARP表某條記錄的存活時間為240分鐘,MAC記錄默認的存活時間為300秒,即若設備斷線時間達到240分鐘時,就會清除對應的ARP記錄,若設備斷線300秒,就會清除對應的MAC記錄。這種“存活時間”的機制是為了不使ARP表和MAC表的記錄數量過于龐大而導致訪問時間變長或超出分配的存儲空間,而在局域網環境下,由于設備數量的可預見性和相對固定的特點,這種“過期清除”的意義是不大的。

圖2 交換機間的連接關系
1.根據核心交換機的管理地址,自動生成所有交換機的設備型號、命名,以樹形結構(以下簡稱“樹”)展示各層交換機之間的連接關系,交換機通過哪個接口上(下)聯哪個交換機的哪個接口(如圖 2)。圖中,接入層交換機i_shiyan型號為 WS-2960S-24TS-L,地 址為192.168.1.22,通過端口Gi1/0/25上聯匯聚層交換機i_dianjianB的端口Gi3/5,通過端口Gi1/0/26下聯交換機i_jingshui的Gi0/1端口。若交換機的連接關系發生變化或IP地址、設備型號發生變化時需重新生成樹。

圖3 交換機接口連接的設備
2.可以查詢某個交換機的所有接口的連接設備(終端、服務器或交換機)并動態更新終端設備的上聯信息(如圖3)。圖中該交換機哪個接口連接什么設備、沒聯設備的端口屬于哪個VLAN以及端口(如Gi4/48)是否通過交換機或HUB連接一組設備等一目了然。有了這些信息,對網絡維護中諸如加入設備或是臨時用筆記本調試網絡會帶來很大的方便。
3.可以查詢某個終端上聯到哪個交換機的哪個接口并動態更新終端設備的上聯信息(如圖4),若該終端不在線,則顯示上一次查詢的信息。
4.生成Excel格式終端設備上聯信息表(參見圖2,可執行“導出”命令得到該表)。
限于篇幅,本文所涉及到的原理知識及命令解釋不在此贅述。
在手工模式下,我們要查詢所有交換機之間的連接關系,需要從核心交換機開始,通過 TELNET(或SSH,下同)登錄到交換機,執行交換機本身提供的命令(以CISCO交換機為例,下同,華為交換機也有對應的命令)show cdp (若是其他交換機或混合使用各種交換機可以使用show lldp或display lldp命令,下同),該命令可以顯示出與該交換機直接相連的交換機的信息(設備型號、IP、連接端口等),然后對核心交換機的下一級(匯聚層)進行遍歷(使用show cdp 發現接入層交換機),層層深入,以此類推,直到發現所有交換機的信息,這時就可以生成一個以核心交換機為根的樹。

圖4 查詢終端設備連接的交換機
要實現這個功能,需要使用“樹的遍歷”算法。當然,如果限定交換機的層數,也可以用其他方法實現。在此過程中,最關鍵的是Telnet返回數據的處理,對于一次返回數據超過winsock限度的,對返回信息需要做過濾處理,以減少返回信息的長度。
而要查詢交換機所有接口信息(如接口的VLAN號、是否為Trunk、是否設置、是否UP等),可以使用命令“show int swi”,對于狀態為“UP”的端口應該是通過Trunk連接的交換機或通過VLAN連接的終端。
如果是交換機,可以從以上樹中得到所連接的交換機;而如果是終端,則可以通過show mac命令得到終端的MAC地址,再通過核心交換機的show arp得到終端的IP地址;對于狀態為“DOWN”的,可以從庫中得到接口信息(每個連接的終端如果在狀態為“UP”時被查詢過,就會將上聯接口信息存在庫中)。
對于通過終端的IP地址查詢上聯交換機的接口(以下稱為“IP查詢”),實現方法是在核心交換機上運行命令show arp 得到該終端的MAC地址,再通過命令show mac得到端口號,若該端口號不在以上樹中,則說明該終端連接的是該交換機;若在樹中出現,則需要沿著樹進行遍歷,在每個“路過”的交換機上運行show mac得到該MAC對應的端口號,直到該端口號不在樹中。
我們查詢交換機的接口情況或通過IP地址查詢該設備上聯哪個交換機,都需要用到ARP表和MAC表,而通過前述的“存活機制”可知,若因為設備離線幾個小時導致記錄被清除就無法知道它所連接的交換機,這顯然不是我們希望看到的。如某人出差幾天,設備關機了,我們仍需要知曉其終端是怎么連接交換機的。
要解決這一問題,方法是將設備的連接關系存儲在參數文件(或數據庫)中,形成一個二維表uplink,結構為“UserName,UserIP,UplinkSwitchName,UplinkSwitchIP,UplinkSwitchPort”,其中記錄在ports查詢和IP查詢時更新。
反之,若在ports查詢或IP查詢時設備不在線,則讀取表uplink中的數據,即上次的查詢數據。IP地址表的生成即依賴于該二維表。
顯然,按照上面的思路,要實現程序功能,需要解決以下問題。
1.實現TELNET訪問
所有交換機必須啟動TELNET服務,設置訪問口令,并確保返回的信息一次全部接收(取消默認的按頁回顯)以簡化編程。以交換機i_hexinA為例(”#”后為輸入的命令)需要進行如下設置:

圖5 Telnet流程

本例中,實現TELNET訪問的方法是通過WINSOCK控件訪問交換機,發出命令,處理回顯信息,過程如圖5。
2.交換機命令的使用及返回數據的處理
要實現查詢功能,首先必須了解交換機命令的功能、使用方法和技巧,使發給交換機的命令的返回信息,既能滿足程序功能需要,又要便于程序對返回數據的處理。
例如使用命令“show cdp nei”可以得到交換機鄰居的名稱、接口信息,但是卻得不到所連接的交換機的IP地址,這時應該使用“show cdp nei de”命令,而該命令的返回信息比較復雜;再比如,命令“show arp”可以返回交換機的ARP表信息,但是,當表的信息過多時,就會超出winsock對緩沖區大小的限制,使返回信息不完整,這時就需要使用命令“show arp | exclude Incom”對無用的信息進行過濾。
3.本程序中為了簡化編程,假定了交換機的Telnet口令均為“cisco”,實際在編程中可能會復雜得多。
例如,可能使用ssh訪問交換機,身份驗證模式可能是user/password,不同交換機完成相應功能的命令也不一樣,這時就需要一個參數文件進行聲明,編程也會復雜一些。
總之,編制一個交換機接口管理的工具軟件,既需要了解交換機及相關網絡知識,也需要具備一些編程知識。有了這個工具,會使網管人員的工作效率大大提高。