一种基于粒子群优化的车联网分簇车‑车多跳路由方法与流程

文档序号:12501560阅读:266来源:国知局
一种基于粒子群优化的车联网分簇车‑车多跳路由方法与流程
本发明涉及车联网,尤其是一种解决车联网车-车通信路由效率低的路由优化方法。
背景技术
:随着汽车数量的迅猛增长,交通拥堵等道路交通问题日益严重,世界各国都在努力寻找解决交通问题的有效途径。车联网随着现代电子技术、通信技术、计算机技术、物联网技术等相关技术的发展而应运而生,其通过车辆对车辆、车辆对基础设施的相互通信,将车辆由传统的载运工具发展成为信息发布与传输平台,利用道路交通相关信息的共享,提高交通效率,改善交通安全。然而,车辆的高速移动性使得车联网拓扑变化频繁,无线信道不稳定,不易在车-车节点之间维持稳定的链路,如何设计车联网车—车通信路由算法,保持链路稳定性,从而实现可靠高效的远距离多跳成员间的信息交互一直备受关注,同时研究表明传统无线自组网路由协议如AODV、DSR等不适用于车联网车—车通信存在路由效率较低等问题。基于簇的路由方法将网络分成不同的簇,利用簇首计算从源节点到目标节点的最佳路由,能够提升数据收发的成功率,有效减少尤其是簇内的数据收发延迟,减少网络数据通信量,并能适应规模比较大的车联网系统。然而单纯地分簇路由算法也存在寻找路由时间较长(尤其是在跨簇情况下)、寻找的路由不能兼顾高效路由的不同约束条件等问题,使得车联网车—车通信效率仍具有较大提升空间。技术实现要素:发明目的:针对上述现有技术存在的缺陷,本发明旨在提供一种基于粒子群优化的车联网分簇车-车多跳路由方法。技术方案:一种基于粒子群优化的车联网分簇车-车多跳路由方法,包括如下步骤:(1)网络初始化;(2)进行簇首选举:计算节点与相同方向邻居节点的速度标准差Vi,与相同方向邻居节点的距离平均值Si,和当选判据值T(i):式中,Ni为第i个节点的相同方向邻居节点个数,|vim|为第i个节点的第m个方向相同的邻居节点速度的绝对值,cosθiim为速度vi和vim之间的夹角余弦值;每个节点随机生成t(i)∈(0,1),若t(i)<T(i),则该车辆节点即为簇首;(3)簇的形成:步骤(2)中选举出的簇首广播当选消息,普通节点转发并选择加入簇首或自己当选为簇首;(4)源节点所在簇首寻找目的节点所在位置;(5)源节点所在簇首计算从源节点到目的节点的路径;(6)源节点发送信息至目的节点,源节点沿步骤(5)中计算的路径发送数据至目的节点。进一步的,步骤(3)中所述簇的形成具体为:当选簇首广播自己的当选消息ELECTEDmessage,所有收到ELECTEDmessage的普通节点在Max_hop+1跳范围内转发,若节点k收到不同邻居节点的转发的来自相同运动方向同一个簇首CHj并满足与簇首距离的信息,则加入该簇首,若节点k收到多个相同运动方向簇首的声明信息,则首先查找的所有路径,计算比较自己与不同簇首之间不同路径的f值,并选择f值最大的路径对应的簇首选择加入:式中,V″是从节点k与其到簇首CHj的某条路径中其它所有节点速度标准差;Hopr是该路径中的总跳数;若节点k距离所有簇首的距离都大于Max_hop,则自己当选为簇首,并广播当选消息;在一定时间tc内,若节点k没有收到任何簇首当选信息,则自己当选为簇首,并广播当选消息。进一步的,步骤(4)所述源节点所在簇首寻找目的节点所在位置包括:若目的节点不在本簇内,则确定边界中继节点,并通过边界中继节点将目的节点ID发送至邻居簇簇首,若邻居簇首确认目的节点在其簇内,则沿原路径将其本簇节点信息发送回源节点簇首,若不在簇内,则继续向自己邻居簇首发送ID,并在沿原路径转发邻簇节点信息时融合本簇节点信息,直到找到为止。进一步的,步骤(4)中所述确定边界中继节点包括如下步骤:(4.1)确定边界中继节点,若一个节点k距离自己簇首的最小跳数Hopk=Max_hop,则其为边界节点;若Hopk<Max_hop,且其邻居节点距离簇首的最小跳数均小于等于Hopk,则其为边界节点;(4.2)确定边界中继候选节点,若某个边界节点同时收到两个及以上簇首的当选消息,则该节点即为簇间路由的边界中继候选节点;(4.3)确定边界中继节点,若簇Cluster1任意边界中继候选节点和Cluster2的任意边界中继候选节点是邻居节点,则Cluster1和Cluster2为相邻簇,若Cluster1与其相邻簇Cluster2存在多个边界中继候选节点可以中继信息,则CH1选择其到所有边界中继候选节点不同路径中具有最大f的一个所对应的边界中继候选节点作为边界中继节点。进一步的,步骤(5)中所述计算从源节点到目的节点的路径具体为:源节点所在簇首根据粒子群优化算法计算寻找从源节点到目的节点的最佳路径及备份路径,包括如下步骤:(5.1)确定粒子群粒子数量Np;(5.2)簇首依据所有节点的邻居节点信息,生成Np个从源节点到目的节点的路径,并对路径进行粒子编码,粒子位置即为粒子本身;(5.3)对粒子速度进行编码,初始化所有粒子初始速度为0;(5.4)计算粒子适应度函数值,寻找群体最佳极值P′gd和粒子l在前一个位置时的第d维个体位置极值P′ld;(5.5)利用粒子群优化迭代规则,对粒子进行优化;(5.6)更新P′gd与P′ld;(5.7)不断迭代,直到迭代次数达到上限,确定最大f值路径为最佳路径和次优f值路径为备份路径;所述步骤(6)具体为:簇首根据步骤(5.7)计算的最佳路径发送数据至目的节点,目的节点原路返回RECEIVEDCONFIRMmessage,若源节点在一定时间内没有收到RECEIVEDCONFIRMmessage,则沿备份路径重新发送。进一步的,步骤(5.2)中所述对路径进行粒子编码具体为:使用N个整数表示一个粒子,代表从源节点到目的节点的一个路由方案,在粒子中,第i(i∈[1,N])位代表ID为i的节点的上一跳邻居节点的ID,若第i位为0,表示该节点不在路由方案中,若第i位为自己,则表示该节点为源节点。进一步的,步骤(5.3)中所述对粒子速度进行编码具体为:使用N个整数表示一个粒子,任意第i位的整数取值为0或者一个节点ID号;0表示空操作,即第i个节点不需要改变上一跳邻居节点;若第i位的整数取值为另一个节点ID号,则表示该节点的上一跳节点变更为新的节点。进一步的,步骤(5.4)中所述计算粒子适应度函数值具体为:式中,V″是某条路径从首节点到路径中其它所有节点速度标准差;Hopr是该路径中的总跳数。进一步的,步骤(5.5)中所述的粒子群优化迭代规则包括以下步骤:(5.5.1)若P′l中存在一个节点不在X′l中,并且其在X′l中的首个邻居节点为节点i,则计算速度:式中,表示取新的速度从第r1+1维到第N维取值与相同,其它维取值均为0,X′ld为X′l的第d维位置;否则,V′ld=V′ld;(5.5.2)若P′g中存在一个节点不在X′l中,并且其在X′l中的首个邻居节点为节点n,则计算速度:式中,表示取新的速度从第r2+1维到第N维取值与V′ld相同,其它维取值均为0;否则,V′ld=V′ld;(5.5.3)计算粒子新位置:式中,为第l个粒子的第d维新的位置,若粒子第d维速度值为0,则粒子第d维不变;若粒子第d维速度值为非0,则将粒子位置第d维值修改为速度第d维值。有益效果:本发明提出簇首选举的当选判据值计算公式以及普通节点选择加入簇的方法,使得簇首以及普通节点能够保持相对稳定,因此可以提高尤其是簇内链路稳定性;本发明提出路径粒子及速度的编码规则,制定粒子迭代规则,设计适应度函数,解决了路径粒子群的参数设置问题。并且,本发明采用的寻找边界中继节点的方法,使得跨簇之间的信息交互变得更加高效。附图说明图1是本发明中的网络模型图;图2是本发明中节点行驶方向图;图3是本发明中成簇算法流程图;图4是本发明中粒子群优化算法流程图;图5是本发明中边界中继节点示意图;图6是本发明中簇内路由示意图;图7是本发明中簇间路由示意图;图8是本发明中基于粒子群优化的车联网分簇车-车多跳路由流程图。具体实施方式下面通过一个最佳实施例并结合附图对本技术方案进行详细说明。一种基于粒子群优化的车联网分簇车-车多跳路由方法,如图1所示,包括如下步骤:(1)网络初始化,本发明所采用的车联网应用背景为无路边设施的城市道路交通,如图1所示,(1.1)网络模型如下:(1.1.1)在无路边设施城市道路交通中,一共N个车辆节点,每个节点有唯一ID;(1.1.2)所有车辆节点都装有GPS设备,从而能够获知自己的实时位置与速度,并且能够实现网络的时间同步;(1.1.3)所有车辆节点安装有短距离通信设备,并有着相同的通信半径R;(1.1.4)车辆与车辆之间不通过路侧设备及其它卫星通信方式进行通信;(1.1.5)网络被分成若干个簇,簇首与本簇内节点的最大距离为Max_hop;本实施例中Max_hop=3。(1.2)相同节点运动方向的定义:若两车辆节点行驶方向的夹角则两个车辆具有相同的运动方向。节点行驶方向夹角如图2所示,节点1、2、3、4、6的速度分别为v1,v2,v3,v4和v6。其中,v1和v3的夹角为θ13,v1和v4的夹角为θ14=0,v1和v2的夹角为θ12,v1和v6的夹角为θ16。由图2可知,即节点1与节点2、节点3、节点4拥有相同移动方向,而因此节点1与节点6方向不同。(2)进行簇首选举:在簇首的选举及簇的形成过程中,应尽量保持簇的稳定性,从而保证数据链路的可靠性,因此,首先要求簇首在方向相同的车辆中产生,其次当前时刻簇首的邻居节点的比较多,最后簇首的速度绝对值及位置也应与簇内其它节点相近。计算节点与相同方向邻居节点的速度标准差Vi,与相同方向邻居节点的距离平均值Si,和当选判据值T(i):式中,Ni为第i个节点的相同方向邻居节点个数,|vim|为第i个节点的第m个方向相同的邻居节点速度的绝对值,cosθiim为速度vi和vim之间的夹角余弦值;每个车辆节点随机生成t(i)∈(0,1),若t(i)<T(i),则该车辆节点即为簇首;为了完成簇首选举,所有车辆节点广播HELLO消息。HELLO消息包括前导码、消息发送时间、节点的ID、节点的位置、节点的速度、校验码等,其格式如下表所示。其中,BroadcastTime记录节点广播消息的时刻,SourceID记录广播HELLO消息的节点ID,SourceLocation记录广播该hello消息的节点位置,SourceVelocity记录广播该hello消息的节点速度。当任一节点接收到其它节点的HELLO消息后,首先记录接收到该HELLO消息的时刻,并判断Tr-Ts≥t是否成立,其中,Tr为节点收到其它节点广播消息的时刻,Ts为初始源节点发送该消息的时刻,若成立,则抛弃该消息,若不成立,则将该HELLO消息蕴藏的邻居节点信息添加到自己的邻居节点列表中。(3)簇的形成:步骤(2)中选举出的簇首广播当选消息,普通节点转发并选择加入簇首或自己当选为簇首,具体为:当选簇首广播自己的当选消息ELECTEDmessage,所有收到ELECTEDmessage的普通节点在Max_hop+1跳范围内转发,若节点k收到不同邻居节点的转发的来自相同运动方向同一个簇首CHj并满足与簇首距离的信息,则加入该簇首,若节点k收到多个相同运动方向簇首的声明信息,则首先查找的所有路径,计算比较自己与不同簇首之间不同路径的f值,并选择f值最大的路径对应的簇首选择加入:式中,V″是从节点k与其到簇首CHj的某条路径中其它所有节点速度标准差;Hopr是该路径中的总跳数;若节点k距离所有簇首的距离都大于Max_hop,则自己当选为簇首,并广播当选消息;在一定时间tc内,若节点k没有收到任何簇首当选信息,则自己当选为簇首,并广播当选消息。本实施例中假设有Nn个普通节点,Nc个簇首。普通节点k(k∈[1,Nn])距离簇首CHj(j∈[1,Nc])的最小跳数即为k与CHj之间的距离,记为若节点k已加入了第j个簇,则节点k距离自己簇首的距离记为Hopk。簇首广播声明自己作为簇首的消息。簇首广播声明消息如下表所示:BroadcastTime为簇首广播自己是簇首的时刻,ClusterHeadID为簇首的ID号,Position和Velocity分别是簇首的位置和速度,RelayNode’sID不同路径下接收到该当选消息的所有节点ID,初始为空。当非簇首节点k收到相同方向簇首CHj的声明消息后,首先判断其中的Hop值是否大于等于Max_hop+1(这里加1的原因是需要确定是否有两个邻居节点分别属于相邻的两个簇),若大于等于,则抛弃该消息;反之,则将Hop值加1,在route中添加自己的节点号,并转发该消息。非簇首节点节点k可能会收到不同邻居节点的转发的来自同一个相同方向簇首并满足的信息,则记录的所有路径,并加入该簇首。若节点k距离所有簇首的距离都大于Max_hop,则自己当选为簇首,并广播当选消息;在一定时间tc内,若节点k没有收到任何簇首当选信息,则自己当选为簇首,并广播当选消息;若节点k收到多个相同方向簇首的声明信息,则首先查找的所有路径,计算比较自己与不同簇首之间不同路径的f值,并选择f值最大的路径对应的簇首选择加入。非簇首节点节点k确定自己的簇首后,向簇首发送自己加入该簇的JOIN消息。发送JOIN消息的路由即为自己到该簇首的最大f值路径。JOIN消息格式如下表所示:其中AllRoutes为节点到簇首的所有存在路由,若节点同时收到多个簇首的声明消息,则AllRoutes中也包括该节点到其它簇首的路由信息。BestRoute为该节点到待加入簇簇首的最大f值路径,该申请加入消息即沿着该最短路径发送至簇首。Neighbors记录该节点的所有邻居节点ID。簇首接收到所有节点的加入申请后,确定所有簇成员,保存自己到簇成员节点的所有路径,并按照最大f路径分别发送CLUSTER消息给普通节点。CLUSTER信息包括所有簇成员节点ID。簇形成流程图如图3所示。(4)源节点所在簇首寻找目的节点所在位置,具体包括:若目的节点不在本簇内,则确定边界中继节点,并通过边界中继节点将目的节点ID发送至邻居簇簇首,若邻居簇首确认目的节点在其簇内,则沿原路径将其本簇节点信息发送回源节点簇首,若不在簇内,则继续向自己邻居簇首发送ID,并在沿原路径转发邻簇节点信息时融合本簇节点信息,直到找到为止。其中,确定边界中继节点包括如下步骤,如图5所示:(4.1)确定边界中继节点,若一个节点k距离自己簇首的最小跳数Hopk=Max_hop,则其为边界节点;若Hopk<Max_hop,且其邻居节点距离簇首的最小跳数均小于等于Hopk,则其为边界节点;(4.2)确定边界中继候选节点,若某个边界节点同时收到两个及以上簇首的当选消息,则该节点即为簇间路由的边界中继候选节点;(4.3)确定边界中继节点,若簇Cluster1任意边界中继候选节点和Cluster2的任意边界中继候选节点是邻居节点,则Cluster1和Cluster2为相邻簇,若Cluster1与其相邻簇Cluster2存在多个边界中继候选节点可以中继信息,则CH1选择其到所有边界中继候选节点不同路径中具有最大f的一个所对应的边界中继候选节点作为边界中继节点。图5中,节点B2距离簇首CH1的最小跳数为2<3,且其所有邻居节点节点5、节点8距离CH1的最小跳数均为1<2,因此B2为边界节点。B1、RB1、RB2距离CH1的最小跳数均为3,因此B1、RB1、RB2也是边界节点。节点B1仅收到CH1的簇首当选声明,因此其不是边界中继候选节点。而车辆节点RB1、RB2同时收到两个相同方向簇首CH1和CH2的当选消息,因此其为边界中继候选节点。同样的,RB3、RB4为Cluster2的边界中继候选节点。Cluster1和Cluster2为相邻簇,若CH1需要向CH2确认目标节点是否在cluster2中,信息转发过程中需要分别确定两个簇中的边界中继节点:首先,CH1可以通过RB1或RB2向CH2转发确认信息,则分别计算所有从CH1到该两个节点的路由(如,CH1→7→10→RB1和CH1→7→10→RB2)的f值,并选择具有最大f的边界中继候选节点作为边界中继节点,假设为RB1。其次,RB1需选择cluster2中的边界中继候选节点进行下一跳信息传输,RB1同样计算自己到cluster2中的邻居边界中继节点的f值,并选择最大的一个作为cluster2中的边界中继节点,假设为RB4。(5)源节点所在簇首根据粒子群优化算法计算寻找从源节点到目的节点的最佳路径及备份路径,包括如下步骤:(5.1)确定粒子群粒子数量Np;(5.2)簇首依据所有节点的邻居节点信息,生成Np个从源节点到目的节点的路径,并对路径进行粒子编码,粒子位置即为粒子本身,具体为:使用N个整数表示一个粒子,代表从源节点到目的节点的一个路由方案,在粒子中,第i(i∈[1,N])位代表ID为i的节点的上一跳邻居节点的ID,若第i位为0,表示该节点不在路由方案中,若第i位为自己,则表示该节点为源节点。(5.3)对粒子速度进行编码,初始化所有粒子初始速度为0,具体为:使用N个整数表示一个粒子,任意第i位的整数取值为0或者一个节点ID号;0表示空操作,即第i个节点不需要改变上一跳邻居节点;若第i位的整数取值为另一个节点ID号,则表示该节点的上一跳节点变更为新的节点。本实施例中由于区域内共有N个车辆节点,本文使用N个整数表示一个粒子,代表着从S到D的一个路由方案。在粒子中,第i(i∈[1,N])位代表ID为i的节点的上一跳邻居节点的ID,若第i位为0,表示该节点不在路由方案中,若第i位为自己,则表示该节点为起始节点。一个简单的示例如下表所示:区域内共有6个节点,因此单个粒子长度为6位整数。上表中,从S到D共有2条路由,分别为1→2→3→4和1→3→4,因此两个粒子分别为粒子1和粒子2所示。本发明默认粒子本身即为粒子的位置。粒子速度V′表示粒子的移动方向,即路由路径的改进方向。本发明根据速度提示的位置对原有路由方案进行替换。速度V′同样由N个整数组合而成,任意第i位的整数取值为0或者一个节点ID号。0表示空操作,即第i个节点不需要改变上一跳邻居节点;若第i位的整数取值为另一个节点ID号,则表示该节点的上一跳节点变更为新的节点。(5.4)如图4所示,计算粒子适应度函数值,寻找群体最佳极值P′gd和粒子l在前一个位置时的第d维个体位置极值P′ld,链路上的车辆节点的水平方向速度绝对者要接近;链路上的跳数要少。适应度函数具体为:式中,V″是某条路径从首节点到路径中其它所有节点速度标准差;Hopr是该路径中的总跳数。(5.5)利用粒子群优化迭代规则,对粒子进行优化,包括以下步骤:(5.5.1)若P′l中存在一个节点不在X′l中,并且其在X′l中的首个邻居节点为节点i,则计算速度:式中,表示取新的速度从第1维到第r1维取值与V′ld相同,其它维取值均为0;否则,V′ld=V′ld;(5.5.2)若P′g中存在一个节点不在X′l中,并且其在X′l中的首个邻居节点为节点n,则计算速度:式中,表示取新的速度从第r2+1维到第N维取值与V′ld相同,其它维取值均为0;否则,V′ld=V′ld;(5.5.3)计算粒子新位置,由于车联网中的粒子及其速度的传统定义已不同,位置的变化变得不再连续,因此将原有的位置与速度公式修改为:在新的公式中,出现了三个新的运算规则:和这三者运算优先级为运算用来对粒子的位置进行优化,为第l个粒子的第d维新的位置,若粒子第d维速度值为0,则粒子第d维不变;若粒子第d维速度值为非0,则将粒子位置第d维值修改为速度第d维值。(5.6)更新P′gd与P′ld;运算用来寻找粒子位置优化的方向。和均为第l个粒子的第d维速度值,用来指导粒子位置的优化。若P′ld中存在一个节点不在X′ld中,并且其在X′ld中的首个邻居节点为节点i,若P′gd中存在一个节点不在X′ld中,并且其在X′ld中的首个邻居节点为节点n,则在上表中,若1→2→3→4为P′ld,X′ld为1→3→4,则节点2不在粒子X′ld中,并且X′ld的第一个邻居节点为节点1,因此,1→3→4可以演变为1→2→3→4。即为粒子的移动速度,如下表所示:000000010002000300000000运算用来约束速度的维度取值。表示取新的速度从第1维到第r1维取值与V′ld相同,其它维取值均为0。(5.7)不断迭代,直到迭代次数达到上限,确定最大f值路径为最佳路径和次优f值路径为备份路径;(6)源节点发送信息至目的节点,源节点簇首根据步骤(5.7)计算的最佳路径发送数据至目的节点,目的节点原路返回RECEIVEDCONFIRMmessage,若源节点在一定时间内没有收到RECEIVEDCONFIRMmessage,则沿备份路径重新发送。本实施例中源节点首先寻找自己距离簇首的最大f值路径向簇首发送数据传输请求,告知簇首目标节点的ID号。簇首首先在自己簇内寻找目的节点。若在本簇内,则计算源节点到目的节点的最佳路径(最大f值路径)与备份路径(次优f值路径),并将该路径按原来路径发送给源节点。源节点按照该路径,将相关信息发送给目标节点。簇内信息发送示意图如图6所示,具体步骤如下:(6.1.1)S计算得出自己到CH1的最佳路径(最大f值路径)S→5→CH1,并发送目标节点ID。(6.1.2)CH1计算得出从S到D的最佳路径(最大f值路径)S→5→8→10→D与备份路径(次优f值路径),并将路径信息沿CH1→5→S发送给S。(6.1.3)S按照最佳路径(最大f值路径)S→5→8→10→D发送信息给D。(6.1.4)D沿D→10→8→5→S发送确认消息给S。(6.1.5)若S在预设时间内没有收到确认消息,则按照备份路径(次优f值路径)重新发送。(6.2)簇间路由若源节点和目标节点不在同一个簇内,则需要寻找确定边界中继节点进行跨簇信息转发,如图7所示,具体步骤如下:(6.2.1)S计算得出自己到CH1的最佳路径(最大f值路径)S→5→CH1,并发送目标节点ID。(6.2.2)CH1选择边界中继节点转发目标节点ID。(6.2.3)对于邻簇Cluster2,Cluster1拥有两个边界中继候选节点,通过计算,选择RB1作为边界中继节点,并将目标节点ID通过多跳路径CH1→7→10→RB1转发至RB1。(6.2.4)RB1分别计算RB1→RB3、RB1→RB4、RB1→RB5这三条路径的f值,并选择最大值对应的节点(假设为RB4)进行消息转发。(6.2.5)RB4按照簇内寻找目标节点的方法,将寻找目标节点的ID按照路径RB4→13→21→CH2发送给CH2。(6.2.6)若CH2发现目标节点不在本簇内,则继续确定边界中继节点向其它邻簇发送目标节点ID;若目标节点在本簇内,则将本簇路由信息按照路径CH2→21→13→RB4→RB1→10→7→CH1转发至CH1。(6.2.7)CH1计算得出从源节点到目标节点的最佳路径(最大f值路径)和备份路径(次优f值路径),并按照路径CH1→5→S发送给S。(6.2.8)S按照最佳路径(最大f值路径)S→5→CH1→7→RB1→RB5→15→D发送信息。(6.2.9)D按D→15→RB5→RB1→7→CH1→5→S发送确认信息。(6.2.10)若S在预设时间内没有收到确认消息,则按照备份路径(次优f值路径)重新发送。(6.3)基于粒子群优化的车联网分簇车-车路由方法流程(6.3.1)成簇;(6.3.2)源节点向簇首发送请求;(6.3.3)簇首寻找目标节点;(6.3.4)簇首计算路径;(6.3.5)源节点发送信息;(6.3.6)源节点接收目的节点反馈信息,若一定时间内没有收到,则重新按照备份路径(次优f值路径)发送。其算法流程图如图8所示。以上仅是本发明的优选实施方式,应当指出:对于本
技术领域
的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1