王世勛,張 恩,洪雙喜
(河南師范大學(xué) 計(jì)算機(jī)與信息工程學(xué)院,河南 新鄉(xiāng) 453007)
在網(wǎng)絡(luò)管理課程中,抽象語法表示的教學(xué)內(nèi)容主要包含ASN.1語法規(guī)范、基本編碼規(guī)則BER、宏定義等部分[1-2]。ASN.1語法規(guī)范涉及命名方法、抽象數(shù)據(jù)類型、子類型與應(yīng)用類型;BER涉及TLV結(jié)構(gòu)的標(biāo)簽字段編碼、長度字段編碼以及不同類型數(shù)據(jù)值編碼;宏定義涉及數(shù)據(jù)類型定義、宏表示與模塊定義。合理地設(shè)計(jì)實(shí)驗(yàn)項(xiàng)目能夠加深學(xué)生對(duì)抽象語法表示知識(shí)點(diǎn)的理解與掌握,進(jìn)而提高學(xué)生解決實(shí)際問題的能力。
抽象語法表示的教學(xué)現(xiàn)狀包括:①抽象語法表示的學(xué)習(xí)難度大,知識(shí)點(diǎn)豐富,涵蓋多種ASN.1數(shù)據(jù)類型、不同標(biāo)簽與類型的編碼規(guī)則等。知識(shí)點(diǎn)應(yīng)用靈活,要求學(xué)生能對(duì)具體問題定義出新的類型,并對(duì)具體的實(shí)例進(jìn)行BER編碼。②教學(xué)方法陳舊。教師在課堂講解知識(shí)點(diǎn),學(xué)生跟不上教師的思路,遇到問題時(shí)難以獲得及時(shí)有效的幫助。③實(shí)驗(yàn)環(huán)節(jié)不足。教學(xué)大綱結(jié)構(gòu)不合理,理論學(xué)時(shí)比實(shí)驗(yàn)學(xué)時(shí)多。此外,缺乏合適的實(shí)驗(yàn)教材,最近的教改文獻(xiàn)[3-4]也忽略了抽象語法表示的實(shí)驗(yàn)項(xiàng)目。④學(xué)生的學(xué)習(xí)態(tài)度比較差。網(wǎng)絡(luò)管理課程設(shè)置在大三上學(xué)期,學(xué)生缺乏學(xué)習(xí)主動(dòng)性,不愿意鉆研理論知識(shí),從而導(dǎo)致學(xué)習(xí)效果不理想。此外,大部分學(xué)生對(duì)實(shí)驗(yàn)環(huán)節(jié)缺乏耐心,更愿意操作具有相同結(jié)果的實(shí)驗(yàn)項(xiàng)目。
針對(duì)抽象語法表示的教學(xué)現(xiàn)狀,設(shè)計(jì)實(shí)驗(yàn)項(xiàng)目時(shí)應(yīng)遵循以下幾個(gè)原則:①選擇合理的實(shí)驗(yàn)方案。既要充分覆蓋抽象語法表示的各個(gè)知識(shí)點(diǎn),又要讓不同的學(xué)生可以解決不同的實(shí)際問題。②采用案例驅(qū)動(dòng)教學(xué)。設(shè)計(jì)良好的應(yīng)用案例,激發(fā)學(xué)生的學(xué)習(xí)興趣,讓學(xué)生真正參與進(jìn)來。③注重理論與實(shí)踐的聯(lián)系。在教學(xué)大綱中增加實(shí)驗(yàn)學(xué)時(shí),提高學(xué)生的實(shí)際動(dòng)手能力,在實(shí)驗(yàn)過程中加深學(xué)生對(duì)理論知識(shí)的理解與掌握。④突出實(shí)驗(yàn)的可區(qū)分性。避免所有學(xué)生提交相同的實(shí)驗(yàn)報(bào)告,在給出實(shí)驗(yàn)題目后,讓學(xué)生根據(jù)自身情況設(shè)計(jì)方案、分析并完成實(shí)驗(yàn)。
綜合性實(shí)驗(yàn)要求學(xué)生運(yùn)用課堂講授的若干個(gè)理論知識(shí)點(diǎn)解決實(shí)際問題,是考核學(xué)生掌握知識(shí)狀況的有效方法。因此,從教學(xué)現(xiàn)狀與實(shí)驗(yàn)設(shè)計(jì)原則出發(fā),設(shè)定抽象語法表示的實(shí)驗(yàn)項(xiàng)目為綜合性實(shí)驗(yàn)。
實(shí)驗(yàn)?zāi)康模豪斫釧SN.1語法與基本編碼規(guī)則BER,具備初步閱讀RFC文檔的能力,掌握ASN.1工具的使用方法,學(xué)會(huì)利用ASN.1語法描述實(shí)際問題,并將ASN.1表示的數(shù)據(jù)轉(zhuǎn)換成BER編碼。
實(shí)驗(yàn)內(nèi)容:①定義一個(gè)ASN.1數(shù)據(jù)類型來描述學(xué)生的信息,例如學(xué)號(hào)與姓名等。學(xué)生信息類型涵蓋ASN.1命名方法、應(yīng)用標(biāo)簽、上下文標(biāo)簽、整數(shù)類型、布爾類型、字符串類型、序列類型與集合類型等知識(shí)點(diǎn)。②實(shí)例化某個(gè)學(xué)生的信息,創(chuàng)建ASN.1信息模塊,利用ASN.1工具對(duì)學(xué)生信息類型的實(shí)例進(jìn)行BER編碼。在分析TLV結(jié)構(gòu)時(shí),熟練掌握不同標(biāo)簽類別的編碼、整數(shù)值編碼、布爾值編碼、字符串值編碼與構(gòu)造類型值編碼。
實(shí)驗(yàn)環(huán)境:配有8G內(nèi)存的微機(jī)一臺(tái),Win7及以上版本的操作系統(tǒng),Eclipse、ASN.1工具與ASN.1 Java 運(yùn)行庫[5]。
教師一定要自己先完成實(shí)驗(yàn)項(xiàng)目,進(jìn)而掌握實(shí)驗(yàn)的總體難易程度,盡量避免出現(xiàn)太難或太易的情況。在講授理論課前,教師可以將實(shí)驗(yàn)題目發(fā)給學(xué)生,以便激發(fā)學(xué)生的好奇心。理論課結(jié)束后,實(shí)驗(yàn)環(huán)節(jié)開始執(zhí)行,占2或4個(gè)學(xué)時(shí),鞏固加強(qiáng)學(xué)生對(duì)理論知識(shí)點(diǎn)的掌握,提高學(xué)生的實(shí)際動(dòng)手能力。以小組為單位執(zhí)行實(shí)驗(yàn)操作,每組3人,共同承擔(dān)學(xué)生信息類型的定義、BER編碼的實(shí)現(xiàn)和TLV結(jié)構(gòu)的分析。為了在有限時(shí)間內(nèi)完成實(shí)驗(yàn),鼓勵(lì)學(xué)生相互討論與交流,進(jìn)一步培養(yǎng)學(xué)生的競爭與合作意識(shí)。實(shí)驗(yàn)過程中,因材施教地輔導(dǎo)能力不同的學(xué)生,著重培養(yǎng)學(xué)生獨(dú)立思考和解決實(shí)際問題的能力。實(shí)驗(yàn)結(jié)束后,及時(shí)記錄實(shí)驗(yàn)成績。教師可以采用案例驅(qū)動(dòng)的實(shí)驗(yàn)教學(xué)方法,介紹抽象語法表示的實(shí)驗(yàn)項(xiàng)目。
2.2.1 定義學(xué)生信息類型
為了描述學(xué)生的信息,利用ASN.1語法可定義如下的StuInfo類型:
根據(jù)已定義的StuInfo類型,利用某學(xué)生的個(gè)人信息實(shí)例化如下的myInfo對(duì)象:
在定義新類型和對(duì)象時(shí),教師應(yīng)鼓勵(lì)學(xué)生描述自身的實(shí)際信息。此外,教師一定要提醒學(xué)生,類型名和模塊名是以大寫字母開頭,而對(duì)象名以小寫字母開頭。
2.2.2 實(shí)現(xiàn)BER編碼
將ASN.1描述的數(shù)據(jù)轉(zhuǎn)換成BER編碼的步驟如下:
(1)安裝插件。下載ASN.1開發(fā)工具,在Eclipse中選擇Help > Install New Software。點(diǎn)擊Add按鈕,添加解壓后的asndt文件,選擇ASN.1 SDK與ASN.1 Java編譯器,安裝完畢后重啟Eclipse。
(2)輸入序列號(hào)。在Eclipse中,選擇Windows> Preferences > ASN.1> ASN.1 Java Compiler > General> Serial Number,輸入 License Key。
(3)創(chuàng)建ASN.1 Project。在 Eclipse內(nèi),選擇File > New > Project,輸入ASN.1 Project的工程名為Information。
(4)創(chuàng)建ASN.1模塊。在Eclipse的Package Explore內(nèi),右擊Information工程的source文件,選擇New > Other。選擇 ASN.1 Module,輸入模塊名Information。
(5)生成Java類文件。打開Information.asn文件,輸入已定義的Information模塊源代碼并保存,在路徑Information > output > java >Information內(nèi)自動(dòng)生成編譯好的Java類文件。
(6)添加ASN.1 Java運(yùn)行庫到編譯路徑。創(chuàng)建一個(gè)名為test的Java Project,在文件夾test中建一個(gè)lib文件夾,并將asnrt.jar復(fù)制到lib文件夾。右擊test項(xiàng)目,選擇Properties > Java Build Path > Libraries > Add External JARS,選擇lib文件夾下的asnrt.jar,點(diǎn)擊Apply。
(7)創(chuàng)建包。右擊test項(xiàng)目,選擇New >Package,輸入包名為mytest。
(8)復(fù)制文件。查找到步驟(5)中已生成的Java類文件,將它們復(fù)制到mytest包。
(9)創(chuàng)建Java類。右擊mytest包,選擇New > Class,輸入類名TestInformation。打開TestInformation.java文件,輸入以下代碼:
(10)實(shí)現(xiàn)BER編碼。在Package Explorer內(nèi),右擊TestInformation.java文件,選擇Run as> Java Application,獲得十六進(jìn)制的運(yùn)行結(jié)果。
通過學(xué)習(xí)高級(jí)語言程序設(shè)計(jì)、數(shù)據(jù)庫原理與計(jì)算機(jī)網(wǎng)絡(luò)等課程,大三學(xué)生可以實(shí)現(xiàn)BER編碼。教師要引導(dǎo)學(xué)生建立縝密的編程思維,并注重培養(yǎng)學(xué)生的程序調(diào)試能力。此外,教師要耐心地指導(dǎo)動(dòng)手能力較弱的學(xué)生,并給予一定的提示;鼓勵(lì)動(dòng)手能力較強(qiáng)的學(xué)生幫助輔導(dǎo)其他學(xué)生的實(shí)驗(yàn)操作與代碼調(diào)試。
2.2.3 TLV結(jié)構(gòu)分析
為了避免知其然而不知其所以然的窘境,需要繼續(xù)分析運(yùn)行結(jié)果的TLV結(jié)構(gòu),進(jìn)而提升學(xué)生的知識(shí)與能力。根據(jù)多年的教學(xué)經(jīng)驗(yàn),學(xué)生較認(rèn)可教師總結(jié)的TLV知識(shí)。例如,V字段的整數(shù)值編碼如下:①編碼采用補(bǔ)碼形式,占一個(gè)或多個(gè)八位組。②若整數(shù)值在區(qū)間[-128,127]內(nèi),則編碼占一個(gè)八位組;若整數(shù)值在區(qū)間[-32768,-129]或[128,32767]內(nèi),則編碼占兩個(gè)八位組;以此類推,若整數(shù)值在區(qū)間[-28n-1,-28n-9-1]或[28n-9,28n-1-1]內(nèi),則編碼占n(n > 2)個(gè)八位組。③給出任意的整數(shù)值,先確定它所占的八位組數(shù),再求補(bǔ)碼,最后將補(bǔ)碼從高到低排列在第一個(gè)八位組的第八位到第一位,第二個(gè)八位組的第八位到第一位,依次類推。此外,教師需要提示顯式標(biāo)簽與隱式標(biāo)簽在BER編碼時(shí)的區(qū)別。
教師一定要重視實(shí)驗(yàn)結(jié)果的考核,才能無形中提高學(xué)生的實(shí)踐動(dòng)手能力。考核包含5部分:學(xué)生信息類型的定義、BER編碼的實(shí)現(xiàn)、TLV結(jié)構(gòu)的分析、實(shí)驗(yàn)報(bào)告的撰寫與學(xué)習(xí)態(tài)度,其權(quán)重分別是0.2、0.3、0.3、0.1和0.1。對(duì)于第1部分,檢查ASN.1語法的正確性與知識(shí)點(diǎn)的全面性。對(duì)于第2部分,考核軟件應(yīng)用的熟練性、代碼的編寫能力與程序錯(cuò)誤的調(diào)試能力。對(duì)于第3部分,檢查BER編碼的知識(shí)點(diǎn)掌握程度。對(duì)于第4部分,評(píng)價(jià)實(shí)驗(yàn)報(bào)告的完整性與規(guī)范性。此外,如果學(xué)生在實(shí)驗(yàn)課上有玩手機(jī)等情況,可適當(dāng)減分。
根據(jù)學(xué)生的普遍反映,上述實(shí)驗(yàn)項(xiàng)目能夠加深學(xué)生對(duì)理論知識(shí)的理解,激發(fā)學(xué)生的學(xué)習(xí)興趣,提高學(xué)生應(yīng)用所學(xué)知識(shí)解決實(shí)際問題的能力。此外,本實(shí)驗(yàn)也豐富了網(wǎng)絡(luò)管理課程的實(shí)踐內(nèi)容。在未來的工作中,嘗試?yán)肅或C++等語言來完成ASN.1數(shù)據(jù)的BER編碼,進(jìn)一步多樣化實(shí)驗(yàn)的內(nèi)容和形式。