ppp協議解析二
轉:http://blog.csdn.net/yangzheng_yz/article/details/11526747
PPP(Point to Point Protocol,點對點協議)協議是為在兩個對等實體間傳輸數據包,建立簡單連接而設計的。這種連接提供了同時的雙向全雙工操作,並且假定數據包是按順 序投遞的。PPP協議還滿足了動態分配IP地址的需要,並能夠對上層的多種協議提供支持。PPP在TCP/IP協議集中是位於數據鏈路層的協議,其物理實 現方式有兩種:一種是通過以太網口(這時稱之為PPPoE,即PPP over Ethernet),另一種就是利用普通的串行接口。本文主要討論的就是後一種PPP協議的具體實現過程。
PPP協議是目前應用得最廣的一種廣域網協議,它主要由以下3部分組成:(1) 在串行線路中對上層數據包的封裝(HDLC);(2) 用於建立、配置和檢測數據鏈路連接的鏈路控制協議(LCP) ;(3) 用於建立和配置不同網絡層協議的網絡控制協議(NCP) 協議簇。下面從PPP協議的封裝結構和PPP鏈路協商兩個部分對PPP協議進行詳細剖析。
PPP協議封裝
PPP 封裝用於消除上層多種協議數據包的歧義,加入幀頭、幀尾, 使之成為互相獨立的串行數據幀。PPP 采用HDLC 的組幀格式,它是面向字符的。在完整的PPP 幀中,幀頭由幀開始標記、地址域、控制域、協議域組成,幀尾由校驗域、幀結束標記組成(如表1 所示)。
表1:PPP幀封裝格式
標記 1字節 0X7E |
地址 1字節 0XFF |
控制 1字節 0X03 |
協議 2字節 |
編碼 1字節 |
ID 1字節 |
長度 2字節 |
載荷 0-1496字節 |
校驗和 2字節 |
標記 1字節 0X7E |
表2:PPP協議代碼 表3:編碼對應含義
協議代碼 |
對應協議 |
0XC021 LCP協議 0XC023 PAP協議 0XC223 CHAP協議 0X8021 IPCP協議 0X0021 IP協議 |
編碼值 |
對應含義 |
1 配置請求(Req) 2 接受配置(Ack) 3 配置請求接受,其他拒絕(Nak) 4 配置請求不認識或不被接受(Rej) 5 終止鏈接 6 終止確認 |
PPP幀以0x7e作為一幀的開始和結束的標記,占一個字節。地址域和控制域固定的值,分別為0xff 和0x03,各占一個字節。協議域為兩個字節,在實際應用中因數據包的不同而不同。PPP 幀具有錯誤檢測機制,校驗和中填寫的就是發送方對幀數據的檢驗碼,接收方在接收到該幀後對數據做校驗,通過校驗來判斷數據幀在傳送過程中是否有誤。其中校 驗和采用的是CRC算法,校驗範圍從地址字節到校驗和位置之前的最後一個數據載荷。
PPP協議包含豐富的內容, 它能實現包括IP協議在內的多種網絡協議的封裝,那麽,如何區分某個PPP包究竟是哪種數據協議包?這就是PPP協議幀第四、五兩個字節關心的問題,表2列出常用的協議代碼及其對應的協議。
PPP鏈路協商
通常,在一次PPP鏈路會話中,協商的雙方並沒有區分誰是服務器端誰是客戶端。為了敘述方便,這裏把申請請求PPP服務 的一端稱為用戶端,而把能提供PPP服務的機構稱為ISP(比如本項目中的聯通CDMA網絡)。一般來講,與ISP建立一次正常的PPP鏈路連接,要經歷 下面3個階段: (1)LCP協商,建立和配置連接以及幀參數設置等;(2)用戶認證,這裏將選擇PAP認證;(3)NCP協商,即負責IP地址的動態分配等事務。這裏把 常用的編碼字節的意義列成上表3,這些代碼對上述協議都適用。至於PPP封裝幀結構中的ID字節,表示的是PPP包的序號,這在協商階段用來識別該對哪個 包進行應答。需要說明的是,當PPP報文封裝的是IP報文時,則已經不存在編碼和ID部分了。
3 PPP協議在聯通CDMA網絡中的具體實現
PPP協議的格式雖然嚴格遵循既定標準,但不同的ISP可以有其自己的協商規範,也就是說協商的過程會因為使用網絡的不同而有差別。因此PPP技術的應 用,關鍵的問題是要弄清楚不同的ISP提供商它們各自的一套協商會話流程,一旦協商過程完成,用戶獲得ISP分配的動態IP,剩下的工作只不過是把用戶數 據以IP報文形式封裝在一個個PPP報文中進行傳輸了。下圖2就是利用中國聯通CDMA網絡實現視頻傳輸的協商階段的全過程。
圖2 PPP協商過程數據幀實例
7E |
FF 7D 23 |
C0 21 |
7D 21 |
7D 21 |
7D 20 7D 34 |
7D 22 7D 26 7D 20 7D 20 7D 20 7D 20 |
7D 25 7D 26 |
||
52 7D 38 7D 30 44 |
7D 27 7D 22 |
7D 28 7D 22 |
6E E1 |
7E |
|
||||
1 U
7E |
FF 7D 23 |
C0 21 |
7D 21 |
7D 21 |
7D 20 7D 3D |
7D 21 7D 24 7D 25 EA |
7D 22 7D 26 7D 20 7D 20 7D |
|||||
20 7D 20 |
7D 23 7D 25 C2 23 7D 25 |
7D 25 7D 26 2F 7D 35 B2 7D 31 |
7D 27 7D 22 |
7D 28 7D 22 |
7D |
|||||||
27 E6 |
7E |
|
||||||||||
2 I
7E |
FF 7D 23 |
C0 21 |
7D 22 |
7D 21 |
7D 20 7D 34 |
7D 22 7D 26 7D 20 7D 20 2D 20 7D 20 |
7D 25 7D 26 |
||
52 7D 38 7D 30 44 |
7D 27 7D 22 |
7D 28 7D 22 |
85 88 |
7E |
|
||||
3 I
7E |
FF 7D 23 |
C0 21 |
7D 23 |
7D 21 |
7D 20 7D 28 |
7D 23 7D 24 CO 23 |
22 48 |
7E |
4 U
7E |
FF 7D 23 |
C0 21 |
7D 21 |
7D 22 |
7D 20 7D 3C |
7D 21 7D 24 7D 25 EA |
7D 22 7D 26 7D 20 7D 20 7D |
||||||
20 7D 20 |
7D 23 7D 24 C0 23 |
7D 25 7D 26 2F 7D 35 B2 7D 31 |
7D 27 7D 22 |
7D 28 7D 22 |
9F 40 |
7E |
|||||||
5 I
7E |
FF 7D 23 |
C0 21 |
7D 22 |
7D 22 |
7D 20 7D 3C |
7D 21 7D 24 7D 25 EA |
7D 22 7D 26 7D 20 7D 20 7D |
|||||
20 7D 20 |
7D 23 7D 24 C0 23 |
7D 25 UD 26 2F 7D 25 B2 7D 31 |
7D 27 7D 22 |
7D 28 7D 22 |
AC 7D 3A |
|||||||
7E |
|
|||||||||||
6 U
7E |
FF 3 |
C0 23 |
1 |
1 |
0 E |
4 43 41 52 44 |
4 43 41 52 44 |
26 C2 |
7E |
7 U
7E |
C0 23 |
2 |
1 |
0 5 |
0 |
FD 30 |
7E |
8 I
7E |
80 21 |
1 |
3 |
0 10 |
2 6 0 2D F 0 |
3 6 DC C0 0 9 |
46 D8 |
7E |
9 I
7E |
FF 3 |
80 21 |
1 |
1 |
0 16 |
3 6 0 0 0 0 |
81 6 0 0 0 0 |
83 6 0 0 0 0 |
6E DB |
7E |
10U
7E |
FF 3 |
80 21 |
4 |
3 |
0 A |
2 6 0 2D F 0 |
F5 54 |
7E |
11U
7E |
80 21 |
3 |
1 |
0 16 |
3 6 DC CF 57 8C |
81 6 DC C0 0 82 |
83 6 DC C0 8 3A |
18 39 |
7E |
12I
7E |
FF 3 |
80 21 |
1 |
2 |
0 16 |
3 6 DC CF 57 8C |
81 6 DC C0 0 82 |
83 6 DC C0 8 3A |
67 AA |
7E |
13U
7E |
80 21 |
1 |
4 |
0 A |
3 6 DC C0 0 9 |
62 4C |
7E |
14I
7E |
80 21 |
2 |
2 |
0 16 |
3 6 DC CF 57 8C |
81 6 DC C0 0 82 |
83 6 DC C0 8 3A |
F1 C9 |
7E |
15I
7E |
FF 3 |
80 21 |
2 |
4 |
0 A |
3 6 DC C0 0 9 |
75 D6 |
7E |
16U
在上圖中,每個報文最左邊的數字是協商過程的報文序號,緊接著的U字母代表的是申請PPP服務的用戶發出的PPP協商報文,而I則代表ISP發出的PPP協商報文,這裏具體就是聯通的CDMA網絡。下面對整個協商過程進行詳細解析:
1)在真正進行PPP協商之前,還有一個AT命令撥號過程,聯通CDMA要求撥#777申請數據業務,而Q2358C模塊的撥號命令是ATD,因此 合起來就是:ATD#777;,註意,Q2358撥號命令後面要加一個分號;撥號完後,要等待CDMA返回“CONNECT”,這時候才能進行後續的 PPP協商;
2)第一個起始PPP問旬包必須由用戶發起,否則聯通CDMA不會響應。包的內容見上圖中第1序號包,這裏要說明一點:在PPP協商的LCP階段, 除了起始和結束的PPP報標誌符7E,報文中任何地方的值小於0x20的字符,以及字符7F,7E和7D,都要轉義,轉義的方法是把其值和0x20異或後 的值緊接著7D發送。
3)從第1序號報的第三個框的“C0 21”字符結合上表2可以看出,這是一個LCP報文,第四個框“7D 21”就是01,根據上表3可以看出這是用戶發出的請求報,而根據第五個框的內容知道這是用戶發出的第一個報,第六個框是整個報文的長度,占兩個字節,後 面的內容是各種選項,倒數第二個框的內容則是FCS校驗值填充的地方,占兩個字節;
4)CDMA接受到第1序號報後,將先後發送第2序號和第3序號LCP報,其中第2序號報是請求報,請求用戶對其攜帶到選項進行同意或者拒絕,如2 號報第7個框“7D 21 7D 24 7D 25 EA”中“7D 21”表示第1個LCP協商選項,其長度為“7D 24”即4個字節,後面兩個字節“7D 25 EA”即“05 EA”是其選項值,整個1號選項的用途就是規定PPP報文最大數據有限載荷是5EA,也就是1514個字節,其他選項的結構的理解與此完全一樣,後面不再 贅述。關於LCP報文各種選項的意義,可參閱相關RFC文檔;
5)CDMA的發出的第3序號報是同意用戶發出的第1序號報的,這可以從其第四個框的值“7D 22”也即02,根據表3,其表示接受配置的意思;
6)從第4序號報的第4框內容“7D 23”即03,結合表3,可以得知用戶拒絕了CDMA請求報中選項3的配置,表示用戶不接受CHAP(C2 23)認證,用戶只接受PAP認證(C0 23);
7)CDMA收到用戶剛才的反應後,馬上發出第2個請求報,這時候把第3選項的配置改成了用戶希望的PAP認證(C0 23),見上圖5號報;
8)第6序號報表示用戶同意CDMA的LCP配置,這裏要說明一點,選項2是設置是否要對0x20以下的字符值進行轉義的,因為選項2的值是全0,則說明以後的PPP報文不再對值為0x20以下的值轉義,但是對於值為7D、7E、7F的字符依然要進行轉義發送;
9)從第7序號報開始,LCP協商過程結束,現在開始進行的是PAP認證,聯通的PAP認證的用戶名和密碼都是“CARD”,也即ASCII值“0x43、0x41、0x52、0x44”;第8序號報表示CDMA通過了用戶的認證;
10)根據表2,可以看出,第9序號報開始是NCP會話也即IPCP會話階段,CDMA請求用戶是否同意其網關IP地址:DC.C0.0.9,見其倒數第3個框也即3號選項所包含的值;
11)之後的過程完全可以按照上面類推分析下去,當全部16個PPP報文會話完畢後,將獲得四項關健值:即分配的IP地址: DC.CF.57.8C; 遠程網關:DC.C0.0.9;主DNS:DC.C0.0.82;次DNS:DC.C0.8.3A。之後就可以嵌入真正的IP數據報進行數據打包傳輸。
ppp協議解析二