嵌入式操作系統VxWorks下PPPoE的實現
關鍵字:PPPoE;PPP;VxWorks;嵌入式操作系統
1 前言
在目前的通信市場,寬帶逐漸增溫,接入方式呈現多樣性:LAN、ADSL、HFC Cable Modem、WLAN各有一定的市場份額,而ADSL是全球范圍內占據主流地位的寬帶接入方式,它能夠提供最低512 kHz,最高8 MHz的帶寬。用戶可以獨享帶寬,不會因為上網人數的增加而導致上網速率的降低。更為重要的是ADSL價格低廉,能為普通消費者所接受。目前國內的各大運營商和寬帶接入提供商正在如火如荼地進行寬帶革命。中國電信推出“ADSL網絡快車”,并且已經圈定了大規模的用戶群;中國網通也有類似的市場規模。另一方面,VoIP語音業務也飛速發展。目前國內大多數VoIP語音接入終端多為LAN方式。主要用戶對象集中于智能化小區、校園、話吧等。由于大多數家庭用戶的寬帶接入為ADSL方式,運營商不得不考慮到目前的ADSL用戶對VoIP語音業務的需求。所以,如果VoIP的終端設備支持PP-PoE的接入方式,只要將VoIP的終端設備掛到AD-SLMODEM下就可以提供VoIP語音業務。VoIP終端設備的軟件大多都基于嵌入式操作系統。VxWorks是WRS(Wind River Systems Inc.)推出的嵌入式實時操作系統。VxWorks以無可比擬的高效能、高可靠性、高效的調試工具和穩定、高效的網絡協議等優點在高端通信市場占據了優勢地位,太多數通訊設備都采用VxWorks作為操作系統。本文詳細介紹PPP、PPPoE協議在VxWorks下的具體實現。
2 PPP和PPPOE協議
IP接入的功能包括動態IP地址分配、AAA和ISP動態選擇,實現這些功能通常需要用到一個著名的接入協議即PPP協議,PPP協議是一成熟的IP接入協議,支持多種協議封裝,實現簡單,易于與現有的ISP配合。它具有鏈路層和網絡層配置和協商功能,可方便地自動分配TP。PPP本身也是一個數據鏈路層協議,它可采用不同的傳輸機制傳送。常用的有HDLC、ATM和以太網。承載在以太網上的稱為PPPoE(PPP over Ethernet)。
2.1 PPPoE協議
RFC2516定義了一種在以太網上傳送PPP的方法即PPPoE。PPPoE分為二個階段,即Discovery(地址發現)階段和PPP會話階段。當某個主機希望發起一個PPPoE會話時,它必須首先執行Discovery來確定對方的以太網MAC地址并建立起一個PP-PoE會話標識符SESSION_ID。雖然PPP定義的是端到端的對等關系,Discovery卻是天生的一種客戶端-服務器關系。在Discovery的過程中,主機(作為客戶端)發現某個訪問集中器(Access Concentrator,作為服務器),根據網絡的拓撲結構,主機能夠與不只一個的訪問集中器通信。Discovery階段允許主機發現所有的訪問集中器并從中選擇一個。當Discovery階段成功完成后,主機和訪問集中器二者都具備了用于在以太網上建立點到點連接所需的所有信息。
(1)PPPoE的幀格式和種類
Discovery階段所有的以太網幀的ETHER_TYPE域都設置為0x8863。PPP會話階段以太網幀的ETHER_TYPE域都設置為0x8864。PPPoE的payload部分包含O個或多個TAG。一個TAG是一個TLV(type-length-value)結構,TAG_TYPE域為16位值(網絡字節序),RFC2516標準附錄A列出了各種TAG_TYPE和TAG_VALUE。PPPoE的幀格式如圖l所示。
PPPoE discovery階段有5種基本的幀,分別為PPPoE Active Discovery Initiation (PADI)、PPPoE Active Discovery Offer(PADO)、PPPoE Active Discovery Request (PADR)、PPPoE Active Discovery Sessionconfirmation (PADS)、PPPoE Active Discovery Terminate(PADT)。
(2)PPPoE的工作流程
PPPoE包含二個階段:Discovery搜索階段和Session會話階段。PPPoE Discovery的主要步驟為:
●主機發送PADl分組,其目的地址為廣播地址,會話IAD為0(未分配);
●任一接入服務器收到PADI并任提供所需的服務時,就回送PADO分組,會話IAD為O;
●主機可能收到多個PADO,根據服務及其提供的服務選定一個服務器,然后向該服務器發送PADR分組,其目的地址為該服務器的單播地址。會話ID為0(未分配);
●該服務器收到PADR后生成一個唯一的會話ID,向主機回送PADS分組,準備啟動PPP。
當搜索階段完成后,PPPoE的Host主機從接入服務器AC獲取一個Session ID。搜索成功后主機和接入服務器之間就可以建立Ethernet的PPP連接,進入PPP會話階段。
2.2 PPP協議
(1)PPP協議組成
PPP協議由IETF RFCl661定義,主要包含4個部分:
●幀封裝的方法;
●鏈路控制協議(LCP-Link Control Protocol),完成線路的啟動、測試、任選參數的協商和最終線路斷開功能;
●網絡控制協議(NCP),最常用的NCP協議為IP控制協議IPCP。它的一個重要功能就是動態分配IP地址;
●用戶認證,主要通過LCP協商采用何種認證協議,但認證協議本身不是PPP協議的范圍。
PPP可分為三個階段:LCP協商、認證和NCP協商。從協議上來說可以分為三個子層,每層可向相鄰的子層發送“Up”或“Down”事件。“Up”表示該層已激活,“Down”表示該層已終結。就整個接入過程而言,還可以認為LCP之下還有一個物理層,在每個NCP之上還有一個網絡接口。
一個子層的激活(Up)需具有三個事件:上層發出“打開”(Open)請求,下層收到“Up”事件;本層協商成功。
協議的基本過程為:用戶通過某個接口請求建立鏈路,此時Open事件發送到PPP的LCP子層,當LCP啟動后,即請求建立物理鏈路,開始PPPoE協商,當PPPoE協商成功后,就向LCP層發送Up事件。然后LCP向對端發送協商請求,雙方確定鏈路的配置參數后,LCP向認證層發送Up事件。認證成功后,在向NCP層發Up事件。如不需要認證,則可直接向NCP層發送up事件。NCP協議收到Up事件后開始NCP處理。例如IPCP協議將開始協商IP地址等。PPP正常終結過程是,每個NCP分別終結,然后LCP終結,最后物理層終結。但PPP實現必須能夠處理物理鏈路自行斷開、NCP尚未終結時LCP先行終結的異常情況。
(2)PPP的封裝格式
PPPP的封裝格式如下:
發送的順序是從左到右。Protocol定義被封裝的數據報的協議類型,最常用的幾種定義為:
3 在VxWorks下的實現
3.1 PPP和PPPoE數據包收發處理流程
為了更清楚地介紹VxWorks下的PPP和PPPoE數據包收發處理流程,先介紹一下Vx-Works下的TCP/IP協議棧的結構。
PPP和PPPoE在VxWorks TCP/IP協議棧中的位置如下:
VxWorks的TCP/IP協議棧與標準的BSD的TCP/IP協議的最大不同在于加入了MUX層。MUX層的作用是負責管理協議層和驅動層之間的相互作用,使協議層和驅動層相互透明。從而使一個VxWorks操作系統可以同時支持多個協議和驅動。PPP和PPPoE都屬于鏈路層的協議,所以介于MUX和IP層之間。
PPPoE層主要實現PPPoE撥號過程和對上層PPP的數據包進行PPPoE封裝。PPPoE通過MUX層的接口發送方向采用以太網發送函數ehterOutput發送數據包,接收方向主要是調用VxWorks提供的增加鉤子函數etherInputHookAdd添加自己的以太網鉤子函數對以太網幀類型為0x8863和0x8864的包進行處理。如幀類型為0x8863,則為PPPoE Dis-covery包,如為0x8864,則為PPPoE Session階段的包經拆封處理后送到PPP層處理。
PPP層軟件主要實現LCP鏈路建立、PPP認證、IPCP協商IP地址和對IP數據包的PPP封裝等功能。
PPP層與IP層的接口主要通過再添加一個if_PPP的網絡接口。從IP層看來if_PPP接口和普通的網口設備沒什么不同。if_ppp作為VxWorks TCP/IP協議棧中的一個網絡接口,可以封裝IP數據包,并且在PPP的鏈路上收發IP包。PPP和PPPoE層也有相應接口函數。發送方向PPP的數據包(無論是IP還是LCP、IPCP)都通過PPPoE層封裝后發送出去;接收方向,PPPoE層收到包先進行判斷,如是PPF包,就交PPP層處理。PPP層根據協議類型分發到LCP、IPCF、IP等相關模塊進行處理。整個PPP和PPPoE的收發包處理流程如圖2所示。
3.2 PPP和PPPoE軟件模塊設計
整個PPPoE、PPP軟件由PPP、PPP Adapter、PP-
PoE Discovery、PPPoE Session、PPPoE Timer、PPPoE Adpater、PPPoE Config模塊組成,如圖3所示。
1)PPP模塊主要實現LCP、IPCP和認讓協議(chap、pap)等,PPP還實現一個虛擬的ifnet接口,實現對上層IP報的封裝和分發處理。
2)PPP Adpater模塊主要實現PPP和PPPoE模塊之間的接口適配。
3)PPPoE Discoverv模塊實現PPPoE的Discov-ely階段的處理。
4)PPPoE Session模塊實現PPPoE的Session階段的處理,主要是PPPoE封裝和解包處理。
5)PPPoE Timer模塊主要實現PPPoE模塊的定時處理功能,用于PPPoE Discovery階段的狀態機切換處理。
6)PPPoE Adapater模塊主要實現PPPoE的包的收發處理。
7)PPPoE Config模塊主要實現PPP和PPPoE的相關配置功能。如配置用戶名密碼等。
4 結束語
本文介紹應用PPP和PPPoE協議實現VoIP的語音接人方法,詳細介紹了PPP、PPPoE協議的原理,討論了PPP和PPPoE協議在VxWorks操作系統下的具體實現,具有一定的工程應用價值。
tcp/ip相關文章:tcp/ip是什么
評論