PPTP協議
PPTP(Point-to-Point Tunneling Protocol)點對點隧道協議是PPP協議的一種擴展,它將PPP幀封裝進IP包中,通過IP網絡進行傳輸。它通過PPTP控制連接來創建、維護、終止一條隧道,同時使用通用路由封裝GRE(Generic Routing Encapsulation)對PPP幀進行封裝用來傳輸數據。
PPTP協議假定在PPTP客戶機和服務器之間有連通且可用的IP網絡,因此如果PPTP客戶機還沒有接入網絡,則首先需要建立從客戶機到服務器的IP網絡(可以通過撥號連接或者dhcp)。
PPTP控制連接過程和隧道維護
PPTP控制連接建立在PPTP客戶機IP地址和PPTP服務器IP地址之間,PPTP客戶機使用動態分配的TCP端口號,PPTP服務器使用固定端口號1723,。在連接建立之后,客戶機和服務器之間會周期性的發送回送請求和應答消息,以期檢測出客戶機與服務器之間可能出現的連接中斷。PPTP控制連接的數據包格式如下所示:
Data-link Header | IP Header | Tcp Header | PPTP Control Message | Data link Trailer |
---|---|---|---|---|
PPTP的控制連接過程可以分為如下幾步:
(1)建立TCP連接
三次握手建立TCP連接
(2)PPTP控制連接和GRE隧道建立
建立控制連接,同時分配CallID,該ID可以唯一標識一條隧道
(3)PPP協議的LCP協商
配置鏈路層參數,以及認證方法(比如MS-CHAP, MS-CHAP v2)
(4)PPP協議的身份認證
認證身份,可以通過LCP協商好的認證方法
(5)PPP協議的NCP協商
配置網絡層參數,如分配IP地址,miniport信息
(6)PPP協議的CCP協商
雙方協商加密協議(確定是否使用加密),MPPE加密的加密位數
如果LCP過程中確定了認證方法(比如MS-CHAP, MS-CHAP v2),同時CCP協商好要加密,則雙方需要協商MPPE的 RC4 算法的密鑰。
PPTP數據隧道傳輸
PPTP客戶端和服務器之間通過連接過程建立隧道之后,就可以通過隧道傳輸數據。
(1)用戶的IP包經過PPP協議封裝成為PPP包;
(2)PPTP對PPP幀的有效載荷進行加密(MPPE)、壓縮(MPPC),加密和壓縮都是可選的;
(3)PPTP使用通用路由封裝協議GRE協議對PPP幀進行封裝;
(4)將GRE幀放入IP報文中,通過IP網絡發送給PPTP服務器
PPTP數據報文格式如下:

MPPE將通過由MS-CHAP、MS-CHAP v2或EAP-TLS身份驗證過程所生成的加密密鑰對PPP幀進行加密。PPTP將利用底層PPP加密功能並直接對原先經過加密的PPP幀進行封裝。
MPPE (Microsoft Point-to-Point Encryption) 是一種將點到點協議(PPP)包用加密形式表示的方法,通常用來實現PPTP 中的加密。 MPPE 的加密算法是固定的,只能使用RC4 算法。
PPTP數據包的封裝過程
(1)應用層數據封裝成IP包
(2)將IP包發送到VPN的虛擬接口
(3)VPN的虛擬接口將IP數據包壓縮和加密(壓縮和加密可選),並增加PPP頭。對於加密了的PPP包,其PPP類型是0x00FD
(4)VPN的虛擬接口將PPP幀發送給PPTP協議驅動程序
(5)PPTP協議驅動程序在PPP幀外加GRE報頭
(6)PPTP協議驅動程序將GRE報頭提交給TCP/IP協議驅動程序
(7)TCP/IP協議驅動程序為GRE添加IP頭
(8)為IP數據包進行數據鏈路層封裝后通過物理網卡發出