LinuxPPP數(shù)據(jù)收發(fā)流程_第1頁
LinuxPPP數(shù)據(jù)收發(fā)流程_第2頁
LinuxPPP數(shù)據(jù)收發(fā)流程_第3頁
LinuxPPP數(shù)據(jù)收發(fā)流程_第4頁
LinuxPPP數(shù)據(jù)收發(fā)流程_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、PPP(Point-to-Point)提供了一種標(biāo)準(zhǔn)的方法在點對點的連接上傳輸多種協(xié)議數(shù)據(jù)包,它最常見的用途可能是傳統(tǒng)的撥號上網(wǎng)了(據(jù)說現(xiàn)在的寬帶接入也有采用PPPOE方式的)。在LinuxMobilePhone上,網(wǎng)絡(luò)應(yīng)用程序使用PPP作為與GSM模組之間的通信協(xié)議,最近遇到了一點關(guān)于PPP的麻煩,所以花了點時間去研究它。PPP協(xié)議肯定不是最復(fù)雜的網(wǎng)絡(luò)協(xié)議,不過pppd、chat、tty、socket、ccp、chap、pap、eap、ecp、ipcp和很多其它概念攪在一起之后,誰都會被搞得暈頭轉(zhuǎn)向。我關(guān)心的其實是PPP協(xié)議中各個實體之間的協(xié)作關(guān)系,而不是協(xié)議的狀態(tài)轉(zhuǎn)換或者服務(wù)的配置,由于沒

2、有找到這方面的資料,只好去讀RFC,內(nèi)核、pppd和一些網(wǎng)絡(luò)工具的代碼。PPP協(xié)議提供兩個實體之間的數(shù)據(jù)鏈路連接的建立、維持和釋放,負(fù)責(zé)流量和差錯控制等等功能,所以它應(yīng)該是屬于數(shù)據(jù)鏈路層協(xié)議的。PPP協(xié)議之下是以太網(wǎng)和串口等物理層,之上是IP協(xié)議等網(wǎng)絡(luò)層。這里,對于下層,我們只討論串口的情況,對于上層,我們只討論TCP/IP的情況。發(fā)送時,TCP/IP數(shù)據(jù)包經(jīng)過PPP打包之后經(jīng)過串口發(fā)送。接收時,從串口上來的數(shù)據(jù)經(jīng)PPP解包之后上報給TCP/IP協(xié)議層。網(wǎng)絡(luò)協(xié)議是分層實現(xiàn)的,上層一般只需要知道其直接下層,只有在極少數(shù)據(jù)情況才使用間接下層的接口。比如,彩信、瀏覽器和郵件等應(yīng)用程序使用socket

3、接口編程,它們只需要知道TCP/IP協(xié)議,而無需要知道PPP協(xié)議的存在。這種分層設(shè)計簡化了協(xié)議的實現(xiàn)和應(yīng)用程序的開發(fā)。問題來了:PPP協(xié)議不只是提供了簡單的數(shù)據(jù)鏈路層功能,它還提供了諸如鑒權(quán)(如PAP/CHAP),數(shù)據(jù)壓縮/解壓(如CCP)和數(shù)據(jù)加密/解密(如ECP)等擴展功能。應(yīng)用程序要求使用透明化,不關(guān)心這些擴展功能的存在,而反過來,PPP協(xié)議處理模塊本身又無法處理這些策略性的東西,因為它不知道用戶名/密碼,不知道是否要進(jìn)行壓縮,不知道是否要進(jìn)行加密。怎么辦?如何在對應(yīng)用程序透明的情況下使用擴展功能呢?上帝說,這個問題必須解決!于是pppd就出現(xiàn)了。pppd是一個后臺服務(wù)進(jìn)程(daemon

4、),是一個用戶空間的進(jìn)程,所以把策略性的內(nèi)容從內(nèi)核的PPP協(xié)議處理模塊移到pppd中是很自然的事了。pppd實現(xiàn)了所有鑒權(quán)、壓縮/解壓和加密/解密等擴展功能的控制協(xié)議。pppd只是一個普通的用戶進(jìn)程,它如何擴展PPP協(xié)議呢?這就是pppd與內(nèi)核中的PPP協(xié)議處理模塊之間約定了,它們之間采用了最傳統(tǒng)的內(nèi)核空間與用戶空間之間通信方式:設(shè)備文件。設(shè)備文件名是/dev/ppp。通過read系統(tǒng)調(diào)用,pppd可以讀取PPP協(xié)議處理模塊的數(shù)據(jù)包,當(dāng)然,PPP協(xié)議處理模塊只會把應(yīng)該由pppd處理的數(shù)據(jù)包發(fā)給pppd。通過write系統(tǒng)調(diào)用,pppd可以把要發(fā)送的數(shù)據(jù)包傳遞給PPP協(xié)議處理模塊。通過ioctr

5、l系統(tǒng)調(diào)用,pppd可以設(shè)置PPP協(xié)議的參數(shù),可以建立/關(guān)閉連接。在pppd里,每種協(xié)議實現(xiàn)都在獨立的C文件中,它們通常要實現(xiàn)protent接口,該接口主要用于處理數(shù)據(jù)包,和fsm_callbacks接口,該接口主要用于狀態(tài)機的狀態(tài)切換。數(shù)據(jù)包的接收是由main.c:get_input統(tǒng)一處理的,然后根據(jù)協(xié)議類型分發(fā)到具體的協(xié)議實現(xiàn)上。而數(shù)據(jù)包的發(fā)送則是協(xié)議實現(xiàn)者根據(jù)需要調(diào)用output函數(shù)完成的。chat是pppd所帶一個輔助工具。呵,它和xchat不是一個類型的,xchat用來與人聊天,而chat用來與GSM模組建立會話。它的實現(xiàn)比較簡單,它向串口發(fā)送AT命令,建立與GSM模組的會話,以便

6、讓PPP協(xié)議可以在串口上傳輸數(shù)據(jù)包。應(yīng)用程序通過socket接口發(fā)送TCP/IP數(shù)據(jù)包,這些TCP/IP數(shù)據(jù)包如何流經(jīng)PPP協(xié)議處理模塊,然后通過串口發(fā)送出去呢?pppd在make_ppp_unit函數(shù)中調(diào)用ioctrl(PPPIOCNEWUNIT)創(chuàng)建一個網(wǎng)絡(luò)接口(如pppO),內(nèi)核中的PPP協(xié)議模塊在處理PPPIOCNEWUNIT時,調(diào)用register_netdev向內(nèi)核注冊ppp的網(wǎng)絡(luò)接口,該網(wǎng)絡(luò)接口的傳輸函數(shù)指向ppp_start_xmit。當(dāng)應(yīng)用程序發(fā)送數(shù)據(jù)時,內(nèi)核根據(jù)IP地址和路由表,找到ppp網(wǎng)絡(luò)接口,然后調(diào)用ppp_start_xmit函數(shù),此時控制就轉(zhuǎn)移到PPP協(xié)議處理模塊

7、了。ppp_start_xmit調(diào)用函數(shù)ppp_xmit_process去發(fā)送隊列中的所有數(shù)據(jù)包,ppp_xmit_process又調(diào)用ppp_send_frame去發(fā)送單個數(shù)據(jù)包,ppp_send_frame根據(jù)設(shè)置,調(diào)用壓縮等擴展處理之后,又經(jīng)ppp_push調(diào)用pch-chan-ops-start_xmit發(fā)送數(shù)據(jù)包。pch-chan-ops-start_xmit是什么?它就是具體的傳輸方式了,比如說對于串口發(fā)送方式,則是ppp_async.c:ppp_asynctty_open中注冊的ppp_async_send函數(shù),ppp_async_send經(jīng)ppp_async_push函數(shù)調(diào)用t

8、ty-driver-write把數(shù)據(jù)發(fā)送串口。用戶數(shù)據(jù)發(fā)送過程如下圖所示:pppd的控制協(xié)議數(shù)據(jù)發(fā)送過程如下圖所示:反過來,接收數(shù)據(jù)的情形又是如何的?ppp_async.c在初始化時(ppp_async_init),調(diào)用tty_register_ldisc向tty注冊了行規(guī)程處理接口,也就是一組回調(diào)函數(shù),當(dāng)串口tty收到數(shù)據(jù)時,它就會回調(diào)ppp_ldisc的ppp_asynctty_receive函數(shù)接收數(shù)據(jù)。ppp_asynctty_receive調(diào)用ppp_async_input把數(shù)據(jù)buffer轉(zhuǎn)換成sk_buff,并放入接收隊列ap-rqueue中。ppp_async另外有一個tasklet(ppp_async_process)專門處理接收隊列ap-rqueue中的數(shù)據(jù)包,ppp_async_process直掛在接收隊列ap-rqueue上,一旦被喚醒,它就調(diào)用ppp_input函數(shù)讓PPP協(xié)議處理模塊處理該數(shù)據(jù)包。在ppp_input函數(shù)中,數(shù)據(jù)被分成兩路,一路是控制協(xié)議數(shù)據(jù)包,放入pch-file.rqb隊列,交給pppd處理。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論