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

*1、保PPP报文。

*2、数据没有加密机制,可通过IPSEC保证数据安全。 *

3、同3层VPN(IPSec\GRE)有所区别的是,L2TP是将来自用户网络的私有数据从二层PPP头部开始进行封装,而三层VPN是将来自用户网络的私有数据从三

层IP报头开始进行封装 *

4、主要用途:企业驻外机构和出差人员可从远程经由公共网络,通过虚拟隧道实现和企业总部之间的网络连接

L2TP报文封装层次结构


IP报文头

(公网地址)

UDP

报文头

L2TP

报文头

PPP

报文头

IP报文头

(私网地址)

Data

*此报文格式是LAC与LNS之间的数据报文。
*
*L2TP报文头是VPN协议报文头,其内封装的是PPP报文,因此L2TP是二层VPN协议。

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

L2TP报文头格式


L2TP报文头字段说明:

T:消息类型标志位,0为数据报文,1为控制报文。

*x:保留位。
*S:Ns和Nr标志位,控制报文中此位必须是1。
*O:Offset标志位,为1说明Offset有效,控制报文此位必须为0。
*P:优先级标志位,数据报文此位为1,表示优先处理;控制报文此位为0。
*Ver:必须为2。
*Length:消息总长度,单位为字节。
*Tunnel ID:控制连接标志符,本端有效。
*Session ID:控制连接内的会话标志符,本端有效。
*Ns:本消息的序列号。
*Nr:在控制消息中,表示预期收到的下一个控制消息的序号;数据消息中无效。
*Offset:偏移,如果有效,则数据从偏移后的字节开始。

二、L2TP的关键组件(它们之间通过协商建立隧道)

1、LAC(L2TP Access Concentrator,L2TP 访问集中器)

    LAC是附属在交换网络上的具有PPP 端系统和L2TP 协议处理能力的设备,通常是一个当地ISP的NAS(Network AccessServer网络

问服务器),主要用于为PPP 类型的用户提供接入服务。LAC 位于LNS 和远端系统之间,用于在LNS和远端系统之间传递信息包。它把从远

端系统收到的信息包按照L2TP 协议进行封装并送往LNS,同时也将从LNS收到的信息包进行解封装并送往远端系统。LAC 与远端系统之间采

用本地连接或PPP 链路,VPDN 应用中通常为PPP链路。

2、LNS(L2TP Network Server,L2TP 网络服务器)
    LNS 既是PPP端系统,又是L2TP 协议的服务器端,通常作为一个企业内部网的边缘设备。LNS 作为L2TP隧道的另一侧端点,是

LAC的对端设备,是LAC 进行隧道传输的PPP 会话的逻辑终止端点。通过在公网中建立L2TP隧道,将远端系统的PPP 连接的另一端由原来

LAC 在逻辑上延伸到了企业网内部的LNS。

3VPN用户:

指通过L2TP协议连入VPN的用户,通常是外地出差员工或办事机构。

三、会话和隧道这两个概念

   在一个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个会话)。

   

•session是由LAC发起的,事实上由LNS发起也是合法的,但消息类型有所不同,分别是:

•在一对LAC和LNS中可以存在多条隧道,每条隧道可以包含多个Session,但只有一个控制连接
•Session建立前,必须首先保证控制连接存在,如没有,首先建立控制连接,然后再建立session;如已存在控制连接,直接建立session
•在拆除Session时,如果还有其他Session存在,则控制连接不拆除;如果没有其他Session存在,控制连接随之拆除

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,对端返回确认即可!

四、AVP简介
一种对属性类型和属性值统一编码的方法;L2TP控制消息通过AVP携带各种参数;首先说明属性类型,然后说明属性值。
格式:
*M:强制位,该位置1时,不识别的AVP将导致相应的session或tunnel终止。
*H:隐藏标志位,该位置1,表示AVP值被隐藏显示。
*rsvd:保留位。
*Length:AVP报文长度。
*AttributeType:属性类型定义。
*AttributeValue:属性值。
属性类型和属性值共同决定了AVP的含义和内容。
AVP的一种加密解密算法:

加密过程:

c1= p1⊕ MD5(AV|S|RV)

c2= p2⊕ MD5(S|c1)

ci = pi⊕ MD5(S|ci-1)

其中AV是2字节的属性类型,S是通信双方的共享秘密,RV为随机向量

对应解密过程是:

p1=c1⊕ MD5(AV|S|RV)

p2=c2 ⊕ MD5(S|c1)

pi=ci ⊕ MD5(S|ci-1)

其中AV是2字节的属性类型,S是通信双方的共享秘密,RV为随机向量

参考博客:http://blog.csdn.net/u013485792/article/details/50838272

L2TP协议及AVP相关推荐

  1. L2TP协议笔记2---L2TP主要协议报文分析

    五.L2TP的Tunnel和Session建立过程   ① 1(SCCRQ)Start-Control-Connection-Request       控制链接发起请求,由LAC或LNS向对端发送, ...

  2. L2TP协议笔记1---L2TP概念及协议流程分析

    这个协议是早前做防火墙测试工作时主要负责测试的协议,虽然只做了几个月,但感觉如果把当时的一些学习笔记和经验整理好放在网络中,不仅可以使自己的协议理解得到巩固,也让自己有机会在和别人交流中互相学习.   ...

  3. l2tp协议介绍,跟PPTP有什么不同?

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

  4. 搭建Netscreen SSG5基于L2TP协议拨号平台

     隧道技术及L2TP隧道简介  隧道协议有很多种,不同的隧道协议工作在不同的TCP/IP层 隧道技术(Tunneling) 隧道技术的基本过程是在源局域网与公网的接口处将数据(可以是ISO 七层模型中 ...

  5. L2TP连接result_code_avp: avp is incorrect size. 错误

    错误信息如下: xl2tpd[2038]: Calling on tunnel 40109 xl2tpd[2038]: Call established with 192.168.33.1, Loca ...

  6. PPTP、L2F、L2TP协议

    PPTP协议简介 PPTP(Point to Point Tunneling Protocol),即点对点隧道协议.该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网(VP ...

  7. pptp和l2tp协议有什么区别?

    PPTP,即PPTF协议.该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网(VPN),可以通过密码身份验证协议(PAP).可扩展身份验证协议(EAP)等方法增强安全性.可 ...

  8. 如果你的Windows无法连接L2TP协议的***,809错误

    如果你的配置确保都正确 对于Windows 7系统,试试修改UDP封包的设置,操作如下: 新建一个文本文档,将下列代码拷贝进去,保存,然后将文本文档.txt的扩展名改为.reg,双击导入注册表,重启计 ...

  9. 虚拟隧道协议(L2TP)识别及实现

    L2TP于1999年正式发布,是点对点隧道协议(PPTP)的扩展.它是两种协议的合并,一种来自Microsoft(PPTP),另一种来自Cisco. 今天我们使用L2TP构建VPDN,对L2TP流量进 ...

最新文章

  1. java增删改查实例源码_Spring Data JPA 实现简单的CRUD增删改查源码案例
  2. iOS学习 plist读取和写入文件
  3. WinForm绘制柱形图
  4. 实验室里人越来越少啊!
  5. 关于敏捷开发方法(Agile Software Development)的阅读笔记
  6. 使用Hibernate和Spring设置分布式Infinispan缓存
  7. 加密算法-MD5算法
  8. matlab 展开多项式,matlab中freqz的用法以及多项式的展开
  9. 31省份RD经费内部支出、全时当量、专利数、技术市场成交额(1997-2019年)
  10. “单细胞”中研究APC/CCDH1失活调控细胞周期起始的分子机制
  11. 获取周日历/月日历input框选择的日期范围
  12. 一篇很感人的DOTA小说--我本近卫
  13. string容器模拟实现及使用——C++
  14. windows命令行将应用程序加入环境变量
  15. 高德视觉技术中心招聘计算机视觉研发(社招/校招/实习岗位)
  16. gulp less编译css压缩和js压缩别名输出
  17. 树莓派3强大很多--相比树莓派2
  18. 【电子电路计算公式】 导线流过电流计算工具,我已经做成一个小工具了(源代码)
  19. Oier们的幸运数字
  20. 生命的轨迹会沿着期望的方向走去

热门文章

  1. torchtext.vocab
  2. Springboot:拦截器和过滤器
  3. 探针台的配件也要第三方计量校准吗
  4. Lenovo 拯救者15ISK升级BIOS
  5. 【学习笔记】人工智能导论
  6. 接入以太坊(Ethereum)测试网络
  7. ASA防火墙之透明模式的使用及配置
  8. 如何开发一款游戏?【游戏开发所需技能和开发流程】
  9. Halide::Generator生成器使用说明
  10. java中文件读取方式的顺序_java中读取文件的方式