具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
本发明实施例提供的方法包括了图3所示的流程:
参见图3,图3为本发明实施例提供的方法流程图。如图3所示,该流程可包括以下步骤:
步骤301,LAC和LNS之间建立L2TP隧道。
本发明中,LAC和LNS之间可通过LAC-Auto-Initiated的模式建立L2TP隧道。
步骤302,LAC在本地路由表中查找到达L2TP隧道的目的IP地址的路由。
本发明中,LAC学习路由的方式与现有技术中的路由学习方式类似,这里不再赘述。
本步骤302中,L2TP隧道的目的IP地址具体为LAC所连接的LNS的IP地址。
另外,优选地,以下为便于和后续的L2TP子隧道区分,可将本步骤302中的L2TP隧道称为L2TP主隧道。
步骤303,LAC利用查找到的路由的数量,与LNS建立隶属于所述L2TP主隧道的L2TP子隧道。
本步骤303中,LAC与LNS建立L2TP子隧道的方式可与现有按照LAC-Auto-Initiated模式建立L2TP隧道的方式类似,只不过需要说明的是,在LAC与LNS建立L2TP子隧道的过程中,LAC向LNS发送的L2TP报文的报文头(简称L2TP报文头)携带了该建立的L2TP子隧道的标识(ID)和所述L2TP主隧道的标识,用于告知LNS当前建立的L2TP子隧道为哪一个子隧道,以及当前建立的L2TP子隧道隶属的L2TP主隧道,以便LNS后续根据该告知的结果进行L2TP报文的过滤。
参见图4,图4示出了上述L2TP报文头的格式。图4示出的L2TP报文头格式相比于现有L2TP报文头格式,只有隧道标识字段发生了改变,而其他字段没有发生改变,因此,这里重点描述隧道标识字段。在图4中,隧道标识字段的前12位(bit)用于填写L2TP主隧道标识,剩余的4bit用于填写L2TP子隧道标识。
这里,基于隧道标识字段中仅利用4bit填写L2TP子隧道的标识,则可以限定上述建立的L2TP子隧道的最大数目不能超过15。需要说明的是,上述图4中隧道标识字段利用4bit填写L2TP子隧道只是一种举例,并非限定本发明,其可根据实际需求进行扩展,但是,不管是否需要扩展该填写L2TP子隧道的字段,由于字段的限制,会使得LAC与LNS之间建立的隶属于所述L2TP主隧道的L2TP子隧道都存在一个最大数目P。
基于此,上述LAC利用查找到的路由的数量,与LNS建立隶属于所述L2TP主隧道的L2TP子隧道包括:
LAC在查找到的路由为两条以上等价路由时,比较该等价路由的数目N与允许本LAC与LNS之间建立的隶属于所述L2TP主隧道的L2TP子隧道的最大数目P,如果前者小于等于后者,则与LNS建立N条隶属于所述L2TP主隧道的L2TP子隧道,如果前者大于后者,则仅与LNS建立P条隶属于所述L2TP主隧道的L2TP子隧道;比如,假如P取值为15,则本发明中,在查找到的等价路由数目N小于等于15时,LAC与LNS之间建立的N条L2TP子隧道,而在查找到的等价路由数目N大于15时,LAC与LNS之间最多仅建立15条L2TP子隧道;
LAC在查找到的路由为一条路由时,与LNS建立预设值M条L2TP子隧道。优选地,本发明中,M大于等于2,但小于LAC与LNS之间建立的隶属于所述L2TP主隧道的L2TP子隧道的最大数目P比如15。作为本发明实施例的一个扩展,如果LAC查找到的路由仅为一条路由,则可结束本发明流程。
步骤304,LAC为建立的各个L2TP子隧道分配隧道源IP地址和目的IP地址。
本发明中,不同的L2TP子隧道分配不同的隧道源IP地址,但,隧道目的IP地址可以相同,也可以不同,下面通过以下两种方式对隧道目的IP地址相同和不同两种情况下如何实现步骤304进行具体描述:
第一种方式:
本方式要求每一L2TP子隧道的目的IP地址与所述L2TP主隧道的目的IP地址相同,基于此,LAC可直接将L2TP主隧道的目的IP地址分配给每一L2TP子隧道,作为每一L2TP子隧道的目的IP地址;至于L2TP子隧道的隧道源IP地址,本方式下,所述LAC可根据所述L2TP主隧道的源IP地址为每一L2TP子隧道分配源IP地址,具体为:假设L2TP主隧道源IP地址为:*.*.*.a,则L2TP子隧道的源IP地址通过以下算法得到:
L2TP子隧道的源IP地址=*.*.*.|a-128|+X;
其中,X为可变地址,其用于保证在情况1下不同L2TP子隧道的源IP地址不同,比如,在计算第一个L2TP子隧道的源IP地址时,X取值为0.0.0.1;而在计算第二个L2TP子隧道的源IP地址时,X取值与之前的任一取值均不同,比如为0.0.1.0,依次类推,直至得到所有L2TP子隧道的源IP地址。
至此,完成了第一种方式下LAC为建立的各个L2TP子隧道分配不同的隧道源IP地址和目的IP地址的操作。
第二种方式:
本方式下,要求每一L2TP子隧道的目的IP地址均与所述的L2TP主隧道的目的IP地址不同,基于此,本方式下,针对每一L2TP子隧道,LAC通过本LAC与LNS之间已建立的任一L2TP Session动态从LNS上的IP地址池(IP pool)中获取两个空闲的IP地址,并分配给该L2TP子隧道,分别作为隧道源IP地址和目的IP地址。这里,空闲的IP地址为未被任一L2TP主隧道或子隧道占用的IP地址。
至此,完成了第二种方式下LAC为建立的各个L2TP子隧道分配隧道源IP地址和目的IP地址的操作。
需要说明的是,在上述两种方式下,为了保证LAC为每一L2TP子隧道分配的隧道源IP地址和目的IP地址的可用性,LAC可将为每一L2TP子隧道分配的隧道源IP地址和目的IP地址携带在免费地址解析协议(ARP)报文中发布,以验证为每一L2TP子隧道分配的隧道源IP地址和目的IP地址的可用性,具体验证方式可与现有验证免费ARP的方式类似,不再赘述。
步骤305,在终端的触发下,LAC与LNS之间建立L2TP Session时,LAC依次将本LAC与LNS之间的L2TPSession分别复用在已建立的L2TP子隧道,并记录每一L2TP Session与其复用的L2TP子隧道之间的对应关系。
本发明中,终端的触发可为PPP连接请求。
另外,本步骤305中,LAC依次将本LAC与LNS之间的L2TPSession分别复用在已建立的L2TP子隧道具体可为:
步骤1,为已建立的L2TP子隧道分配序号,比如,已建立的L2TP子隧道的数目为N,为该N条L2TP子隧道分配的序号依次为0至N-1;
步骤2,LAC针对本LAC与LNS之间待建立的每一L2TP Session,将本LAC与LNS之间已建立的L2TP Session的数目与1相加得到一运算结果,将该待建立的L2TP Session复用在序号与所述运算结果与N相除得到的余数对应的L2TP子隧道。
具体地,步骤2可通过以下算法实现:
Sub Tunnel ID=sum{L2TP Session}%sum{subTunnel};
其中,Sub Tunnel ID表示当前待建立的L2TP Session所复用的L2TP子隧道的序号;sum{L2TP Session}表示LAC与LNS之间已建立的L2TP Session的数目与1相加得到的运算结果,sum{subTunnel}表示LAC与LNS之间已建立的L2TP子隧道的数目比如为N。
比如,LAC针对与LNS之间待建立的第一个L2TP Session,sum{L2TPSession}=1,基于此,按照上述算法则可以得到,Sub Tunnel ID=1,这表示LAC会将该待建立的第一个L2TP Session复用在第一个L2TP子隧道的L2TP子隧道上,依次类推,能够实现LAC与LNS之间的所有L2TP Session并非集中复用在同一L2TP隧道,而是分散在不同的L2TP隧道。
需要说明的是,上述依次将LAC与LNS之间建立的L2TP Session复用在已建立的L2TP子隧道的具体实现方式只是一种实施例,并非限定本发明,其也可以采用其他方式将LAC与LNS之间的L2TP Session复用在L2TP子隧道,比如,针对LAC与LNS之间待建立的每一L2TP Session,将该L2TPSession复用在以下任一L2TP子隧道上:与已建立的上一个L2TP Session所复用的L2TP子隧道不同的任一L2TP子隧道。
在LAC确定将本LAC与LNS之间待建立的L2TP Session比如L2TPSesion1复用在哪一L2TP子隧道后,LAC可告知给LNS,其中,该告知可由LAC在上述L2TP Session1的建立过程中通过用于建立L2TP Session1的L2TP报文(该L2TP报文采用图4所示的L2TP报文头格式)告知给LNS。
另外,本步骤305中,LAC可通过链表形式记录每一L2TP Session与其复用的L2TP子隧道之间的对应关系,具体如图5所示。在图5中,SessionID_Cx表示L2TP Session的会话标识,subTunnelID_1至subTunnelID_N表示L2TP子隧道。
至此,完成步骤305的描述。
步骤306,LAC接收到任一L2TP Session中的数据报文时,从记录的对应关系中确定该L2TP Session对应的L2TP子隧道,对该数据报文封装公网IP头并进行转发,所述公网IP头包含:该L2TP Session对应的L2TP子隧道的隧道源IP地址和目的IP地址。
本步骤306中,还进一步对数据报文封装UDP头,L2TP头等,只不过这些封装为现有技术,不再赘述。
优选地,本步骤306中,对报文进行转发具体实现时可为:利用封装的公网IP头并按照负载分担方式将封装后的数据报文分担至对应路由进行转发。其中,该利用封装的公网IP头并按照负载分担方式将封装后的数据报文分担至对应路由进行转发具体可为:对封装的公网IP头进行HASH运算,根据HASH算法从上述查找到的N条等价路由中选择与该运算结果对应的路由,利用被选的路由转发封装了所述公网IP头的报文。
由于不同L2TP子隧道的隧道源IP地址不同,因此,可以得到不同L2TPSession的数据报文封装不同的公网IP头,进而也可以得到不同公网IP头进行HASH运算时得到的运算结果也就不同,因此,根据HASH算法就能实现不同L2TP Session中的数据报文会被负载分担到不同的路由上进行转发,从而有效避免了部分链路负载过重引起的拥塞,合理利用了链路带宽。
至此,完成图3所示流程。
从图3所示的流程可以看出,本发明能够在多L2TP Session的情况下,能够使得不同L2TP Session中的数据报文会被负载分担到不同的路由上进行转发,从而有效避免了部分链路负载过重引起的拥塞,合理利用了链路带宽,有效提高了链路利用率。
需要说明的是,本发明中,LAC到L2TP主隧道目的IP地址的等价路由数目可根据组网需求发生变化,其中,当等价路由数目减少时,可不执行任何操作,而当等价路由数目增加时,还需要在LAC与LNS之间增加L2TP子隧道,只是在增加L2TP子隧道时,需要保证LAC与LNS之间的L2TP子隧道不要超过最大数目P比如15,而如果LAC与LNS之间的L2TP子隧道已达到最大数目P比如15,则即使等价路由数目如何增加,LAC与LNS之间也不再建立新的L2TP子隧道。
还有,本发明中,如果LAC与LNS之间的L2TP主隧道断掉(down),则LAC或者LNS可在检测出L2TP主隧道down时,向对端发出拆除通知(StopCCN),该拆除通知可为采用了图4所示L2TP报文头格式的L2TP报文,但是,此时的L2TP报文头格式中隧道标识字段中用于填写L2TP子隧道标识的字段须全为0,以表示此时需要清除隶属于该down的L2TP主隧道的所有L2TP子隧道。
以上对本发明提供的方法进行了分析,下面对本发明提供的网络接入装置进行描述:
参见图6,图6为本发明实施例提供的网络接入装置结构图。本发明中,所述网络接入装置应用于L2TP中的LAC,如图6所示,所述网络接入装置包括:
L2TP子隧道处理单元,用于根据到L2TP主隧道的目的IP地址的路由数量,与LNS建立隶属于所述L2TP主隧道的L2TP子隧道;
分配单元,用于为所述L2TP子隧道处理单元建立的各个L2TP子隧道分配隧道源IP地址和目的IP地址,其中,不同的L2TP子隧道分配不同的隧道源IP地址;
L2TP会话处理单元,用于在终端的触发下与LNS之间建立L2TP会话Session时,依次将自身LAC与LNS之间的L2TP Session分别复用在已建立的L2TP子隧道,并记录每一L2TP Session与其复用的L2TP子隧道之间的对应关系;
报文转发单元,用于接收到任一L2TP Session中的数据报文时,从所述L2TP会话处理单元记录的对应关系中确定该L2TP Session对应的L2TP子隧道,对该数据报文封装公网IP头并进行转发,封装的公网IP头包含该L2TP Session对应的L2TP子隧道的隧道源IP地址和目的IP地址。
本发明中,所述L2TP子隧道处理单根据到L2TP主隧道的目的IP地址的路由数量,与LNS建立隶属于所述L2TP主隧道的L2TP子隧道包括:
在到L2TP主隧道的目的IP地址的路由为两条以上等价路由时,比较该等价路由的数目N与允许自身LAC与LNS之间建立的隶属于所述L2TP主隧道的L2TP子隧道的最大数目P,如果前者小于等于后者,则与LNS建立N条隶属于所述L2TP主隧道的L2TP子隧道,如果前者大于后者,则仅与LNS建立P条隶属于所述L2TP主隧道的L2TP子隧道;
在到L2TP主隧道的目的IP地址的路由为一条路由时,与LNS建立预设值M条L2TP子隧道,M大于等于2,且小于P。
本发明中,所述分配单元通过以下步骤为各个L2TP子隧道分配隧道源IP地址和目的IP地址:
如果每一L2TP子隧道的目的IP地址与所述L2TP主隧道的目的IP地址相同,则直接将L2TP主隧道的目的IP地址分配给每一L2TP子隧道,作为每一L2TP子隧道的目的IP地址,并按照以下算法得到每一L2TP子隧道的源IP地址:L2TP子隧道的源IP地址=*.*.*.|a-128|+X;其中,L2TP主隧道源IP地址为:*.*.*.a,X为可变地址,用于保证不同L2TP子隧道的源IP地址不同;
如果每一L2TP子隧道的目的IP地址均与所述的L2TP主隧道的目的IP地址不同,则针对每一L2TP子隧道,动态从LNS上的IP地址池中获取两个空闲的IP地址,并分配给该L2TP子隧道,分别作为隧道源IP地址和目的IP地址。
优选地,本发明中,所述L2TP子隧道处理单元进一步在到L2TP主隧道的目的IP地址的等价路由数目增加到大于已建立的隶属于所述L2TP主隧道的L2TP子隧道数目时,在不超过自身LAC与LNS之间允许建立的隶属于所述L2TP主隧道的L2TP子隧道最大数目P下,在自身LAC与LNS之间增加隶属于所述L2TP主隧道的L2TP子隧道。
本发明中,如图6所示,所述网络接入装置进一步包括:
控制单元,用于在检测出自身LAC与LNS之间的所述L2TP主隧道断掉时,向LNS发出拆除通知,以控制拆除隶属于所述L2TP主隧道的所有L2TP子隧道;或者,
接收LNS在检测出所述L2TP主隧道断掉时发出的拆除通知,并控制拆除隶属于所述L2TP主隧道的所有L2TP子隧道。
至此,完成图6所示的网络接入装置的结构描述。
由以上技术方案可以看出,本发明中,LAC根据到L2TP主隧道的目的IP地址的路由数量,与LNS建立隶属于所述L2TP主隧道的L2TP子隧道,为各个L2TP子隧道分配隧道源IP地址和目的IP地址,其中,不同的L2TP子隧道分配不同的隧道源IP地址,并依次将本LAC与LNS之间的L2TPSession复用在已建立的L2TP子隧道,如此,LAC接收到任一L2TP Session中的数据报文时,确定该L2TP Session所复用的L2TP子隧道,对该数据报文封装包含该L2TP Session所复用的L2TP子隧道的隧道源IP地址和目的IP地址的公网IP头并进行转发,由于不同L2TP子隧道的隧道源IP地址不同,因此,可以得到不同L2TP Session的数据报文封装不同的公网IP头,这应用在现有的链路负载分担机制中,按照HASH算法对数据报文的公网IP头进行HASH运算来选择链路时,会将不同L2TP Session的数据报文分担至不同链路上进行传输,从而有效避免了部分链路负载过重引起的拥塞,合理利用了链路带宽,有效提高了链路利用率。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。