具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明一实施例提供的端口汇聚TRUNK成员业务报文转发状态的检测方法流程图,本实施例以两台应用TRUNK技术实施对接的设备为例进行说明,其中一台为主设备,另一台为对端设备,各台设备中均包括数个端口汇聚成员(即设备中通过TRUNK技术绑定在一起的数个物理接口)。如图1所示,该方法包括:
步骤100,获取通过TRUNK对接的对端设备中的至少两个未开放端口;
本发明实施例可以通过向对端设备发送UDP报文,并根据对端设备返回的解析互联网控制消息协议(Internet Control Message Protocol;以下简称:ICMP)不可达报文来获得对对端设备中未开放端口,其中,ICMP协议是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息;这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。例如当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP报文。
由于当主设备的端口汇聚成员以对端设备中未开放端口为目的端口向对端设备发送UDP报文后,因目的端口为未开放端口,因此对端设备要返回对应的ICMP不可达报文,如果接收到对应返回的ICMP不可达报文,则说明该TRUNK链路正常。基于此,可以通过ICMP不可达报文进行TRUNK链路的探测。
具体的,为满足主设备数个端口汇聚成员同时探测的要求,需要获取对端设备中的至少两个未开放端口,本发明实施例以获取到5个未开放端口为例进行说明,当然并不局限于此。
步骤101,以所述至少两个未开放端口中的至少一个未开放端口作为目的端口,向所述对端设备发送UDP报文;
例如在主设备获取到对端设备所述的5个未开放端口后,要分别对主设备的每个TRUNK成员进行检测,当然对每个TRUNK成员的检测可以分别进行也可以同时进行。具体的,可以在获取到的5个未开放端口中选取一个或多个未开放端口作为目的端口,通过一个TRUNK成员向对端设备发送一个或多个UDP报文。
步骤102,当没有接收到所述对端设备返回的ICMP不可达报文时,将发送所述UDP报文的TRUNK成员的业务报文转发状态设置为不可转发状态。
若接收到对应返回的ICMP不可达报文,则可以说明该TRUNK成员的业务报文转发状态正常,可以保持该TRUNK成员的业务报文的转发状态设置为的可转发状态。若没有接收到对应返回的ICMP不可达报文,则可能是由于该TRUNK成员出现故障,因此本实施例中可以直接将发送UDP报文的该TRUNK成员的业务报文转发状态设置为不可转发状态,所述的不可转发状态具体指不能转发业务报文,但是可以继续发送探测报文即UDP报文。
本实施例提供的端口汇聚TRUNK成员业务报文转发状态的检测方法,通过向对端设备没有开放的UDP端口发送UDP报文,同时检测回应的ICMP不可达报文来实现TRUNK的链路检测,能够探测到设备出现的TRUNK链路异常。本实施例方法适用于所有使用TRUNK功能的设备,不依赖对端设备的功能特性上的支持,只需要对端设备在支持标准的TCP/IP协议栈即可,适用范围比较广。
在上述实施例中,获取通过TRUNK对接的对端设备中的至少两个未开放端口的方式可以有多种,例如通过对端设备主动上报给主设备的方式获取等。本实施例还可以通过发送UDP报文的方式探测,即通过向对端设备发送以被探测端口为目的端口的UDP报文,若收到对端设备返回的相应的ICMP不可达报文,则将被探测端口作为未开放端口。
该种探测方式具体可以包括:主设备的各TRUNK成员向对端设备中对应的TRUNK成员发送数个UDP报文,所述的UDP报文的源端口为该主设备的源端口、目的端口为对端设备的同一探测端口。也就是说,主设备中的所有TRUNK成员一起向对端设备发送相同的UDP报文,该UDP报文的源端口选用该主设备的源端口、目的端口选用对端设备中相同的一个UDP端口作为探测端口。主设备以这样的方式通过所有的TRUNK成员发送数个相同的UDP报文。
若接收到对端设备中对应的TRUNK成员返回的、数量相同的ICMP不可达报文,则将探测端口记录为对端设备中的未开放端口。具体地,若主设备中各TRUNK成员均接收到对端设备中对应的TRUNK成员返回的ICMP不可达报文,则可以说明之前发送的UDP报文中作为目的端口的探测端口属于未开放端口,此时主设备可以记录下该未开放端口,并继续更新探测端口,按照相同的方式获取其他的未开放端口。本实施例中选择探测端口可以离散地进行选取。
获取到至少两个未开放端口后,对主设备中每个TRUNK成员进行故障探测是单独进行的,具体地,主设备的一TRUNK成员向对端设备中对应的TRUNK成员发送UDP报文,所述的UDP报文的源端口为主设备的源端口与主设备中该TRUNK成员的标识号之和,目的端口为至少两个未开放端口之一。若未接收到ICMP不可达报文,在另一种情况下,还可以暂时不将TRUNK成员的业务报文转发状态设置为不可转发状态,而是继续根据至少两个未开放端口中其它的未开放端口,继续进行探测以进一步进行判断,以下实施例将针对这种情况中的其中两种处理方式进行详细介绍。
图2为本发明另一实施例提供的端口汇聚TRUNK成员业务报文转发状态的检测方法流程图,如图2所示,包括:
步骤200,获取通过TRUNK对接的对端设备中的至少两个未开放端口;
步骤201,以所述至少两个未开放端口中的至少一个未开放端口作为目的端口,向所述对端设备发送UDP报文;
步骤202,当没有接收到对端设备返回的ICMP不可达报文时,则以所述至少两个未开放端口中其他探测成功的未开放端口为目的端口向对端设备发送UDP报文;
步骤203,若仍然没有接收到ICMP不可达报文,则将发送UDP报文的TRUNK成员的业务报文转发状态设置为不可转发状态。
具体地该种情况是,在主设备中各个TRUNK成员进行单独探测的时候,当没有接收到对端设备返回的ICMP不可达报文时,可以继续以至少两个未开放端口中其他探测成功的未开放端口为目的端口向对端设备发送UDP报文,若仍然没有接收到ICMP不可达报文,则将发送UDP报文的TRUNK成员的业务报文转发状态设置为不可转发状态。所述的探测成功的未开放端口是指能够通过主设备的其他TRUNK成员采用发送UDP报文、并接收到ICMP不可达报文的探测方式探测到的未开放端口。
具体地,例如主设备中的1号TRUNK成员以对端设备的5个未开放端口中的1号未开放端口为目的端口发送UDP报文后,未接收到ICMP不可达报文;但主设备中的2号TRUNK成员以5个未开放端口中的2号未开放端口为目的端口发送UDP报文后,接收到了ICMP不可达报文,说明2号未开放端口探测成功。则1号TRUNK成员可重新以2号未开放端口为目的端口继续发送UDP报文,由于2号未开放端口已经探测成功,则1号TRUNK成员发送完该UDP报文后,若仍就没有接收到ICMP不可达报文,则可以说明主设备的1号TRUNK成员出现故障,可以将其业务报文转发状态设置为不可转发状态。若主设备的1号TRUNK成员发送完该UDP报文后,接收到了ICMP不可达报文,则可以说明主设备的1号TRUNK成员没有出现故障,可以将其业务报文转发状态设置为可转发状态。
图3为本发明又一实施例提供的端口汇聚TRUNK成员业务报文转发状态的检测方法流程图,如图3所示,包括:
步骤300,获取通过TRUNK对接的对端设备中的至少两个未开放端口;
步骤301,以所述至少两个未开放端口中的至少一个未开放端口作为目的端口,向所述对端设备发送UDP报文;
步骤302,当没有接收到对端设备返回的ICMP不可达报文时,则以所述至少两个未开放端口中剩余的未开放端口为目的端口,向对端设备发送UDP报文;
步骤303,若仍然没有接收到ICMP不可达报文,则将发送UDP报文的TRUNK成员的业务报文转发状态设置为不可转发状态。
具体地该种情况是,在主设备中各个TRUNK成员进行单独探测的时候,当没有接收到对端设备返回的ICMP不可达报文时,可继续以至少两个未开放端口中剩余的未开放端口为目的端口,向对端设备发送UDP报文,若仍然没有接收到ICMP不可达报文,则将发送UDP报文的TRUNK成员业务报文转发状态设置为不可转发状态。
具体地,例如主设备中的1号TRUNK成员以5个未开放端口中的1号未开放端口为目的端口发送UDP报文后,未接收到ICMP不可达报文;而且主设备的其他所有的TRUNK成员同样也没有接收到ICMP不可达报文,此时,该主设备中的1号TRUNK成员要分别以5个未开放端口中除了1号未开放端口外的其他4个未开放端口为目的端口,发送4个UDP报文。若仍就没有接收到ICMP不可达报文,则可以说明主设备中的1号TRUNK成员出现故障,应该将其业务报文转发状态设置为不可转发状态。若主设备中的1号TRUNK成员发送完该UDP报文后,接收到了至少一个ICMP不可达报文,则可以说明主设备中的1号TRUNK成员没有出现故障,可以保持其业务报文转发状态为可转发状态。
在上述各情况中,主设备中的TRUNK成员向对端设备发送UDP报文的时候,可以是连续发送数个。具体地,先启动定时器,然后主设备的TRUNK成员连续向对端设备中对应的TRUNK成员发送数个UDP报文。
当然,主设备中的某个TRUNK成员业务报文转发状态被设置为不可转发状态后,若在后续的探测过程中,在向对端设备发送UDP报文后,接收到对应返回的ICMP不可达报文,则说明该TRUNK成员的故障排除了,可以将主设备中该TRUNK成员的业务报文转发状态设置为可转发状态。
以下结合一个具体的例子介绍本发明实施例提供的方法。在主设备的所有TRUNK成员上向对端设备发送UDP报文,该UDP报文的源端口是主设备的源端口例如为“65000”、目的端口采用较大的端口例如“50000”;如果收到对端设备回应的ICMP不可到报文,说明对端端口没有开放,记录此端口;如果一段时间没有收到对端设备回应的ICMP不可达报文,说明此端口已经开放,此时要修改目的端口,直到找到未开放端口为止,此时可以记录5个离散的未开放端口。
找到对端设备的未开放端口之后,启动定时器,连续向对端设备发送UDP报文,目的端口为对端设备未开放端口,源端口为“65000”加上该TRUNK成员的ID号,并通过此定时器接收回应的ICMP不可达报文。在一段时间内,如果连续没有收到和此未开放端口相对应的ICMP不可达报文,说明此未开放端口发送的报文对端设备没有正常处理,该链路可能出现故障,此时,在一种情况下,可以将该TRUNK成员的业务报文转发状态设置为不可转发状态。在另一种情况下,还可以在其他的TRUNK成员中取一个探测成功的未开放端口,然后定时向这个端口发送多个UDP报文;如果还是没有收到ICMP不可达报文,说明此链路故障,把此TRUNK成员的业务转发状态设置为不可转发状态,即不能转发业务报文,但是可以继续发送探测报文。
如果其余4个未开放端口均未被探测成功,则可以继续以其余的4个未开放端口为目的端口向对端设备发送UDP报文,如果没有收到对端设备返回的相应的ICMP不可达报文,则将此TRUNK成员的业务转发状态设置为不可转发状态。
上述过程中,如果能收到其中某一个未开放端口回应的ICMP不可达报文,则说明TRUNK成员的业务转发状态正常,此时需要继续探测其他未开放端口,使得获取到的未开放端口数量保持在预定数量例如5个。
为了排除实际应用过程中的某些干扰因素,提高探测的质量,保证探测到的TRUNK成员确实可以真正实现业务报文的转发,在实际探测过程中,可以在当某个TRUNK成员连续接收到对端设备返回的预设数量的ICMP不可达报文后将该TRUNK成员的业务报文转发状态设置为可转发状态。
进一步的,若某个TRUNK成员在前一次探测过程中其业务转发状态被设置为不可转发状态,在后续发送探测报文后又收到了对端设备回应的ICMP不可达报文,由此ICMP不可达报文获知与该ICMP不可达报文对应的TRUNK成员业务报文转发状态处于不可转发状态,则可以调整此TRUNK成员的业务转发状态为可转发状态。具体的,主设备可以记录其发送的UDP报文,若该UDP报文没有回应的ICMP不可达报文,则主设备可以通过UDP报文获知是通过哪个TRUNK成员,便可以对该TRUNK成员进行状态设置。
进一步的,为了提高探测的准确性,在将TRUNK成员的业务报文转发状态由不可转发状态转换为可转发状态时,可以预先设定转换条件,当满足该转换条件时才能从不可转发状态转换为可转发状态,该转换条件可以时设定的接收到的ICMP不可达报文的个数。例如,若以5个未开放端口为例,可以预先设定主设备的一个TRUNK成员的业务报文转发状态由可转发状态转变成不可转发状态的条件,该条件可以是需要探测的未开放端口数量。例如可以设定需要探测5个未开放端口中的2个未开放端口,若均收到对应返回的ICMP不可达报文,才将该TRUNK成员的业务报文转发状态设置为可转发状态。同样的,将TRUNK成员的业务报文转发状态由不可转发状态变为可转发状态,也可以设定相应的转换条件,例如可以设定需要连续收到3个ICMP不可达的报文才将该TRUNK成员的业务报文转发状态由不可转发状态变为可转发状态。当然也可以根据实际需要在接收到一个ICMP不可达的报文便将其设置为可转发状态。上述转换条件可以根据实际需要具体设置,在此并不作限制。
本发明实施例提供的端口汇聚TRUNK成员业务报文转发状态的检测方法,通过向对端设备没有开放的UDP端口发送UDP报文,同时检测回应的ICMP不可达报文来实现TRUNK的链路检测,能够在设备不支持LACP协议的情况下实现对TRUNK的链路状态的检测,保证链路异常下的业务正常;适用于所有使用TRUNK功能的设备,适用范围比较广。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图4为本发明实施例提供的主设备结构示意图,如图4所示,该主设备包括能够通过TRUNK与对端设备对接的数个TRUNK成员即物理接口(图中未示出),还包括获取模块11、第一处理模块12和第二处理模块13,其中:
获取模块11,用于获取通过TRUNK对接的对端设备中的至少两个未开放端口;
第一处理模块12,用于以至少两个未开放端口中的至少一个未开放端口作为目的端口,向对端设备发送用户数据报协议UDP报文;
第二处理模块13,用于当没有接收到对端设备返回的互联网控制消息协议ICMP不可达报文时,将发送UDP报文的TRUNK成员业务报文转发状态设置为不可转发状态。
具体地,由于本实施例是要应用ICMP不可达报文来探测TRUNK链路是否正常,因此主设备首先要通过获取模块11获取对端设备中至少两个未开放端口。在获取模块11获取到对端设备至少两个未开放端口后,要通过第一处理模块12在获取到的至少两个未开放端口中选取一个或多个作为目的端口,通过一个TRUNK成员向对端设备发送一个或多个UDP报文。若接收到对应返回的ICMP不可达报文,则可以说明该TRUNK成员的业务报文转发状态正常,可以保持该TRUNK成员的业务报文转发状态设置为可转发状态。若没有接收到对应返回的ICMP不可达报文,则可能是由于该TRUNK成员出现故障,因此本实施例中可以通过第二处理模块13直接将发送UDP报文的该TRUNK成员的业务报文转发状态设置为不可转发状态,所述的不可转发状态具体指不能转发业务报文,但是可以继续发送探测报文即UDP报文。
本实施例提供的主设备,通过向对端设备没有开放的UDP端口发送UDP报文,同时检测回应的ICMP不可达报文来实现TRUNK的链路检测,能够探测到设备出现的TRUNK链路异常。本实施例方法适用于所有使用TRUNK功能的设备,不依赖对端设备的功能特性上的支持,只需要对端设备在支持标准的TCP/IP协议栈即可,适用范围比较广。
图5为本发明实施例提供的主设备结构示意图,如图5所示,该主设备包括能够通过TRUNK与对端设备对接的数个TRUNK成员即物理接口(图中未示出),还包括获取模块11、第一处理模块12和第二处理模块13。在上述实施例的基础上,进一步地,第二处理模块13包括第一处理子模块131和/或第二处理子模块132,其中:
第一处理子模块131,用于当没有接收到对端设备返回的ICMP不可达报文时,以至少两个未开放端口中剩余的未开放端口为目的端口,向对端设备发送UDP报文,若仍然没有接收到ICMP不可达报文,则将发送UDP报文的TRUNK成员业务报文转发状态设置为不可转发状态;
第二处理子模块132,用于当没有接收到对端设备返回的ICMP不可达报文时,以至少两个未开放端口中其他探测成功的未开放端口为目的端口向对端设备发送UDP报文,若仍然没有接收到ICMP不可达报文,则将发送UDP报文的TRUNK成员业务报文转发状态设置为不可转发状态。
进一步的,本实施例中主设备中还可以包括:
第三处理模块14,用于若处于不可转发状态的TRUNK成员在向对端设备发送UDP报文后,接收到对端设备返回的ICMP不可达报文,则将TRUNK成员业务报文转发状态设置为可转发状态。
本发明实施例提供的主设备可以应用上述方法实施例提供的方法进行TRUNK成员的故障探测,具有实施可参见上述方法实施例,此处不再赘述。
本发明实施例提供的主设备,通过向对端设备没有开放的UDP端口发送UDP报文,同时检测回应的ICMP不可达报文来实现TRUNK的链路检测,能够在设备不支持LACP协议的情况下实现对TRUNK的链路状态的检测,保证链路异常下的业务正常;适用于所有使用TRUNK功能的设备,适用范围比较广。
本发明实施例还提供一种网络系统,包括主设备和对端设备,其中主设备与对端设备通过TRUNK对接。本网络系统中包括的主设备可以采用上述各装置实施例提供的主设备,其具体功能和结构可以详见上述实施例,此处不再赘述。本实施例提供的网络系统,主设备通过向对端设备没有开放的UDP端口发送UDP报文,同时检测回应的ICMP不可达报文来实现TRUNK的链路检测,能解决设备在TRUNK链路发生异常的时候,能够探测到此异常并保证业务正常。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。