引言
20 世紀90年代,以因特網為代表的計算機網絡通信技術的發(fā)展和應用取得了前所未有的突破和成功,單片機上網技術在生活和現代建設的各方面的應用和研究隨之成為當今一個熱門話題。8位、16位單睡機的因為其較好的性價比,在測控領域仍然占據著重要地址。這些單片機的RAM、ROM一般都很小,而網絡協議通常嵌入在操作系統中,無法把龐大的操作系統直接安裝在這樣的單片機中。所以,要實現上述單片機通過拔號直接連上因特網,需要考慮的主要技術就是如何在單片機上嵌入能符號需要的經過簡化的網絡協議。這就是本文所要討論的主題。
本文著重分析所用數據包的類型和選項,給出幾個典型數據包的格式。
一、PPP協議簡介
IETF 成立了一個小組,推出了點到點線路的數據鏈路層協議,并成為正式的因特網標準。這項工作定義的PPP(Point-to-Point Protocol),即點到點協議,并以RFC文件RFC1661,后來以RFC1662和RFC1663進一步明確下來。PPP處理錯誤檢測,支持多種協議,在連接時鐘允許商議IP地址,允許身份驗證,以及在SLIP上所做的許多其他改進。雖然許多因特網服務提供者仍支持SLIP和PPP,但未來顯然屬于PPP,不管是撥號線路,還是租用路由器與路由器的線路都是如此。
PPP成就了3件事:
(1)明確地劃分出一幀的尾部和下一幀的頭部的成幀方式。這種幀格式也處理錯誤檢測工作。
(2)當線路不再需要時,跳出這些線路,測試它們,商議選擇,并仔細地再次釋放鏈路控制協議。這個協議被稱為鏈路控制協議LCP(Link Control Protocol)。
(3)用獨立于所使用的網絡層協議的方法來商議使用網絡層的哪些選項;對于每個所支持的網絡層來說,所選擇的方法有不同的網絡控制協議NCP(Network Control Protocol)。NCP在因特網中(TCP/IP協議)為IPCP。
PPP數據幀的格式如圖1所示。
二、基于PPP協議單片機撥號上網的設計與實現
1.概述
本方案選用的單片機是ADAM5510。它是臺灣ADVANTECH公司推出的一種功能較強、價位適中的單片機,具有80188-40、16-bit單片機,RS-232、RS-485口各一個,還有一個編程口(ADAVANTECH公司為5510系列單片機開發(fā)了同普通的Turbo C界面很相似的集成開發(fā)環(huán)境,這種IDE能靈活地編輯、編譯、仿真、開始和調試適用于5510系列的軟件)。ADAM5510的功能模塊如圖2所示。這種單片機在硬件構成上已比較完善,使我們可以集中精力于TCP/IP協議的分析和軟件的實現。
在本方案中,物理層接口采用的是:單片機通過RS-232與Modeem通信,電話線與Modem相連。單片機直接從RS-232端口收發(fā)數據。
2.原理及程序流程
系統原理如圖3所示,測試程序如圖4所示。
3.簡化PPP協議——配置各種數據包
(1)LCP包的配置
LCP包的配置如圖5所示。
a.LCP包概述
LCP包有3類:a鏈路配置包,用于建立和配置鏈路,包括Configure Ack、Configure Nak、Configure Request、Configure Reject;b鏈路結束包,用于結束一個鏈路,包括Terminate Request、Terminate Ack;c鏈路維修包,用于管理和調試一個鏈路,包括Code Reject、Protocol Reject、Echo Request、Echo Reply、Discard Request。LCP包的選項最常見的有:1 Maximum Receive Unit、2 Async Control Character Map、3 Authectication Protocol、7 Protocol Field Compression、8 Address and Control Field Compression。
b.LCP包種類的取舍
本文中,只用了Configure-Request、Reject、Ack三種LCP數據包,這是實現應答所必需的最低限度。單片機發(fā)出的Request選項是我們預先設定的,而ISP發(fā)出的選項若有我們不接受的內部,則單片機回答一個Reject,任何一方接受請求時發(fā)Ack,因此未處理NAK數據包。本文也未處理剩余的七類數據包,因任何原因造成的鏈路終止問題都由單片機在程序的控制下重新撥號來解決。
c.LCP選項的取舍
由于我們每次發(fā)送(接收)的數據較少(由于單片機RAM的限制,設定的緩沖區(qū)很小),MRU選項默認值為1500字節(jié),最小值為576字節(jié),所以測試程序不支持選項1;選項2是必須支持的;選項3提供了發(fā)送password的方法,它的參數可以是 0xc023或0xc223。為簡單起見,本文的測試程序選擇了0xc023作為選項3的參數,這樣,程序將以明文的形在一個數據包中發(fā)出用戶名和密碼。測試程序不請求選項7和8的服務,也就是根據默認的規(guī)定,發(fā)送的數據包含有PPP協議域和控制域。
(2)PAP包的配置
由于LCP包中選項3的使用情況,PAP包是必需的。簡單起見,程序中只交換了一個PAP包,但已完成了用戶的身份鑒定,如圖6所示。
(3)IPCP包的配置
IPCP選項是關于IP地址和IP壓縮的,測試選擇了選項3(IP-address)。本程序通過發(fā)出一個無效的地址請求(0.0.0.0),等待服務器回答一個NAK(選項為3)從這個NAK包中得到自己的正確地址。IPCP包的配置如圖7所示。
(4)CCP包的處理
有些服務器試圖協商壓縮,但由于我們關心的是程序的大?。ㄔ叫≡胶茫┒皇菙祿魉偷乃俣?,所以CCP請求被拒絕。
(5)IP包的處理
在協商好PPP協議的各選項后,即可進行數據傳輸了。同樣,為了簡單起見,采用了UDP協議而不是TCP協議。數據的正確性由應用程序控制。
(6)驗證
在(202.119.116.248)端,安裝了Netxray3.0版網絡嗅探器。利用該軟件可以很方便地查看進行該機器的數據包的功能,我們驗證出源端發(fā)送數據的測試程序是可行的。
結束語
本文針對實際應用情況,對龐大的TCP/IP網絡協議組進行了簡化,具體分析了簡化后的協議組中各種數據包,同時給出了測試程序對所需發(fā)送數據的具體打包過程。完整的TCP/IP協議很大,只能嵌入到32位以上的單片機上運行。我們在軟件只需要3K B(字節(jié)的ROM即可運行。在接收數據的目的端,PC機上安裝了Netxray 3.0軟件,對測試程序的結果進行測試,驗證出最終在目的端接收到的數據就是我們在源端所發(fā)送的數據,而且所有的數據包都符合TCP/IP規(guī)范。





