一种优先级调度方法、装置和防火墙与流程

文档序号:16977878发布日期:2019-02-26 19:12阅读:149来源:国知局
一种优先级调度方法、装置和防火墙与流程

本申请涉及qos技术领域,特别涉及一种优先级调度方法、优先级调度装置和防火墙。



背景技术:

qos(qualityofservice,服务质量)是指当网络发生拥塞时,网络设备(例如防火墙)把数据包划分为不同的优先级,并按照优先级的不同分别提交给不同的优先级队列,之后通过队列调度算法,对不同数据包进行处理。

单级qos指的是根据数据包的各属性中的一个属性进行调度,如果要从多个属性对数据包进行综合的优先级调度,例如,对多个用户、多种业务、多种流量等进行统一管理和分层调度,就需要采用多级qos队列调度算法。

发明人在研究过程中发现,现有技术中的多级qos队列调度算法,由于要对数据包进行与维度的个数相同的多次区分调度,所以使得调度性能对比单级qos有所下降。



技术实现要素:

基于此,本申请提供了一种优先级调度方法,用以采用将多级qos映射为单级qos的方式以及按照单级qos的优先级来调度数据包,即将数据包一次性的插入其所属的数据流队列,这样就可以一次性实现对数据包的多级调度,并且保证了多级qos的性能。并且,在后续发送数据包的时候,也按照高优先级的数据包先发送的原则,以及同优先级之间的数据流队列发送相同个数的数据包的方式,保证了高优先级的数据包得到优先发送以及同优先级的数据包之间发送的公平性。

本申请还提供了一种优先级调度装置以及一种防火墙,用以保证上述方法在实际中的实现及应用。

为了解决上述问题,本申请公开了一种优选级调度方法,该方法包括:

对接收到的数据包依据多级qos到单级qos的映射方式,计算所述数据包的优先级;

从单链表中查找与所述数据包的优先级对应的优先级位置,所述单链表包括多个优先级位置,每个优先级位置对应至少一个数据流队列;

将所述数据包按照所属数据流插入所述单链表内对应的优先级位置下的数据流队列中。

其中,所述对接收到的数据包依据多级qos到单级qos的映射方式,计算所述数据包的优先级包括:

获取所述数据包在所述多级qos中各级qos下的优先级配置值;

对所述数据包在各级qos下的优先级配置值进行累加,并加上预置数值得到所述数据包的优先级。

其中,所述将所述数据包按照所属数据流插入所述单链表内对应的优先级位置下的数据流队列中之前,所述方法还包括:

判断所述数据包的优先级是否为预置数值;

如果是,则将该数据包直接插入至所述单链表内预置数值的优先级位置下的数据流队列中;

如果否,则将所述数据包按照所属数据流插入所述单链表内对应的优先级位置下的数据流队列中。

其中,所述将所述数据包按照所属数据流插入所述单链表内对应的优先级位置下的数据流队列中包括:

判断所述单链表中与所述数据包对应的优先级位置下,是否存在所述数据包所属数据流对应的数据流队列;

如果存在,则将所述数据包插入所述数据包所属数据流的数据流队列中;

如果不存在,则在所述数据包对应的优先级位置下创建新的数据流队列,并将所述数据包插入新创建的数据流队列中。

其中,该方法还包括:

按照所述数据包的优先级从大到小的顺序,分别发送每个数据流队列中的数据包。

其中,所述按照所述数据包的优先级从大到小的顺序,分别发送每个数据流队列中的数据包包括:

获取数值最大的优先级对应的优先级位置作为当前位置,以及,将所述当前位置下的每个数据流队列,发送与所述数值最大的优先级个数相同的数据包;

获取数值次大的优先级对应的优先级位置作为当前位置,并将所述当前位置下的每个数据流队列,发送与所述数值次大的优先级个数相同的数据包;

在不存在数值次大的优先级的情况下,返回所述获取数值最大的优先级对应的优先级位置作为当前位置的步骤。

本申请实施例还提供了一种优选级调度装置,该装置包括:

计算单元,用于对接收到的数据包依据多级qos到单级qos的映射方式,计算所述数据包的优先级;

查找单元,用于从单链表中查找与所述数据包的优先级对应的优先级位置,所述单链表包括多个优先级位置,每个优先级位置对应至少一个数据流队列;

插入单元,用于将所述数据包按照所属数据流插入所述单链表内对应的优先级位置下的数据流队列中。

其中,所述计算单元包括:

优先级获取子单元,用于获取所述数据包在所述多级qos中各级qos下的优先级配置值;

优先级计算子单元,用于对所述数据包在各级qos下的优先级配置值进行累加,并加上预置数值得到所述数据包的优先级。

其中,所述插入单元包括:

第一判断子单元,用于判断所述数据包的优先级是否为预置数值;

第一插入子单元,用于在所述第一判断子单元的结果为是的情况下,将该数据包直接插入至所述单链表内预置数值的优先级位置下的数据流队列中;

第二插入子单元,用于在所述第一判断子单元的结果为否的情况下,将所述数据包按照所属数据流插入所述单链表内对应的优先级位置下的数据流队列中。

其中,所述方法还包括:

第二判断子单元,用于判断所述单链表中与所述数据包对应的优先级位置下,是否存在所述数据包所属数据流对应的数据流队列;

触发子单元,用于在所述第二判断子单元的结果为是的情况下,触发所述第二插入子单元;

创建子单元,用于在所述第二判断子单元的结果为否的情况下,在所述数据包对应的优先级位置下创建新的数据流队列,并触发所述第二插入子单元。

其中,所述装置还包括:

发送单元,用于按照所述数据包的优先级从大到小的顺序,分别发送每个数据流队列中的数据包。

其中,所述发送单元包括:

第一获取子单元,用于获取数值最大的优先级对应的优先级位置作为当前位置;

第一发送子单元,用于将所述当前位置下的每个数据流队列,发送与所述数值最大的优先级个数相同的数据包;

第二发送子单元,用于获取数值次大的优先级对应的优先级位置作为当前位置,将所述当前位置下的每个数据流队列,发送与所述数值次大的优先级个数相同的数据包;

触发子单元,用于在不存在数值次大的优先级的情况下,触发所述第一获取子单元。

本申请实施例还提供了一种防火墙,所述防火墙包括前述的优先级调度装置。

与现有技术相比,本申请实施例包括以下优点:

在本申请实施例中,对接收到的数据包依据多级qos到单级qos的映射方式,先计算数据包的优先级,再从单链表中查找与优先级对应的优先级位置,在每个优先级位置下对应有至少一个数据流队列,然后就可以将数据包按照所属数据流插入对应的优先级位置下的某个数据流队列中。可见,按照预先将多级qos映射为单级qos,并按照计算得到的数据包的优先级来查找数据包的位置和插入数据流队列,这种调度数据包的方式,可以一次性实现对数据包的多级调度,不会影响数据包的调度性能。

当然,实施本申请实施例的任一产品并不一定需要同时达到以上所述的所有优点。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本申请的优先级调度方法实施例的示例性流程图;

图2是本申请的从多级qos的n*8矩阵映射为单链表的示例性示意图;

图3是本申请的单链表的示例性示意图;

图4是本申请的优先级调度方法在实际应用中的示例性场景示意图;

图5是本申请的优先级调度装置的示例性结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

参考图1所示,为本申请实施例提供的一种优先级调度方法实施例的流程图,本实施例可以包括以下步骤101~步骤104:

步骤101:对接收到的数据包依据多级qos到单级qos的映射方式,计算所述数据包的优先级。

在实际应用中,在接收到数据包后,首先按照图2所示的n级qos的映射方式,来将计算各接收到的数据包的优先级。在步骤中,为了避免数据包依次经过多级qos导致的性能较低的问题,将预先配置的多级qos先按照图1所示的映射方式映射为单级qos,即通过对优先级进行合并计算,将n级qos矩阵映射为单级qos模型。为了方便本领域技术人员对步骤101中多级qos到单级qos的映射方式有清楚的了解,下面详细介绍多级qos到单级qos的映射方式。

在本申请实施例中,多级qos中的每一级qos都是相互独立的,每级qos都有相对应的数据包缓存队列,本领域技术人员在多级qos中的每一级都可以配置保证带宽、限制带宽或优先级等参数。其中,保证带宽用于表示该级优先级中保证数据包通过的最低带宽,限制带宽用于表示该级优先级中限制数据包通过的最高带宽。在将n级qos矩阵映射为单级qos模型时,还可以分别对各级保证带宽进行合并,或者对各级限制带宽也进行合并。

假设qos的优先级在预先设置qos模块时设计为8个等级。其中,多级qos的级数是开发人员开始设计qos模块时设计并开发的,本领域技术人员可以在各级qos对优先级进行配置,例如,共有8级qos,可以仅配置了1、3、5这三级的优先级,也可以8级qos中的每一级都配置优先级,等等。其中,保证带宽有4种优先级(分别为高、中、低、默认),限制带宽也有4种优先级(分别为高、中、低、默认),qos的优先级则分别为从8到1的各个数值。

具体可以参考表1,这8种优先级的配置关系如表1所示:

表1保证带宽、限制带宽与优先级的关系

假设多级qos的级数为n(n为大于1的自然数),各数据包每一级的优先级为pi(i的取值为从1到n的自然数),保证带宽为gbwi,限定带宽为mbwi,相应的,n级qos映射为单级qos的模型可以参考图2所示,为从多级qos的n*8矩阵映射为单级qos模型的示意图。在图2的箭头左侧,共有n级qos,每级qos的优先级有从1到8共八个数值,所以多级qos矩阵为n*8矩阵。而箭头的右侧,为可以采用单链表实现的单级qos模型,在各级优先级的配置值有8个数值的情况下,该单级qos模型对应的单链表最大可以有n*8+1个元素(即每一级优先级都进行了配置,且配置值都为8),其中,每一个元素的数值即是数据包的优先级。

在实际应用中,在映射为单级qos模型后,数据包的优先级为p,可以采用如下所示的公式(一)计算得到:

采用公式(一)将数据包的各级优先级的数值pi进行求和,得到n级优先级的和值再将该和值与自然数1进行相加,相加的和值作为数据包的优先级。其中,数据包的保证带宽gb为max(gbw1,gbw2,...gbwn),限制带宽mb为min(mbw1,mbw2,...mbwn)。

因为在实际应用中,还有一种情况是多级qos中的各级都没有预先配置优先级参数,则在这种情况下,采用公式(一)计算得到的数据包的优先级就为1。可以理解的是,如果本领域技术人员并未将这n级优先级全部进行配置,例如,仅配置了1、3和5这三级优先级,则计算数据包的优先级的时候,将这三级优先级的数值分别累加,再将累加后的值加1即可。

步骤102:从单链表中查找与所述数据包的优先级对应的优先级位置,所述单链表包括多个优先级位置,每个优先级位置对应至少一个数据流队列。

在本步骤中,采用单链表实现单级qos模型,单链表是一种链式存取的数据结构,可以用一组地址任意的存储单元存放线性表中的数据元素。该单链表的链表元素也是一个链表,在链表元素对应的子链表中,每个元素存放着具有该优先级位置对应的至少一个数据流队列。然后,就可以依据步骤101计算得到的数据包的优先级,在单链表中找到与该优先级所对应的优先级位置。

其中,单链表的各个链表元素的优选级位置分别与数据包的优先级相对应。在查找与数据包的优先级相对应的优先级位置时,具体的,例如,步骤101计算得到的优先级为1,则将单链表中的第1个优先级位置作为数据包对应的优先级位置。

如果计算得到的优先级是7,则将单链表中第7个优先级位置作为数据包对应的优先级位置,优先级为10,则确定该数据包对应的优先级位置为单链表中第10个位置,以此类推,优先级是多少,则对应的优先级位置与优先级相同。

步骤103:将所述数据包按照所属数据流插入所述单链表内对应的优先级位置下的数据流队列中。

接着,因为在单链表的各优先级位置下都根据数据包的所属数据流分别有一个或多个数据流队列,再按照数据包的所属数据流,将数据包插入其所属的数据流队列中即可。具体可以先判断各数据包的优先级是否为预置数值,例如1,如果优先级是1,则直接将数据包插入该第一个优选级位置对应的数据流队列中。其中,第1个优先级位置对应了一个数据流队列,各数据包在该数据流队列中不进行更进一步的区分,所有数据包都按照时间顺序插入至这一个数据流队列中即可。

如果优先级不等于1,则将所述数据包按照所属数据流插入所述单链表内对应的优先级位置下的数据流队列中。具体可以遍历单链表,将所述数据包按照所属数据流插入所述单链表内对应的优先级位置下的数据流队列中。例如,计算得到的数据包的优先级为10,则将该数据包按照所属数据流插入单链表中第10个优先级位置下的数据流队列中。

因为在实际应用中,某个优先级位置下可能并不存在某个数据包所属数据流的数据流队列,则在执行步骤103时,具体还可以包括以下步骤a1~步骤a4:

步骤a1:判断所述单链表中数据包对应的优先级位置下,是否存在所述数据包所属数据流对应的数据流队列,如果是,则进入步骤a2,如果否,则进入步骤a3。

在本步骤,按照是否为相同的源ip地址、是否为相同的目的ip地址、是否为相同的源端口号、是否为相同的目的端口号以及是否为相同的协议号的报文,等等,对各数据包进行是否属于同一个数据流的判断。相同源ip地址、目的ip地址、源端口号、日的端口号和协议号的报文的数据包属于同一个数据流。

针对该数据包,判断在对应的优先级位置下是否存在该数据包所属数据流所对应的数据流队列。例如,在一个优先级位置下对应有两个数据流队列,分别对应了数据流1和数据流2,则如果数据包属于数据流1或数据流2,就可以直接插入相对应的数据流队列,而如果是数据流3或数据流4等,则需要创建一个新的数据流队列。

步骤a2:将该数据包插入至所述数据包所属数据流对应的数据流队列中。

如果该优先级位置下已经存在该数据包所属数据流对应的数据流队列,则直接将数据包插入其所属数据流对应的那个数据流队列中。

步骤a3:在数据包对应的优先级位置下创建新的数据流队列,并将该数据包加入至新创建的数据流队列。

在该数据包对应的优先级位置下创建新的数据流队列,再将数据包加入至新创建的数据流队列。例如,为数据流3创建一个新的数据流队列,然后将所属数据流为数据流3的数据包依次加入该数据流队列中。

参考图3所示,为单链表的一个示例性示意图。在图3中,“1”即单链表的第一个位置,并且,数据包的优先级的数值为1的数据包都会插入至第一个位置下的这一个数据流队列中;以此类推,优先级为的数据包应该插入至第个位置下所属数据流的数据流队列中。其中,该单链表的最右边位置为优先级的最大值n*8+1(以共n级优先级、且各级都有8个优先级的配置值为例),即优先级为“n*8+1”的数据包应该插入至最后一个位置下所属数据流的数据流队列中。

可见,在本申请实施例中,对接收到的数据包依据多级qos到单级qos的映射方式,先计算数据包的优先级,再从单链表中查找与优先级对应的优先级位置,在每个优先级位置下对应有至少一个数据流队列,然后就可以将数据包按照所属数据流插入对应的优先级位置下的某个数据流队列中。可见,按照预先将多级qos映射为单级qos,并按照计算得到的数据包的优先级来查找数据包的位置和插入数据流队列,这种调度数据包的方式,可以一次性实现对数据包的多级调度,不会影响数据包的调度性能。

在按照上述步骤101~步骤103将各个数据包完成优先级调度,将其插入至对应的数据流队列后,还可以包括步骤104:

步骤104:按照所述数据包的优先级从大到小的顺序,分别发送每个数据流队列的数据包。

在本步骤中,则可以按照数据包的优先级分别从大到小的顺序,并按照优先级的数值来发送各个优先级位置下每一个数据流队列中的数据包。

具体的,本步骤104具体可以包括:

步骤b1:获取数值最大的优先级对应的优先级位置作为当前位置,以及,将所述当前位置下的每个数据流队列,发送与所述数值最大的优先级个数相同的数据包。

例如,单链表中有三个优先级位置分别有数据流队列,这三个优先级位置对应的优先级的数值分别为7、5、1,则执行本步骤可以获得第7个优先级位置作为当前位置。然后,查找该单链表中第7个优先级位置中的数据流队列,假设第7个优先级位置下有2个数据流队列,则这2个数据流队列均发送7个数据包。

步骤b2:获取数值次大的优先级对应的优先级位置作为当前位置,将所述当前位置下的每个数据流队列,发送与所述数值次大的优先级个数相同的数据包。

然后,再获取数值次大的优先级对应的优先级位置作为当前位置,即获取数值为5的优先级对应的第5个优先级位置作为当前位置,判断优先级位置5是不是数值最低的优先级对应的位置,因为上述例子中还有数值为1的单级优先级,因此优先级位置5并不是数值最低的优先级对应的优先级位置,则可以返回步骤b2,即查找该单链表中第5个优先级位置中的数据流队列,假设第5个优先级位置下有3个数据流队列,则这3个数据流队列各发送5个数据包。

步骤b3:判断是否存在数值次大的优先级,如果否,返回步骤b1,如果是,返回步骤b2。

接着再对数值为1的优先级执行上述操作,因为数值为1的优先级的位置是第一个优先级位置,因此,该优先级位置下只有一个数据流队列,则从该数据流队列中发送一个数据包即可,并且因为第一个优先级位置与数值为1的优先级对应,所以再返回步骤b1,获取优先级最大的7对应的优先级位置作为当前位置来发送数据包。即,将7、5、1这三个优先级分别循环发送一次数据包之后,再回到数值为7的优先级对应的优先级位置下的各数据流队列,开始发送数据包。

可见,本申请实施例采用步骤104还可以再依据数据包的优先级来发送数据包,从高优先级的数据流队列开始发送循环数据包,保证了高优先级的数据包得到优先发送;以及,相同优先级对应的各数据流队列发送的数据包个数相同,因此,本申请实施例还保证了同优先级的数据包之间发送的公平性。

参考图4,示出了本实施例在实际应用中的示例性应用场景示意图。在图4中,发送方发送的数据包到达接收方的防火墙401,防火墙401中设置了多级qos映射为单级qos的模型,在将各数据包插入至单链表中各优先级位置下的数据流队列后,再按照数据包的优先级的数值大小,并从高优先级到低优先级来依次发送各个优先级位置下对应的各数据流队列中的数据包。其中,发送方可以是任意提供网络服务的网络服务提供者,而接收方则可以是多个局域网用户、多个企业用户等。

对于前述的方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

与上述本申请一种优先级调度方法实施例所提供的方法相对应,参见图5,本申请还提供了一种优先级调度装置实施例,在本实施例中,该装置可以集成于防火墙,该装置可以包括:

计算单元501,用于对接收到的数据包依据多级qos到单级qos的映射方式,计算所述数据包的优先级。

其中,计算单元501具体可以包括:

优先级获取子单元,用于获取所述数据包在所述多级qos中各级qos下的优先级配置值;以及,优先级计算子单元,用于对所述数据包在各级qos下的优先级配置值进行累加,并加上预置数值得到所述数据包的优先级。

查找单元502,用于从单链表中查找与所述数据包的优先级对应的优先级位置,所述单链表包括多个优先级位置,每个优先级位置对应至少一个数据流队列。

插入单元503,用于将所述数据包按照所属数据流插入所述单链表内对应的优先级位置下的数据流队列中。

其中,插入单元502具体可以包括:

第一判断子单元,用于判断所述数据包的优先级是否为预置数值;第一插入子单元,用于在所述第一判断子单元的结果为是的情况下,将该数据包直接插入至所述单链表内预置数值的优先级位置下的数据流队列中;第二插入子单元,用于在所述第一判断子单元的结果为否的情况下,将所述数据包按照所属数据流插入所述单链表内对应的优先级位置下的数据流队列中。

其中,所述优先级调度装置还可以包括:

第二判断子单元,用于判断所述单链表中与所述数据包对应的优先级位置下,是否存在所述数据包所属数据流对应的数据流队列;触发子单元,用于在所述第二判断子单元的结果为是的情况下,触发所述第二插入子单元;和,创建子单元,用于在所述第二判断子单元的结果为否的情况下,在所述数据包对应的优先级位置下创建新的数据流队列,并触发所述第二插入子单元。

其中,发送单元503具体可以包括:

第一获取子单元,用于获取数值最大的优先级对应的优先级位置作为当前位置;第一发送子单元,用于将所述当前位置下的每个数据流队列,发送与所述数值最大的优先级个数相同的数据包;第二发送子单元,用于按照优先级从高到低的顺序,获取数值次大的优先级对应的优先级位置作为当前位置,将所述当前位置下的每个数据流队列,发送与所述数值次大的优先级个数相同的数据包;触发子单元,用于在不存在数值次大的优先级的情况下,触发所述第一获取子单元。

在本申请实施例中,对接收到的数据包依据多级qos到单级qos的映射方式,先计算数据包的优先级,再从单链表中查找与优先级对应的优先级位置,在每个优先级位置下对应有至少一个数据流队列,然后就可以将数据包按照所属数据流插入对应的优先级位置下的某个数据流队列中。可见,按照预先将多级qos映射为单级qos,并按照计算得到的数据包的优先级来查找数据包的位置和插入数据流队列,这种调度数据包的方式,可以一次性实现对数据包的多级调度,不会影响数据包的调度性能。

其中,本实施例中的优先级调度装置还可以包括:

发送单元504,用于按照所述数据包的优先级从大到小的顺序,分别发送每个数据流队列中的数据包。

可见,本实施例中的优先级调度装置还可以再依据数据包的优先级来发送数据包,从高优先级的数据流队列开始发送循环数据包,保证了高优先级的数据包得到优先发送;以及,相同优先级对应的各数据流队列发送的数据包个数相同,因此,本申请实施例还保证了同优先级的数据包之间发送的公平性。

在本申请实施例中,还提供了一种防火墙,其中,该防火墙可以是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障。是一种计算机硬件和软件的结合,使因特网(internet)与intranet(企业内部网)之间建立起一个安全网关(securitygateway),从而保护企业内部网免受非法用户的侵入。

在本申请实施例中的防火墙上,集成图4所示的优先级调度装置即可,以便防火墙能够实现本申请实施例中优先级调度以及数据包发送的目的,本申请实施例中的防火墙的应用实例具体可以参考图2中应用场景的示意图,在此不再赘述。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本申请所提供的优先级调度方法、装置和防火墙进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1