2021年06月16日 返回>>
PPTP協(xié)議工作原理
PPTP隧道技術(shù)
點(diǎn)對(duì)點(diǎn)隧道協(xié)議(英語:Point to Point Tunneling Protocol,縮寫為PPTP)是實(shí)現(xiàn)虛擬專用網(wǎng)(VPN)的方式之一。PPTP使用傳輸控制協(xié)議(TCP)創(chuàng)建控制通道來發(fā)送控制命令,以及利用通用路由封裝(GRE)通道來封裝點(diǎn)對(duì)點(diǎn)協(xié)議(PPP)數(shù)據(jù)包以發(fā)送數(shù)據(jù)。這個(gè)協(xié)議最早由微軟等廠商主導(dǎo)開發(fā),但因?yàn)樗募用芊绞饺菀妆黄平?,微軟已?jīng)不再建議使用這個(gè)協(xié)議。
PPTP的協(xié)議規(guī)范本身并未描述加密或身份驗(yàn)證的部分,它依靠點(diǎn)對(duì)點(diǎn)協(xié)議(PPP)來實(shí)現(xiàn)這些安全性功能。因?yàn)?span style="font-family: Calibri;">PPTP協(xié)議內(nèi)置在微軟視窗系統(tǒng)家族的各個(gè)產(chǎn)品中,在微軟點(diǎn)對(duì)點(diǎn)協(xié)議(PPP)協(xié)議堆棧中,提供了各種標(biāo)準(zhǔn)的身份驗(yàn)證與加密機(jī)制來支持PPTP。 在微軟視窗系統(tǒng)中,它可以搭配PAP、CHAP、MS-CHAPv1/v2或EAP-TLS來進(jìn)行身份驗(yàn)證。通常也可以搭配微軟點(diǎn)對(duì)點(diǎn)加密(MPPE)或IPSec的加密機(jī)制來提高安全性。
在Windows或Mac OS平臺(tái)之外,Linux與FreeBSD等平臺(tái)也提供開放源代碼的版本。
PPP協(xié)議:點(diǎn)到點(diǎn)協(xié)議(Point to Point Protocol,PPP)是IETF(Internet Engineering Task Force,因特網(wǎng)工程任務(wù)組)推出的點(diǎn)到點(diǎn)類型線路的數(shù)據(jù)鏈路層協(xié)議。
GRE協(xié)議:GRE(generic routing encapsulation,通用路由封裝)協(xié)議是對(duì)某些網(wǎng)絡(luò)層協(xié)議的數(shù)據(jù)報(bào)進(jìn)行封裝,使這些被封裝的數(shù)據(jù)報(bào)能夠在另一個(gè)網(wǎng)絡(luò)層協(xié)議中傳輸。
一、控制連接和隧道維護(hù)
在PPTP建立連接過程中,客戶端先向服務(wù)器1723端口發(fā)送TCP連接請(qǐng)求,這里的TCP連接不是標(biāo)準(zhǔn)的三次握手,第三次回應(yīng)的ACK會(huì)隨著載荷一起發(fā)送,這樣做的好處是可以節(jié)省一些網(wǎng)絡(luò)流量,減少不必要的開銷。在TCP連接完成以后,PPTP進(jìn)入控制連接的建立,首先客戶端會(huì)發(fā)Start Control Connection Request報(bào)文給服務(wù)端要求建立連接,服務(wù)器端接到后發(fā)送應(yīng)答報(bào)文,客戶端再次發(fā)送Outgoing Call Request,等到服務(wù)器端響應(yīng)后控制連接建立。
接著是標(biāo)準(zhǔn)的PPP協(xié)商,上面說過,PPTP是建立在PPP的基礎(chǔ)上的隧道協(xié)議。這樣先進(jìn)行LCP層的協(xié)商,客戶端跟服務(wù)器端雙方都要把自己的鏈路層配置發(fā)送給對(duì)方,客戶端的配置一般比較簡單,服務(wù)器端收到后就會(huì)接受 ,而服務(wù)器端發(fā)給客戶端的配置報(bào)文,客戶端會(huì)對(duì)Unknow選項(xiàng)和不接受選項(xiàng)向服務(wù)器反饋,服務(wù)器收到后刪除這些選項(xiàng)再次發(fā)送配置,客戶端接受,LCP協(xié)商完成。此時(shí)在PPTP的控制層會(huì)互發(fā)Set Link Info報(bào)文來對(duì)剛剛協(xié)商好的選項(xiàng)進(jìn)行配置。
LCP協(xié)商完成后,服務(wù)器開始對(duì)客戶端進(jìn)行身份驗(yàn)證,可以選的驗(yàn)證方式很多,有PAP、CHAP、MS-CHAP等方式,身份驗(yàn)證后就進(jìn)行NCP層協(xié)商。主要是來確定雙方網(wǎng)絡(luò)層接口參數(shù),配置虛擬虛擬端口,分配IP、DNS等信息。
之后PPTP連接過程就算是完成,PPTP開始發(fā)送GRE封裝的數(shù)據(jù)包,但每隔60秒,連接雙方會(huì)發(fā)送Echo Request來詢問鏈路是否可用,如果對(duì)方在此后60秒內(nèi)沒有響應(yīng),連接就會(huì)被終止。正常的連接終止時(shí)通過發(fā)送Stop Control Connection Request來通知對(duì)方結(jié)束連接。
1.Start-control-connection-request報(bào)文
由PPTP客戶端發(fā)出,請(qǐng)求建立控制連接;
Length :該 PPTP 信息的八位總長,包括整個(gè) PPTP 頭。
Message Type : 信息類型??赡苤涤校?span style="font-family: Calibri;">1、控制信息;2、管理信息。
Magic Cookie : Magic Cookie 以連續(xù)的 0x1A2B3C4D 進(jìn)行發(fā)送,其基本目的是確保接收端與 TCP數(shù)據(jù)流間的正確同步運(yùn)行。
Control Message Type :值為1;
Reserved 0 & 1 : 保留字段,必須設(shè)置為0。
Protocol Version : PPTP版本號(hào)。
Framing Capabilities : 指出幀類型,該信息發(fā)送方可以提供:1、異步幀支持(Asynchronous Framing Supported);2、同步幀支持(Synchronous Framing Supported)。
Bearer Capabilities : 指出承載性能,該信息發(fā)送方可以提供:1、模擬訪問支持(Analog Access Supported);2、數(shù)字訪問支持(Digital access supported)。
Maximum Channels : 該 PPTP服務(wù)器 可以支持的個(gè)人 PPP 會(huì)話總數(shù)。
Firmware Revision : 若由 PPTP服務(wù)器 出發(fā),則包括發(fā)出 PPTP服務(wù)器時(shí)的固件修訂本編號(hào);若由 PPTP客戶端 出發(fā),則包括 PPTP客戶端 PPTP 驅(qū)動(dòng)版本。
Host Name : 包括發(fā)行的 PPTP服務(wù)器 或 PPTP客戶端的 DNS 名稱。
Vendor Name : 包括特定供應(yīng)商字串,指當(dāng)請(qǐng)求是由 PPTP客戶端 提出時(shí),使用的 PPTP服務(wù)器 類型或 PPTP客戶端軟件類型。
2.Start-Control-Connection-Reply報(bào)文
PPTP服務(wù)器對(duì)Star-Control-Connection-Request回應(yīng);
大部分字段的含義與Start-control-connection-request一致。不同的字段含義如下:
Control Message Type :值為2;
Result Code:表示建立channal是否成功的結(jié)果碼,值為1表示成功,值為2表示通用錯(cuò)誤,暗示著有問題。值為3表示channal已經(jīng)存在,值為4表示請(qǐng)求者未授權(quán),值為5表示請(qǐng)求的PPTP協(xié)議版本不支持。
Error Code:表示錯(cuò)誤碼,一般值為0,除非Result Code值為2,不同的錯(cuò)誤碼表示不同的含義。(即:只有當(dāng)Result Code值為2時(shí),Error Code才有其它值)
3.Outgoing-call-request報(bào)文
由PPTP客戶機(jī)發(fā)出,請(qǐng)求創(chuàng)建PPTP隧道,該消息包含GRE報(bào)頭中call id,
該id可唯一地標(biāo)識(shí)一條隧道 ;
Length、PPTP Message、Magic cookie與Start-control-connection-request一致。不同的字段含義如下:
Control Message Type :值為7。
Call ID:由PPTP客戶端指定的唯一的會(huì)話ID。
Call Serial Number:是由PPTP客戶端指定的唯一標(biāo)識(shí)符,用于在記錄會(huì)話信息中標(biāo)識(shí)特定會(huì)話,與Call ID不一樣的是,Call Serial Number PPTP客戶端與PPTP服務(wù)器來說,唯一綁定到一個(gè)給定的會(huì)話,且是相同的。
Minimum BPS:對(duì)于此次會(huì)話可接受的最低傳輸速度,單位為位/秒;
Maximum BPS:對(duì)于此次會(huì)話可接受的最大傳輸速度,單位為位/秒;
Bearer Type: 指出承載訪問支持,該信息發(fā)送方可以提供:1、模擬訪問支持(Analog Access Supported);2、數(shù)字訪問支持(Digital access supported)。3、可支持的任何類型。
Framing Type: 指出幀類型,該信息發(fā)送方可以提供:1、異步幀支持(Asynchronous Framing Supported);2、同步幀支持(Synchronous Framing Supported)。 3、異步或同步幀支持。
Packet Receive window size:PPTP客戶端為此次會(huì)話提供最大接收緩沖大??;
Packet Processing Delay:表示PPTP客戶端對(duì)數(shù)據(jù)包處理的延時(shí)度量,對(duì)于PPTP客戶端來說,一般設(shè)置比較小越好。
Phone number length:拔號(hào)號(hào)碼長度;
Phone number:建立會(huì)話向外拔號(hào)的號(hào)碼,一般對(duì)于ISDN或模擬方式拔號(hào)來說,此字段域?yàn)橐粋€(gè)ASCII串。一般長度少于64個(gè)字節(jié)。
Sub address:額外信息域,一般長度少于64個(gè)字節(jié)。
4.Outgoing-Call-Reply報(bào)文
PPTP服務(wù)器對(duì)Outgoing-Call- Request t回應(yīng);
Length、PPTP Message、Magic cookie與Start-control-connection-request一致。不同的字段含義如下:
Control Message Type :值為8。
Call ID:由PPTP服務(wù)器指定的唯一的會(huì)話ID。主要用于在PPTP服務(wù)器與PPTP客戶端建立的會(huì)話上,復(fù)用與解封裝隧道包使用的。
Peer’s Call ID:設(shè)置的值是從接收到的Outgoing-call-request中Call ID值,是由PPTP客戶端指定的,用于GRE中對(duì)于隧道數(shù)據(jù)解封與復(fù)用。
Result Code:表示響應(yīng)Outgoing-call-request握手是否成功,值為1表示成功,值為2表示通用錯(cuò)誤,暗示著有問題。值為3表示無載波,值為4表示服務(wù)器忙,無法及時(shí)響應(yīng),值為5表示無拔號(hào)音,值為6表示呼號(hào)超時(shí),值為7表示未授權(quán)。
Error Code:表示錯(cuò)誤碼,一般值為0,除非Result Code值為2,不同的錯(cuò)誤碼表示不同的含義。
Cause Code:表示進(jìn)一步錯(cuò)誤信息描述;
Connect Speed:連接使用的實(shí)際速率;
Physical Channel ID:由PPTP服務(wù)器指定的物理信道ID。
5.Set-Link-Info報(bào)文
由PPTP客戶機(jī)或服務(wù)器任一方發(fā)出,設(shè)置PPP協(xié)商選項(xiàng);
Control Message Type :值為15。
Peer’s Call ID:設(shè)置的值是從接收到的Outgoing-call-request中Call ID值,是由PPTP客戶端指定的,用于GRE中對(duì)于隧道數(shù)據(jù)解封與復(fù)用。
Reserved0/Reserve1:保留位,必須為0;
Send ACCM:發(fā)送的ACCM值,默認(rèn)值為0XFFFFFFFF;
Receive ACCM:接收的ACCM值,默認(rèn)值為0XFFFFFFFF;
6.Echo request報(bào)文
PPTP隧道維護(hù)報(bào)文,每60S發(fā)送一次;
Control Message Type :值為5。
Peer’s Call ID:設(shè)置的值是從接收到的Outgoing-call-request中Call ID值,是由PPTP客戶端指定的,用于GRE中對(duì)于隧道數(shù)據(jù)解封與復(fù)用。
Reserved0:保留位,必須為0;
Identifier:發(fā)送者用來標(biāo)識(shí)Echo request與Echo reply對(duì)應(yīng)標(biāo)識(shí)。
7.Echo-reply報(bào)文
PPTP隧道維護(hù)報(bào)文,對(duì)Echo request的回應(yīng)報(bào)文;
Control Message Type :值為6。
Peer’s Call ID:設(shè)置的值是從接收到的Outgoing-call-request中Call ID值,是由PPTP客戶端指定的,用于GRE中對(duì)于隧道數(shù)據(jù)解封與復(fù)用。
Reserved0/1:保留位,必須為0;
Identifier:標(biāo)識(shí)值,為接收者從Echo request里標(biāo)識(shí)字段復(fù)制填入。
Result Code:結(jié)果碼,為1表示Echo-reply是有效的,為2表示出現(xiàn)一般性錯(cuò)誤。
8.Call-Clear-Request報(bào)文
由PPTP客戶機(jī)發(fā)出,請(qǐng)求終止隧道;
Control Message Type :值為12。
Call ID:由PPTP客戶端指定的會(huì)話ID。
9.Call-Disconnect-Notify報(bào)文
PPTP服務(wù)器對(duì)Call-Clear-Request回應(yīng)或者其他原因指示必須終止隧道;
Control Message Type :值為13。
Call ID:由PPTP客戶端指定的會(huì)話ID。
Result Code:結(jié)果碼,為1表示媒介斷開,為2表示出現(xiàn)一般性錯(cuò)誤,為3表示為管理員關(guān)閉連接,為4表示收到Call-Clear-Request;
Error code:同上面所描述的。
Cause Code:此域表示額外說明斷開原因。
10.Stop-Control-Connection-Request報(bào)文
由PPTP客戶機(jī)或者服務(wù)器任一方發(fā)出,通知對(duì)端控制連接將被終止;
Control Message Type :值為3。
Resverve:保留位,必須為0;
Reason:表示會(huì)話連接關(guān)閉的原因,為1表示響應(yīng)會(huì)話清除請(qǐng)求,為2表示不支持對(duì)端PPTP版本,為3表示本地系統(tǒng)關(guān)閉。
11.Stop-Control-Connection-Reply報(bào)文
回應(yīng)Stop-Control-Connection-Request消息;
Control Message Type :值為4。
Resverve:保留位,必須為0;
Result Code:表示關(guān)閉連接結(jié)果碼,為1表示正常關(guān)閉成功,為2表示發(fā)生一般性錯(cuò)誤。
Error Code:表示當(dāng)結(jié)果為2時(shí),對(duì)應(yīng)具體的一般性錯(cuò)誤,Result Code為1時(shí),必須為0。
二、PPP協(xié)商過程
當(dāng)PPTP控制通道建立完成后,發(fā)起PPP協(xié)商
1.LCP協(xié)商
1、Client發(fā)送一個(gè)Configure-Request,把自己的link layer configure發(fā)給Server,Client端的Configure一般比較簡單,所以Server一下子就接受了,立即回了一個(gè)Configure-Ack;
2、Server同時(shí)也必須發(fā)送一個(gè)Configure-Request,把自己的link layer configure發(fā)給Client,而這個(gè)configure包含的內(nèi)容往往比較多;
3、如果Client收到的Configure-Request中,有unknow的配置項(xiàng),就會(huì)把這些項(xiàng)列出來發(fā)一個(gè)Configure-Reject包給Server;
4、Server端把Client不認(rèn)識(shí)的配置項(xiàng)刪掉,再次重發(fā)Configure-Request;
5、這次Client收到的配置項(xiàng)全都認(rèn)識(shí)了,開始檢查是不是所有的配置都可以接受,如果接受的話LCP過程結(jié)束,否則把不能接受的配置項(xiàng)列出來發(fā)送Configure-Nak給Server;
6、Server再次修改配置項(xiàng),再次發(fā)送Configure-Request;
7、 Client發(fā)現(xiàn)這次的配置項(xiàng)全都認(rèn)識(shí),而且全都是自己可以接受的,回發(fā)Configure-Ack。
8、Client和Server接受彼此的配置之后,PPTP的控制層會(huì)彼此互發(fā)Set Link Info;
2.PPP協(xié)議的身份驗(yàn)證
9. LCP協(xié)商完畢后,PPP協(xié)議的Server端會(huì)對(duì)Client端進(jìn)行身份驗(yàn)證;
10. 可以選CHAP、MS-CHAP、MS-CHAP-v2...進(jìn)行驗(yàn)證,現(xiàn)在以CHAP為例,需要注意到以下幾點(diǎn):
(1) Server發(fā)送Challenge,其中包括一個(gè)challenge string和server name;
(2) Client回Response,其中包括用戶名,和密碼和challeng string。其中用戶名以明文發(fā)送(這個(gè)需要特別注意),密碼的challenge string經(jīng)過單向hash算法后以密文形式發(fā)送;
(3) Server發(fā)送success,表示身份驗(yàn)證成功。
3.PPP協(xié)議的NCP協(xié)商
11. 身份驗(yàn)證通過后,PPP雙方會(huì)進(jìn)行NCP協(xié)商,用來確定互相通信的網(wǎng)絡(luò)層接口參數(shù);
12. 接下來你會(huì)看到一大堆IPCP協(xié)商數(shù)據(jù)包,它是NCP基于TCP/IP的接口協(xié)商協(xié)議。Server和Client都要把自己的Miniport信息發(fā)給對(duì)方,告訴對(duì)方我以后就用它和你通信了,你同不同意請(qǐng)給回個(gè)話。具體過程如下:
(1) Server把自己的Miniport信息通過Configure-Request發(fā)送給Client;
(2) Client也把自己的Miniport信息通過Configure-Request發(fā)送給Server;(這個(gè)時(shí)候Client發(fā)出的配置信息是完全無效的數(shù)據(jù),之所以要故意發(fā)無效數(shù)據(jù),是要求Server來給自己分配IP等信息)
(3) Client接受Server的接口配置,發(fā)送Configure-Ack;
(4) Server發(fā)現(xiàn)Client的配置是無效的,自己給Client發(fā)送一組有效的配置信息,通過Configure-Nak發(fā)送給Client,其中主要是給他分配IP;
(5) Client根據(jù)Server端發(fā)出的Configure-Nak,提取出給自己分配的IP、DNS等信息,并設(shè)置Miniport接口;
(6) Client根據(jù)修改后的配置,再次發(fā)送Configure-Request;
(7) Server接受Client的配置,發(fā)送Configure-Ack;
4.CCP報(bào)文
CCP中包括了MPPC和MPPE的參數(shù)協(xié)商,也就是Microsoft
Point-to-Point Compression 和 Microsoft Point-to-Point Encryption的參數(shù)協(xié)商,用來確定數(shù)據(jù)包中的壓縮和加密算法和參數(shù)。
三、數(shù)據(jù)傳輸
PPTP隧道建立完成后,使用GRE封裝PPP報(bào)文在IP網(wǎng)絡(luò)環(huán)境中傳輸。
聯(lián)系人:朱
電話:18570559852
QQ:813700068
工作時(shí)間 9:00-24:00