您好,欢迎访问三七文档
控制通道(可靠)包传输网络(UDP,...)L2TP控制消息L2TP数据通道(不可靠)L2TP数据消息PPP帧图1-1描述了PPP帧和控制通道以及数据通道之间的关系:PPP帧在不可靠的L2TP数据通道内传输,控制消息在可靠的L2TP控制通道内传输。L2TP数据报文和控制报文全部以UDP报文形式发送。数据消息不重发,不能保证可靠性;控制消息使用流控和重发机制,能保证可靠传输。L2TP注册了UDP端口1701,这个端口号仅用于初始隧道建立过程。L2TP隧道发起方任选一个空闲端口(未必是1701)向接收方的1701端口发送报文;接收方收到报文后,也任选一个空闲端口(未必是1701),给发送方的指定端口回送报文。至此,双方的端口选定,并在隧道连通的时间内不再改变。二.L2TP报文头L2TP的控制消息和数据消息使用相同的报文头。图1-2L2TP报文头格式TLxxSxOPxxxxVerLength(opt)TunnelIDSessionIDNs(opt)Nr(opt)offsetsize(opt)offsetpadding(opt)07121631L2TP报文头中标记为可选(opt)的字段,是指在数据消息中可选,在控制消息中则是必选的。表1-1L2TP报文头字段描述字段名含义取值要求T类型(Type),取值为“0”时表示数据消息,取值为“1”时表示控制消息-L长度在位标志,取值为“1”时表示报文头中存在长度字段Length控制消息中必须为“1”x保留位-顺序字段在位标志,取值为“1”时表示报文头中存在Ns和Nr字段控制消息中必须为“1”O取值为“1”时表示报文头中存在offsetsize字段控制消息中必须为“0”P优先级(Priority),只用于数据消息控制消息中必须为“0”Ver版本号对于L2TPv2协议取值为“2”Length消息的总长度,单位为字节-TunnelID隧道标识符,只具有本地意义Hello控制消息具有全局性,其TunnelID必须为0。SessionID会话标识符,只具有本地意义-Ns当前消息的顺序号-Nr希望接收的下一条控制消息的顺序号数据消息中是保留字段offsetsize偏移值,指示载荷数据开始的位置-offsetpadding填充位-L2TP报文头中包含隧道标识符(TunnelID)和会话标识符(SessionID)信息,隧道标识符与会话标识符由对端分配,用来标识不同的隧道和会话。隧道标识相同、会话标识不同的报文将被复用在一条隧道上。三.L2TP数据报文结构用户PPP报文(已携带源IP报文头及PPP报文头)在公共网络上以IP报文形式传输时携带以下协议头:1个L2TP报文头(16字节)1个UDP报文头(8字节)1个新IP报文头(20字节),指示L2TP隧道的源地址和目的地址L2TP数据报文的格式如图1-3。图1-3L2TP数据报文的格式新IP头UDP头L2TP头PPP头原IP头Data20字节8字节16字节2字节20字节报文后,进行如下封装:首先为其封装L2TP报文头;接着封装UDP报文头然后封装新的IP头,并从连接公共网络的接口发送出去。L2TP协议本身没有数据分片功能,但是在进行IP封装时,可以在需要时进行分片。为保证报文不分片,封装后的报文大小不能超过实际接口的MTU。LNS从连接公共网络的接口收到该报文后,进行如下处理:去掉IP头和UDP头,将报文送往L2TP协议模块;L2TP协议剥离L2TP协议头和PPP头,将该报文还原为用户IP报文,并发送到私网内部服务器。四.控制连接和会话连接的建立过程消息报文在VRP的实现中,控制连接和会话连接的建立过程中涉及的消息包括:1.SCCRQ(Start-Control-Connection-Request):用来向对端请求建立控制连接。2.SCCRP(Start-Control-Connection-Reply):用来告诉对端,本端收到了对端的ACCRQ消息,允许建立控制连接。3.SCCCN(Start-Control-Connection-Connected):用来告诉对端,本端收到了对端的SCCRP消息,本端已完成隧道的建立。4.StopCCN(Stop-Control-Connection-Notification):用来通知对端拆除控制连接,本端已清除所有会话连接,将关闭隧道接口。StopCCN中携带了发送端控制连接拆除原因。5.ICRQ(Incoming-Call-Request):只有LAC才会发送;每当检测到用户的呼叫请求,LAC就发送ICRQ消息给LNS,请求建立会话连接。ICRQ中携带会话参数。6.ICRP(Incoming-Call-Reply):只有LNS才会发送;收到LAC的ICRQ,LNS就使用ICRP回复,表示允许建立会话连接。7.ICCN(Incoming-Call-Connected):只有LAC才会发送;LAC收到LNS的ICRP,就使用ICCN回复,表示LAC已回复用户的呼叫,通知LNS建立会话连接。8.CDN(Call-Disconnect-Notify):用来通知对端拆除会话连接,并告知对端拆除的原因。9.Hello:用来检测隧道的连通性。10.ZLB(Zero-LengthBody):如果本端的队列没有要发送的消息时,发送ZLB给对端。在会话连接和控制连接的拆除过程中,发送ZLB还表示收到StopCCN或CDN。ZLB只有L2TP头,没有负载部分,因此而得名。控制连接的建立和拆除期间包含以下过程:1.控制连接的建立2.会话连接的建立3.控制连接的维持4.会话连接的拆除5.控制连接的拆除控制连接的建立控制连接的建立先于会话连接。只有控制连接建立起来了,会话连接才可能建立起来。L2TP的控制连接建立过程如图1-4。图1-4控制连接建立的三次握手LACLNSSCCRQSCCRPSCCCNZLBNomessageswaitinginqueue1.LAC和LNS之间路由相互可达后,LAC端设置相应AVP,向LNS端发出SCCRQ报文,请求建立控制连接。2.LNS收到来自LAC的SCCRQ。根据其中的AVP,如果同意建立隧道,便发送SCCRP报文给LAC。3.LAC对接收到的SCCRP报文进行检查,从中取出隧道信息,并向LNS发送SCCCN报文,表示控制连接建立成功。4.当消息队列中没有消息时,LNS发送ZLB给对端。在VRP中,使用displayl2tptunnel命令可以查看本设备上成功建立了哪些控制连接。会话连接的建立控制连接成功建立之后,一旦检测到用户呼叫,就请求建立会话连接。与控制连接不同的是,会话连接的建立具有方向性。在VRP中,会话连接请求是由LAC发起的。会话连接建立过程如图1-5。触发。在VRP中,使用displayl2tpsession命令可以查看本设备上成功建立了哪些会话连接。控制连接的维持L2TP使用Hello报文检测隧道的连通性。LAC和LNS定时向对端发送Hello报文,若在一段时间内未收到Hello报文的应答,则重复发送Hello报文。如果重复发送报文的次数超过3次,则认为L2TP隧道已经断开,该PPP会话将被清除。此时需要重新建立隧道。VRP中Hello报文发送的时间间隔可以手工设置。缺省情况下,Hello报文每隔60秒发送一次。LNS和LAC侧可以设置不同的Hello报文时间间隔。会话连接的拆除会话连接拆除的发起端可以是LAC或LNS。发起端通过发送CDN消息报文到对端来通知对端拆除会话连接。对端收到后发送ZLBACK消息作为回应。图1-6是LAC侧发起会话连接拆除的过程。图1-6L2TP会话连接的拆除LACLNSCDNZLBACK控制连接的拆除控制连接拆除的发起端可以是LAC或LNS。发起端通过发送StopCCN消息报文到对端来通知对端拆除控制连接。对端收到后发送ZLBACK消息作为回应,同时在一定时间内保持控制连接以防止ZLBACK消息丢失。图1-7是LAC侧发起控制连接拆除的过程。五.隧道验证过程隧道验证是和建立隧道同时进行的,不是单独进行的。隧道验证过程如下:1.首先LAC向LNS发SCCRQ请求消息时,产生一个随机的字符串作为本端的CHAPChallenge(SCCRQ携带的字段)发给LNS。2.LNS收到SCCRQ后,利用SCCRQ携带的CHAPChallenge和本端配置的密码产生一个新的字符串,用MD5算出一个16个字节的Response;同时也产生一个随机的字符串(LNSChallenge),将Response和LNSChallenge放在SCCRP中一起发给LAC。3.LAC端收到SCCRP后,对LNS进行验证:−利用自己的CHAPChallenge、本端配置的密码、SCCRP,产生一个新的字符串;−用MD5算出一个16字节的字符串;−与LNS端发来的SCCRP中带的LNSCHAPResponse做比较,如果相同,则隧道验证通过,否则隧道验证不通过,断掉隧道连接。4.如果验证通过,LAC将自己的CHAPResponse放在SCCCN消息中发给LNS。5.LNS收到SCCCN消息后,也进行验证:−利用本端的CHAPChallenge、本端配置的密码、SCCCN,得到一个字符串;−然后用MD5算出一个16字节的字符串;−与SCCCN消息中得到的LACCHAPResponse做比较。如果相同,则验证通过,否则拆除隧道。六.L2TP隧道会话的建立过程L2TP的典型组网如图1-8所示:进行隧道验证的L2TP隧道呼叫建立流程如图1-9。图1-9L2TP隧道的呼叫建立流程LACRouterALNSRouterB(1)callsetup(2)PPPLCPsetup(3)PAPorCHAPauthentication(4)accessrequest(5)accessaccept(6)tunnelestablish(7)PAPorCHAPauthentication(challenge/response)(8)authenticationpasses(9)userCHAPresponse,PPPnegotiationparameter(10)accessrequest(11)accessaccept(12)CHAPauthenticationtwice(challenge/response)(13)accessrequest(14)accessaccept(15)authenticationpassesPCLACRADIUSServerLNSRADIUSServer1.用户端PC机发起呼叫连接请求;2.PC机和LAC端(RouterA)进行PPPLCP协商;3.LAC对PC机提供的用户信息进行PAP或CHAP认证;将认证信息(用户名、密码)发送给RADIUS服务器进行认证;5.RADIUS服务器认证该用户,如果认证通过则返回该用户对应的LNS地址等相关信息,并且LAC准备发起Tunnel连接请求;6.LAC端向指定LNS发起Tunnel连接请求;7.LAC端向指定LNS发送CHAPchallenge信息,LNS回送
本文标题:L2TP协议原理
链接地址:https://www.777doc.com/doc-2883368 .html