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

3 L2TP協議
L2TP協議在TCP/IP協議棧中的位置

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

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

隧道建立后,一直要等到該隧道所屬會話全部下線后,再進行拆除,為了確認對端的隧道結構依然存在,需要定時發送與對端的維護報文,其流程為:LAC或LNS發出Hello報文,對應的LNS或LAC發出確認信息!
3)L2TP隧道拆除

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

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

CHAP:對客戶端進行身份認證

IPCP:負責協商IP地址以及DNS等信息

6、 L2TP實際應用中的交互報文


