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