1.L2TP簡介
L2TP(Layer 2 Tunneling Protocol,二層隧道協(xié)議)是VPDN(Virtual PrivateDial-up Network,虛擬私有撥號網(wǎng))隧道協(xié)議的一種。VPDN隧道協(xié)議主要包括以下三種,目前使用最廣泛的是L2TP。
a.PPTP(Point-to-Point Tunneling Protocol,點到點隧道協(xié)議)
b.L2F(Layer 2 Forwarding,二層轉(zhuǎn)發(fā))
c.L2TP
L2TP的網(wǎng)絡(luò)拓?fù)鋱D如下所示:
 1)遠(yuǎn)端系統(tǒng)
遠(yuǎn)端系統(tǒng)是要接入 VPDN網(wǎng)絡(luò)的遠(yuǎn)地用戶和遠(yuǎn)地分支機(jī)構(gòu),通常是一個撥號用戶的主機(jī)或私有網(wǎng)絡(luò)的一臺路由設(shè)備。
2)LAC(L2TP Access Concentrator,L2TP 訪問集中器) LAC是附屬在交換網(wǎng)絡(luò)上的具有PPP 端系統(tǒng)和L2TP
協(xié)議處理能力的設(shè)備,通常是一個當(dāng)?shù)豂SP的NAS(Network AccessServer網(wǎng)絡(luò)訪問服務(wù)器),主要用于為PPP 類型的用戶提供接入服務(wù)。LAC
位于LNS 和遠(yuǎn)端系統(tǒng)之間,用于在LNS和遠(yuǎn)端系統(tǒng)之間傳遞信息包。它把從遠(yuǎn)端系統(tǒng)收到的信息包按照L2TP
協(xié)議進(jìn)行封裝并送往LNS,同時也將從LNS收到的信息包進(jìn)行解封裝并送往遠(yuǎn)端系統(tǒng)。LAC 與遠(yuǎn)端系統(tǒng)之間采用本地連接或PPP 鏈路,VPDN
應(yīng)用中通常為PPP鏈路。
3)LNS(L2TP Network Server,L2TP 網(wǎng)絡(luò)服務(wù)器) LNS 既是PPP端系統(tǒng),又是L2TP
協(xié)議的服務(wù)器端,通常作為一個企業(yè)內(nèi)部網(wǎng)的邊緣設(shè)備。LNS 作為L2TP隧道的另一側(cè)端點,是LAC的對端設(shè)備,是LAC 進(jìn)行隧道傳輸?shù)腜PP
會話的邏輯終止端點。通過在公網(wǎng)中建立L2TP隧道,將遠(yuǎn)端系統(tǒng)的PPP 連接的另一端由原來的LAC 在邏輯上延伸到了企業(yè)網(wǎng)內(nèi)部的LNS。
2、會話和隧道這兩個概念
在一個LNS和LAC對之間存在著兩種類型的連接,一種是隧道(Tunnel)連接,一對LAC和LNS中可以有多個L2TP隧道;另一種是會話(Session)連接,它復(fù)用在隧道連接之上,用于表示承載在隧道連接中的每個PPP會話過程。 隧道由一個控制連接和一個或多個會話(Session)組成。會話連接必須在隧道建立(包括身份保護(hù)、L2TP版本、幀類型、硬件傳輸類型等信息的交換)成功之后進(jìn)行,每個會話連接對應(yīng)于LAC和LNS之間的一個PPP數(shù)據(jù)流。控制消息和PPP數(shù)據(jù)報文都在隧道上傳輸。 L2TP使用Hello報文來檢測隧道的連通性。LAC和LNS定時向?qū)Χ税l(fā)送Hello報文,若在一段時間內(nèi)未收到Hello報文的應(yīng)答,該隧道連接將被斷開。 L2TP報文頭中包含隧道標(biāo)識符(Tunnel
ID)和會話標(biāo)識符(SessionID)信息,用來標(biāo)識不同的隧道和會話。隧道標(biāo)識相同、會話標(biāo)識不同的報文將被復(fù)用在一個隧道上,報文頭中的隧道標(biāo)識符與會話標(biāo)識符由對端分配。 隧道(tunnel)和會話(session)的關(guān)系,如下圖所示;可以形象的理解為會話是建立在隧道之中的,隧道想成一個有10個車道的高速公路,一臺撥號PC的數(shù)據(jù)流為一個會話,相當(dāng)于占用了一個車道(告訴公路有多少車道是設(shè)備規(guī)定好的),這個車道只能跑這個運載這個PC的報文的卡車。(比如某型號設(shè)備每條隧道最多支持1000個會話)。 
3
L2TP協(xié)議
L2TP協(xié)議在TCP/IP協(xié)議棧中的位置

此圖說明了L2TP協(xié)議在整個TCP/IP層次結(jié)構(gòu)中位置,也指明了ip數(shù)據(jù)包在傳輸過程中所經(jīng)過的協(xié)議棧結(jié)構(gòu)和封裝過程;
我們以一個用戶側(cè)的IP報文的傳遞過程來描述VPN工作原理,黃色標(biāo)示的IP為需要傳遞的用戶數(shù)據(jù)!
在LAC側(cè),的鏈路層將用戶數(shù)據(jù)報文作為加上ppp封裝,然后傳遞給L2TP協(xié)議,L2TP再封裝成UDP報文,UDP再次封裝成可以在Internet上傳輸?shù)腎P報文,此時的結(jié)果就是IP報文中又有IP報文,但兩個IP地址不同,一般用戶報文的IP地址是私有地址,而LAC上的IP地址為公有地址,至此完成了VPN的私有數(shù)據(jù)的封裝;
在LNS側(cè),收到L2TP/VPN的IP報文后將IP、UDP、L2TP報文頭去掉后就恢復(fù)了用戶的PPP報文,將PPP報文頭去掉就可以得到IP報文,至此用戶IP數(shù)據(jù)報文得到,從而實現(xiàn)用戶ip數(shù)據(jù)的透明隧道傳輸,而且整個PPP報頭/報文在傳遞的過程中也保持未變,這也驗證了L2TP是一個二層VPN隧道協(xié)議!
L2TP協(xié)商交互過程
為了在VPN用戶和服務(wù)器之間傳遞數(shù)據(jù)報文,必須在LAC和LNS之間建立傳遞數(shù)據(jù)報文的隧道和會話連接,隧道是保證具有相同會話連接特性的一組用戶可以共享的連接屬性所定義的通道,而會話是針對每個用戶與企業(yè)VPN服務(wù)器建立連接的PPP數(shù)據(jù)通道,多個會話復(fù)用在一個隧道連接上隧道和會話是動態(tài)建立與刪除的。
會話的建立是由PPP模塊觸發(fā),如果該會話在建立時沒有可用的隧道結(jié)構(gòu),那么先建立隧道連接,會話建立完畢后開始進(jìn)行數(shù)據(jù)傳輸!
1)L2TP建立流程

L2TP隧道的建立是一個三次握手的過程,首先由LAC發(fā)起隧道建立請求SCCRQ,LNS收到請求后進(jìn)行應(yīng)答SCCRP,最后LAC在收到應(yīng)答后再給LNS返回確認(rèn)SCCCN;隧道建立。
會話建立的過程與隧道類似,首先由LAC發(fā)起會話建立請求ICRQ,LNS收到請求后返回應(yīng)答ICRP,LAC收到應(yīng)答后返回確認(rèn)ICCN,會話建立!
L2TP的會話建立由PPP觸發(fā),隧道建立由會話觸發(fā)。由于多個會話可以復(fù)用在一條隧道上,如果會話建立前隧道已經(jīng)建立,則隧道不用重新建立。
2)L2TP隧道的維護(hù)

隧道建立后,一直要等到該隧道所屬會話全部下線后,再進(jìn)行拆除,為了確認(rèn)對端的隧道結(jié)構(gòu)依然存在,需要定時發(fā)送與對端的維護(hù)報文,其流程為:LAC或LNS發(fā)出Hello報文,對應(yīng)的LNS或LAC發(fā)出確認(rèn)信息!
3)L2TP隧道拆除

隧道拆除流程比其建立過程要簡單,隧道的任何一端發(fā)出拆鏈通知StopCCN,對端返回確認(rèn);會話的拆除流程為:會話一端發(fā)出拆鏈通知CDN,對端返回確認(rèn)即可!
4、L2TP數(shù)據(jù)連接
L2TP數(shù)據(jù)消息用于封裝PPP幀,并在隧道上傳輸。

原始用戶數(shù)據(jù)為IP報文,先經(jīng)過PPP封裝,然后鏈路層將PPP幀進(jìn)行L2TP封裝,將其封裝成UDP,并繼續(xù)封裝成可以在internet上傳輸?shù)腎P報文,此時的結(jié)果就是IP報文中有PPP幀,PPP幀中還有IP報文,但兩個IP地址不同,里面的IP頭部是私有地址(原地址為L2TP服務(wù)器動態(tài)分配的地址,目的地址為公司內(nèi)網(wǎng)服務(wù)器的地址),外層IP頭部的原IP是客戶端的原始地址,目的IP是L2TP服務(wù)器的地址,至此完成客戶端數(shù)據(jù)封裝,然后通過L2TP隧道將報文發(fā)送到L2TP服務(wù)器,L2TP服務(wù)器收到封裝的IP報文,發(fā)現(xiàn)外層IP頭部的目的地址是指定自己的,然后L2TP服務(wù)器解封裝報文,得到里面的IP報文,然后根據(jù)IP頭部的的目的IP地址將數(shù)據(jù)包發(fā)送到內(nèi)網(wǎng)局域網(wǎng)服務(wù)器。
5、ppp
L2TP是用來封裝PPP幀的,L2TP隧道建立以后,發(fā)起的創(chuàng)建會話過程就是PPP的交互流程,具體如下:
1)PPP工作流程
一個IP分組需要傳輸,出發(fā)PPP層啟動連接過程,LCP協(xié)議負(fù)責(zé)完成連接的建立過程,PAP或者CHAP協(xié)議完成身份認(rèn)證,IPCP協(xié)議進(jìn)一步完成網(wǎng)絡(luò)層協(xié)議協(xié)商,當(dāng)以上過程都成功完成之后,IP分組封裝在PPP幀中傳輸?shù)綄Ψ?/p>
2)PPP協(xié)議分析
LCP:負(fù)責(zé)鏈路的建立,維護(hù)以及拆除

CHAP:對客戶端進(jìn)行身份認(rèn)證

IPCP:負(fù)責(zé)協(xié)商IP地址以及DNS等信息

6、
L2TP實際應(yīng)用中的交互報文

|