<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式單片機PPP協(xié)議的應用

嵌入式單片機PPP協(xié)議的應用

作者: 時(shí)間:2011-09-16 來(lái)源:網(wǎng)絡(luò ) 收藏
(Point-to-Point Protocol)提供了在串行點(diǎn)對點(diǎn)鏈路上傳輸數據報的方法,支持異步8位數據及位導向的同步連接(如ISDN)。它提供了一種管理兩點(diǎn)間會(huì )話(huà)的有效方法,正在取代SLIP(Serial Line Interface Protocol)協(xié)議成為點(diǎn)對點(diǎn)網(wǎng)絡(luò )的標準。

單片機是在單片機中嵌入,以實(shí)現單片機與計算機之間的PPP數據傳輸,使它既可以作為PPP連接的客戶(hù)端,也可以作為獨立的PPP服務(wù)器端來(lái)使用。它在家電控制和小型數據傳輸系統中具有非常廣闊的應用前景,并且具有成本低、傳輸穩定等特點(diǎn),是當前單片機研究的熱門(mén)話(huà)題之一。

1 PPP的工作原理

PPP采用高級數據鏈路控制(HDLC)協(xié)議作為在對點(diǎn)鏈路上分裝數據報的基本方法。使用可擴展的鏈路控制協(xié)議(LCP)來(lái)建立、配置和測試數據鏈路。用網(wǎng)絡(luò )控制協(xié)議簇(NCP)來(lái)建立和配置不同的網(wǎng)絡(luò )層協(xié)議,PPP允許同時(shí)采用多種網(wǎng)絡(luò )層協(xié)議。

為了建立點(diǎn)對點(diǎn)鏈路上的通信連接,發(fā)送端PPP首先發(fā)送LCP幀,以配置和測試數據鏈路。在LCP建立好數據鏈路并協(xié)調好所選設備后,發(fā)送端PPP發(fā)送NCP幀,以選擇和配置一個(gè)或多個(gè)網(wǎng)絡(luò )層協(xié)議。當所選的網(wǎng)絡(luò )層協(xié)議配置好后,便可以將各網(wǎng)絡(luò )層協(xié)議的數據包發(fā)送到數據鏈路上。配置好的鏈路將一直處于通信狀態(tài),直到LCP幀或NCP幀明確提示關(guān)閉鏈路,或有其它的外部事件發(fā)生。PPP連接狀態(tài)圖如圖1所示。


1.1 連接死亡階段

一個(gè)連接的開(kāi)始和結束都要經(jīng)歷這個(gè)階段。當一個(gè)外部事件指示物理層已準備好并可使用時(shí),PPP進(jìn)入建立連接階段。此時(shí),LCP自動(dòng)機處于初始階段。當它向鏈路建立階段轉換時(shí)將給LCP自動(dòng)機發(fā)送一個(gè)UP事件信號。

1.2 連接建立階段

LCP用于交換配置信息包、建立連接。一旦一個(gè)配置成功的信息包發(fā)送且被接收,就完成了交換,進(jìn)入LCP開(kāi)啟狀態(tài)。所有的配置選項都假定使用默認值,除非在配置交換過(guò)程中被改變。只有那些與特定的網(wǎng)絡(luò )層協(xié)議無(wú)關(guān)的選項才會(huì )被LCP配置。收到LCP配置數據包將使鏈路從網(wǎng)絡(luò )層協(xié)議階段或者認證階段返回到鏈路建立階段。

1.3 認證階段

在某些連接情況下,希望在允許網(wǎng)絡(luò )層協(xié)議交換數據前對等實(shí)行認證。默認情況下,是不要求認證的。認證要求必須在建立連接階段提出,然后進(jìn)入認證階段。如果認證失敗,將進(jìn)入連接終止階段。在此階段只對連接協(xié)議、認證協(xié)議、連接質(zhì)量測試數據包進(jìn)行處理。

1.4 網(wǎng)絡(luò )層協(xié)議階段

一旦PPP完成上述階段,便進(jìn)入網(wǎng)絡(luò )協(xié)議階段。每一個(gè)網(wǎng)絡(luò )層協(xié)議 (例如IP、IPX、AppleTalk等)必須有相應的網(wǎng)絡(luò )控制協(xié)議(NCP)單獨配置,每個(gè)網(wǎng)絡(luò )控制協(xié)議都可以隨時(shí)打開(kāi)或關(guān)閉。此階段,LCP協(xié)議自動(dòng)狀態(tài)機處于打開(kāi)狀態(tài),接收到的任何不支持的協(xié)議數據包都會(huì )被返回一個(gè)協(xié)議拒絕包,而接收到的所有支持的數據包都將被丟棄。此時(shí),鏈路上流通的是LCP數據包、NCP數據包以及網(wǎng)絡(luò )協(xié)議數據包。

1.5 終止連接階段

PPP連接可以隨時(shí)被終止。LCP通過(guò)交換連接終止包來(lái)終止連接。當連接被終止時(shí),PPP會(huì )通知物理層采取相應的動(dòng)作。只有當物理層斷開(kāi),連接才會(huì )真正被終止。此階段,接收到的所有非LCP數據包都將被丟棄。

2 PPP數據結構

PPP數據幀的結構如表1所示,PPP協(xié)議標志如表2所示。


嵌入式單片機PPP協(xié)議的應用

嵌入式單片機PPP協(xié)議的應用


每個(gè)PPP數據包的開(kāi)始和結束都有一個(gè)0x7E的數據標志。在開(kāi)始標志后,緊跟2個(gè)HDLC常量:地址常量0xFF和控制常量0x03。協(xié)議域長(cháng)度通常為2字節,表示信息域里包含的是哪種協(xié)議以及它的處理信息。隨后是代碼(Code)、標識符(ID)和長(cháng)度域(Length)。事實(shí)上它們都是信息域(Payload)的一部分。信息域長(cháng)度最多為1500字節。代碼部分用來(lái)指示LCP、PAP、IPCP或者CHAP協(xié)議數據包中的某種類(lèi)型。通常情況下,用來(lái)表示IP自尋址信息數據包的標識是0x45。ID對于每一幀來(lái)說(shuō)都是唯一的,所有協(xié)議間的商談和響應都通過(guò)ID聯(lián)系在一起。只有當PPP協(xié)議幀被壓縮成IP尋址信息包時(shí)例外。這個(gè)時(shí)候ID表示的是一種服務(wù)類(lèi)型。有效載荷部分是可變的,并能隨著(zhù)請求和響應的變化作相應的改變。在IP自尋址情況下,IP數據包的大小與PPP協(xié)議幀的大小是兼容的,有效載荷包含有關(guān)協(xié)議的商談和數據包的保持。然后是一個(gè)長(cháng)度為2字節循環(huán)冗余檢驗碼,以檢測數據幀中的錯誤。由于標志字符的值是0x7E,因此當該字符出現在信息字段中時(shí), PPP需要對它進(jìn)行轉義。具體實(shí)現過(guò)程如下:

(1)當遇到字符0x7E時(shí),需連續傳送2個(gè)字符:0x7D和0x5E,以實(shí)現標志字符的轉義。

(2)當遇到轉義字符0x7D時(shí),需連續傳送2個(gè)字符:0x7D和0x5D,以實(shí)現轉義字符的轉義。

(3)默認情況下,如果字符的值小于0x20(例如ASCII控制字符),一般都要進(jìn)行轉義。例如,遇到字符0x01時(shí)需連續傳送0x7D和0x21兩個(gè)字符(這時(shí),第6個(gè)比特取補碼后變?yōu)?,而前面兩種情況均把它變?yōu)?)。這樣做是防止它們出現在雙方主機的串行接口驅動(dòng)程序或調制解調器中,因為它們有時(shí)會(huì )把這些控制字符解釋成特殊的含義。另一種可能是用鏈路控制協(xié)議來(lái)指定是否需要對這32個(gè)字符中的某些值進(jìn)行轉義。默認情況下是對所有的32個(gè)字符都進(jìn)行轉義。

關(guān)于PPP協(xié)議的詳盡描述可以參閱RFC1661文檔。

3 單片機PPP協(xié)議

單片機PPP協(xié)議是PPP協(xié)議在單片機中的應用,有其特點(diǎn)。單片機的存儲空間只有64KB,而PPP協(xié)議包括LCP、PAP、IPCP以及NCP等協(xié)議,并且在連接建立后還要用到數據傳輸協(xié)議(TCP/IP、UDP等)、各種壓縮協(xié)議等。要把這些協(xié)議完全嵌入單片機是不可能的,所以只能根據實(shí)際需要選擇其中的一部分。

例如采用UDP協(xié)議而不是功能相對齊全但協(xié)議內容過(guò)于龐大的TCP/IP協(xié)議來(lái)傳輸數據,傳輸中基本上不使用數據壓縮協(xié)議,跳過(guò)單片機作為服務(wù)器端時(shí)的密碼驗證過(guò)程,省略IPX、AppleTalk等網(wǎng)絡(luò )層協(xié)議等。也就是說(shuō),本文的單片機PPP協(xié)議,事實(shí)上只包含了從PPP連接的建立到實(shí)現簡(jiǎn)單的數據傳輸所必需的協(xié)議,而不包括PPP協(xié)議的所有功能。這種協(xié)議的取舍是由硬件的客觀(guān)限制以及實(shí)際的應用需要共同決定的。

4 單片機PPP協(xié)議PPP連接的建立

建立后的單片機PPP連接狀態(tài)如圖2所示。

嵌入式單片機PPP協(xié)議的應用


其中,C51系統是已經(jīng)植入PPP協(xié)議的51系列單片機,電話(huà)線(xiàn)部分也可以是某個(gè)網(wǎng)絡(luò )的一部分,甚至是Internet。

單片機PPP協(xié)議流程圖如圖3所示。

嵌入式單片機PPP協(xié)議的應用


PPP連接的建立主要經(jīng)過(guò)三個(gè)階段,分別是LCP協(xié)商、密碼認證以及網(wǎng)絡(luò )層協(xié)議配置。

4.1 LCP處理階段

首先,第一個(gè)LCP數據包被服務(wù)器端發(fā)送后,從服務(wù)器端返回一個(gè)PPP拒絕包給除密碼認證外的所有選項,接著(zhù)服務(wù)器端強制認證協(xié)議進(jìn)行協(xié)商(先前來(lái)自否定幀的PAP和CHAP都被發(fā)送)。隨后服務(wù)器端返回一個(gè)拒絕包給CHAP,本文用PAP來(lái)代替。然后服務(wù)器端認同并返回一個(gè)新的請求,這時(shí)候需要進(jìn)行PAP。接下去對PAP進(jìn)行確認,系統對字符映射的丟棄進(jìn)行協(xié)商。最后所有控制特性被服務(wù)器端同意丟棄。

下面是由服務(wù)器發(fā)送的一段LCP建立連接的字符串:

0000:7E FF 03 C0 21 01 71 00 2B 01 04 06 40 05 06 3A 5D 8B B4 02 06 00
0016:00 00 00 11 04 06 40 17 04 00 64 00 02 03 04 C0 23 13 09 03 08 00
002C:03 0A 2C 2C 95 7F 7E

對它進(jìn)行分析如表3。

嵌入式單片機PPP協(xié)議的應用


4.2 PAP處理階段

首先,系統發(fā)送PAP數據包給服務(wù)器端,然后服務(wù)器端通過(guò)用戶(hù)ID和密碼驗證。

PAP密碼驗證協(xié)議在RFC1334中有詳細定義,主要是為撥號網(wǎng)絡(luò )中提供密碼保護。這個(gè)選項是可選的。在本應用軟件中,強制單片機和PC協(xié)商的選項中,PC要求密碼驗證,單片機端不要求。所以如果PC機作為服務(wù)器,單片機需要發(fā)送用戶(hù)名和密碼;如果單片機作服務(wù)器,則沒(méi)有密碼驗證的要求。

PAP的格式如圖4所示。

嵌入式單片機PPP協(xié)議的應用


下面是單片機發(fā)送PAP的數據包:

7E FF 03 C0 23 01 06 00 0C 03 7A 77 6D 03 7A 77 6D…

解析如表4所示。

嵌入式單片機PPP協(xié)議的應用


單片機向PC機發(fā)送PAP數據包是在PC機發(fā)送對單片機LCP選項的確認之后、PC機向單片機發(fā)送IPCP請求之前。

4.3 IPCP處理階段

IPCP是用來(lái)設置PPP連接中的網(wǎng)絡(luò )環(huán)境,包括IP地址、IP壓縮協(xié)議、DNS服務(wù)器地址等都是通過(guò)IPCP來(lái)協(xié)商的。首先服務(wù)器端發(fā)送請求進(jìn)行IPCP協(xié)商,然后系統返回一個(gè)拒絕包給除IP地址外的所有操作。由于先前的發(fā)送被拒絕,服務(wù)器端發(fā)送一個(gè)回復,只包含IP地址。此時(shí),系統相當于服務(wù)器端的IP地址認證,然后由請求信息和IP地址來(lái)完成三路握手協(xié)議。接著(zhù)服務(wù)器端返回一個(gè)包含預先指派IP地址的拒絕包。此時(shí)連接建立并擁有一個(gè)指定的IP地址。IPCP幀的格式與LCP也是類(lèi)似的:一字節的代碼,然后是標志,長(cháng)度,選項。當IP協(xié)議的選項配置完,就可以開(kāi)始通訊了。IPCP的詳細描述在RFC1332中。

連接建立后,PPP將在原有協(xié)議的基礎上調用網(wǎng)絡(luò )協(xié)議UDP(User Datagram Protocol)和ICMP(Internet Control Messages Protocol)等。有關(guān)用戶(hù)數據包協(xié)議UDP的詳細資料可參看RFC882、RFC883文檔;Internet信息控制協(xié)議ICMP的詳細資料可參看文檔RFC792。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

tcp/ip相關(guān)文章:tcp/ip是什么




關(guān)鍵詞: 嵌入式 PPP協(xié)議

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>