了解PPP狀態,掌握PPP協議
在我們學習網絡協議的過程中,定聽說過點對點協議,也就是PPP協議。那么這個協議有什么特點呢?這里我們就來了解一下PPP協議以及PPP狀態。PPP是一種數據鏈路層協議,遵循HDLC(高級數據鏈路控制協議)族的一般報文格式。
PPP是為了在點對點物理鏈路(例如RS232串口鏈路、電話ISDN線路等)上傳輸OSI模型中的網絡層報文而設計的,它改進了之前的一個點對點協議–SLIP協議–只能同時運行一個網絡協議、無容錯控制、無授權等許多缺陷,PPP是現在最流行的點對點鏈路控制協議.
上圖中PPP的flag字段恒為0×7f,地址(adress)字段恒為0xff,控制(control)字段恒為0×03.協議(protocol)字段表示PPP報文中封裝的payload(data字段)的類型,如果為0×0021,則表示PPP封裝的IP報文,0×002B表示IPX報文,0×0029表示AppleTalk報文,這幾種都屬于PPP的數據報文;如果為0×8021則表示PPP的LCP報文(用來協商連接),如果為0xC021則屬于PPP的NCP報文(用來協商封裝的三層協議),這些屬于PPP的控制報文.
PPP協議狀態機如下圖所示:
在上圖的鏈接建立階段(建立),PPP使用LCP報文來協商連接(一種發送配置請求,然后接收響應的簡單"握手"過程,不做過多介紹,感興趣可以去細讀RFC1661),協商中雙方獲得當前點對點連接的狀態配置等,之后的"鑒別"階段使用哪種鑒別方式也在這個協商中確定下來.
鑒別階段是可選的,如果鏈接協商階段并沒有設置鑒別方式,則將忽略本階段直接進入"網絡"階段.鑒別階段使用鏈接協商階段確定下來的鑒別方式來為連接授權,以起到保證點對點連接安全,防止非法終端接入點對點鏈路的功能.常用的鑒別認證方式有CHAP和PAP方式.
CHAP方式的原理是由一端定期發起挑戰"challenge",收到"challenge"的一端將收到的"challenge"報文中的密鑰使用之前雙發協商好的一種算法加密后再把結果發回發起端,這種算法應該是結果唯一(不同輸入必得到不同輸出)且不可逆(由輸出無法得到輸入)的,發起端也使用該算法計算后驗證結果是否正確來為對端授權認證.一個常用的方案實例是:發起端發送隨機長度及內容的字符串加上自己的用戶名作為"密鑰"發送出來,接受到"challenge"的一方將收到的字符串和與對方用戶名相對應的本端用戶的密碼使用MD5算法計算后發回,然后發起端將收到的計算結果和本端MD5計算該隨機字符串加自己密碼的結果相對照,如果雙發一致,則認證成功.
另一種認證方式PAP方式相比就簡單很多,直接由被驗證方將自己的用戶名和密碼明文方式發送給對端,由對端對用戶名和密碼驗證來決定是否認證成功.所以,比較而言,CHAP是一種相對更安全一些的驗證方式.
需要注意的是,PPP兩端雙方向的鑒權方式可以不同,即A端為B端鑒權時使用PAP方式(B發送自己的用戶名和密碼給請A認證),而同時B端使用CHAP方式為A端鑒權(B向A發起CHAP挑戰),是完全可以的.
如果鑒別階段成功,則PPP狀態機進入"網絡"階段.這個階段主要是使用NCP報文來協商將PPP封裝怎樣的網絡層的問題.NCP報文及協商流程和LCP極為相似,就不過多介紹了.
經過網絡階段后,PPP狀態機進入OPEN打開狀態,在這個狀態下,PPP鏈路上的三層數據報文即可正常通信了.