日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

PPP協(xié)議鏈路操作的軟件實現(xiàn)( 二 )


狀態(tài) 狀態(tài)(當前狀態(tài)和下一狀態(tài))以及狀態(tài)轉(zhuǎn)換,是狀態(tài)機的基本概念 。他指明狀態(tài)機當前時刻在做什么,處于什么情況 。在LCP的鏈路連接狀態(tài)機中,共有10種狀態(tài):Initial,Starting,Closed,Stopped,Closing,Stopping,Rdq-Sent,Ack-Received,Ack-Sent,Opened 。
事件 自動機里的狀態(tài)轉(zhuǎn)換是由事件引起的 。在鏈路連接協(xié)商時,本端從線路的對端發(fā)送過來的LCP包和自己的狀態(tài),判定將要發(fā)生的事件,并結合當前的狀態(tài)判定系統(tǒng)的下一狀態(tài) 。在LCP的鏈路建立過程中,事件種類較多,大概可以分為以下幾類:
①網(wǎng)絡狀態(tài)事件,表明LCP或者NCP的狀態(tài)變化,包括Up,Down,Open,Close 。
②超時計時器事件,與超時計時器有關的事件,包括TO+,TO- 。
③S/T數(shù)據(jù)包事件,包括RCR+,RCR-,RCA,RCN,RTR 。RTA,RUC,RXJ+,RXJ-,RXR 。動作 自動機中的動作由事件引起,所以,每個
事件都對應了相應的動作 。例如,有些動作表明了不同類型的LCP包的傳輸和(或)Restart timer的啟動和停止 。
狀態(tài)跳轉(zhuǎn)表 在PPP的鏈路操作中,每個狀態(tài),在經(jīng)過特定的事件后,會轉(zhuǎn)變成新的狀態(tài),并有可能有相應的事件 。這些關系比較復雜,可以用狀態(tài)跳轉(zhuǎn)表[1]來表示 。
3 軟件實現(xiàn)
3.1 軟件原理
PPP鏈路的建立、協(xié)商和握手的過程是需要建立連接的雙方來完成的 。每一方根據(jù)對端發(fā)送的LCP包的類型,做出相應的判定并響應 。軟件的原理就是用軟件來模擬PPP鏈路中的一端,完全實現(xiàn)協(xié)議棧的功能 。更重要的是,本文所討論的實現(xiàn)方法可以實現(xiàn)檢測、診斷的目的,這是一般的軟件不能做到的 。
在實現(xiàn)過程中,軟件接收對端的LCP包,然后根據(jù)LCP的狀態(tài)跳轉(zhuǎn)表來決定自己下一步的狀態(tài),并產(chǎn)生相應的事件和動作,將響應包通過軟件發(fā)向?qū)Χ耍_到軟件實現(xiàn)鏈路連接的目的 。
軟件可以將鏈路活動的狀況,接收和發(fā)送的數(shù)據(jù)包、鏈路的當前狀態(tài)一一顯示出來 。用戶可以通過軟件具體了解到網(wǎng)絡的活動情況和狀態(tài) 。
3.2 實現(xiàn)方法
軟件實現(xiàn)的開發(fā)工具為Borland C++Builder可視化開發(fā)環(huán)境,運行的環(huán)境是簡體中文Windows 98 。軟件具有信息回顯界面,便于用戶測試和分析 。以下具體說明軟件實現(xiàn)的方法 。
3.2.1 總體流程
軟件的實現(xiàn)部分用到2個子線程,這2個線程分別負責接收和處理數(shù)據(jù),并對數(shù)據(jù)緩沖區(qū)進行操作 ??傮w流程如圖1所示 。
3.2.2 線程結構
軟件上采用多線程的技術實現(xiàn) 。除了主線程,有2個子線程用于實現(xiàn)鏈路操作:一個作為數(shù)據(jù)包接收線程,一個作為數(shù)據(jù)包處理線程 。
當程序開始時,主線程初始化,將自己的狀態(tài)置為Initial,同時啟動數(shù)據(jù)接收線程 。因為這時PPP連接雙方這時開始進行連接和協(xié)商,所以會收到對端設備的LCP包,接收線程接收LCP包,并交給處理線程處理 。處理線程對接收的數(shù)據(jù)進行解包,解出LCP包的內(nèi)容,結合當前的情況,得到產(chǎn)生的事件,并根據(jù)當前的狀態(tài)和狀態(tài)跳轉(zhuǎn)表,決定要模擬的下一個狀態(tài),假如必要,將相應的響應發(fā)給對端 。
 
處理線程是整個程序的重點,這個線程的流程如圖2所示 。
 
可以分為以下幾步:
(1)得到接收線程交給的對端數(shù)據(jù)包 。
(2)分析數(shù)據(jù)包中的內(nèi)容,根據(jù)數(shù)據(jù)包的類型和當前本端的狀態(tài),查找狀態(tài)跳轉(zhuǎn)表,決定本端下一步的狀態(tài) 。
(3)通過狀態(tài)-事件的對應,本端執(zhí)行相應的事件 。
(4)將產(chǎn)生的事件,系統(tǒng)的情況通過界面顯示 。
(5)根據(jù)狀態(tài)跳轉(zhuǎn)表確定是否應該給對端發(fā)送LCP包 。假如需要,則按照LCP包標準封裝數(shù)據(jù)并發(fā)送 。

推薦閱讀