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