二层隧道协议研究及L2TPv3数据层的实现研究生学位论文.doc_第1页
二层隧道协议研究及L2TPv3数据层的实现研究生学位论文.doc_第2页
二层隧道协议研究及L2TPv3数据层的实现研究生学位论文.doc_第3页
二层隧道协议研究及L2TPv3数据层的实现研究生学位论文.doc_第4页
二层隧道协议研究及L2TPv3数据层的实现研究生学位论文.doc_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西 南 交 通 大 学研 究 生 学 位 论 文二层隧道协议研究及L2TPv3数据层的实现 西南交通大学硕士研究生学位论文 第61页Classified Index: TP393.09U.D.C: 618.14Southwest Jiaotong UniversityMaster Degree ThesisResearch on Layer 2 Tunneling Protocols and Implementation of L2TPv3 Data LayerGrade: Candidate:Academic Degree Applied for:Speciality:Supervisor:2000 Liu XiaoBinMasterComputer ApplicationsZeng Huashen.June 8, 2003 摘 要虚拟专用网(VPN)技术是建设地理位置分散的行业或企业网的重要手段。采用VPN技术,网络建设者可以利用公用数据网提供的服务,在敷设或租用用户(长途)专线的条件下组建安全专用网络。二层隧道技术则是一种利用公用数据网建立通信隧道实现对公用数据网两端的第2层协议(特别是PPP)进行中继的组建第2层VPN的方法。本论文以第2层VPN技术为背景,研究隧道传输技术。本论文所反映的工作,是四川省网络通信技术重点实验室“二层隧道协议课题组”的共同成果,该项目起因是试图对早期版本的隧道传输技术(L2F、PPTP和L2TP)的非对称应用模式推广到对称应用模式,以及将该思想应用于其他层协议的隧道传输。该思路比2003年IETF的建议草案,即L2TPv3覆盖的范围更广。论文作者的工作包括: 对3个版本的隧道传输协议的产生背景、各版本的异同进行了较为详细的分析。在此基础上, 作者与课题组其他两位成员一道提出了将隧道传输思想推广到对称应用模式和其他协议层。 以项目组提出的扩展思路,结合L2TPv3提供了一个功能相对较为完整的协议实现,并对该实现进行了部分测试,初步验证了课题组提出的扩展思路的可行性。其中,在协议实现方面,作者的工作重点是数据的封装与中继传输的设计与实现,这部分功能主要体现在系统的内核数据层模块中。最后作者对所作的工作做了简短的总结,并对该技术提出了展望。该协议有一定的应用前景,通过对它的扩展,应用面将更加广泛。关键词:二层隧道协议,L2TP访问集中器,L2TP网络服务器,数据层模块AbstractVirtual Private Network (VPN) techniques are becoming more and more important in organization of Intranets for geographically dispersed enterprises or communities. The layer 2 tunneling technique is one of the VPN techniques, which is dedicated to ferry the layer 2 protocols through public data networks.The background of this dissertation is Virtual Private Networks (VPN), with an emphasis on Level 2 tunneling techniques. This dissertation presented a theoretical work as well as an experimental implementation of the L2TP carried out at the Sichuan Network Communication Key Laboratory. This project was spurred by idea of extending the application of the tunneling technique to a broad area as a result of a preliminary study on tunneling techniques, especially on L2F, PPTP and L2TP (commonly referred to as L2TPv2). Such idea is intended to apply tunneling techniques to protocols not only to level 2 protocols as defined in newest version in IETF draft standard (L2TPv3) but also to protocols in other layers. The work presented in this dissertation covers:1. A comprehensive study of layer 2 tunneling techniques: the incentive behind and the essence of tunneling techniques, and changes in different versions and a forward view in future application. 2. A comparatively complete implementation of L2TPv3 base on the idea of the extension to tunneling techniques, which the author has chiefly contributed to the design and realization of the data layer module in the kernal and relevant test.Keywords:L2TP,LAC,LNS,Data Layer Module目 录第一章 绪论11.1二层隧道协议11.1.1研究背景11.1.2 L2TPv231.1.3 L2TPv3的主要扩展41.2 作者的工作及论文结构61.2.1 作者的工作61.2.2 论文结构7第二章 L2TPv3协议基本概念及实现的思路82.1 L2TPv3协议基本概念82.1.1部分术语定义82.1.2隧道结构92.2 L2TPv3 over UDP/IP102.2.1 L2TP over UDP112.2.2 L2TP over IP112.3 L2TP协议帧的封装112.4协议实现思路112.4.1 TCP/IP协议栈内部的数据流向分析122.4.2 加入L2TP协议后内部数据流向分析132.4.3 实现思路13第三章 L2TPv3协议分析与设计153.1 L2TPv3隧道报文153.1.1 控制和数据报文153.1.2 L2TP over UDP会话报文格式173.1.3 L2TP over IP会话报文格式173.1.4 AVP定义183.1.5 强制AVP193.1.6 AVP的隐藏193.1.7 控制报文类型213.2 控制连接223.2.1 控制连接管理223.2.2 控制信道的动态233.2.3 控制连接状态机253.3 会话连接283.3.1 会话管理283.3.2 呼入呼叫状态机303.3.3 呼出呼叫状态机323.4 L2TP系统总体框架及各功能模块的划分353.4.1 L2TP系统总体框架353.4.2 L2TP内核信令层353.4.3 L2TP内核数据层353.4.4 L2TP守护进程(L2TPD)35第四章 L2TPv3协议系统实现374.1 概述374.1.1 系统开发意义374.1.2 系统实现的支撑环境374.1.3 统一建模语言(UML)384.2 信令层的设计394.2.1 信令层模块对象394.2.2 信令层模块接口414.3 数据层的设计424.3.1 数据层模块对象424.3.2 数据层模块外部接口454.4 L2TPD的设计48第五章 协议软件测试495.1 单元测试495.1.1 单元测试的任务495.1.2 单元测试过程505.1.3 测试实例515.2 集成测试525.2.1 L2TP软件系统测试集525.2.2 测试实例53第六章 总结与展望556.1 简短的总结556.2 展望56致 谢57参考文献58攻读硕士学位期间发表的论文及科研成果61 第一章 绪论1.1二层隧道协议1.1.1研究背景机构众多而在地域上分散的行业或企业为了组织安全的企业内部网(Private Network),传统上采用敷设自己的专用线路网或租用专用线路/信道来实现。但是,这种组网方式的成本往往太高,于是虚拟专用网络(VPN Virtual Private Network)技术应运而生。所谓VPN是一种物理资源为多个网络或单机系统共用,但可以根据需要限定用户/网络间相互访问能力,对非受限网络或用户之间,其效果就像在使用自己的专用网络。由于在物理上并非专用,因而称之为“虚拟专用网”。最早的VPN技术出现在X.25技术之中,它是X.25网络的一种特殊服务(Facility)叫做“内部小组”(Closed Group)服务1。利用这一服务可以将联入以X.25为基础的公用网中的用户网或网络中的部分成员根据地址组成内部小组进行信息交换,而非该内部小组的成员不得与该组内成员交换信息。Internet环境提供了两种典型的VPN技术:安全IP协议(IPSec)2和二层隧道协议79。本文的讨论主题是后者,相关的协议已经发展到第三版。二层隧道协议是一种利用公用数据网(网络层的IP服务或数据链路层的ATM信元(Cell)传输服务、帧中继服务或以太网传输服务)在公用网接近通信用户的远程节点之间建立“隧道”(Tunnel)对相同或不同用户对的多条第2层的连接进行安全地中继。第一版的二层隧道协议以L2F和PPTP为代表。PPTP9是由多家公司(其中包括Microsoft,3Com,ECI Telematics以及U.S.Robotics等各大公司)专门为支持VPN而开发的一种技术。尽管PPTP的隧道是利用网络层协议GRE(Generic Routing Encapsulation)RFC 1701和17023、4来建立隧道的,但由于隧道传送的对象是数据链路层的PPP(点对点)协议,因此仍把它视为第二层隧道协议。PPTP保持了传统的拨号终端通过网络访问服务器(NAS Network Access Server)访问应用服务器的C/S模式,将NAS拆分为:应用服务器侧的 “点到点隧道协议网络服务器”(PNS PPTP Network Server)和拨号用户侧的 “点到点隧道协议访问控制集中器”(PAC PPTP Access Concentrator)。在PNS与PAC之间利用于TCP/IP建立“隧道控制连接”来控制基于GRE上的隧道的建立。在隧道内建立PPP连接时,PPTP需要对访问者的身份进行认证(如用户名,口令和域名等)。L2F13是由Cisco公司提出的,可以在多种介质(如ATM,FR,IP)上建立多协议的安全VPN的通信方式。它将链路层的协议(如HDLC,PPP,ASYNC等)封装起来传送,因此网络的链路层完全独立于用户的链路层协议。第二版的二层隧道协议RFC 26617是由Cisco、Ascedn、微软和RedBack的专家提出的,并正式采用了第2层隧道协议的名称(L2TP Layer - 2 Tunneling Protocol),后来被成为L2TPv2。L2TPv2结合了L2F和PPTP的优点,其应用对象与PPTP类似,也是专门针对点到点协议(PPP Point-to-Point Protocol)6进行隧道传输和中继的协议。L2TPv2允许从客户端或从访问服务器端发起建立PPP传输连接的隧道的过程,从而实现应用服务器与终端之间的第2层VPN功能。L2TPv2把传输链路层PPP的隧道建立在公用数据网提供的某一层服务之上(如:IP、ATM信元层或帧中继)进行隧道传输,这与PPTP将隧道限制在建立在网络层的GRE之上的思路相比,其可适应的网络环境更加广泛。通过对L2TPv22协议的学习和深入研究,作者与其他几位研究组成员都认为:L2TPv2试图解决的仅限于拨号或专线用户访问远端服务器的问题,只是远程互联的一种特殊情况。“隧道传输”或者“过渡”的思想5实际上有更广泛的应用前景。如果我们把公用分组交换网提供的某一层服务看作是河流(或建立隧道的基础),把包装运送某层用户数据的工具看作渡船(或隧道),而把所要运送的数据看作过渡的乘客/车辆(或者隧道中的连接/数据),那么: 过渡的对象可以不限于第2层的PPP协议数据,从更广的角度看过渡的对象还可以拓宽到对2层以外的其他协议层数据; 隧道传输或过渡的思想可以不限于L2TP中的非对称拨号终端访问服务器的C/S模式,也可以应用于对称的网对网互联和拨号/专线终端对终端的访问。上述思路就是开展本项研究的动因。在相关研究工作进展的过程中,作者发现Cisco公司也在作类似的研究,并在2003年发现了IETF建议草案L2TPv31819,即二层隧道协议的第三版。结合作者所在研究小组的工作和L2TPv3,本论文反映的工作的重点为对L2TPv3的研究和相关软件开发工作。1.1.2 L2TPv2由于本文多处涉及隧道的概念,有必要在此做简要说明。隧道技术是一种将某层的有连接或无连接的数据分组/报文进行包装(Encapsulation)后,借用可用网络环境提供的服务在远程节点间进行透明传送的技术。利用公用数据网建立的连接被称为“隧道”(Tunnel),利用隧道传送或中继的功能被称为隧道传输(Tunneling);而被隧道运载的数据或连接的协议层则被用于标识隧道的用途,例如第2层隧道协议则表示被运送的连接或数据与第2层的协议相联系。对隧道功能的形象表达可以用“过渡”(Ferrying)来描述,公用数据网可以看作是河流,隧道视为“渡船”(Ferry),而过渡的乘客或车辆则是用户期望过河的数据。在本文的讨论中上述两种表达方式是等价的。在隧道传输过程中,隧道协议将在隧道的两端被中继、前传的用户数据帧或分组/报文重新封装在隧道帧中发送。L2TPv2(本小节内,为描述方便使用L2TP之处皆指L2TPv2)是为支持C/S模式而定义的访问协议,L2TP隧道两端的两个组成部件为非对称的LAC(L2TP Access Concentrator)和LNS(L2TP Network Server)。LAC是(远端)用户终端(计算机)利用PPP接入L2TP隧道的访问集中器。LNS是LAC在L2TP隧道上的对等实体,是应用服务器直接或通过局域网接入L2TP隧道的访问服务器。L2TP隧道对终端用户是不可见的,因此感到自己就像直接连接到远端的应用服务器上一样,而意识不到自己的PPP连接被LAC与NAS间的隧道“过渡”到远端。L2TP的隧道分为非自建隧道(Compulsory Tunnel) 和自建隧道两种。非自建隧道示意如图1.1所示。非自建隧道的创建不需要用户来操作,也不允许用户进行任何选择。而是由网络提供商的LAC来建立,用户无权干预。Remote System先将网络层送来的数据包封装在PPP帧中,通过它与LAC之间的拨号连接将PPP帧送给LAC,如果L2TP隧道是基于Internet的话,LAC先将PPP帧封装在L2TP中,再进行IP封装,通过Internet传送给LNS。LNS在收到IP包后,拆封还原出L2TP,根据L2TP协议的进行处理,拆封还原出PPP帧,最后对PPPRemote SystemPSTNLACLNSInternet主机主机L2TP隧道PPP连接PSTN:公用电话交换网图1.1非自建隧道示意图帧拆封,把还原出来的网络层的数据包交给LNS的网络层。LNS发送给Remote System的数据包也可以通过相同的路径反向传送。通过这种机制,LAC将Remote System与它之间的PPP连接延伸到LNS,是Remote System访问LNS就像访问本地服务器一样,假设Remote System的网络层也使用IP协议,那么它就可以使用私有IP地址访问LNS。自建隧道示意如下图所示。L2TP隧道PPP连接LAC ClientLNSInternet主机主机图1.2自建隧道示意图自建隧道是依靠LAC Client,其区别于非自建隧道主要在于:它的终端扮演了使用隧道的用户以及建立隧道的LAC的双重角色,由用户来自行创建隧道。与非自建隧道的处理过程基本类似,只不过PPP帧的生成与封装全部在LAC Client中完成。1.1.3 L2TPv3的主要扩展 L2TPv3对L2TPv2应用从单一的非对称的客户(拨号终端)/服务器模式拓宽到对称的终端-终端和服务器-服务器模式。因此,隧道两端的设备连接关系就出现了三种组合:LAC-LNS,LAC-LAC和LNS-LNS,在不需要区别是LAC还是LNS时,则统称为“L2TP控制连接终端”(LCCE L2TP Control Connection Endpoint)。下面分别对这三种组合的应用环境加以说明: LAC-LNS组合图1.3中,一方面,LAC接收二层的数据流。另一方面,LNS逻辑上终止了本地的二层连接,并且发送三层数据流到本地网。会话建立的行为可以由LAC或LNS来发起。如图1.3所示。Remote SystemPSTNLNS分组交换网隧道服务二层连接LAC主机主机本地网分组交换网:包括IP、ATM和FR;PSTN:公共电话网络图1.3 LAC-LNS参考模型LAC-LAC组合每个LAC使用L2TP协议把远程系统(Remote System)数据流发送到对等端的 LAC,反之亦然。LAC并不处理本地的二层帧,因此并不使用虚拟的二层接口。而且一个LAC仅仅作为远端系统与L2TP隧道间的连接点。这种连接是典型的对称连接,也就是说任何一方可以在任何时候发起一个会话,甚至可以同时发起。如图1.4所示。Remote SystemPSTNLACLAC分组交换网隧道服务道服务二层连接Remote SystemPSTN图1.4 LAC-LAC参考模型 LNS-LNS组合如图1.5所示。LNS除了负责传送数据流外,而且还可以终止L2TP会话。这种方式下,两边都有虚拟接口与每个L2TP会话相关。一个会话可以通过用户来建立,或者由某些信号所触发的事件来驱动使其建立。如“自建隧道”。值得注意的是:如果一个LNS由于事件驱动而建立一个会话,那么则把LNS作为LAC客户来看待。二层连接LNSLNS分组交换网主机主机隧道服务主机主机图1.5 LNS-LNS参考模型本地网本地网这三种拓扑结构是对以往单一模式的扩展。不过LAC与LNS在功能处理上大同小异,只是在不同的场合扮演不同的角色,用户在使用过程中可以通过相关的配置,使其完成所扮演的功能。L2TPv3的另外一个重要的扩展是对多种二层数据帧封装的支持。L2TPv2只支持PPP数据帧的封装,L2TPv3扩展的目的是制订一个能够对所有数据链路层协议进行隧道传输的通用协议。1.2 作者的工作及论文结构1.2.1 作者的工作本文作者在硕士研究生学习期间,参加并完成了玉溪法院案件信息管理软件系统的设计与开发工作。工作完成后,笔者将自己的研究工作转向了网络技术方面,因此与同届的李杰和任挺同学一道,开展了二层隧道协议方面研究与开发工作。主要包括以下几个方面:对L2TPv2与L2TPv3进行了比较,对尚未成为标准的L2TPv3协议进行了分析研究,提出了一些建议,以使其更加完善;基于实现的需要,对L2TPv3协议状态机进行了分析,完成了协议状态表;完成了协议实现的总体框架设计,模块的划分;单独完成了系统中数据层模块的设计与实现;完成了单元测试与系统的集成测试;总结所作的工作,提出对未来工作的展望。1.2.2 论文结构论文总体上对L2TP协议的概念,一个典型实现以及对该实现的测试进行了描述。主要分为以下几个方面。第一章是隧道协议概要介绍,包括发展动因、版本变化、应用范围和基本原理。第二章对L2TP协议介绍了协议的一些基本概念,包括协议隧道结构、协议帧的封装、L2TP over UDP /IP以及Linux协议栈之间的关系与Linux下的实现思路。第三章是协议相关部分的分析和设计。其中对报文的格式进行了定义,以及控制连接、会话连接和协议的状态机做了具体地描述。并在此分析的基础上提出了实现的总体框架。第四章介绍协议的系统实现,包括各个模块所负责的功能,总体结构以及对象和接口等,主要是内核数据层模块的实现。第五章是对系统的测试,重点在作者所负责的模块方面的测试。第六章展望部分作者提出了一些还有待进一步需要研究的问题,以及我们所作的工作存在的不足,还有待进一步需要改进的地方。第二章 L2TPv3协议基本概念及实现的思路2.1 L2TPv3 以下如不作特殊说明,L2TP均表示L2TPv3,但本章的基本概念多数也适用于L2TPv2.协议基本概念2.1.1部分术语定义Attribute Value Pair (AVP)属性值对 一个唯一的属性由一个整数来表示,它是一个可变长度的串。控制报文就是由多个AVP组成的,分别用来实现控制连接的建立、保持和拆除。Call (Circuit Up)呼叫呼叫用来激活LAC上电路的状态为“up”或“active”。呼叫可以由诸如通过PSTN的呼入和呼出信号来动态建立,也可以静态地配置,例如在一个接口上提供一个虚电路。呼叫由呼叫的类型,被呼叫数等属性以及呼叫的数据量来定义。CHAP挑战认证协议挑战握手认证协议,一种点到点的加密挑战/应答认证协议,该协议不允许明文密码通过。Circuit电路 2层连接的总称。电路可以是虚拟的,例如ATM中的PVC或一个L2TP会话,也可能直接与物理层相关,例如一个RS232串行线。电路可以静态或者动态建立,在本文中,静态配置的电路大体上可以作为一个单一的动态电路来考虑。Dominant LCCE支配LCCE 支配LCCE是指单独进行控制连接初始化的建立者或tie-breaker中竞争的获胜者。 Incoming Call呼入呼叫 呼入呼叫是指LAC上接收到一个呼叫的(电路的up事件)的行为。呼叫是由远端系统发起的或者是由本地事件触发的(例如虚接口收到的异常数据流)。呼人呼叫如果决定要求使用隧道,那么LAC将产生一个L2TP的ICRQ报文。 Outgoing Call呼出呼叫向LAC发起一个呼叫的行为,是通过一端的OCRQ报文所产生的响应策略。 Outgoing Call Request 呼出呼叫请求(OCRQ)是指向LAC发出的一个请求,以发起一个呼出呼叫。该请求包含在LAC上发起呼叫所需的信息,典型的情况下,LAC预先不知道该信息。Peer 端 在L2TP应用中,端一般是指一个L2TP控制连接的远的一端,例如一个远端LCCE。LAC的端可能是LNS,也可能是另一个LAC。同样LNS的端也可能是LAC或另一个LNS。Pseudowire (PW)伪线 是指一个穿过PSN的仿效电路。每一个L2TP会话都有一个伪线。Pseudowire Type伪线类型 是指L2TP会话中所携带的负载类型,包括PPP, Ethernet, 和 Frame Relay。Session会话 当一个电路成功建立后,两个LCCE之间通过一个特殊的控制连接建立起一个L2TP会话。电路可以穿过或者终止于本地LCCE,这些LCCE保留了电路的状态。在已建立的L2TP会话和与其相关的电路之间有一对一的关系。Zero-Length Body (ZLB) Message零长度报文是指只有L2TP头的控制报文。ZLB报文用于在可靠控制信道上对报文的应答。2.1.2隧道结构L2TP的隧道结构是指建立隧道所依托的网络类型以及在隧道中所传输的报文。L2TP协议有两种类型的报文,控制报文和数据报文。控制报文的作用是完成控制连接和会话的建立、保持和拆除。这类的报文采用可靠的控制信道来发送。数据报文用来封装L2TP会话所携带的二层数据流。与控制报文不同的是,如果发生包的丢失,数据报文将不会重传。L2TP控制信道和数据信道在这个文本中被严格的定义,L2TP信道可以针对不同的二层连接来建立,它的格式可以通过L2TP控制连接来协商。而且,在需要的情况下,数据信道可以在没有控制信道的情况下使用。图2.1描述了L2TPv3隧道的结构,其中最底层表示所依托的公共网络,向上我们按照报文的种类分为数据通道和控制通道,并列出了一个粗略的幀格式。它相对于L2TPv2发生了一些变化,L2TPv2中控制和数据报文的头格式定义了一个统一的形式,而L2TPv3中将控制报文头和数据报文头区分开,以满足在通过UDP或者IP不同应用时的需要。数据报文通过一个不可靠的数据通道来发送,采用L2TP头对其进行封装,以穿过IP,Frame Relay, ATM, MPLS等PSN。控制报文在一个可靠的信道上发送,穿过同样的PSN。L2TP Control ChannelL2TP Data ChannelL2TP Data HeaderL2TP Control HeaderL2 FramesPacket-Switched Network (IP, FR, MPLS, etc.)图2.1 L2TP隧道结构L2TP Control Message2.2 L2TPv3 over UDP/IP 尽管二层隧道协议可以借用多种分组交换网络所提供的服务来建立隧道,本节的讨论仅限IP网络。 L2TPv3中,除了同L2TPv2一样定义了L2TP over UDP外,还新增加了L2TP over IP的内容,并且针对这两种应用重新定义了帧的格式,详情参见3.1。以下分别对这两种情况作简要说明。尽管本节是以L2TPv3为对象进行讨论的,但除了前面已提到的差别外,本节讨论的内容原则上也适用于L2TPv2。2.2.1 L2TP over UDPL2TP使用知名的UDP端口1701,L2TP的整个包,包括净荷和L2TP头全部放在UDP中进行传输。隧道的发起者选择一个空闲的源UDP端口(如:1701或者其他端口),然后将UDP包发送到接收者的1701端口上,接收者选择一个空闲端口(如:1701或者其他端口),并把它作为源端口,把发起者的IP地址和UDP端口作为目标地址和端口,发送一个响应。一旦在源和目的地的端口和地址之间建立关系,它的隧道生存期保持不变。2.2.2 L2TP over IP在L2TPv3中对over IP专门作了定义,L2TPv3 over IP采用了IANA分配的IP协议ID为115。在这种情况下,无需考虑与L2TPv2的互操作性以及移植的问题。实现时可以首先发送一个L2TPv3格式的SCCRQ以初始化一个L2TPv3的控制连接,如果没有响应,则回退到L2TPv2的操作。2.3 L2TP协议帧的封装以下以PPP帧为例来说明L2TP协议帧的封装过程,如图2.2所示。假定网络的拓扑结构采用LAC-LNS,LAC在接收到远端系统发送过来的PPP数据包后,则对其进行封装,封装可以分别采用L2TP over UDP或者L2TP over IP两种方式,具体根据系统的配置。首先对数据链路层的帧增加L2TP头,然后再分别加上UDP的头以及新的IP头,或者直接加上IP头。封装完成后,通过隧道发送到LNS,LNS则完成解封装的过程,获得原始的数据。2.4协议实现思路本节主要介绍协议的实现思路,首先从协议栈的角度来考虑,综合TCP/IP协议组的特点,分析了实现过程中所应该考虑的问题,提出实现的方案。Remote SystemPSTNLACLNS分组交换网主机主机隧道服务二层连接本地网DATAIPPPPUDP/IPDATAIPPPPL2TPDATAIP图2.2 L2TP协议帧的封装2.4.1 TCP/IP协议栈内部的数据流向分析正常情况下,数据链路层协议(以下简称L2P)的功能是为网络层提供服务。其基本服务是把源机器中来自网络层的数据传输给目的机器的网络层。数据链路层与网络层直接进行数据交换,以Linux操作系统为例,其L2P内核直接把数据包交给TCP/IP内核,然后再通过底层驱动,通常是Ethernet驱动,路由到目的地址。如图2.3所示,。L2P Kernel(如PPP)L2 Driver(如Modem)Ethernet DriverTCP/IP Kernel图2.3 TCP/IP协议栈内部的数据流向2.4.2 加入L2TP协议后内部数据流向分析内核中加入L2TP协议以后,在L2TP内核中进行数据的处理,通过TCP/IP的内核来路由L2数据。L2TPD(L2TP守护进程)负责隧道和会话的创建、认证和拆除以及控制包的传输。如图2.4所示。以PPP为例,其中控制包可能是LCP等。数据包也就是二层的数据,如PPP的帧,在隧道建立完成后,通过L2TP的内核来完成封装,再通过TCP/IP的内核路由到目的端。L2P DaemonL2P KernelL2 DriverEthernet DriverTCP/IP KernelL2TP KernelL2TPD模块之间的交互数据包流向控制包流向注:图2.4 加入L2TP协议后内部数据流向LNS与LAC的区别在于LAC不去具体对二层协议帧进行处理,而只是对其进行封装,在帧头上做出协议标识。LNS在收到帧后,根据协议的标识,对二层帧头部作相应的处理。例如,如果发现是PPP协议,则把帧交PPP内核进行处理。如果由LNS发起呼叫,则功能类似于LAC。2.4.3 实现思路基于以上的讨论,我们提出如下的实现思路: 首先设计一个协议的总体框架,充分考虑与协议栈中各协议的交互协调; 设计一个通用的L2TP内核,以便于多种应用的开发扩展,内核完成的协议的主要功能; 完成与内核相关的协议分析,包括帧的定义,AVP的定义,状态机的分析定义,并完成相关的实现; 设计一个L2TP的守护进程,负责完成系统的整体运行,包括协议系统的初始化,LAC/LNS的配置等功能。后面的章节就按照这样的思路分别作了详细的阐述。第三章 L2TPv3协议分析与设计本章主要是对L2TPv3协议的分析,包括报文格式的定义,状态机的描述,并绘制了状态变迁表。目的是为了本章最后所作的系统设计的需要,包括系统的框架设计以及模块的划分等。3.1 L2TPv3隧道报文本节将对协议中用到的所有报文的格式及类型进行综合介绍,包括控制帧和数据报文,两种不同的会话报文头,AVP的定义,强制和隐藏,控制帧的类型。3.1.1 控制和数据报文L2TP头的格式包括控制报文和数据报文两种格式,报文发送时采用高字节在前的发送顺序。以下对两种格式作分别介绍。 控制报文头格式控制报文的头格式如下图所示:01234567890123456789012345678901TLXXSXXXXXXXVerLengthControl Connection IDNsNr图3.1 控制报文的头格式默认情况下,控制报文和数据报文在底层介质里一并传输,也就是带内传输。控制报文与数据报文的区别在于高字节中的最高位T,但是有时也采用其他的方式来区分,例如在L2TP over IP中采用的方式就有所不同。如果是控制报文则T就设置为1,否则为0。L值为1,则表示域的长度被设置,S值为1,则表示序列号被设置。X域是保留位作为将来的扩展用,如果是呼出报文的话,保留位则设定为0,如果是呼入报文则忽略。Ver域指明L2TP控制报文头的版本号。Length域表示报文的字节长度,计算的方式从报文的头部开始。控制连接ID域表示某个控制连接的标识。这个标识符只具有本地意义,同一个控制连接的两个LCCE分别具有唯一的连接标识符。因此在每个报文中的控制连接ID是指指定的接收者,而不是发送者。在整个控制连接过程中,非0的控制连接ID作为已被分发的控制连接ID的AVP来进行选择和交换。Ns表示控制报文的序列号,每个控制报文的发送以0开始,每次增加1。Nr表示下一个收到的控制报文所期望的序列号,也就是说Nr的值被设定为Ns加1。 数据报文头格式一般情况下,L2TP数据报文包括会话头,可选的L2特殊子层即伪线控制封装和入隧的二层帧。L2TP Session HeaderL2-Specific SublayerTunneled Frame图3.2 数据报文的头格式L2TP会话头专应用穿过PSN的数据流。会话头应该可以区分不同的L2TP会话,以及区分控制报文和数据报文。不同类型的PSN必须定义自身的会话头,能够明确地区分头的格式以及建立会话所需的参数。文本定义了两种会话头,一种用于穿过UDP,一种用于穿过IP。所有的会话头中都包括Session ID与Cookie两个域,以下分别做说明。Session ID:是一个32位的域,包括一个会话标识符。会话标识符只具有本地的意义,也就是说在会话的生命期内,控制连接的两端可以具有不同的会话ID。当控制连接用于会话连接建立时,在会话创建的过程中,会话ID以本地会话ID的AVP来进行选择和交换。Cookie:这个域是可选的,长度可变,最大为8个字节,其值用于检验所接收的报文与会话的关系。Cookie必须用随机的一个数值来填满整个域。Cookie提供了一种确保数据报文直接与会话相关的机制,Cookie选择恰当可以防止掉队的报文与会话ID的错误关联。当L2TP控制连接被用于建立会话时,在会话创立期间,一个随机的Cookie值就被挑选出来,作为专门的Cookie AVP进行交换。L2特殊子层位于L2TP会话头和入隧起始帧之间,其中控制域用来使每个帧可以方便的入隧。入隧帧由PW数据流组成,包括任何可以入隧的二层帧。数据报文头后紧跟着所要入隧的二层帧。3.1.2 L2TP over UDP会话报文格式L2TPv3 over UDP必须考虑到已经存在的二层隧道协议,包括L2TPv2与L2F。图3.3所示为其会话头的格式。01234567890123456789012345678901TXXXXXXXXXXXVerLengthSession IDCookie (optional, maximum 64 bits).图3.3 L2TPv3 over UDP会话头T为必须设置为0,表明为数据报文。X为保留位,以为将来扩展使用。3.1.3 L2TP over IP会话报文格式与L2TP over UDP不同,L2TPv3 over IP会话头不受L2TPv2与L2F的限制。这样头格式的设计更加利于包的处理,如图3.4所示。01234567890123456789012345678901Session IDCookie (optional, maximum 64 bits).图3.4 L2TPv3 Over IP 会话头同样控制头也有所不同,当发送控制报文时,它使报文头前四个字节设为全0,这样处理将使得区分数据报文和控制报文以及报文的校验更加有效。图3.5所示为控制报文头。01234567890123456789012345678901(32 bits of zeros)TLXXSXXXXXXXVerLengthControl Connection IDNsNr图3.5 L2TPv3 Over IP 控制头值得注意的使这里的长度不包括前面的32位0位。3.1.4 AVP定义在确保互用性的情况下,为了最大化报文的可扩展性,在L2TP中采用报文类型和内容统一编码的方法。这种编码方法称为AVP,即属性值对。01234567890123456789012345678901MHrsvdLengthVendor IDAttribute TypeAttribute Value .(until Length is reached)图3.6 AVP格式前六位描述了AVP的一般属性,其中前两位被定义,而后四位作为保留位以为将来扩展用。保留位必须设置为0,如果有一位为1,则认为该AVP不可识别。 强制(M)位用于控制收到无法识别或畸形的AVP时的执行动作。一个给定的AVP只有在无法识别或者畸形时M位才被检查。如果一个与特殊会话或者控制连接相关的控制报文AVP无法识别或者是畸形,且M位被设定,则这个会话或连接以及绑定到这个连接上的所有会话必须被终止。如果M位没有设定,则无法识别的AVP必须被忽略,控制连接应该继续运行就好像该AVP不存在。隐藏(H)位用于识别AVP中属性值域中的隐藏数据。其作用是避免敏感数据以明文发送,例如用户密码。长度字段(Length)表示这个AVP中的字节长度,一般为属性值加6。长度字段共占10位,那么就允许在一个单独的AVP中最大有1023个字节的数据。最小的AVP长度为6个字节,这时的属性值域为空。Vendor ID是IANA分配的SMI网络管理专有企业编码。本文中采用的是0。开发商在扩展自己的功能时,要避免与其他开发商以及IETF将来的扩展冲突。这里Vendor ID分配了16位,那么限制了企业数为前65535个。属性类型(Attribute Type)是一个两字节的值用以表明AVP的类型。属性值(Attribute Type)用以表明具体的AVP属性。3.1.5 强制AVP当一个无法识别或者畸形的AVP的M位设定时,那么对于会话和控制连接来说将是灾难性的。所以M位只应该在一些关键的AVP中定义,比如说影响到会话和控制连接的正常运行的AVP。在LAC和LNS收到无法识别的AVP,并且M位已经被设定的情况下,会话或者控制连接被终止,那么发送端应该正确的来处理这个错误。在定义这种AVP时应该要考虑到这个问题。在需要使用M位时,如果有其他的选择,应该尽可能的选用其他选择。例如,仅仅发送一个设定了M位的AVP来确定一个特殊的扩展是否存在,不如采用通过在请求报文里发送一个AVP,以期待在应答报文里是否存在一个相应的AVP这种方法来的要好。如果在一些新的AVP中使用了M比特位,必须能够提供一定的配置把相联系的特性排开,也就是或者不发送AVP或是发送时不设置M位。在接收端,当收到的控制报文中的AVP不可识别或是畸形时,应当只检查这个AVP的M位,反之则不用检查。这种规则可以防止当接收方收到一个有效AVP时,由于M位被设定为LCCE不期望的值而被LCCE关断这个会话或控制连接。3.1.6 AVP的隐藏每个AVP的头部的H位提供了一种机制以对接收端的内容是否隐藏。这种机制可以用来隐藏一些敏感的控制报文数据,例如用户ID或者用户密码。H位在以下两种情况下必须采用:(1)两个LCCE之间存在一个共享密钥;(2)LCCE认证已经完成。共享密钥对于LCCE认证来说是同一个密钥。在LCCE认证成功完成以后,隐藏值不可以公开(也许需要隐藏值保存直到附加配

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论