您好,欢迎访问三七文档
L2TP协议笔记---L2TP主要协议报文分析一、L2TP实现的两种方式名词解释:LAC(L2TPAccessConcentratorL2TP访问集中器)是附属在交换网络上的具有PPP端系统和L2TP协议处理能力的设备。LAC一般是一个网络接入服务器NAS,主要用于通过PSTN/ISDN网络为用户提供接入服务。LNS(L2TPNetworkServerL2TP网络服务器)是PPP端系统上用于处理L2TP协议服务器端部分的设备。VPDN(VirtualPrivateDialNetwork,虚拟私有拨号网)指利用公共网络(如ISDN和PSTN)的拨号功能及接入网来实现虚拟专用网。注:如下示例中使用的防火墙(Firewall,FW)既可以当做LAC也可以作为LNS使用。1、PC直接拨号到LNS,组网如图1所示图12、PC通过LAC拨号连接到LNS,组网如图2所示图2因为一般都使用用PC---LAC---LNS组网,且此种组网包含了PC---LNS的组网形态,故后续描述均已PC---LAC---LNS为例。LAC位于LNS和主机之间,用于在LNS和主机之间传递信息包,把从主机收到的信息包按照L2TP协议进行封装并送往LNS,将从LNS收到的信息包进行解封装并送往远端系统。LAC与主机之间可以采用本地连接或PPP链路,VPDN应用中通常为PPP链路。LNS作为L2TP隧道的另一侧端点,是LAC的对端设备,是被LAC进行隧道传输的PPP会话的逻辑终止端点。二、L2TP封装位置分析如下图3所示,从图中至上而下的分析,为PC的报文在PPP内网环境中发送到LAC,由LAC封装L2TP,再通过外网的报文正常转发给LNS的报文封装过程。注:设计的网络环境为PC---LAC为内网使用PPP协议,LAC---LNS为外网使用协议由服务供应商自定。图3三、理解L2TP几个重要的概念1、隧道和会话的概念在一个LNS和LAC对之间存在着两种类型的连接,一种是隧道(Tunnel)连接,一对LAC和LNS中可以有多个L2TP隧道;另一种是会话(Session)连接,它复用在隧道连接之上,用于表示承载在隧道连接中的每个PPP会话过程。隧道由一个控制连接和一个或多个会话(Session)组成。会话连接必须在隧道建立(包括身份保护、L2TP版本、帧类型、硬件传输类型等信息的交换)成功之后进行,每个会话连接对应于LAC和LNS之间的一个PPP数据流。控制消息和PPP数据报文都在隧道上传输。L2TP使用Hello报文来检测隧道的连通性。LAC和LNS定时向对端发送Hello报文,若在一段时间内未收到Hello报文的应答,该隧道连接将被断开。L2TP报文头中包含隧道标识符(TunnelID)和会话标识符(SessionID)信息,用来标识不同的隧道和会话。隧道标识相同、会话标识不同的报文将被复用在一个隧道上,报文头中的隧道标识符与会话标识符由对端分配。隧道(tunnel)和会话(session)的关系,如图4所示;可以形象的理解为会话是建立在隧道之中的,隧道想成一个有10个车道的高速公路,一台拨号PC的数据流为一个会话,相当于占用了一个车道(告诉公路有多少车道是设备规定好的),这个车道只能跑这个运载这个PC的报文的卡车。(比如某型号设备每条隧道最多支持1000个会话)。图42、控制消息和数据消息的概念L2TP中存在两种消息:控制消息和数据消息。控制消息:用于隧道和会话连接的建立、维护以及传输控制;控制消息的传输是可靠传输,并且支持对控制消息的流量控制和拥塞控制。数据消息:用于封装PPP帧并在隧道上传输;数据消息的传输是不可靠传输,若数据报文丢失,不予重传,不支持对数据消息的流量控制和拥塞控制。控制消息和数据消息共享相同的报文头。四、L2TP隧道的呼叫建立流程1、L2TP隧道的呼叫建立流程图5(1)用户端PC机发起呼叫连接请求;(2)PC机和LAC端进行PPPLCP协商;(3)LAC对PC机提供的用户信息进行PAP或CHAP认证;(4)LAC将认证信息(用户名、密码)发送给RADIUS服务器进行认证;(5)RADIUS服务器认证该用户,如果认证通过则返回该用户对应的LNS地址等相关信息,并且LAC准备发起Tunnel连接请求;(6)LAC端向指定LNS发起Tunnel连接请求;(7)LAC端向指定LNS发送CHAPchallenge信息,LNS回送该challenge响应消息CHAPresponse,并发送LNS侧的CHAPchallenge,LAC返回该challenge的响应消息CHAPresponse;(8)隧道验证通过;(9)LAC端将用户CHAPresponse、responseidentifier和PPP协商参数传送给LNS;(10)LNS将接入请求信息发送给RADIUS服务器进行认证;(11)RADIUS服务器认证该请求信息,如果认证通过则返回响应信息;(12)若用户在LNS侧配置强制本端CHAP认证,则LNS对用户进行认证,发送CHAPchallenge,用户侧回应CHAPresponse;(13)LNS再次将接入请求信息发送给RADIUS服务器进行认证;(14)RADIUS服务器认证该请求信息,如果认证通过则返回响应信息;(15)验证通过,用户访问企业内部资源。注:此节如下附加内容涉及到报文协商,前面没有介绍,可以先了解L2TP笔记2中关于报文格式与协商的相关内容,再回头深入分析此节,此节放在这里是为了便于对于整体协商过程进行深入分析。附加:2、针对流程中步骤7、步骤12的Challenge验证过程的分析(1)LAC向LNS发SCCRQ请求消息时,会产生一个随机的字符串做为本端CHAPChallenge发给LNS。(2)LNS收到这个Challenge后,再加上本端配置的密码及SCCRP产生一个新的字符串,用MD5算出一个16个字节的Response,在SCCRP消息中发给LAC。同时也产生一个随机的字符串(LNSChallenge)放在SCCRP中一起发给LAC。(3)LAC将自己的CHAPChallenge加上本端配置的密码,再加上SCCRP产生一个新字符串,用MD5算出一个16字节的字符串,并与LNS发来的SCCRP中带的LNSCHAPResponse比较,相同通过,不同断掉。(4)同理LNS也要验证LAC,LAC用在SCCRP中发现的LNSCHAPChallenge加上本端密码和SCCCN组合,再用MD5算出一个16字节的字符串做为LACCHAPResponse在SCCCN中发给LNS。(5)LNS用自己发的Challenge+本端密码+SCCCN用MD5算出一个16字节字符串,与收到的作比较,相同通过,不同断掉。附加:3、LAC代LNS与PC协商LCP(即认证代理)和用于认证的AVPS正常用户认证方式:当LAC检测到有用户拨入电话的时候,向LNS发送ICRQ,请求在已经建立的tunnel中开始session的建立,LAC可以一直等到接收到了LNS回应的ICRP后,表明session可以建立的时候再回答远端(拨号用户)的呼叫,这样LNS可获得足够的信息来决定是否回答这个远端的呼叫。LAC代LNS与PC协商LCP(即认证代理):LAC在接收到ICRP之前,自行先回答远端(拨号用户)的呼叫,代替LNS与其进行LCP协商和PPP认证,用获得的信息来决定选择哪个LNS(此处对应流程图中步骤5),这种情况下LAC对呼叫的指示和呼叫的回答只是哄骗性质的。在session可以建立时,LAC向LNS发送ICCN时会携带着先前与呼叫用户进行的LCP协商和PPP认证涉及的特性信息(此处对应流程图中步骤9),包含这些信息的AVP如下:①InitalReceivedLCPCONFREQ(ICCN\属性26):为LNS提供LAC从PPP对端(即拨号用户)接收到初始的conf-request。②LastSentLCPCONFREQ(ICCN\属性27):提供LAC发送到PPP对端最后的conf-request。③LastReceivedLCPCONFREQ(ICCN\属性28):提供LAC从PPP对端接收到的最后的conf-request。④ProxyAuthenType(ICCN\属性29):标识是否使用验证代理,验证的类型0---Reserved1---Textualusername/passwordexchange2---PPPCHAP3---PPPPAP4---NoAuthentication5---MicrosoftCHAPVersion1(MSCHAPv1)⑤ProxyAuthenName(ICCN\属性30):验证时客户端响应的名称。⑥ProxyAuthenChallenge(ICCN\属性31):LAC发送到PPP对端的Challenge。⑦ProxyAuthenID(ICCN\属性32):为LAC和PPP对端的验证定了一个ID。⑧ProxyAuthenResponse(ICCN\属性33):LAC从PPP对端接收到的PPPAuthenticationResponse。五、L2TP的Tunnel和Session建立过程①1(SCCRQ)Start-Control-Connection-Request控制链接发起请求,由LAC或LNS向对端发送,用来初始化LAC和LNS之间的tunnel,开始tunnel的建立过程。②2(SCCRP)Strat-Control-Connection-Reply表示接受了对端的连接请求,tunnel的建立过程可以继续。③3(SCCCN)Start-Control-Connection-Connected对SCRRP的回应,完成tunnel的建立。④ZLB零长度消息报文,一般为查询报文,LAC可以用Hello报文进行恢复,也可以直接丢弃。⑤10(ICRQ)Incoming-Call-Request当LAC检测到有用户拨入电话的时候,向LNS发ICRQ,请求在已建立的tunnel中建立session。⑥11(ICRP)Incoming-Call-Reply用来回应ICRQ,表示ICRQ成功,LNS也会在ICRP中标识L2TPsession必要的参数。⑦12(ICCN)Incoming-Call-Connected用来回应ICRP,L2TPsession建立完成。六、其它主要控制消息了解控制报文:0(reserved)1(SCCRQ)2(SCCRP)3(SCCCN)4(STOPCCN)Stop-Control-Connection-Notification由LAC或LNS发出,通知对端tunnel将要停止,控制链接将要关闭。另外,所有活动的会话都会悄悄的被清除,原因会显示在ResultCodeAVP中。5(reserved)6(HELLO)会话报文:8(OCRP)Outgoing-Call-Reply9(OCCN)Outgoing-Call-Connected10(ICRQ)11(ICRP)12(ICCN)13(reserved)14(CDN)Call-Disconnect-Notify由LAC或LNS发出,通知对端session将要停止。错误报告报文:15(WEN)WAN-Error-NotifyPPP链接控制报文:16(SLI)Set-Link-Info7(OCRQ)Outgoing-Call-RequestLNS发向LAC用来设置PPP协商的选项,这些选项在call的生存周期中可以随时变化,因此LAC有能力在活动的PPPsession上更新内部的呼叫信息和行为。七、L2TP报文头格式Type(T):标识消息的类型,0表示是数据消息,1表示控制消息。Length(L):置1时,说明Length域的值是存在的,对于控制消息L位必须置1。Xbit:保留位,所有保留位均置0。Sequence(S):置1时,说明Ns和Nr是存在的,对于控制消息S必须置1。Offset(O):置1时,说明OffsetSize域是存在的
本文标题:L2TP协议笔记
链接地址:https://www.777doc.com/doc-2880284 .html