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

檢查數(shù)據(jù)幀的校驗和是否有效,如果該數(shù)據(jù)幀的校驗和有效,在結果顯示框中顯示“該數(shù)據(jù)有效”,否則顯示“該數(shù)據(jù)幀無效”。
調用Ether 類中的data_crc 屬性,判斷數(shù)據(jù)幀是否有效,代碼片段如下:

先檢測數(shù)據(jù)幀的源MAC 地址是否在交換機地址表中,若不在,則在結果顯示框中顯示“存儲成功”。
調用Switcher 類中的add_table 屬性和Ether 類的source_mac_address 屬性找到數(shù)據(jù)幀源端口,再調用Switcher 類的write_table 方法,將數(shù)據(jù)幀源MAC 地址添加到交換機的地址表中,代碼片段如下:

首先調用Computer類的mac_address屬性和Ether類的source_mac_address 屬性,找到與源主機相連的交換機端口,再調用Computer類的send方法將數(shù)據(jù)幀發(fā)送到該端口,代碼片段如下:


如果檢測到目的MAC 地址不在地址表中,就將接收到的數(shù)據(jù)幀轉發(fā)至其他所有端口。如果檢測到目的MAC 地址在地址表中,就按照交換機的地址表轉發(fā)該數(shù)據(jù)幀到相應端口。
調用Switcher 類中的reward 方法,實現(xiàn)數(shù)據(jù)幀的轉發(fā),代碼片段如下:

本文研究的交換機虛擬實驗系統(tǒng),主要設計并實現(xiàn)了端口檢測、校驗和檢查、數(shù)據(jù)幀存儲、數(shù)據(jù)幀發(fā)送、數(shù)據(jù)幀轉發(fā)等交換機的核心虛擬實驗功能,下一步將研究三層交換機路由、IP 地址設置、實驗指導文檔等虛擬實驗功能。