王世勛,張 恩,洪雙喜
(河南師范大學 計算機與信息工程學院,河南 新鄉 453007)
在網絡管理課程中,抽象語法表示的教學內容主要包含ASN.1語法規范、基本編碼規則BER、宏定義等部分[1-2]。ASN.1語法規范涉及命名方法、抽象數據類型、子類型與應用類型;BER涉及TLV結構的標簽字段編碼、長度字段編碼以及不同類型數據值編碼;宏定義涉及數據類型定義、宏表示與模塊定義。合理地設計實驗項目能夠加深學生對抽象語法表示知識點的理解與掌握,進而提高學生解決實際問題的能力。
抽象語法表示的教學現狀包括:①抽象語法表示的學習難度大,知識點豐富,涵蓋多種ASN.1數據類型、不同標簽與類型的編碼規則等。知識點應用靈活,要求學生能對具體問題定義出新的類型,并對具體的實例進行BER編碼。②教學方法陳舊。教師在課堂講解知識點,學生跟不上教師的思路,遇到問題時難以獲得及時有效的幫助。③實驗環節不足。教學大綱結構不合理,理論學時比實驗學時多。此外,缺乏合適的實驗教材,最近的教改文獻[3-4]也忽略了抽象語法表示的實驗項目。④學生的學習態度比較差。網絡管理課程設置在大三上學期,學生缺乏學習主動性,不愿意鉆研理論知識,從而導致學習效果不理想。此外,大部分學生對實驗環節缺乏耐心,更愿意操作具有相同結果的實驗項目。
針對抽象語法表示的教學現狀,設計實驗項目時應遵循以下幾個原則:①選擇合理的實驗方案。既要充分覆蓋抽象語法表示的各個知識點,又要讓不同的學生可以解決不同的實際問題。②采用案例驅動教學。設計良好的應用案例,激發學生的學習興趣,讓學生真正參與進來。③注重理論與實踐的聯系。在教學大綱中增加實驗學時,提高學生的實際動手能力,在實驗過程中加深學生對理論知識的理解與掌握。④突出實驗的可區分性。避免所有學生提交相同的實驗報告,在給出實驗題目后,讓學生根據自身情況設計方案、分析并完成實驗。
綜合性實驗要求學生運用課堂講授的若干個理論知識點解決實際問題,是考核學生掌握知識狀況的有效方法。因此,從教學現狀與實驗設計原則出發,設定抽象語法表示的實驗項目為綜合性實驗。
實驗目的:理解ASN.1語法與基本編碼規則BER,具備初步閱讀RFC文檔的能力,掌握ASN.1工具的使用方法,學會利用ASN.1語法描述實際問題,并將ASN.1表示的數據轉換成BER編碼。
實驗內容:①定義一個ASN.1數據類型來描述學生的信息,例如學號與姓名等。學生信息類型涵蓋ASN.1命名方法、應用標簽、上下文標簽、整數類型、布爾類型、字符串類型、序列類型與集合類型等知識點。②實例化某個學生的信息,創建ASN.1信息模塊,利用ASN.1工具對學生信息類型的實例進行BER編碼。在分析TLV結構時,熟練掌握不同標簽類別的編碼、整數值編碼、布爾值編碼、字符串值編碼與構造類型值編碼。
實驗環境:配有8G內存的微機一臺,Win7及以上版本的操作系統,Eclipse、ASN.1工具與ASN.1 Java 運行庫[5]。
教師一定要自己先完成實驗項目,進而掌握實驗的總體難易程度,盡量避免出現太難或太易的情況。在講授理論課前,教師可以將實驗題目發給學生,以便激發學生的好奇心。理論課結束后,實驗環節開始執行,占2或4個學時,鞏固加強學生對理論知識點的掌握,提高學生的實際動手能力。以小組為單位執行實驗操作,每組3人,共同承擔學生信息類型的定義、BER編碼的實現和TLV結構的分析。為了在有限時間內完成實驗,鼓勵學生相互討論與交流,進一步培養學生的競爭與合作意識。實驗過程中,因材施教地輔導能力不同的學生,著重培養學生獨立思考和解決實際問題的能力。實驗結束后,及時記錄實驗成績。教師可以采用案例驅動的實驗教學方法,介紹抽象語法表示的實驗項目。
2.2.1 定義學生信息類型
為了描述學生的信息,利用ASN.1語法可定義如下的StuInfo類型:


根據已定義的StuInfo類型,利用某學生的個人信息實例化如下的myInfo對象:

在定義新類型和對象時,教師應鼓勵學生描述自身的實際信息。此外,教師一定要提醒學生,類型名和模塊名是以大寫字母開頭,而對象名以小寫字母開頭。
2.2.2 實現BER編碼
將ASN.1描述的數據轉換成BER編碼的步驟如下:
(1)安裝插件。下載ASN.1開發工具,在Eclipse中選擇Help > Install New Software。點擊Add按鈕,添加解壓后的asndt文件,選擇ASN.1 SDK與ASN.1 Java編譯器,安裝完畢后重啟Eclipse。
(2)輸入序列號。在Eclipse中,選擇Windows> Preferences > ASN.1> ASN.1 Java Compiler > General> Serial Number,輸入 License Key。
(3)創建ASN.1 Project。在 Eclipse內,選擇File > New > Project,輸入ASN.1 Project的工程名為Information。
(4)創建ASN.1模塊。在Eclipse的Package Explore內,右擊Information工程的source文件,選擇New > Other。選擇 ASN.1 Module,輸入模塊名Information。
(5)生成Java類文件。打開Information.asn文件,輸入已定義的Information模塊源代碼并保存,在路徑Information > output > java >Information內自動生成編譯好的Java類文件。
(6)添加ASN.1 Java運行庫到編譯路徑。創建一個名為test的Java Project,在文件夾test中建一個lib文件夾,并將asnrt.jar復制到lib文件夾。右擊test項目,選擇Properties > Java Build Path > Libraries > Add External JARS,選擇lib文件夾下的asnrt.jar,點擊Apply。
(7)創建包。右擊test項目,選擇New >Package,輸入包名為mytest。
(8)復制文件。查找到步驟(5)中已生成的Java類文件,將它們復制到mytest包。
(9)創建Java類。右擊mytest包,選擇New > Class,輸入類名TestInformation。打開TestInformation.java文件,輸入以下代碼:


(10)實現BER編碼。在Package Explorer內,右擊TestInformation.java文件,選擇Run as> Java Application,獲得十六進制的運行結果。
通過學習高級語言程序設計、數據庫原理與計算機網絡等課程,大三學生可以實現BER編碼。教師要引導學生建立縝密的編程思維,并注重培養學生的程序調試能力。此外,教師要耐心地指導動手能力較弱的學生,并給予一定的提示;鼓勵動手能力較強的學生幫助輔導其他學生的實驗操作與代碼調試。
2.2.3 TLV結構分析
為了避免知其然而不知其所以然的窘境,需要繼續分析運行結果的TLV結構,進而提升學生的知識與能力。根據多年的教學經驗,學生較認可教師總結的TLV知識。例如,V字段的整數值編碼如下:①編碼采用補碼形式,占一個或多個八位組。②若整數值在區間[-128,127]內,則編碼占一個八位組;若整數值在區間[-32768,-129]或[128,32767]內,則編碼占兩個八位組;以此類推,若整數值在區間[-28n-1,-28n-9-1]或[28n-9,28n-1-1]內,則編碼占n(n > 2)個八位組。③給出任意的整數值,先確定它所占的八位組數,再求補碼,最后將補碼從高到低排列在第一個八位組的第八位到第一位,第二個八位組的第八位到第一位,依次類推。此外,教師需要提示顯式標簽與隱式標簽在BER編碼時的區別。
教師一定要重視實驗結果的考核,才能無形中提高學生的實踐動手能力。考核包含5部分:學生信息類型的定義、BER編碼的實現、TLV結構的分析、實驗報告的撰寫與學習態度,其權重分別是0.2、0.3、0.3、0.1和0.1。對于第1部分,檢查ASN.1語法的正確性與知識點的全面性。對于第2部分,考核軟件應用的熟練性、代碼的編寫能力與程序錯誤的調試能力。對于第3部分,檢查BER編碼的知識點掌握程度。對于第4部分,評價實驗報告的完整性與規范性。此外,如果學生在實驗課上有玩手機等情況,可適當減分。
根據學生的普遍反映,上述實驗項目能夠加深學生對理論知識的理解,激發學生的學習興趣,提高學生應用所學知識解決實際問題的能力。此外,本實驗也豐富了網絡管理課程的實踐內容。在未來的工作中,嘗試利用C或C++等語言來完成ASN.1數據的BER編碼,進一步多樣化實驗的內容和形式。