第二层隧道协议L2TP技术1、概述(overview)隧道技术是建立安全VPN的基本技术之一,类似于点对点连接技术,在公用网建立一条数据遂道,让数据包通过这条隧道传输。隧道是由隧道协议形成的,分为第二、三层隧道协议。第二层隧道协议有L2F、PPTP和L2TP等,是先把各种网络协议封装到PPP中,再把整个数据包装入隧道协议中。这种双层封装方法形成的数据包靠第二层协议进行传输。第三层隧道协议有GRE、IPSEC等。第二层隧道协议和第三层隧道协议的本质区别在于在隧道内用户的数据包是被封装在哪种数据包中进行传输的。L2TP隧道协议是典型的被动式隧道协议,它结合了L2F和PPTP的优点,可以让用户从客户端或访问服务器端发起VPN连接。L2TP是把链路层PPP帧封装在公共网络设施如IP、ATM、帧中继中进行隧道传输的封装协议L2TP主要由LAC(L2TPAccessConcentrator)和LNS(L2TPNetworkServer)构成,LAC支持客户端的L2TP,用于发起呼叫、接收呼叫和建立隧道;LNS是所有隧道的终点,LNS终止所有的PPP流。在传统的PPP连接中,用户拨号连接的终点是LAC,L2TP使得PPP协议的终点延伸到LNS。L2TP的好处在于支持多种协议,用户可以保留原有的IPX、Appletalk等协议或公司原有的IP地址。L2TP还解决了多个PPP链路的捆绑问题,PPP链路捆绑要求其成员均指向同一个NAS(NetworkAccessServer),L2TP可以使物理上连接到不同NAS的PPP链路,在逻辑上的终结点为同一个物理设备。L2TP还支持信道认证,并提供了差错和流量控制。L2TP利用IPsec协议(加密/解密协议)增强了安全性,支持数据包的认证、加密和密钥管理。L2TP/IPSec因此能为远程VPN用户提供设计精巧并有互操作性的安全隧道连接。2、L2TP技术的网络拓扑结构(l2tptechnologytopology)该网络结构中将IPSecSGW(安全网关)和LNS合并成一个系统,即安全远程访问服务器SRAS(SecureRemoteAccessServer)。这样,远程访问客户将访问唯一的节点SRAS,该节点既是NAS服务的PPP终端,也是进入企业的安全网关节点。SRAS的操作要求配置防火墙允许UDP包进入SRAS节点,该节点将依次只处理L2TP包并丢弃其它包。而且,SRAS将要求所有嵌入在PPP内的IP包封装成AH和ESP包之一,并指向它自身。另外,为了执行IKE协商和动态生成IPSec密钥,SRAS也将允许IKEUDP包指向它自身。企业通过只允许安全远程访问包进入企业来实施安全策略,它将丢弃所有其它嵌入PPP内的IP包。当一个PPP会话被丢弃时,与远程访问用户相关的IPSec和ISAKMP的SAs(安全关联)也从SRAS内被丢弃。这样,在捆绑SRAS后,SGW和LNS相分离的网络结构的所有缺点都不存在了。图1给出了应用L2TP技术的网络拓扑结构。3、L2TP报头格式L2TP使用两种类型的消息:控制消息和数据消息。控制消息用于隧道和呼叫的建立、维护和清除,它使用L2TP内的可靠控制通道来保证传送。数据消息用于封装隧道传输的PPP帧,当发生包丢失时不再传送数据消息。PPP帧先由L2TP报头封装,再由一种包传输机制(如UDP、帧中继、ATM等)封装之后在一个不可靠的数据通道上传输。但是,控制消息在一个可靠的L2TP控制通道上传送,这个控制通道在同一包传输机制上传送包。在所有的控制消息中都需要有序列号,序列号还用于提供控制通道上的可靠传送。数据消息可以使用序列号来重新排序数据包和检测包的丢失。控制通道和数据通道的L2TP数据包的报头格式相同(如图2所示)。在该报头格式中,当一个可选字段未被选中时,在消息中不为这个字段预留空间。注意:当数据消息的可选项Ns在消息中出现(即被选中)则可选项Nr必须出现在所有控制消息中。T:消息类型,1bit。0数据消息;1控制消息。L:长度字段出现,1bit,可选。如果设置了这一位,则长度字段出现。控制消息中必须设置这一位。S:序列号出现,1bit。如果设置了这一位,则Ns和Nr字段出现。控制消息中必须设置这一位。O:偏移字段出现,1bit。如果设置了这一位,则OffsetSize字段出现。控制消息中必须设置这一位。P:优先权,1bit。这一特征只是对数据消息而言,控制消息都必须设置这一位。如果设置了这一位,则在本地排队和传输中将优先处理这个数据消息。Version:4bits。指明L2TP协议的版本,必须被设置为2。保留值1用作允许对L2F数据包的检测,判断是否与L2TP数据包一起到达。当接收到一个版本值未知的数据包时,必须丢弃这个数据包。Length:16bits。指明消息的总长度,用字节表示。TunnelID:16bits。指明控制连接的标识符。L2TP遂道由只有本地意义的标识符命名;即,同一隧道在隧道的每一端都有不同的TunnelIDs。每一个消息中的TunnelID都是预定接收者而不是发送者的TunnelID。在隧道创建期间,TunnelIDs的选择和交换都是作为AssignedTunnelIDAVPs(Attribute-ValuePair)进行的。SessionID,16bits。指明一个隧道内的一次会话的标识符。L2TP会话由只有本地意义的标识符命名;即,同一个会话在会话的每一端有不同的SessionIDs。每一个消息中的TunnelID都是预定接收者而不是发送者的SessionID。在会话创建期间,SessionIDs的选择和交换都是作为AssignedSessionIDAVPs进行的。Ns:16bits,可选。指明数据消息或控制消息的序列号。从0开始每发送一个消息加1。Nr:16bits,可选。表明所要收到的下一个控制消息中预定的序列号0。因此,Nr被设为所接收到的最后一个消息的Ns加1。若在数据消息中保留Nr,则接收时必须忽略。OffsetSize:16bits,可选。如果出现,则指定了L2TP报头之后的字节数,因为载荷数据从这里开始(即载荷数据的字节数)。如果offset字段出现,则L2TPheader在offsetpadding的最后一个字节之后结束。OffsetPad:偏移填充,可变长度,可选。Data:可变长度。4、相关技术与应用4.1用L2TP控制消息维护隧道与PPTP不同,L2TP隧道的维护不在独立的TCP连接上进行。L2TP呼叫控制和管理业务在L2TP客户和服务器之间以UDP消息的形式发送。在Windows2000中,L2TP客户和服务器都使用UDP端口1701。值得注意的是,Windows2000的L2TP服务器也支持使用的其他UDP端口(UDP端口不为1701)的L2TP客户。IP上的L2TP控制消息以UDP数据包的形式发送。在Windows2000实现中,这样的L2TP控制消息作为IPSecESP的加密载荷发送,如图3所示:因为没有使用TCP连接,L2TP使用消息序列确保L2TP消息的传输。L2TP控制消息中,Nr和Ns字段都用于保持控制消息的次序,违反次序的数据包将被丢弃。Nr和Ns字段也可用于隧道数据的顺序传送和流控制。L2TP的每一个隧道都支持多个呼叫。L2TP控制消息和报头中有隧道数据的TunnelID--用于指定隧道和CallID--用于指定这个隧道中的一次呼叫。下表列出了一些主要的L2TP控制消息:消息类型用途Start-Control-Connection-Request由L2TP客户机发出,请求建立控制连接。L2TP隧道要求在其他任何L2TP消息发送之前首先建立控制连接。该消息包含一个隧道标识Tunnel-ID。Start-Control-Connection-ReplyL2TP服务器对Start-Control-Connection-Request消息的应答。Start-Control-Connection-Connected对Start-Control-Connection-Reply消息的应答,表示隧道建立成功。Outgoing-Call-Request由L2TP客户机发出,请求建立一路呼叫,该消息包含一个CallID用于标识特定隧道中的一路呼叫。Outgoing-Call-ReplyL2TP服务器对Outgoing-Call-Request消息的应答。Start-Control-Connection-Connected对Outgoing-Call-Reply消息的应答,表示呼叫建立成功。Hello作为保持连线机制,可由L2TP客户机或服务器任一方发出。如果Hello消息得不到确认,则L2TP隧道逐渐终止。WAN-Error-Notify由L2TP服务器向所有VPN客户机发出,指示服务器的PPP接口处于错误状态。Set-Link-Info可由L2TP客户机或服务器任一方发出,设置PPP协商选项。Call-Disconnect-Notify由L2TP客户机或服务器任一方发出,指示隧道内一路呼叫将被终止。Stop-Control-Connection-Notification由L2TP客户机或服务器任一方发出,指示隧道将被终止。4.2L2TP数据的隧道传输L2TP数据的隧道传输是通过多级封装实现的。图4为IPSec隧道数据进行L2TP封装之后产生的结构。其中,Data-LinkLayer封装是为了在LAN或WAN连接上传送,IP数据包用数据链路层的报头和报尾封装。例如,以太网接口上发送的IP数据报用以太网报头和报尾封装。当IP数据报在点到点WAN链路(如模拟电话线或ISDN)上传送时,IP数据报用一个PPP报头和报尾来封装。接收到L2TP封装的IPSec隧道数据后,L2TP客户或L2TP服务器将进行L2TP的分离处理,过程如下:a、处理并剥去数据链路层报头和报尾;b、处理并剥去IPheader;c、使用IPSecESPAuthtrailer认证IP载荷和IPSecESP报头;d、使用IPSecESPheader解密数据包的加密部分;e、处理UDPheader并将L2TP数据包发给L2TP;f、L2TP使用L2TPheader中的TunnelID和CallID确定特定的L2TP遂道;h、使用PPPheader确定PPP载荷,并将它转发给适当的协议驱动器进行处理。10、定义StopCCN消息的属性代码是:0-保留的1-普通请求到清除控制连接2-普通error--Error代码指出问题3-控制频道已经存在4-请求是不认可的到建立控制频道5-的协议版本请求是不支持错误代码指出高度版本支持6-请求是存在关闭7-有限的情形机器错误定义CDN消息的属性代码是:0-保留的1-喊声分离的由于运送者的损失2-喊声分离的为了理由指出错误地代码3-喊声分离的为了管理的理由4-喊声失败由于适当的容易的缺乏存在可用到的(暂时的条件)5-喊声失败由于适当的容易存在的缺乏可用到的(永久的条件)6-病人目的地7-喊声失败由于没有载波检测8-喊声失败由于忙信号的察觉9-喊声失败由于刻度盘音调的缺乏10-喊声是不既定的内部时间分配在许多11-喊声是连接但是没有适当的结构是检测currentlydefinedGeneralErrorcodesandtheirmeaningsare:它的普通错误代码occurred,普通错误的作用是检查到确定是什么错误.0-没有普通错误1-没有控制连接存在仍为了这许多-LNS一对2-长度是错误的3-原野价值的一个是在射程外或保留的原野是非-零点4-不足的资源到句柄这操作现在5-会话ID是病人在这上下文6-属的卖主-特效药错误occurred在许多7-尝试另外的.如果许多是其他的可能的的注意到LNS目的地,它应该他们的尝试一个.这能是使用到领路人许多立基于在LNS政策,例如,的存在multilinkPPP捆.8-会话或隧道是关由于未知的的收据AVP有M-小块设置(看部分4.2).错误消息应该包含厌恶的的属性AVP在