譚敏生,何嘯峰,曾 瓊,陳 虹,夏石瑩
(南華大學(xué)計(jì)算機(jī)學(xué)院,湖南 衡陽(yáng) 421001)
柔性,是能夠根據(jù)環(huán)境變化而進(jìn)行響應(yīng)的一種能力,它的特征是彈性和適應(yīng)性。柔性虛擬實(shí)驗(yàn)系統(tǒng)具有可組合、可選擇、自適應(yīng)等特點(diǎn)。交換機(jī)是非常重要的基礎(chǔ)網(wǎng)絡(luò)設(shè)備,采用真實(shí)物理設(shè)備進(jìn)行交換機(jī)相關(guān)實(shí)驗(yàn),當(dāng)然有利于提高學(xué)生的實(shí)踐能力。但由于計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)發(fā)展迅速,交換機(jī)的型號(hào)繁多,部分交換機(jī)的價(jià)格昂貴,眾多學(xué)生的重復(fù)實(shí)驗(yàn)容易損壞設(shè)備;更為重要的是大多數(shù)高校網(wǎng)絡(luò)實(shí)驗(yàn)設(shè)備的更新難以跟上網(wǎng)絡(luò)技術(shù)發(fā)展的步伐。因此,研究交換機(jī)等核心網(wǎng)絡(luò)設(shè)備的柔性虛擬實(shí)驗(yàn)系統(tǒng)十分必要。
虛擬實(shí)驗(yàn)系統(tǒng)根據(jù)實(shí)現(xiàn)技術(shù)的不同,可以分為以純軟件方式設(shè)計(jì)和以軟硬件結(jié)合方式設(shè)計(jì)兩種,以純軟件方式設(shè)計(jì)的虛擬實(shí)驗(yàn)系統(tǒng)是使用HTML、Java、Java Servlet、ASP 等技術(shù)。美國(guó)一所大學(xué)開發(fā)的Nmrscope 系統(tǒng),學(xué)生只要連接上網(wǎng)絡(luò)就可以無(wú)地點(diǎn)和時(shí)間限制使用這個(gè)大學(xué)的實(shí)驗(yàn)儀器。王建新等人設(shè)計(jì)開發(fā)了一個(gè)基于Internet的虛擬實(shí)驗(yàn)系統(tǒng),服務(wù)器使用Matlab 的OLE Automation,客戶端使用JavaBean容器和組件,設(shè)備通過(guò)JavaBean 組件設(shè)計(jì),通過(guò)模擬實(shí)驗(yàn)中的儀器設(shè)備,用戶可以在瀏覽器中組合相應(yīng)的組件進(jìn)行實(shí)驗(yàn)。Cao J 等人提出了一個(gè)用于編程的虛擬實(shí)驗(yàn)系統(tǒng),客戶端使用HTML 和JavaApplet開發(fā),服務(wù)器端使用CGI和Java Servlet開發(fā),用戶首先在客戶端界面輸入需要編譯的代碼,把輸入的代碼及請(qǐng)求發(fā)送給服務(wù)器,服務(wù)器接收到客戶端的請(qǐng)求后,利用語(yǔ)言編譯器進(jìn)行編譯,將編譯結(jié)果發(fā)送給客戶端。Khalifa 等人開發(fā)的基于網(wǎng)絡(luò)的虛擬實(shí)驗(yàn)系統(tǒng)模擬了一個(gè)以太網(wǎng)交換機(jī)和幾臺(tái)Linux 系統(tǒng)的計(jì)算機(jī),用戶輸入Linux 相關(guān)命令,服務(wù)器把交換機(jī)和計(jì)算機(jī)輸出的結(jié)果發(fā)送給用戶。蘇培華研發(fā)的基于B/S 架構(gòu)的虛擬實(shí)驗(yàn)平臺(tái)不僅可以動(dòng)手進(jìn)行相關(guān)實(shí)驗(yàn),而且具有記錄實(shí)驗(yàn)結(jié)果、學(xué)生上交作業(yè)、教師下發(fā)批閱等功能,實(shí)現(xiàn)學(xué)生和教師的交互。謝慧提出了利用NS2 創(chuàng)建虛擬實(shí)驗(yàn)環(huán)境模擬網(wǎng)絡(luò),從而進(jìn)行網(wǎng)絡(luò)實(shí)驗(yàn)。思科公司發(fā)布的Cisco Packet Tracer 為用戶提供了一個(gè)虛擬的網(wǎng)絡(luò)環(huán)境,讓用戶可以模擬設(shè)計(jì)和配置網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),排除網(wǎng)絡(luò)故障,查看數(shù)據(jù)包的結(jié)構(gòu)及數(shù)據(jù)包在網(wǎng)絡(luò)設(shè)備之間的處理過(guò)程。
設(shè)計(jì)一個(gè)數(shù)據(jù)幀類用于封裝計(jì)算機(jī)發(fā)送和接收的數(shù)據(jù)幀,包含源MAC 地址(source_mac_add)、目的MAC 地址(dest_mac_add)、數(shù)據(jù)長(zhǎng)度(data_len)、數(shù)據(jù)(data)及校驗(yàn)和(data_crc)等屬性。
交換機(jī)、計(jì)算機(jī)有很多連接端口,需要設(shè)計(jì)Port類。Port 類包含鏈表(datalist)、端口號(hào)(id、)端口狀態(tài)(state)等屬性。
交換機(jī)內(nèi)部存在一個(gè)地址表,數(shù)據(jù)幀存儲(chǔ)在計(jì)算機(jī)端口和交換機(jī)端口,需要一個(gè)鏈表類用于將地址表存儲(chǔ)至鏈表中進(jìn)行地址表的增刪查改操作,將數(shù)據(jù)幀緩存到鏈表中。DataList 類包含把數(shù)據(jù)幀加到鏈表頭部(add_to_start())、把數(shù)據(jù)幀加到鏈表尾部(add_to_end())、把數(shù)據(jù)幀加到第i個(gè)幀之后(insert())、刪除鏈表中所有節(jié)點(diǎn)(deleteall())等方法。
DataList 類包含地址表(add_table)、檢測(cè)交換機(jī)端口是否接收到數(shù)據(jù)(check())、檢查接收到的數(shù)據(jù)中校驗(yàn)和是否有效(checkdatacrc())、打印地址表(print_add_table())、把源MAC地址及其端口號(hào)添加到地址表(write_table())、發(fā)送數(shù)據(jù)幀(broadcast())、轉(zhuǎn)發(fā)數(shù)據(jù)幀(reward())等屬性和方法。
Computer 類包含MAC 地址(mac_address)、設(shè)置計(jì)算機(jī)mac 地址(setcmacaddress())、設(shè)置與交換機(jī)連接的端口號(hào)(setcid())、存儲(chǔ)交換機(jī)發(fā)送的數(shù)據(jù)(recv())、將數(shù)據(jù)發(fā)送給交換機(jī)(send())等屬性和方法。
檢測(cè)交換機(jī)的所有端口是否有數(shù)據(jù)輸入,如果檢測(cè)端口接收到數(shù)據(jù),在結(jié)果顯示框中顯示“交換機(jī)端口檢測(cè)到數(shù)據(jù)輸入”,如果檢測(cè)端口沒有數(shù)據(jù)輸入,在結(jié)果顯示框中顯示“交換機(jī)端口未檢測(cè)到數(shù)據(jù)輸入”。
調(diào)用Switcher類中的check方法,判斷交換機(jī)端口是否有數(shù)據(jù)輸入,代碼片段如下:
檢查數(shù)據(jù)幀的校驗(yàn)和是否有效,如果該數(shù)據(jù)幀的校驗(yàn)和有效,在結(jié)果顯示框中顯示“該數(shù)據(jù)有效”,否則顯示“該數(shù)據(jù)幀無(wú)效”。
調(diào)用Ether 類中的data_crc 屬性,判斷數(shù)據(jù)幀是否有效,代碼片段如下:
先檢測(cè)數(shù)據(jù)幀的源MAC 地址是否在交換機(jī)地址表中,若不在,則在結(jié)果顯示框中顯示“存儲(chǔ)成功”。
調(diào)用Switcher 類中的add_table 屬性和Ether 類的source_mac_address 屬性找到數(shù)據(jù)幀源端口,再調(diào)用Switcher 類的write_table 方法,將數(shù)據(jù)幀源MAC 地址添加到交換機(jī)的地址表中,代碼片段如下:
首先調(diào)用Computer類的mac_address屬性和Ether類的source_mac_address 屬性,找到與源主機(jī)相連的交換機(jī)端口,再調(diào)用Computer類的send方法將數(shù)據(jù)幀發(fā)送到該端口,代碼片段如下:
如果檢測(cè)到目的MAC 地址不在地址表中,就將接收到的數(shù)據(jù)幀轉(zhuǎn)發(fā)至其他所有端口。如果檢測(cè)到目的MAC 地址在地址表中,就按照交換機(jī)的地址表轉(zhuǎn)發(fā)該數(shù)據(jù)幀到相應(yīng)端口。
調(diào)用Switcher 類中的reward 方法,實(shí)現(xiàn)數(shù)據(jù)幀的轉(zhuǎn)發(fā),代碼片段如下:
本文研究的交換機(jī)虛擬實(shí)驗(yàn)系統(tǒng),主要設(shè)計(jì)并實(shí)現(xiàn)了端口檢測(cè)、校驗(yàn)和檢查、數(shù)據(jù)幀存儲(chǔ)、數(shù)據(jù)幀發(fā)送、數(shù)據(jù)幀轉(zhuǎn)發(fā)等交換機(jī)的核心虛擬實(shí)驗(yàn)功能,下一步將研究三層交換機(jī)路由、IP 地址設(shè)置、實(shí)驗(yàn)指導(dǎo)文檔等虛擬實(shí)驗(yàn)功能。