PPTP 理解以及報文的分析

    首先,先來理解下什麼是 PPTP。PPTP將PPP(Point-to-Point Protocol)幀封裝進IP數據報中,通過IP網絡如Internet或其他企業專用Intranet等發送。PPTP通過PPTP控制連接來創建、維護、終止一條隧道,並使用通用路由封裝GRE(Generic Routing Encapsulation)對PPP幀進行封裝。封裝前,PPP幀的有效載荷即有效傳輸數據一般會經過加密、壓縮或是兩者的混合處理。PPTP協議假定在PPTP客戶機和PPTP服務器之間有連通且可用的IP網絡。因此如果PPTP客戶機本身已經是某IP網絡的組成部分,那麼即可通過該IP網絡與PPTP服務器取得連接.MPPE只提供連接加密,而不提供端-端加密。端-端加密屬於應用層的加密技術,如果應用中要求實現端-端加密,則可在PPTP隧道建立之後,使用IPSec對兩端的IP數據流進行加密處理。基於Internet的PPTP服務器即使用PPTP協議的VPN服務器,它的一個接口在Internet上,另一個接口在Intranet上。

一、    PPTP連接過程與隧道維護

        PPTP控制連接建立在PPTP客戶機IP地址和PPTP服務器IP地址之間,PPTP客戶機使用動態分配的TCP端口號,而PPTP服務器則使用保留TCP端口號1723。PPTP控制連接攜帶PPTP呼叫控制和管理信息,用於維護PPTP隧道,其中包括週期性地發送回送請求和回送應答消息,以期檢測出客戶機與服務器之間可能出現的連接中斷。PPTP控制連接數據包包括一個IP報頭,一個TCP報頭和PPTP控制信息,數據包格式如下。所示的PPTP控制連接數據包還包括數據鏈路層報頭和報尾。

                                                    

PPTP典型連接過程:

TCP連接由PPTP客戶機上的一個動態分配的TCP端口到PPTP服務器上的TCP端口1723建立。

                              

二、大致分析下客戶端和服務端的報文

start-control-connection-request : 由PPTP客戶端發出,請求建立控制連接。PPTP隧道要求在發送任何其他PPTP消息之前,先建立一條控制連接。

start-control-connection-reply:由PPTP服務器發出,迴應start-controlconnection-request消息。

outgoing-call-request:由PPTP客戶機發出,請求創建PPTP隧道,outgoing-call-request消息包含GRE報頭的Call ID,該ID可唯一地標識一條隧道。

outgoing-call-reply:PPTP服務器對outgoing-call-request消息的迴應。

echo-request:作爲保持連線機制,可由PPTP客戶機或服務器任何一方發出,若echo-request了沒有應答,則PPTP隧道逐漸終止。

echo-reply:對echo-request的應答。注:PPTP的echo-request和echo-reply的消息與ICMP回送請求和回送應答消息無關。

WAN-Error-Notify:由PPTP服務器向所有VPN客戶機發出,指示服務器的PPP接口處於錯誤狀態。

set-link-info:可由PPTP客戶機或服務器任何一方發出,設置PPP協商選項。

call-clear-request:由PPTP客戶機發出,請求終止隧道。

call-disconnect-notify:PPTP服務器迴應call-clear-request,或因其他原因指示必須終止隧道。如果PPTP服務器終止隧道,則發送出call-disconnect-notify消息。

stop-control-connection-request:可由PPTP客戶機或服務器任何一方發出,通知對方控制連接將被終止。

stop-control-connection-reply:迴應stop-control-connection-request消息。


三、詳細分析數據包的內容

1.  Start-control-connection-request


Length :                   該 PPTP 信息的八位總長,包括整個 PPTP 頭。

PPTP Message Type : 信息類型。可能值有:1、控制信息;2、管理信息。

Magic Cookie :         Magic Cookie 以連續的 0x1A2B3C4D 進行發送,其基本目的是確保接收端與 TCP數據流間的正確同步運行。

Control Message Type :值爲1

Reserved 0 & 1 :       必須設置爲0。

Protocol Version :    PPTP版本號。

Framing Capabilities: 指出幀類型,該信息發送方可以提供:

                                 1、異步幀支持(Asynchronous Framing Supported);

                                 2、同步幀支持(Synchronous Framing Supported)。

Bearer Capabilities : 指出承載性能,該信息發送方可以提供:

                                 1、模擬訪問支持(Analog Access Supported);

                                 2、數字訪問支持(Digital access supported)。

Maximum Channels : 該 PPTP服務器 可以支持的個人 PPP 會話總數。

Firmware Revision :若由 PPTP服務器 出發,則包括髮出 PPTP服務器時的固件修訂本編號;

                                     若由 PPTP客戶端出發,則包括 PPTP客戶端 PPTP 驅動版本。

Host Name :              包括髮行的 PPTP服務器 或 PPTP客戶端的 DNS 名稱。

Vendor Name :          包括特定供應商字串,指當請求是由 PPTP客戶端 提出時,使用的 PPTP服務器 類型或PPTP客戶端軟件類型。


2. Start-Control-Connection-Reply


大部分字段的含義與Start-control-connection-request一致。不同的字段含義如下:

Control Message Type :值爲2;

Result Code表示建立channal是否成功的結果碼,值爲1表示成功,值爲2表示通用錯誤,暗示着有問題。值爲3表示channal已經存在,值爲4表示請求者未授權,值爲5表示請求的PPTP協議版本不支持。

Error Code:表示錯誤碼,一般值爲0,除非Result Code值爲2,不同的錯誤碼錶示不同的含義。


3.  Outgoing-call-request


Length、PPTP Message、Magic cookie與Start-control-connection-request一致。不同的字段含義如下:

Control Message Type :值爲7。

Call ID:由PPTP客戶端指定的唯一的會話ID。

Call Serial Number:是由PPTP客戶端指定的唯一標識符,用於在記錄會話信息中標識特定會話,與Call ID不一樣的是,Call Serial Number PPTP客戶端與PPTP服務器來說,唯一綁定到一個給定的會話,且是相同的。

Minimum BPS :對於此次會話可接受的最低傳輸速度,單位爲位/秒;

Maximum BPS:對於此次會話可接受的最大傳輸速度,單位爲位/秒;

Bearer Type: 指出承載訪問支持,該信息發送方可以提供:

             1、模擬訪問支持(Analog Access Supported);

             2、數字訪問支持(Digital access supported)。

             3、可支持的任何類型。

Framing Type: 指出幀類型,該信息發送方可以提供:

             1、異步幀支持(Asynchronous Framing Supported);

             2、同步幀支持(Synchronous Framing Supported)。

             3、異步或同步幀支持。

Packet Recv. Window Size:PPTP客戶端爲此次會話提供最大接收緩衝大小;

Packet Processing Delay:表示PPTP客戶端對數據包處理的延時度量,對於PPTP客戶端來說,一般設置比較小越好。

Phone number length: 拔號號碼長度;

Phone number:建立會話向外拔號的號碼,一般對於ISDN或模擬方式拔號來說,此字段域爲一個ASCII串。

Sub address:額外信息域,一般長度少於64個字節。


4. Outgoing-Call-Reply


Length、PPTP Message、Magic cookie與Start-control-connection-request一致。不同的字段含義如下:

Control Message Type :值爲8。

Call ID:由PPTP服務器指定的唯一的會話ID。主要用於在PPTP服務器與PPTP客戶端建立的會話上,複用與解封裝隧道包使用的。

Peer’s Call ID:設置的值是從接收到的Outgoing-call-request中Call ID值,是由PPTP客戶端指定的,用於GRE中對於隧道數據解封與複用。

Result Code:表示響應Outgoing-call-request握手是否成功,

            值爲1表示成功;

            值爲2表示通用錯誤暗示着有問題

            值爲3表示無載波

            值爲4表示服務器忙,無法及時響應

            值爲5表示無拔號音

            值爲6表示呼號超時

            值爲7表示未授權。

Error Code:表示錯誤碼,一般值爲0,除非Result Code值爲2,不同的錯誤碼錶示不同的含義。

Cause Code:表示進一步錯誤信息描述;

Connect Speed:連接使用的實際速率;

Rev window size:PPTP服務器爲此次會話提供最大接收緩衝大小;

Packet Processing Delay:表示PPTP服務器對數據包處理的延時度量。

Physical Channel ID:由PPTP服務器指定的物理信道ID。


5. Set-Link-Info


Length、PPTP Message、Magic cookie與Start-control-connection-request一致。

不同的字段含義如下:

Control Message Type :值爲15。

Peer’s Call ID:設置的值是從接收到的Outgoing-call-request中Call ID值,是由PPTP客戶端指定的,用於GRE中對於隧道數據解封與複用。

Reserved0/Reserve1:保留位,必須爲0;

Send ACCM:     發送的ACCM值默認值爲0XFFFFFFFF;

Receive ACCM:接收的ACCM值,默認值爲0XFFFFFFFF;


6.  Echo request



Length、PPTP Message、Magic cookie與Start-control-connection-request一致。

不同的字段含義如下:

Control Message Type :值爲5。

Peer’s Call ID:設置的值是從接收到的Outgoing-call-request中Call ID值,是由PPTP客戶端指定的,用於GRE中對於隧道數據解封與複用。

Reserved0:保留位,必須爲0;

Identifier:發送者用來標識Echo request與Echo reply對應標識。


7.  Echo-reply


Length、PPTP Message、Magic cookie與Start-control-connection-request一致。

不同的字段含義如下:

Control Message Type :值爲6。

Peer’s Call ID:設置的值是從接收到的Outgoing-call-request中Call ID值,是由PPTP客戶端指定的,用於GRE中對於隧道數據解封與複用。

Reserved0/1:保留位,必須爲0;

Identifier:標識值,爲接收者從Echo request裏標識字段複製填入。

Result Code:結果碼,爲1表示Echo-reply是有效的,爲2表示出現一般性錯誤。

Error code:同上面所描述的。


8. Call-Clear-Request


LengthPPTP Message、Magic cookie與Start-control-connection-request一致。不同的字段含義如下:

Control Message Type :值爲12。

Call ID:由PPTP客戶端指定的會話ID。

Reserved0/1:保留位,必須爲0;


9、Call-Disconnect-Notify


LengthPPTP Message、Magic cookie與Start-control-connection-request一致。

不同的字段含義如下:

Control Message Type :值爲13

Call ID:由PPTP客戶端指定的會話ID

Reserved0/1:保留位,必須爲0;

Result Code:結果碼,

                    爲1表示媒介斷開,

                    爲2表示出現一般性錯誤,

                    爲3表示爲管理員關閉連接,

                    爲4表示收到Call-Clear-Request;

Error code: 同上面所描述的。

Cause Code:此域表示額外說明斷開原因。


10.  Stop-Control-Connection-Request


LengthPPTP Message、Magic cookie與Start-control-connection-request一致。

不同的字段含義如下:

Control Message Type :值爲3。

Resverve0/1/2:保留位,必須爲0;

Reason:表示會話連接關閉的原因,

              爲1表示響應會話清除請求

              爲2表示不支持對端PPTP版本

              爲3表示本地系統關閉


12.  Stop-Control-Connection-Reply


Length、PPTP Message、Magic cookie與Start-control-connection-request一致。

不同的字段含義如下:

Control Message Type :值爲4。

Resverve0/1/2:保留位,必須爲0;

Result Code:表示關閉連接結果碼,爲1表示正常關閉成功,爲2表示發生一般性錯誤。

Error Code : 表示當Result Code爲2時,對應具體的一般性錯誤,Result Code爲1時,必須爲0。


四、總結

1. PPTP原理

首先,PPTP客戶機使用動態分配的TCP端口號,與PPTP服務器使用的保留TCP端口號1723建立控制連接(PPTP控制連接攜帶PPTP呼叫控制管理信息,用於維護PPTP隧道)。

其次,客戶端與服務器通過控制連接來創建、維護、終止一條隧道。

然後,PPP幀的有效載荷經過加密、壓縮或是兩者的混合處理。

接着,使用通用路由封裝GRE對PPP幀進行封裝。

再者,將PPP幀封裝進IP數據報文中。通過IP網絡如Internet或其他企業準用INTRANET發送給PPTP服務器。

最後,服務器接收到PPTP數據包後進行常規處理。

 

2. PPTP控制連接數的數據包格式

包括一個IP報頭,一個TCP報頭和PPTP控制信息,還包括數據鏈路層報頭和報尾。

                                               














發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章