1. 程式人生 > >ppp協議解析二

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協議解析二