曹雪峰,許勝男
(1.河北民族師范學院 數(shù)學與計算機系,河北 承德 067000 2.河北民族師范學院 信息中心,河北 承德 067000)
點到點協(xié)議(Point to Point Protocol,PPP)提供了一種在點到點的鏈路上封裝多協(xié)議數(shù)據(jù)報(IP、IPX等)的標準方法,它不僅支持物理層同步和異步傳輸;鏈路的配置;IP地址的動態(tài)分配和管理;而且還支持多種配置參數(shù)選項的協(xié)商。PPP協(xié)議在廣域網和嵌入式系統(tǒng)中有廣泛應用,這些都使得我們有必要了解和掌握PPP協(xié)議的工作原理和運行機制[1-2]。學習計算機網絡協(xié)議的最好方法,就是通過對網絡中捕獲報文的分析,理解協(xié)議的報文格式、協(xié)議的工作原理和交互過程。PPP協(xié)議運行在設備的串口,無法用Wireshark等協(xié)議分析軟件捕獲報文,不能通過捕獲報文的方法進行協(xié)議分析[3]。思科模擬軟件GNS3是一款開源的網絡模擬軟件,適用于多種操作系統(tǒng),它可以利用Wireshark來捕獲虛擬網絡拓撲中串口上通過的報文,從而使通過對報文分析來學習PPP協(xié)議成為可能[4]。
PPP協(xié)議有三個組成部分[5]:
⑴一個將IP數(shù)據(jù)報封到串行鏈路的方法。PPP既支持異步鏈路,也支持面向比特的同步鏈路。
⑵一個用來建立、配置和測試數(shù)據(jù)鏈路的鏈路控制協(xié)議 LCP(Link Control Protocol)。通信的雙方可協(xié)商一些選項。
⑶ 一套網絡控制協(xié)議NCP(Network Control Protocol),支持不同的網絡層協(xié)議,如IP、IPX等。當點到點的兩端進行NCP參數(shù)配置協(xié)商時,主要是用來確定通信雙方的網絡層地址。
在點到點鏈路的配置和維護過程中,PPP需經歷以下幾個階段:
⑴鏈路不可用階段
也稱為物理層不可用階段,PPP鏈路都需從這個階段開始和結束。往往在實際過程中這個階段所停留的時間是很短的,僅僅是檢測到對方設備的存在。
⑵鏈路建立階段
是PPP協(xié)議最關鍵和最復雜的階段。該階段主要是發(fā)送一些LCP配置報文來配置數(shù)據(jù)鏈路,這些參數(shù)不包括網絡層協(xié)議所需的參數(shù)。當完成配置報文的交換后,則會繼續(xù)向下一個階段躍遷,下一個階段既可是認證階段,也可是網絡層協(xié)議階段。
⑶認證階段
多數(shù)情況下鏈路兩端設備需要經過認證后才進入到網絡層協(xié)議階段,默認情況下鏈路兩端的設備是不進行認證的。在認證階段支持口令認證協(xié)議(Password Authentication Protocol,PAP)和挑戰(zhàn)握手認證協(xié)議(Challenge Hand Authentication Protocol,CHAP)兩種認證方式,認證方式的選擇是依據(jù)在鏈路建立階段雙方進行協(xié)商的結果。通過認證進入網絡層協(xié)議階段,否則進入鏈路終止階段。
⑷網絡層協(xié)議階段
一旦PPP完成了前面幾個階段,每種網絡層協(xié)議會通過各自相應的網絡控制協(xié)議進行配置,在這個階段所需的一些配置參數(shù)協(xié)商完后,就可以進行網絡層的通信。NCP協(xié)議主要包括IPCP、IPXCP等。
⑸鏈路終止階段
PPP能在任何時候終止鏈路。當載波丟失、認證失敗和管理員人為關閉鏈路等均會導致鏈路終止。
按圖1所示網絡拓撲結構搭建網絡,其中R1、R2為C3600系列路由器[6]。R1路由器s0/0端口地址為212.1.100.1/24,同時為客戶端分配IP地址范圍為 212.1.100.2~212.1.100.254,DNS服務器地址為200.1.1.10,采用predictor壓縮算法。R2路由器不采用壓縮算法,同時自動向對端申請獲取IP地址和DNS服務器地址。R1與R2路由器之間采用PAP認證方式,R1為主認證方,R2為被認證方,認證用戶名為cisco01,密碼為net01。
具體配置如下:
*R1路由器主要參考配置命令:
R1(config)#no cdp run
R1(config)#username cisco01 password net01
R1(config)#interface serial 0/0
R1(config-if)#ip address212.1.100.1 255.255.255.0
R1(config-if)#encapsulation ppp
R1(config-if)#ppp authentication pap
R1(config-if)#peer default ip address pool test
R1(config-if)#compress predictor
R1(config-if)#ppp ipcp dns 200.1.1.10
R1(config-if)#no shutdown
R1(config)#ip local pool test 212.1.100.2 212.1.100.254
*R2路由器參考配置命令:
R2(config)#no cdp run
R2(config)#interface serial 0/0
R2(config-if)#ip address negotiated
R2(config-if)#encapsulation ppp
R2(config-if)#ppp pap sent-username cisco01 password net01
R2(config-if)#ppp ipcp dns request
R2(config-if)#no shutdown
在R2路由器上執(zhí)行ping 212.1.100.1命令,同時運行Wireshak在R1—R2鏈路上捕獲PPP數(shù)據(jù)幀,捕獲報文如圖2所示。
在R2路由器上執(zhí)行如下命令:R2(config-if)#ppp pap sent-username cisco01 password net00,傳送錯誤的密碼,同時運行Wireshak在R1—R2鏈路上捕獲PPP數(shù)據(jù)幀。捕獲報文如圖3所示。
在鏈路建立階段使用LCP報文建立鏈路,LCP報文包括以下三種類型:
鏈路配置幀:包括Configure-Request、Configure-Ack、Configure-Nak 和 Configure-Reject,用于建立和配置鏈路。
鏈路維護幀:包括Code-Reject、Protocol-Reject、Echo-Request和 Echo-Reply等用于管理和調試鏈路。
鏈路終止幀:包括Terminate-Request和Terminate-Ack用于終止鏈路。
當通信雙方建立鏈路時,都需要發(fā)送Config-Request報文并攜帶每一端所希望協(xié)商的配置參數(shù),其中包括協(xié)議和身份認證參數(shù),如圖2中的1、2號報文。響應方處理這些參數(shù),如果可以接受,發(fā)送Configure-Ack響應報文,入土中的3、4號報文。收到Configure-Ack消息后,鏈路建立過程便轉入身份認證階段或網絡協(xié)議階段。
如果參數(shù)不可接受或無法識別,就發(fā)送Configure-Nak或Configure-Reject消息,不會建立鏈路。如果協(xié)商失敗,發(fā)起方需要使用新選項重新執(zhí)行該過程。
在鏈路維護期間,LCP可以通過發(fā)送鏈路維護幀來提供反饋和測試鏈路。如果無法識別的LCP編碼(LCP幀類型)或錯誤的協(xié)議標識符導致幀無效,可使用Code-Reject和Protocol-Reject這兩種幀來提供反饋,如圖2中的11號報文。Echo-Request和Echo-Reply幀可用于測試鏈路。
PAP是一種簡單的明文認證方式[7],對準備登錄到點到點協(xié)議服務器上的用戶進行身份認證。PAP采用兩次握手機制,在鏈路建立階段,認證方發(fā)送Configure-Request報文時會攜帶認證配置參數(shù)選項,而被認證方只需要返回相應的Configure-Ack報文,然后被認證方發(fā)送Authenticate-Request報文先發(fā)起認證請求,如圖2中的5號報文,把自己的用戶名和密碼傳送給認證方,認證方把接收到的用戶名和密碼與本地用戶數(shù)據(jù)庫中的信息作比較,如果該數(shù)據(jù)庫中有與用戶名和密碼一致的選項,就向被認證方返回一個Authenticate-Ack認證通過響應報文,如圖2中的6號報文,告訴對方認證已通過,進入網絡層協(xié)議階段,否則如果用戶名與密碼不符,則向被認證方返回Authenticate-Nak認證不通過的響應報文,如圖3中的6號報文,認證失敗,進入鏈路終止階段。LCP通過交換Terminate報文來關閉鏈路,認證方首先發(fā)送Terminate-Request報文,表明想關閉鏈路,而對方使用Terminate-Ack報文響應,如圖3中的7、8號報文,PPP鏈路隨即終止。PAP也可以采用雙向認證,此時任何一端即是認證方也是被認證方。
IPCP協(xié)議負責完成網絡層IP協(xié)議通信所需配置參數(shù)的協(xié)商,主要是完成IP地址的協(xié)商[8]。IPCP報文與LCP報文類似,只不過IPCP是在網絡層協(xié)議階段協(xié)商配置參數(shù),而LCP協(xié)議則是在鏈路建立階段協(xié)商配置參數(shù)。在實際的報文交換過程IPCP中主要涉及以下幾種:Configure-Request、Configure-Ack、Config-Nak 和 Configure-Reject。IPCP 的協(xié)商過程分為靜態(tài)地址協(xié)商和動態(tài)地址協(xié)商。
⑴靜態(tài)地址協(xié)商
在靜態(tài)地址協(xié)商過程中,兩端主機在PPP協(xié)商之前已配置好了IP地址,雙方要做的就是告訴對方自身的IP地址。在完成整個配置的過程時,無論是發(fā)送方還是接收方都要發(fā)送Configure-Request報文,其中配置選項中含有各自的IP地址。當對端收到該報文后,會發(fā)送一個Configure-Ack報文,其含義就是告訴對端我已經知道了你的IP地址。
⑵動態(tài)地址協(xié)商
在動態(tài)地址協(xié)商過程中,一端通過手動方式配置IP地址,且允許給對端分配IP地址,另一端配置為動態(tài)獲取IP地址,這個過程類似于撥號上網的過程。在圖2中7號報文是R1路由器發(fā)送的IPCP的Configure-Request報文,報文內容為 IP address∶212.1.100.1,也就是告訴對端我的IP地址是212.1.100.1;10號報文是R2返回的Configure-Ack報文,內容是IP address∶212.1.100.1,意思是我知道了。而9號報文是R2路由器發(fā)送的IPCP的Configure-Request報文,報文內容為 IPaddress∶0.0.0.0;Primary DNS server IP address∶0.0.0.0;Secondary DNSserver IP address∶0.0.0.0,也就是告訴對端我的IP地址、首選DNS和備用DNS服務器地址都是0.0.0.0;12號報文是R1返回的Configure-Reject報文,內容是 Secondary DNSserver IPaddress∶0.0.0.0,意思是我拒絕協(xié)商備用DNS服務器地址。然后13號報文是R2路由器再次發(fā)送的Configure-Request報文,報文內容為 IP address∶0.0.0.0;Primary DNS server IP address∶0.0.0.0,也就是不在協(xié)商備用DNS服務器地址都是0.0.0.0;14號報文是R1返回的Configure-Nak 報文,內容是 IP address∶212.1.100.4;Primary DNSserver IPaddress∶200.1.1.10,意思是我不同意你的IP地址和首選DNS服務器地址,用我給你的。最后15號報文是R2路由器發(fā)送的Configure-Request報文,報文內容為IP address∶212.1.100.4;Primary DNS server IP address∶200.1.1.10,也就是采用R1分配的IP地址和首選DNS服務器地址;16號報文是R1返回的Configure-Ack 報文,內容是 IP address∶212.1.100.4;Primary DNSserver IP address∶200.1.1.10,意思是我知道了。至此網絡層參數(shù)協(xié)商完畢,可以進行網絡層數(shù)據(jù)傳送。
在R1與R2路由器之間采用CHAP認證方式,R1為主認證方,R2為被認證方,認證用戶名為cisco01,密碼為net01。主要配置如下:
*R1路由器參考配置命令:
R1(config-if)#ppp authentication chap
R1(config-if)#ppp chap hostname routera
R1(config)#username routerb password cisco01
*R2路由器參考配置命令:
R2(config-if)#ppp chap hostname routerb
R2(config)#username routera password cisco01
在R2路由器上執(zhí)行ping 212.1.100.1命令。同時運行Wireshak在R1—R2鏈路上捕獲PPP數(shù)據(jù)幀。
PAP的缺點是用戶的用戶名和密碼是明文發(fā)送的,并且認證進程只在雙方的通信鏈路建立初期進行,有可能導致安全問題。而CHAP是三次握手協(xié)議[9],它只在網絡上傳送用戶名而不傳送口令,定期發(fā)出挑戰(zhàn),以確保遠程節(jié)點有有效的密碼,因此安全性比PAP高。
在認證一開始,由認證方向被認證方發(fā)送一段隨機的報文,并加上自己的用戶名,這個過程叫做挑戰(zhàn),圖4中的6號報文就是R1路由器發(fā)送的Code Challenge挑戰(zhàn)報文。當被認證方R2收到認證方的挑戰(zhàn)報文后,從中提取出認證方所發(fā)送過來的用戶名,然后根據(jù)該用戶名在被認證方設備的后臺數(shù)據(jù)庫中去查找相同的用戶名的記錄,當查找到后就把該用戶名所對應的密碼、報文ID和認證方發(fā)送的隨機報文用MD5加密算法生成密文,隨后將密文和自己的用戶名送回R1,這就是圖4中的7號Response響應報文,同樣認證方收到被認證方發(fā)送的報文后,提取被認證方的用戶名,然后去查找本地的用戶數(shù)據(jù)庫,當找到與被認證方一致用戶名后,根據(jù)該用戶名所對應的密碼、報文ID和隨機報文用MD5加密算法生成密文,和剛剛被認證方所返回的密文進行比較,如果相同則通知被認證方認證通過,發(fā)送圖4中的8號Success認證成功報文,否則認證沒有通過。
PPP協(xié)議應用廣泛,但是由于它配置在路由器設備的串口,正常捕獲PPP數(shù)據(jù)幀比較困難,無法采用協(xié)議分析法對其進行有效分析,通過在GNS3模擬軟件中設計并配置PPP協(xié)議仿真實驗,可以通過Wireshark捕獲PPP數(shù)據(jù)幀,采用協(xié)議分析的方法對PPP協(xié)議工作過程進行分析,加深了對理論知識的理解,提高了理論聯(lián)系實際的能力,對其它網絡協(xié)議的研究和學習有一定的參考價值。
[1]曹雪峰.計算機網絡配置、管理與應用[M].北京:機械工業(yè)出版社,2010.
[2]Karl Solie.CCIE實驗指南(第一卷)[M].李津,卓林,譯.北京:人民郵電出版社,2002.
[3]潘文嬋,章韻.Wireshark在TCP/IP網絡協(xié)議教學中的應用[J].計算機教育,2010,114(3):158~160.
[4]王煜林,王金恒.使用GNS3模擬網絡實驗室[J].電腦編程技巧與維護,2010,210,(12):113~114.
[5]William Allen Simpson.The Point-to-Point Protocol(PPP)[S].IETF RFC 1661,1994.
[6]李領治,陸建德等.基于Net Sim的計算機網絡實驗教學方案[J].實驗技術與管理,2009,26,(02):150~153.
[7]Brian Lloyd,William Allen Simpson.PPP Authentication Protocols[S].IETF RFC 1334,1992.
[8]Glenn McGregor.The PPP Internet Protocol Control Protocol(IPCP)[S].IETF RFC 1332,1992.
[9]William Allen Simpson.PPP Challenge Handshake Authentication Protocol(CHAP)[S].IETF RFC 1994,1996.