《二层隧道协议研究及L2TPv3数据层的实现研究生学位论文.doc》由会员分享,可在线阅读,更多相关《二层隧道协议研究及L2TPv3数据层的实现研究生学位论文.doc(68页珍藏版)》请在三一办公上搜索。
1、西 南 交 通 大 学研 究 生 学 位 论 文二层隧道协议研究及L2TPv3数据层的实现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 XiaoBinMaste
2、rComputer ApplicationsZeng Huashen.June 8, 2003摘 要虚拟专用网(VPN)技术是建设地理位置分散的行业或企业网的重要手段。采用VPN技术,网络建设者可以利用公用数据网提供的服务,在敷设或租用用户(长途)专线的条件下组建安全专用网络。二层隧道技术则是一种利用公用数据网建立通信隧道实现对公用数据网两端的第2层协议(特别是PPP)进行中继的组建第2层VPN的方法。本论文以第2层VPN技术为背景,研究隧道传输技术。本论文所反映的工作,是四川省网络通信技术重点实验室“二层隧道协议课题组”的共同成果,该项目起因是试图对早期版本的隧道传输技术(L2F、PPTP和
3、L2TP)的非对称应用模式推广到对称应用模式,以及将该思想应用于其他层协议的隧道传输。该思路比2003年IETF的建议草案,即L2TPv3覆盖的范围更广。论文作者的工作包括: 对3个版本的隧道传输协议的产生背景、各版本的异同进行了较为详细的分析。在此基础上, 作者与课题组其他两位成员一道提出了将隧道传输思想推广到对称应用模式和其他协议层。 以项目组提出的扩展思路,结合L2TPv3提供了一个功能相对较为完整的协议实现,并对该实现进行了部分测试,初步验证了课题组提出的扩展思路的可行性。其中,在协议实现方面,作者的工作重点是数据的封装与中继传输的设计与实现,这部分功能主要体现在系统的内核数据层模块中
4、。最后作者对所作的工作做了简短的总结,并对该技术提出了展望。该协议有一定的应用前景,通过对它的扩展,应用面将更加广泛。关键词:二层隧道协议,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 i
5、s 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 experiment
6、al 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 (common
7、ly 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 lay
8、er 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 ch
9、iefly 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
10、隧道结构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的隐
11、藏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
12、.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研究背景机构众多而在地域上分散
13、的行业或企业为了组织安全的企业内部网(Private Network),传统上采用敷设自己的专用线路网或租用专用线路/信道来实现。但是,这种组网方式的成本往往太高,于是虚拟专用网络(VPN Virtual Private Network)技术应运而生。所谓VPN是一种物理资源为多个网络或单机系统共用,但可以根据需要限定用户/网络间相互访问能力,对非受限网络或用户之间,其效果就像在使用自己的专用网络。由于在物理上并非专用,因而称之为“虚拟专用网”。最早的VPN技术出现在X.25技术之中,它是X.25网络的一种特殊服务(Facility)叫做“内部小组”(Closed Group)服务1。利用这一
14、服务可以将联入以X.25为基础的公用网中的用户网或网络中的部分成员根据地址组成内部小组进行信息交换,而非该内部小组的成员不得与该组内成员交换信息。Internet环境提供了两种典型的VPN技术:安全IP协议(IPSec)2和二层隧道协议79。本文的讨论主题是后者,相关的协议已经发展到第三版。二层隧道协议是一种利用公用数据网(网络层的IP服务或数据链路层的ATM信元(Cell)传输服务、帧中继服务或以太网传输服务)在公用网接近通信用户的远程节点之间建立“隧道”(Tunnel)对相同或不同用户对的多条第2层的连接进行安全地中继。第一版的二层隧道协议以L2F和PPTP为代表。PPTP9是由多家公司(
15、其中包括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 S
16、erver)和拨号用户侧的 “点到点隧道协议访问控制集中器”(PAC PPTP Access Concentrator)。在PNS与PAC之间利用于TCP/IP建立“隧道控制连接”来控制基于GRE上的隧道的建立。在隧道内建立PPP连接时,PPTP需要对访问者的身份进行认证(如用户名,口令和域名等)。L2F13是由Cisco公司提出的,可以在多种介质(如ATM,FR,IP)上建立多协议的安全VPN的通信方式。它将链路层的协议(如HDLC,PPP,ASYNC等)封装起来传送,因此网络的链路层完全独立于用户的链路层协议。第二版的二层隧道协议RFC 26617是由Cisco、Ascedn、微软和Red
17、Back的专家提出的,并正式采用了第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将隧道限制在建立在
18、网络层的GRE之上的思路相比,其可适应的网络环境更加广泛。通过对L2TPv22协议的学习和深入研究,作者与其他几位研究组成员都认为:L2TPv2试图解决的仅限于拨号或专线用户访问远端服务器的问题,只是远程互联的一种特殊情况。“隧道传输”或者“过渡”的思想5实际上有更广泛的应用前景。如果我们把公用分组交换网提供的某一层服务看作是河流(或建立隧道的基础),把包装运送某层用户数据的工具看作渡船(或隧道),而把所要运送的数据看作过渡的乘客/车辆(或者隧道中的连接/数据),那么: 过渡的对象可以不限于第2层的PPP协议数据,从更广的角度看过渡的对象还可以拓宽到对2层以外的其他协议层数据; 隧道传输或过渡
19、的思想可以不限于L2TP中的非对称拨号终端访问服务器的C/S模式,也可以应用于对称的网对网互联和拨号/专线终端对终端的访问。上述思路就是开展本项研究的动因。在相关研究工作进展的过程中,作者发现Cisco公司也在作类似的研究,并在2003年发现了IETF建议草案L2TPv31819,即二层隧道协议的第三版。结合作者所在研究小组的工作和L2TPv3,本论文反映的工作的重点为对L2TPv3的研究和相关软件开发工作。1.1.2 L2TPv2由于本文多处涉及隧道的概念,有必要在此做简要说明。隧道技术是一种将某层的有连接或无连接的数据分组/报文进行包装(Encapsulation)后,借用可用网络环境提供
20、的服务在远程节点间进行透明传送的技术。利用公用数据网建立的连接被称为“隧道”(Tunnel),利用隧道传送或中继的功能被称为隧道传输(Tunneling);而被隧道运载的数据或连接的协议层则被用于标识隧道的用途,例如第2层隧道协议则表示被运送的连接或数据与第2层的协议相联系。对隧道功能的形象表达可以用“过渡”(Ferrying)来描述,公用数据网可以看作是河流,隧道视为“渡船”(Ferry),而过渡的乘客或车辆则是用户期望过河的数据。在本文的讨论中上述两种表达方式是等价的。在隧道传输过程中,隧道协议将在隧道的两端被中继、前传的用户数据帧或分组/报文重新封装在隧道帧中发送。L2TPv2(本小节内
21、,为描述方便使用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的隧道分为非自建隧道(Compuls
22、ory 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主机主机L2T
23、P隧道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,其区别于非自建
24、隧道主要在于:它的终端扮演了使用隧道的用户以及建立隧道的LAC的双重角色,由用户来自行创建隧道。与非自建隧道的处理过程基本类似,只不过PPP帧的生成与封装全部在LAC Client中完成。1.1.3 L2TPv3的主要扩展 L2TPv3对L2TPv2应用从单一的非对称的客户(拨号终端)/服务器模式拓宽到对称的终端-终端和服务器-服务器模式。因此,隧道两端的设备连接关系就出现了三种组合:LAC-LNS,LAC-LAC和LNS-LNS,在不需要区别是LAC还是LNS时,则统称为“L2TP控制连接终端”(LCCE L2TP Control Connection Endpoint)。下面分别对这三种组
25、合的应用环境加以说明: 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仅仅作为远端系
26、统与L2TP隧道间的连接点。这种连接是典型的对称连接,也就是说任何一方可以在任何时候发起一个会话,甚至可以同时发起。如图1.4所示。Remote SystemPSTNLACLAC分组交换网隧道服务道服务二层连接Remote SystemPSTN图1.4 LAC-LAC参考模型 LNS-LNS组合如图1.5所示。LNS除了负责传送数据流外,而且还可以终止L2TP会话。这种方式下,两边都有虚拟接口与每个L2TP会话相关。一个会话可以通过用户来建立,或者由某些信号所触发的事件来驱动使其建立。如“自建隧道”。值得注意的是:如果一个LNS由于事件驱动而建立一个会话,那么则把LNS作为LAC客户来看待。二
27、层连接LNSLNS分组交换网主机主机隧道服务主机主机图1.5 LNS-LNS参考模型本地网本地网这三种拓扑结构是对以往单一模式的扩展。不过LAC与LNS在功能处理上大同小异,只是在不同的场合扮演不同的角色,用户在使用过程中可以通过相关的配置,使其完成所扮演的功能。L2TPv3的另外一个重要的扩展是对多种二层数据帧封装的支持。L2TPv2只支持PPP数据帧的封装,L2TPv3扩展的目的是制订一个能够对所有数据链路层协议进行隧道传输的通用协议。1.2 作者的工作及论文结构1.2.1 作者的工作本文作者在硕士研究生学习期间,参加并完成了玉溪法院案件信息管理软件系统的设计与开发工作。工作完成后,笔者将
28、自己的研究工作转向了网络技术方面,因此与同届的李杰和任挺同学一道,开展了二层隧道协议方面研究与开发工作。主要包括以下几个方面:对L2TPv2与L2TPv3进行了比较,对尚未成为标准的L2TPv3协议进行了分析研究,提出了一些建议,以使其更加完善;基于实现的需要,对L2TPv3协议状态机进行了分析,完成了协议状态表;完成了协议实现的总体框架设计,模块的划分;单独完成了系统中数据层模块的设计与实现;完成了单元测试与系统的集成测试;总结所作的工作,提出对未来工作的展望。1.2.2 论文结构论文总体上对L2TP协议的概念,一个典型实现以及对该实现的测试进行了描述。主要分为以下几个方面。第一章是隧道协议
29、概要介绍,包括发展动因、版本变化、应用范围和基本原理。第二章对L2TP协议介绍了协议的一些基本概念,包括协议隧道结构、协议帧的封装、L2TP over UDP /IP以及Linux协议栈之间的关系与Linux下的实现思路。第三章是协议相关部分的分析和设计。其中对报文的格式进行了定义,以及控制连接、会话连接和协议的状态机做了具体地描述。并在此分析的基础上提出了实现的总体框架。第四章介绍协议的系统实现,包括各个模块所负责的功能,总体结构以及对象和接口等,主要是内核数据层模块的实现。第五章是对系统的测试,重点在作者所负责的模块方面的测试。第六章展望部分作者提出了一些还有待进一步需要研究的问题,以及我
30、们所作的工作存在的不足,还有待进一步需要改进的地方。第二章 L2TPv3协议基本概念及实现的思路2.1 L2TPv3 以下如不作特殊说明,L2TP均表示L2TPv3,但本章的基本概念多数也适用于L2TPv2.协议基本概念2.1.1部分术语定义Attribute Value Pair (AVP)属性值对 一个唯一的属性由一个整数来表示,它是一个可变长度的串。控制报文就是由多个AVP组成的,分别用来实现控制连接的建立、保持和拆除。Call (Circuit Up)呼叫呼叫用来激活LAC上电路的状态为“up”或“active”。呼叫可以由诸如通过PSTN的呼入和呼出信号来动态建立,也可以静态地配置,
31、例如在一个接口上提供一个虚电路。呼叫由呼叫的类型,被呼叫数等属性以及呼叫的数据量来定义。CHAP挑战认证协议挑战握手认证协议,一种点到点的加密挑战/应答认证协议,该协议不允许明文密码通过。Circuit电路 2层连接的总称。电路可以是虚拟的,例如ATM中的PVC或一个L2TP会话,也可能直接与物理层相关,例如一个RS232串行线。电路可以静态或者动态建立,在本文中,静态配置的电路大体上可以作为一个单一的动态电路来考虑。Dominant LCCE支配LCCE 支配LCCE是指单独进行控制连接初始化的建立者或tie-breaker中竞争的获胜者。 Incoming Call呼入呼叫 呼入呼叫是指L
32、AC上接收到一个呼叫的(电路的up事件)的行为。呼叫是由远端系统发起的或者是由本地事件触发的(例如虚接口收到的异常数据流)。呼人呼叫如果决定要求使用隧道,那么LAC将产生一个L2TP的ICRQ报文。 Outgoing Call呼出呼叫向LAC发起一个呼叫的行为,是通过一端的OCRQ报文所产生的响应策略。 Outgoing Call Request 呼出呼叫请求(OCRQ)是指向LAC发出的一个请求,以发起一个呼出呼叫。该请求包含在LAC上发起呼叫所需的信息,典型的情况下,LAC预先不知道该信息。Peer 端 在L2TP应用中,端一般是指一个L2TP控制连接的远的一端,例如一个远端LCCE。LA
33、C的端可能是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) Me
34、ssage零长度报文是指只有L2TP头的控制报文。ZLB报文用于在可靠控制信道上对报文的应答。2.1.2隧道结构L2TP的隧道结构是指建立隧道所依托的网络类型以及在隧道中所传输的报文。L2TP协议有两种类型的报文,控制报文和数据报文。控制报文的作用是完成控制连接和会话的建立、保持和拆除。这类的报文采用可靠的控制信道来发送。数据报文用来封装L2TP会话所携带的二层数据流。与控制报文不同的是,如果发生包的丢失,数据报文将不会重传。L2TP控制信道和数据信道在这个文本中被严格的定义,L2TP信道可以针对不同的二层连接来建立,它的格式可以通过L2TP控制连接来协商。而且,在需要的情况下,数据信道可以在
35、没有控制信道的情况下使用。图2.1描述了L2TPv3隧道的结构,其中最底层表示所依托的公共网络,向上我们按照报文的种类分为数据通道和控制通道,并列出了一个粗略的幀格式。它相对于L2TPv2发生了一些变化,L2TPv2中控制和数据报文的头格式定义了一个统一的形式,而L2TPv3中将控制报文头和数据报文头区分开,以满足在通过UDP或者IP不同应用时的需要。数据报文通过一个不可靠的数据通道来发送,采用L2TP头对其进行封装,以穿过IP,Frame Relay, ATM, MPLS等PSN。控制报文在一个可靠的信道上发送,穿过同样的PSN。L2TP Control ChannelL2TP Data C
36、hannelL2TP 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。以下分别对这两种情况作简要说明。尽管本节
37、是以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在L2TP
38、v3中对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两种方式,具体根据系统的配置。首先对数
39、据链路层的帧增加L2TP头,然后再分别加上UDP的头以及新的IP头,或者直接加上IP头。封装完成后,通过隧道发送到LNS,LNS则完成解封装的过程,获得原始的数据。2.4协议实现思路本节主要介绍协议的实现思路,首先从协议栈的角度来考虑,综合TCP/IP协议组的特点,分析了实现过程中所应该考虑的问题,提出实现的方案。Remote SystemPSTNLACLNS分组交换网主机主机隧道服务二层连接本地网DATAIPPPPUDP/IPDATAIPPPPL2TPDATAIP图2.2 L2TP协议帧的封装2.4.1 TCP/IP协议栈内部的数据流向分析正常情况下,数据链路层协议(以下简称L2P)的功能是
40、为网络层提供服务。其基本服务是把源机器中来自网络层的数据传输给目的机器的网络层。数据链路层与网络层直接进行数据交换,以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守
41、护进程)负责隧道和会话的创建、认证和拆除以及控制包的传输。如图2.4所示。以PPP为例,其中控制包可能是LCP等。数据包也就是二层的数据,如PPP的帧,在隧道建立完成后,通过L2TP的内核来完成封装,再通过TCP/IP的内核路由到目的端。L2P DaemonL2P KernelL2 DriverEthernet DriverTCP/IP KernelL2TP KernelL2TPD模块之间的交互数据包流向控制包流向注:图2.4 加入L2TP协议后内部数据流向LNS与LAC的区别在于LAC不去具体对二层协议帧进行处理,而只是对其进行封装,在帧头上做出协议标识。LNS在收到帧后,根据协议的标识,对
42、二层帧头部作相应的处理。例如,如果发现是PPP协议,则把帧交PPP内核进行处理。如果由LNS发起呼叫,则功能类似于LAC。2.4.3 实现思路基于以上的讨论,我们提出如下的实现思路: 首先设计一个协议的总体框架,充分考虑与协议栈中各协议的交互协调; 设计一个通用的L2TP内核,以便于多种应用的开发扩展,内核完成的协议的主要功能; 完成与内核相关的协议分析,包括帧的定义,AVP的定义,状态机的分析定义,并完成相关的实现; 设计一个L2TP的守护进程,负责完成系统的整体运行,包括协议系统的初始化,LAC/LNS的配置等功能。后面的章节就按照这样的思路分别作了详细的阐述。第三章 L2TPv3协议分析
43、与设计本章主要是对L2TPv3协议的分析,包括报文格式的定义,状态机的描述,并绘制了状态变迁表。目的是为了本章最后所作的系统设计的需要,包括系统的框架设计以及模块的划分等。3.1 L2TPv3隧道报文本节将对协议中用到的所有报文的格式及类型进行综合介绍,包括控制帧和数据报文,两种不同的会话报文头,AVP的定义,强制和隐藏,控制帧的类型。3.1.1 控制和数据报文L2TP头的格式包括控制报文和数据报文两种格式,报文发送时采用高字节在前的发送顺序。以下对两种格式作分别介绍。 控制报文头格式控制报文的头格式如下图所示:01234567890123456789012345678901TLXXSXXXX
44、XXXVerLengthControl Connection IDNsNr图3.1 控制报文的头格式默认情况下,控制报文和数据报文在底层介质里一并传输,也就是带内传输。控制报文与数据报文的区别在于高字节中的最高位T,但是有时也采用其他的方式来区分,例如在L2TP over IP中采用的方式就有所不同。如果是控制报文则T就设置为1,否则为0。L值为1,则表示域的长度被设置,S值为1,则表示序列号被设置。X域是保留位作为将来的扩展用,如果是呼出报文的话,保留位则设定为0,如果是呼入报文则忽略。Ver域指明L2TP控制报文头的版本号。Length域表示报文的字节长度,计算的方式从报文的头部开始。控制
45、连接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位的域,包括一个会话标识符。会话标识符只具有本地的意义,也就是说在会话的生命期内,控制连接的两端可以具有不同的会