本文目录导读:

L2TP(Layer 2 Tunneling Protocol,第二层隧道协议)本身是一种封装协议,它本身并不提供加密或保密性,所谓的“第二层隧道”,指的是它在 OSI 模型的数据链路层(第二层)上工作,将二层帧(如 PPP 帧)封装在 IP 数据包中传输。
要理解 L2TP 如何实现“第二层隧道”,需要从它的协议栈、封装过程和隧道建立机制三个层面来看,以下是详细解析:
核心原理:L2TP 协议栈
L2TP 隧道本质上是在 IP 网络(如互联网)上模拟一条点对点链路,它的协议栈从上到下通常是这样工作的:
+-----------------------+ | 上层协议 (IP/IPX/NetBEUI) | <- 用户的原始网络数据 +-----------------------+ | PPP 帧 | <- 拨号或 PPPoE 产生的第二层帧 +-----------------------+ | L2TP 数据消息 | <- 封装 PPP 帧 (隧道数据) +-----------------------+ | UDP (1701端口) | <- 传输层 (L2TP 使用UDP,无连接) +-----------------------+ | IP | <- 网络层 (将隧道数据发往对端) +-----------------------+ | 以太网/物理层 | <- 实际物理传输 +-----------------------+
关键点:二层帧(PPP帧)被当作负载(Payload)直接放入L2TP报文,L2TP报文再放入UDP数据报,最后放入IP包,这实现了“把第二层数据通过第三层网络传输”的效果。
实现第二层隧道的三个核心步骤
步骤 A:建立控制通道(Control Connection)
- L2TP 首先在 LAC(L2TP 访问集中器)和 LNS(L2TP 网络服务器)之间通过控制消息建立一条控制连接。
- 控制消息也是通过 UDP(端口 1701)传输,但使用可靠机制(序列号、重传)。
- 这个控制连接负责后续会话(Session)的建立、维护和拆除,每个会话对应一个独立的第二层连接(即一条虚拟拨号链路)。
步骤 B:建立会话(Session)—— 真正创建隧道
- 在控制连接上,通过 SCCRQ(开始控制连接请求)、OCRQ(呼叫连接请求)等控制消息,为每个用户会话分配一个唯一的会话 ID(Session ID)。
- 会话 ID 是区分同一隧道内不同“第二层链路”的关键,隧道是 LAC 和 LNS 之间的管道,而会话则是管道内的具体连接。
步骤 C:数据封装与传输 —— 隧道运作
当用户数据(如一个 IP 包)到达 LAC 时,L2TP 会执行以下封装:
- PPP 封装:用户数据先被封装进一个 PPP 帧,PPP 头包含协议标识等字段(0x0021 表示 IP)。
- L2TP 封装:PPP 帧被放入 L2TP 数据消息中,L2TP 头包含:
- Tunnel ID:标识属于哪个隧道(LAC与LNS之间的逻辑连接)。
- Session ID:标识属于隧道内的哪个具体会话(即哪个用户的PPP连接)。
- 序列号(可选):用于乱序重排(L2TP默认不保证顺序,但可通过配置启用)。
- UDP 封装:L2TP 报文作为 UDP 负载,目标端口 1701。
- IP 封装:加上 IP 头,源地址为 LAC 的公网 IP,目标地址为 LNS 的公网 IP。
这样,一个原本在本地链路上的第二层帧(PPP帧),就被“隧道”在了公共IP网络的数据包中。
与 IPsec 协同工作 (L2TP/IPsec)
L2TP 本身不加密,因此常与 IPsec 结合使用,这就是常见的 L2TP/IPsec VPN,在这种模式下,L2TP 完成第二层隧道的建立和会话管理,IPsec 提供加密、认证和完整性保护。
- 工作流程:
- 首先建立 IPsec 安全关联(SA),加密 UDP 1701 流量。
- 然后通过已经加密的通道,建立 L2TP 隧道和会话。
- 所有用户数据包被 PPP 封装 -> L2TP 封装 -> UDP 封装 -> IPsec ESP 封装。
一个典型的 L2TP 隧道建立过程(画图理解)
假设一个用户通过 LAC(NAS 或路由器)发起连接:
用户电脑 LAC (隧道发起方) LNS (隧道终点) | | | | PPP LCP/NCP 协商 | | |<------------------------>| | | | | | | 1. SCCRQ (建立控制) | | |------------------------->| | | 2. SCCRP | | |<-------------------------| | | 3. SCCCN | | |------------------------->| | | | | | 4. OCRQ (建立会话) | | |------------------------->| | | 5. OCRP | | |<-------------------------| | | 6. OCCN | | |------------------------->| | | | | PPP帧 (用户数据) | | |------------------------->| | | | L2TP封装 (UDP+IP) | | |------------------------->| | | L2TP解封装 (还原PPP帧) | | | | | | 7. 内层IP包 | | |<------------------------>|
核心特性总结:为什么叫“第二层隧道”
| 特性 | 解释 |
|---|---|
| 工作在第二层 | L2TP 直接封装 PPP 帧(或以太网帧),而 PPP 帧本身就是数据链路层协议,它不关心上层是什么协议(IP、IPX、AppleTalk等)。 |
| 透明性 | 对于用户来说,就像直接连接到了远端的 LNS 上,中间的网络(互联网)不可见,LNS 会为每个会话分配一个内部 IP 地址。 |
| 多协议支持 | 由于封装的是 PPP 帧,它可以承载多种网络层协议,不仅仅是 IP。 |
| 无加密 | 原生 L2TP 只有封装,没有加密,安全由 IPsec 等协议提供。 |
| 隧道 vs 会话 | 隧道(Tunnel)是 LAC 和 LNS 之间的物理或逻辑链路;会话(Session)是隧道内的一条虚拟电路(对应一个用户连接),一个隧道可承载多个会话。 |
L2TP 实现第二层隧道的方式是:在 IP 网络上模拟一个点对点的数据链路层连接,它将用户的二层帧(PPP帧)作为纯数据,加上 L2TP 头(包含隧道 ID 和会话 ID),然后打包进 UDP 和 IP 包中,通过公共 IP 网络传输到对端,对端收到后,剥离 IP/UDP/L2TP 头部,还原出原始的 PPP 帧,从而让两端仿佛直接通过一条二层线路相连。
标签: 隧道协议