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

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

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

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

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

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

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

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

6、
L2TP實(shí)際應(yīng)用中的交互報(bào)文

|