传送门:L2TP代码实现

1. L2TP 概述

L2TP(Layer 2 Tunneling Protocol,二层隧道协议)是 VPDN(Virtual Private Dial-up Network, 虚拟私有拨号网)隧道协议的一种。
VPDN 是指利用公共网络(如 ISDNPSTN)的拨号功能接入公共网络,实现虚拟专用网,从而为企业、小型 ISP、移动办公人员等提供接入服务。即,VPDN 为远端用户与私有企业网之间提供了一种经济而有效的点到点连接方式。
VPDN 采用专用的网络通信协议,在公共网络上为企业建立安全的虚拟专网。企业驻外机构出差人员可从远程经由公共网络,通过虚拟隧道实现和企业总部之间的网络连接,而公共网络上其它用户则无法穿过虚拟隧道访问企业网内部的资源。

VPDN 有以下两种实现方式:

  • 接入服务器发起 VPDN 连接
    NAS(Network Access Server,网络接入服务器)通过使用 VPDN 隧道协议,将客户的 PPP 连接直接连到企业的 VPDN 网关上,从而与 VPDN 网关建立隧道。这些对于用户是透明的,用户只需要登录一次就可以接入企业网络,由企业网进行用户认证和地址分配,而不占用公共地址。该方式需要 NAS 支持 VPDN 协议、认证系统支持 VPDN 属性。
  • 用户发起 VPDN 连接
    客户端与 VPDN 网关建立隧道。这种方式由客户端先建立与 Internet 的连接,再通过专用的客户软件(如 Windows 2000 支持的 L2TP 客户端)与 VPDN 网关建立隧道连接。用户上网的方式和地点没有限制,不需 ISP 介入。但是,用户需要安装专用的软件(一般都是 Windows 2000 平台),限制了用户使用的平台。
    VPDN 网关一般使用路由器或 VPN 专用服务器。
    VPDN 隧道协议主要包括以下三种:
  • PPTP(Point-to-Point Tunneling Protocol,点到点隧道协议)
  • L2F(Layer 2 Forwarding,二层转发)
  • L2TP
    目前使用最广泛的是 L2TP

2. L2TP 典型组网应用

使用L2TP协议构建的VPDN应用的典型组网如 图 1所示。

在 L2TP 构建的 VPDN 中,网络组件包括以下三个部分:

  • 远端系统
    远端系统是要接入 VPDN 网络的远地用户和远地分支机构,通常是一个拨号用户的主机或私有网络的一台路由设备。

  • LAC(L2TP Access Concentrator,L2TP 访问集中器)
    LAC 是附属在交换网络上的具有 PPP 端系统和 L2TP 协议处理能力的设备,通常是一个当地 ISP的 NAS,主要用于为 PPP 类型的用户提供接入服务。
    LAC 作为 L2TP 隧道的端点,位于 LNS 和远端系统之间,用于在 LNS 和远端系统之间传递信息包。它把从远端系统收到的信息包按照 L2TP 协议进行封装并送往 LNS,同时也将从 LNS 收到的信息包进行解封装并送往远端系统。
    LAC 与远端系统之间采用本地连接或 PPP 链路,VPDN 应用中通常为 PPP 链路。

  • LNS(L2TP Network Server,L2TP 网络服务器)
    LNS 既是 PPP 端系统,又是 L2TP 协议的服务器端,通常作为一个企业内部网的边缘设备。
    LNS 作为 L2TP 隧道的另一侧端点,是 LAC 的对端设备,是 LAC 进行隧道传输的 PPP 会话的逻辑终止端点。通过在公网中建立 L2TP 隧道,将远端系统的 PPP 连接的另一端由原来的 LAC 在逻辑上延伸到了企业网内部的 LNS。

3. L2TP 基本概念

3.1 L2TP 协议背景

PPP 定义了一种封装技术,可以在二层的点到点链路上传输多种协议数据包,当用户与 NAS 之间运行 PPP 协议时,二层链路端点与 PPP 会话点驻留在相同硬件设备(NAS)上。
L2TP(RFC 2661)是一种对 PPP 链路层数据包进行隧道传输的技术,允许二层链路端点(LAC) 和 PPP 会话点(LNS)驻留在通过分组交换网络连接的不同设备上,从而扩展了 PPP 模型,使得PPP 会话可以跨越帧中继或 Internet 等网络。
L2TP 结合了 L2F 和 PPTP 的各自优点,成为 IETF 有关二层隧道协议的工业标准。

3.2 L2TP 协议结构

图 2描述了控制通道以及PPP帧和数据通道之间的关系。PPP帧在不可靠的L2TP数据通道上进行传输,控制消息在可靠的L2TP控制通道内传输。

图 3描述了LAC与LNS之间的L2TP数据报文的封装结构。通常L2TP数据以UDP报文的形式发送。L2TP注册了UDP 1701 端口,但是这个端口仅用于初始的隧道建立过程中。L2TP隧道发起方任选一个空闲的端口(未必是 1701)向接收方的 1701 端口发送报文;接收方收到报文后,也任选一个空闲的端口(未必是 1701),给发送方的指定端口回送报文。至此,双方的端口选定,并在隧道保持连通的时间段内不再改变。

3.3 隧道和会话

在一个 LNSLAC 对之间存在着两种类型的连接

  • 隧道(Tunnel)连接:它对应了一个 LNS 和 LAC 对。
  • 会话(Session)连接:它复用在隧道连接之上,用于表示承载在隧道连接中的每个 PPP 会话过程。
    在同一对 LAC 和 LNS 之间可以建立多个 L2TP 隧道,隧道由一个控制连接和一个或多个会话连接组成。会话连接必须在隧道建立(包括身份保护、L2TP 版本、帧类型、硬件传输类型等信息的交换)成功之后进行,每个会话连接对应于 LAC 和 LNS 之间的一个 PPP 数据流。
    控制消息和PPP 数据报文都在隧道上传输。L2TP 使用 Hello 报文来检测隧道的连通性。LAC 和 LNS
    定时向对端发送 Hello 报文,若在一段时间内未收到 Hello 报文的应答,隧道断开。

3.4 控制消息和数据消息

L2TP 中存在两种消息:控制消息数据消息

  • 控制消息用于隧道和会话连接的建立、维护以及传输控制。它的传输是可靠传输,并且支持对控制消息的流量控制和拥塞控制。
  • 数据消息用于封装 PPP 帧,并在隧道上传输。它的传输是不可靠传输,若数据报文丢失,不予重传,不支持对数据消息的流量控制和拥塞控制。

控制消息和数据消息共享相同的报文头。L2TP 报文头中包含隧道标识符(Tunnel ID)和会话标识符(Session ID)信息,用来标识不同的隧道和会话。隧道标识相同、会话标识不同的报文将被复用在一个隧道上。报文头中的隧道标识符与会话标识符由对端分配。

4. L2TP 隧道模式及隧道建立过程

4.1 两种典型的 L2TP 隧道模式

L2TP 隧道的建立包括以下两种典型模式。

  • NAS-Intiated
    如 图 4所示,由LAC端(指NAS)发起L2TP隧道连接。远程系统的拨号用户通过PPPoE/ISDN拨入LAC,由LAC通过Internet向LNS发起建立隧道连接请求。拨号用户的私网地址由LNS分配;对远程拨号用户的验证与计费既可由LAC侧代理完成,也可在LNS侧完成。
  • Client-Initiated
    如 图 5所示,直接由LAC客户(指本地支持L2TP协议的用户)发起L2TP隧道连接。LAC客户获得Internet访问权限后,可直接向LNS发起隧道连接请求,无需经过一个单独的LAC设备建立隧道。LAC 客户的私网地址由LNS分配。
    在 Client-Initiated 模式下,LAC 客户需要具有公网地址,能够直接通过 Internet 与 LNS 通信。

4.2 L2TP 隧道的建立过程

L2TP应用的典型组网如 图 6所示。

下面以 NAS-Initiated 模式的 L2TP 隧道为例,介绍 L2TP 的呼叫建立流程。

如 图 7所示,L2TP隧道的呼叫建立流程过程为:
(1) 远端系统 Host 发起呼叫连接请求;
(2) Host 和 LAC 端(RouterA)进行 PPP LCP 协商;
(3) LAC 对 Host 提供的用户信息进行 PAP 或 CHAP 认证;
(4) LAC 将认证信息(用户名、密码)发送给 RADIUS 服务器进行认证;
(5) RADIUS 服务器认证该用户,如果认证通过,LAC 准备发起 Tunnel 连接请求;
(6) LAC 端向指定 LNS 发起 Tunnel 连接请求;
(7) 在需要对隧道进行认证的情况下,LAC 端向指定 LNS 发送 CHAP challenge 信息,LNS 回送该 challenge 响应消息 CHAP response,并发送 LNS 侧的 CHAP challenge,LAC 返回该challenge 的响应消息 CHAP response;
(8) 隧道验证通过;
(9) LAC 端将用户 CHAP response、response identifier 和 PPP 协商参数传送给 LNS;
(10) LNS 将接入请求信息发送给 RADIUS 服务器进行认证;
(11) RADIUS 服务器认证该请求信息,如果认证通过则返回响应信息;
(12) 若用户在 LNS 侧配置强制本端 CHAP 认证,则 LNS 对用户进行认证,发送 CHAP challenge, 用户侧回应 CHAP response;
(13) LNS 再次将接入请求信息发送给 RADIUS 服务器进行认证;
(14) RADIUS 服务器认证该请求信息,如果认证通过则返回响应信息;
(15) 验证通过,LNS 端会给远端用户分配一个企业网内部 IP 地址,用户即可以访问企业内部资源。

5. L2TP 协议的特点

5.1 灵活的身份验证机制以及高度的安全性

L2TP 协议本身并不提供连接的安全性,但它可依赖于 PPP 提供的认证(比如 CHAP、PAP 等), 因此具有 PPP 所具有的所有安全特性。L2TP 可与 IPsec 结合起来实现数据安全,这使得通过 L2TP 所传输的数据更难被攻击。L2TP 还可根据特定的网络安全要求在 L2TP 之上采用隧道加密技术、端对端数据加密或应用层数据加密等方案来提高数据的安全性。

5.2 多协议传输

L2TP 传输 PPP 数据包,在 PPP 数据包内可以封装多种协议。

5.3 支持 RADIUS 服务器的验证

LAC 和 LNS 可以将用户名和密码发往 RADIUS 服务器进行验证申请,RADIUS 服务器负责接收用户的验证请求,完成验证。

5.4 支持内部地址分配

LNS 可放置于企业网的防火墙之后,它可以对远端用户的地址进行动态的分配和管理,可支持私有地址应用(RFC 1918)。为远端用户所分配的地址不是 Internet 地址而是企业内部的私有地址,这样方便了地址的管理并可以增加安全性。

5.5 网络计费的灵活性

可在 LAC 和 LNS 两处同时计费,即 ISP 处(用于产生帐单)及企业网关(用于付费及审计)。L2TP 能够提供数据传输的出入包数、字节数以及连接的起始、结束时间等计费数据,可根据这些数据方便地进行网络计费。

5.6 可靠性

L2TP 协议支持备份 LNS,当主 LNS 不可达之后,LAC 可以与备份 LNS 建立连接,增加了 VPN 服务的可靠性和容错性。

L2TP协议简介的更多相关文章

  1. L2tp协议简单解析

    1.L2TP简介 L2TP(Layer 2 Tunneling Protocol,二层隧道协议)是VPDN(Virtual PrivateDial-up Network,虚拟私有拨号网)隧道协议的一种 ...

  2. PPP协议、PPPoE协议、L2TP协议的关系

    1. 简述 首先对这3中协议做一个简单的描述: 协议 协议类型 描述 PPP 点对点链路层协议 应用最广泛的点对点协议,可应用在多种网络,改善了SLIP协议的不足 PPPoE 点对点链路层协议 对PP ...

  3. Fiddler--一、HTTP协议简介

    在学习Fiddler之前,最好先学习一下HTTP协议. HTTP协议简介 什么是HTTP协议 超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端 ...

  4. L2TP协议

    L2TP协议 L2TP(Layer 2 Tunneling Protocol) 第二层隧道协议.该协议是工业标准的Internet隧道协议. L2TP实现的两种方式 LAC (L2TP Access ...

  5. MODBUS-RTU通讯协议简介

    MODBUS-RTU通讯协议简介   什么是MODBUS? MODBUS 是MODICON公司最先倡导的一种软的通讯规约,经过大多数公司 的实际应用,逐渐被认可,成为一种标准的通讯规约,只要按照这种规 ...

  6. JavaWeb:Web与HTTP协议简介

    JavaWeb:Web与HTTP协议简介 Web的概念 什么是Web: Web是网络上使用最广泛的分布式应用架构. 旨在共享分布在网络上的各个Web服务器中的所有互相连接的信息. 三个特征: 用HTM ...

  7. CC2540开发板学习笔记(九)—— BLE协议简介

    一.BLE协议简介 1.协议是什么? 协议是一系列的通信标准,双方需要共同按照这进行正常数据 协议是一系列的通信标准,双方需要共同按照这进行正常数据发射和 接收.协议栈是的具体实现形式,通俗点来理解就 ...

  8. HTTP 协议简介

    HTTP 协议简介 博客分类: acl开发--HTTP协议篇 网络协议http协议  一.TCP/IP 协议介绍 在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容.TCP/IP协议是 ...

  9. OAUTH协议简介

    OAUTH协议简介 原文来自:http://blog.csdn.net/hereweare2009/article/details/3968582 分类: Open API2009-03-08 12: ...

随机推荐

  1. 手写Pascal解释器(一)

    目录 一.编写解释器的动机 二.part1 三.part2 四.part3 一.编写解释器的动机 学习了Vue之后,我发现对字符串的处理对于编写一个程序框架来说是非常重要的,就拿Vue来说,我们使用该 ...

  2. CentOS后台服务管理类

    目录 一.service 后台服务管理(临时,只对当前有效) 二.chkconfig 设置后台服务的自启配置(永久) 三.CentOS7 后添加的命令:systemctl 一.service 后台服务 ...

  3. javaScript学习关于节点

    节点的常用属性和方法: 个人理解,对于节点来说,他就是html里面的标签对象. 通过具体的元素节点调用: getElementsByTagName()方法,获取当前节点的指定标签名孩子节点 appen ...

  4. Spring Cloud Alibaba - Gateway

    Gateway Gateway简介 底层使用Netty框架,性能大于Zuul 配置gateway模块,一般使用yaml格式: server: port: 80 #spring boot actuato ...

  5. C++ 基于STL的演讲比赛流程管理系统(sort算法+小型算法(accumulate)+内建函数对象+string字符串拼接+字符串截取+多个容器基础操作+与用户交互+文件的读写+保存+重建+整体文件数据的清空)

    1 /* 2 比赛规则: 3 学校举行一演讲比赛,共12个人参加,比赛两轮,第一轮为淘汰赛 第二轮为决赛 4 每名选手都有对应的编号:如10001~10012 5 比赛方式:分组比赛 每组6人 6 第 ...

  6. S3C2440—4.时钟系统

    文章目录 一.S3C2440时钟体系介绍 1.总线与时钟 2.时钟来源 3.选择时钟 4.产生时钟 5.流程 二.如何配置时钟源 1.设置FCLK频率寄存器 MPLLCON 2.设置分频HDIV.PD ...

  7. netty系列之:在netty中使用protobuf协议

    目录 简介 定义protobuf 定义handler 设置ChannelPipeline 构建client和server端并运行 总结 简介 netty中有很多适配不同协议的编码工具,对于流行的goo ...

  8. 高性能 C++ HTTP 客户端原理与实现

    一.什么是Http Client Http协议,是全互联网共同的语言,而Http Client,可以说是我们需要从互联网世界获取数据的最基本方法,它本质上是一个URL到一个网页的转换过程.而有了基本的 ...

  9. wpf 自定义 RadioButton.

    <Style TargetType="RadioButton" x:Key="nav"> <Setter Property="Tem ...

  10. 【java web】拦截器inteceptor

    一.简介 java里的拦截器提供的是非系统级别的拦截,也就是说,就覆盖面来说,拦截器不如过滤器强大,但是更有针对性. Java中的拦截器是基于Java反射机制实现的,更准确的划分,应该是基于JDK实现 ...