一個(gè)網(wǎng)管在做網(wǎng)絡(luò)維護(hù)過(guò)程中,經(jīng)常會(huì)遇到交換機(jī)設(shè)備的更換、交換機(jī)之間連接關(guān)系的改變以及交換機(jī)所連接終端的改變,也經(jīng)常需要處理各種網(wǎng)絡(luò)故障。
特別是較大的單位往往網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)會(huì)很復(fù)雜,交換機(jī)的數(shù)量可以達(dá)到幾十臺(tái)甚至上百臺(tái),設(shè)備分布范圍可以達(dá)到幾十甚至上百公里。一般在層次上會(huì)將交換機(jī)分為核心層交換機(jī)、匯聚層交換機(jī)和接入層交換機(jī),各層交換機(jī)下還可能級(jí)聯(lián)交換機(jī)或HUB,每個(gè)交換機(jī)都可能直接連接終端,形成一個(gè)復(fù)雜的樹形網(wǎng)絡(luò)系統(tǒng)。
圖1 含有多層交換機(jī)的局域網(wǎng)的典型應(yīng)用場(chǎng)景
筆者所在單位的應(yīng)用場(chǎng)景即是如此,這種情況下,動(dòng)態(tài)地掌握交換機(jī)之間以及交換機(jī)與終端間的連接關(guān)系,可以大大提高網(wǎng)絡(luò)故障的處理效率,提高網(wǎng)絡(luò)維護(hù)水平。在實(shí)際工作中,筆者編寫了交換機(jī)接口關(guān)系查詢程序,實(shí)現(xiàn)了交換機(jī)接口連接情況的動(dòng)態(tài)掌握。
如圖1所示,在較復(fù)雜的局域網(wǎng)中,交換機(jī)之間的連接關(guān)系構(gòu)成一種樹形結(jié)構(gòu),設(shè)備之間的訪問需要跨越若干個(gè)交換機(jī)。不同的終端或服務(wù)器設(shè)備被劃分到不同的VLAN中,以實(shí)現(xiàn)減少?gòu)V播、隔離應(yīng)用等目的。而要跨VLAN訪問,必須在本機(jī)設(shè)置網(wǎng)關(guān),在圖1中,終端A、B屬于 VLAN138,服 務(wù) 器屬于VLAN137,終端A若想訪問服務(wù)器A,必須指定網(wǎng)關(guān)10.19.138.1,而該地址是具有路由功能的核心交換機(jī)中定義的VLAN138的地址。
圖中,交換機(jī)之間黑實(shí)線代表Trunk連接,例如交換機(jī)1.2與1.2.2之間的連接。Trunk可以通過(guò)所有VLAN,但需要兩端的交換機(jī)定義該VLAN并應(yīng)用到直接連接終端或服務(wù)器的端口,例如交換機(jī)1.2.2的Fa1/2端口必須指定為VLAN138。所有交換機(jī)都有一個(gè)MAC表,每條記錄記載著所連接設(shè)備的MAC地址和接口的對(duì)應(yīng)關(guān)系。同時(shí),也有一個(gè)ARP表,每條記錄記載著設(shè)備IP地址與MAC地址的對(duì)應(yīng)關(guān)系。
正常網(wǎng)絡(luò)應(yīng)用情況下,只要設(shè)備連接到某交換機(jī),就會(huì)在該交換機(jī)中存在一條MAC記錄;只要設(shè)備設(shè)置了到核心交換機(jī)的默認(rèn)路由,就會(huì)在核心交換機(jī)中存在一條ARP記錄。
在默認(rèn)情況下,除了本地端口外,CISCO交換機(jī)ARP表某條記錄的存活時(shí)間為240分鐘,MAC記錄默認(rèn)的存活時(shí)間為300秒,即若設(shè)備斷線時(shí)間達(dá)到240分鐘時(shí),就會(huì)清除對(duì)應(yīng)的ARP記錄,若設(shè)備斷線300秒,就會(huì)清除對(duì)應(yīng)的MAC記錄。這種“存活時(shí)間”的機(jī)制是為了不使ARP表和MAC表的記錄數(shù)量過(guò)于龐大而導(dǎo)致訪問時(shí)間變長(zhǎng)或超出分配的存儲(chǔ)空間,而在局域網(wǎng)環(huán)境下,由于設(shè)備數(shù)量的可預(yù)見性和相對(duì)固定的特點(diǎn),這種“過(guò)期清除”的意義是不大的。
圖2 交換機(jī)間的連接關(guān)系
1.根據(jù)核心交換機(jī)的管理地址,自動(dòng)生成所有交換機(jī)的設(shè)備型號(hào)、命名,以樹形結(jié)構(gòu)(以下簡(jiǎn)稱“樹”)展示各層交換機(jī)之間的連接關(guān)系,交換機(jī)通過(guò)哪個(gè)接口上(下)聯(lián)哪個(gè)交換機(jī)的哪個(gè)接口(如圖 2)。圖中,接入層交換機(jī)i_shiyan型號(hào)為 WS-2960S-24TS-L,地 址為192.168.1.22,通過(guò)端口Gi1/0/25上聯(lián)匯聚層交換機(jī)i_dianjianB的端口Gi3/5,通過(guò)端口Gi1/0/26下聯(lián)交換機(jī)i_jingshui的Gi0/1端口。若交換機(jī)的連接關(guān)系發(fā)生變化或IP地址、設(shè)備型號(hào)發(fā)生變化時(shí)需重新生成樹。
圖3 交換機(jī)接口連接的設(shè)備
2.可以查詢某個(gè)交換機(jī)的所有接口的連接設(shè)備(終端、服務(wù)器或交換機(jī))并動(dòng)態(tài)更新終端設(shè)備的上聯(lián)信息(如圖3)。圖中該交換機(jī)哪個(gè)接口連接什么設(shè)備、沒聯(lián)設(shè)備的端口屬于哪個(gè)VLAN以及端口(如Gi4/48)是否通過(guò)交換機(jī)或HUB連接一組設(shè)備等一目了然。有了這些信息,對(duì)網(wǎng)絡(luò)維護(hù)中諸如加入設(shè)備或是臨時(shí)用筆記本調(diào)試網(wǎng)絡(luò)會(huì)帶來(lái)很大的方便。
3.可以查詢某個(gè)終端上聯(lián)到哪個(gè)交換機(jī)的哪個(gè)接口并動(dòng)態(tài)更新終端設(shè)備的上聯(lián)信息(如圖4),若該終端不在線,則顯示上一次查詢的信息。
4.生成Excel格式終端設(shè)備上聯(lián)信息表(參見圖2,可執(zhí)行“導(dǎo)出”命令得到該表)。
限于篇幅,本文所涉及到的原理知識(shí)及命令解釋不在此贅述。
在手工模式下,我們要查詢所有交換機(jī)之間的連接關(guān)系,需要從核心交換機(jī)開始,通過(guò) TELNET(或SSH,下同)登錄到交換機(jī),執(zhí)行交換機(jī)本身提供的命令(以CISCO交換機(jī)為例,下同,華為交換機(jī)也有對(duì)應(yīng)的命令)show cdp (若是其他交換機(jī)或混合使用各種交換機(jī)可以使用show lldp或display lldp命令,下同),該命令可以顯示出與該交換機(jī)直接相連的交換機(jī)的信息(設(shè)備型號(hào)、IP、連接端口等),然后對(duì)核心交換機(jī)的下一級(jí)(匯聚層)進(jìn)行遍歷(使用show cdp 發(fā)現(xiàn)接入層交換機(jī)),層層深入,以此類推,直到發(fā)現(xiàn)所有交換機(jī)的信息,這時(shí)就可以生成一個(gè)以核心交換機(jī)為根的樹。
圖4 查詢終端設(shè)備連接的交換機(jī)
要實(shí)現(xiàn)這個(gè)功能,需要使用“樹的遍歷”算法。當(dāng)然,如果限定交換機(jī)的層數(shù),也可以用其他方法實(shí)現(xiàn)。在此過(guò)程中,最關(guān)鍵的是Telnet返回?cái)?shù)據(jù)的處理,對(duì)于一次返回?cái)?shù)據(jù)超過(guò)winsock限度的,對(duì)返回信息需要做過(guò)濾處理,以減少返回信息的長(zhǎng)度。
而要查詢交換機(jī)所有接口信息(如接口的VLAN號(hào)、是否為Trunk、是否設(shè)置、是否UP等),可以使用命令“show int swi”,對(duì)于狀態(tài)為“UP”的端口應(yīng)該是通過(guò)Trunk連接的交換機(jī)或通過(guò)VLAN連接的終端。
如果是交換機(jī),可以從以上樹中得到所連接的交換機(jī);而如果是終端,則可以通過(guò)show mac命令得到終端的MAC地址,再通過(guò)核心交換機(jī)的show arp得到終端的IP地址;對(duì)于狀態(tài)為“DOWN”的,可以從庫(kù)中得到接口信息(每個(gè)連接的終端如果在狀態(tài)為“UP”時(shí)被查詢過(guò),就會(huì)將上聯(lián)接口信息存在庫(kù)中)。
對(duì)于通過(guò)終端的IP地址查詢上聯(lián)交換機(jī)的接口(以下稱為“IP查詢”),實(shí)現(xiàn)方法是在核心交換機(jī)上運(yùn)行命令show arp 得到該終端的MAC地址,再通過(guò)命令show mac得到端口號(hào),若該端口號(hào)不在以上樹中,則說(shuō)明該終端連接的是該交換機(jī);若在樹中出現(xiàn),則需要沿著樹進(jìn)行遍歷,在每個(gè)“路過(guò)”的交換機(jī)上運(yùn)行show mac得到該MAC對(duì)應(yīng)的端口號(hào),直到該端口號(hào)不在樹中。
我們查詢交換機(jī)的接口情況或通過(guò)IP地址查詢?cè)撛O(shè)備上聯(lián)哪個(gè)交換機(jī),都需要用到ARP表和MAC表,而通過(guò)前述的“存活機(jī)制”可知,若因?yàn)樵O(shè)備離線幾個(gè)小時(shí)導(dǎo)致記錄被清除就無(wú)法知道它所連接的交換機(jī),這顯然不是我們希望看到的。如某人出差幾天,設(shè)備關(guān)機(jī)了,我們?nèi)孕枰獣云浣K端是怎么連接交換機(jī)的。
要解決這一問題,方法是將設(shè)備的連接關(guān)系存儲(chǔ)在參數(shù)文件(或數(shù)據(jù)庫(kù))中,形成一個(gè)二維表uplink,結(jié)構(gòu)為“UserName,UserIP,UplinkSwitchName,UplinkSwitchIP,UplinkSwitchPort”,其中記錄在ports查詢和IP查詢時(shí)更新。
反之,若在ports查詢或IP查詢時(shí)設(shè)備不在線,則讀取表uplink中的數(shù)據(jù),即上次的查詢數(shù)據(jù)。IP地址表的生成即依賴于該二維表。
顯然,按照上面的思路,要實(shí)現(xiàn)程序功能,需要解決以下問題。
1.實(shí)現(xiàn)TELNET訪問
所有交換機(jī)必須啟動(dòng)TELNET服務(wù),設(shè)置訪問口令,并確保返回的信息一次全部接收(取消默認(rèn)的按頁(yè)回顯)以簡(jiǎn)化編程。以交換機(jī)i_hexinA為例(”#”后為輸入的命令)需要進(jìn)行如下設(shè)置:
圖5 Telnet流程
本例中,實(shí)現(xiàn)TELNET訪問的方法是通過(guò)WINSOCK控件訪問交換機(jī),發(fā)出命令,處理回顯信息,過(guò)程如圖5。
2.交換機(jī)命令的使用及返回?cái)?shù)據(jù)的處理
要實(shí)現(xiàn)查詢功能,首先必須了解交換機(jī)命令的功能、使用方法和技巧,使發(fā)給交換機(jī)的命令的返回信息,既能滿足程序功能需要,又要便于程序?qū)Ψ祷財(cái)?shù)據(jù)的處理。
例如使用命令“show cdp nei”可以得到交換機(jī)鄰居的名稱、接口信息,但是卻得不到所連接的交換機(jī)的IP地址,這時(shí)應(yīng)該使用“show cdp nei de”命令,而該命令的返回信息比較復(fù)雜;再比如,命令“show arp”可以返回交換機(jī)的ARP表信息,但是,當(dāng)表的信息過(guò)多時(shí),就會(huì)超出winsock對(duì)緩沖區(qū)大小的限制,使返回信息不完整,這時(shí)就需要使用命令“show arp | exclude Incom”對(duì)無(wú)用的信息進(jìn)行過(guò)濾。
3.本程序中為了簡(jiǎn)化編程,假定了交換機(jī)的Telnet口令均為“cisco”,實(shí)際在編程中可能會(huì)復(fù)雜得多。
例如,可能使用ssh訪問交換機(jī),身份驗(yàn)證模式可能是user/password,不同交換機(jī)完成相應(yīng)功能的命令也不一樣,這時(shí)就需要一個(gè)參數(shù)文件進(jìn)行聲明,編程也會(huì)復(fù)雜一些。
總之,編制一個(gè)交換機(jī)接口管理的工具軟件,既需要了解交換機(jī)及相關(guān)網(wǎng)絡(luò)知識(shí),也需要具備一些編程知識(shí)。有了這個(gè)工具,會(huì)使網(wǎng)管人員的工作效率大大提高。