姚 影 ,顏 擁 ,郭少勇 ,熊 翱 ,張 旺
(1.國(guó)網(wǎng)浙江省電力有限公司電力科學(xué)研究院,浙江 杭州 310014;2.北京郵電大學(xué),北京 100876)
傳統(tǒng)互聯(lián)網(wǎng)業(yè)務(wù)的身份認(rèn)證技術(shù)主要以用戶名密碼為主[1],但隨著互聯(lián)網(wǎng)業(yè)務(wù)越來(lái)越多,不同的業(yè)務(wù)需要重復(fù)注冊(cè)不同的賬號(hào),并且通常同一個(gè)用戶不同賬號(hào)之間的密碼存在關(guān)聯(lián)性,容易造成密碼泄露的風(fēng)險(xiǎn)[2]。同時(shí),傳統(tǒng)認(rèn)證系統(tǒng)是中心化[3]的,用戶隱私信息存放在企業(yè)系統(tǒng)中。但是身份認(rèn)證信息存儲(chǔ)方式較為簡(jiǎn)單,相關(guān)系統(tǒng)易受攻擊、用戶隱私身份信息泄露的隱患較大。并且傳統(tǒng)的中心化認(rèn)證系統(tǒng)是業(yè)務(wù)系統(tǒng)的唯一認(rèn)證接口,如果其遭受到有效攻擊,那么系統(tǒng)存在極大的崩潰風(fēng)險(xiǎn)[4],因此為了解決用戶隱私信息安全、維護(hù)業(yè)務(wù)系統(tǒng)的穩(wěn)定性,構(gòu)造分布式的身份認(rèn)證系統(tǒng)是現(xiàn)在亟待解決的問(wèn)題。
區(qū)塊鏈技術(shù)[5]發(fā)展于比特幣中,具有分布式去中心化、數(shù)據(jù)可追溯、不可篡改的優(yōu)點(diǎn)。因?yàn)槠浞植际饺ブ行幕奶匦?,如果想要有效攻擊區(qū)塊鏈網(wǎng)絡(luò)的話,需要同時(shí)攻克其不同節(jié)點(diǎn)[6],因此其比中心化網(wǎng)絡(luò)更加穩(wěn)定可靠;區(qū)塊鏈的數(shù)據(jù)可追溯不可篡改[7]的特點(diǎn),使得無(wú)人能夠修改區(qū)塊鏈上的數(shù)據(jù),因此區(qū)塊鏈網(wǎng)絡(luò)下的不同節(jié)點(diǎn)之間能夠相互信任彼此。區(qū)塊鏈的高穩(wěn)定性和信任傳遞的能力為身份認(rèn)證技術(shù)提供了新的思路[8]。
聯(lián)盟鏈作為區(qū)塊鏈的一種是由多個(gè)機(jī)構(gòu)共同參與管理的,與公有鏈訪問(wèn)權(quán)限全公開(kāi)不同的是,只有這些機(jī)構(gòu)擁有聯(lián)盟鏈的寫(xiě)入與訪問(wèn)權(quán)限[9]。由于聯(lián)盟鏈弱化了網(wǎng)絡(luò)復(fù)雜性,可以使用更松散的共識(shí)機(jī)制,因此共識(shí)效率比公有鏈高很多同時(shí)具有去中心化的優(yōu)勢(shì)[10],具有很大的實(shí)用價(jià)值。
本文針對(duì)傳統(tǒng)身份認(rèn)證所存在的重復(fù)認(rèn)證、身份隱私不安全、單一系統(tǒng)易受攻擊等痛點(diǎn),結(jié)合聯(lián)盟鏈的優(yōu)勢(shì),構(gòu)建出一套基于聯(lián)盟鏈的身份認(rèn)證方法。并為了提高系統(tǒng)的認(rèn)證效率,改進(jìn)了分布式身份認(rèn)證方法中聯(lián)盟鏈的共識(shí)算法[11]。
為了解決傳統(tǒng)身份認(rèn)證中存在的不同問(wèn)題,本文利用區(qū)塊鏈技術(shù)構(gòu)建分布式身份認(rèn)證方案[12]。基于區(qū)塊鏈的分布式身份認(rèn)證架構(gòu)包括四個(gè)部分:可信授權(quán)中心、聯(lián)盟鏈網(wǎng)絡(luò)、業(yè)務(wù)系統(tǒng)和用戶,其結(jié)構(gòu)如圖1 所示。在本系統(tǒng)中,用戶通過(guò)提交自身身份信息至業(yè)務(wù)的身份認(rèn)證系統(tǒng),由業(yè)務(wù)系統(tǒng)將用戶的身份信息加密上鏈,完成用戶身份的注冊(cè);當(dāng)用戶訪問(wèn)業(yè)務(wù)系統(tǒng)時(shí),業(yè)務(wù)系統(tǒng)從區(qū)塊鏈節(jié)點(diǎn)上獲取相應(yīng)用戶注冊(cè)信息,與用戶認(rèn)證信息進(jìn)行對(duì)比驗(yàn)證,完成用戶認(rèn)證功能。
圖1 基于聯(lián)盟鏈的分布式身份認(rèn)證架構(gòu)
分布式身份認(rèn)證架構(gòu)各個(gè)部分的功能如下:
(1)可信授權(quán)中心:負(fù)責(zé)為各業(yè)務(wù)系統(tǒng)和用戶頒發(fā)數(shù)字證書(shū)。
(2)區(qū)塊鏈網(wǎng)絡(luò):每個(gè)區(qū)塊鏈節(jié)點(diǎn)由區(qū)塊鏈中的一個(gè)企業(yè)維護(hù),提供用戶實(shí)體身份信息上鏈和查詢等功能。
(3)業(yè)務(wù)系統(tǒng):提供各類業(yè)務(wù)服務(wù)的不同應(yīng)用系統(tǒng),并且對(duì)訪問(wèn)系統(tǒng)的用戶進(jìn)行注冊(cè)和認(rèn)證功能。
(4)用戶:訪問(wèn)業(yè)務(wù)系統(tǒng)的人,身份認(rèn)證系統(tǒng)的使用者。
在本方案設(shè)計(jì)的認(rèn)證系統(tǒng)中,用戶的注冊(cè)信息通過(guò)可信信道送到區(qū)塊鏈網(wǎng)絡(luò)中,并廣播共識(shí)到所有區(qū)塊鏈結(jié)點(diǎn)中,區(qū)塊鏈網(wǎng)絡(luò)中的任意服務(wù)節(jié)點(diǎn)均可獲取用戶的注冊(cè)身份,從而能夠?qū)崿F(xiàn)對(duì)用戶單點(diǎn)注冊(cè)多點(diǎn)認(rèn)證的功能,省去了重復(fù)注冊(cè)用戶賬號(hào)密碼的麻煩。用戶認(rèn)證信息包含以下幾種數(shù)據(jù),具體見(jiàn)表1。
表1 身份信息數(shù)據(jù)說(shuō)明
1.2.1 注冊(cè)身份流程
用戶注冊(cè)流程如下:
(1)用戶U 在本地根據(jù)ECC 秘鑰生成算法生成自己的公私鑰對(duì)(UPK,USK),其中公鑰為UPK,私鑰為USK。
(2)用戶U 在業(yè)務(wù)系統(tǒng)的注冊(cè)接口輸入自己的用戶身份UID、用戶認(rèn)證信息UAI、公鑰UPK。
(3)業(yè)務(wù)系統(tǒng)BS 接收到用戶發(fā)來(lái)的注冊(cè)信息(UID,UAI,UPK),核查UID 與UPK 是否和已有注冊(cè)用戶的身份或公鑰沖突,如果至少有其中一項(xiàng)沖突,則向用戶反饋?zhàn)?cè)失敗信息,并返回第(1)步重新開(kāi)始;若都不沖突,則向下進(jìn)行。
(4)業(yè)務(wù)系統(tǒng)BS 將用戶身份UID、用戶認(rèn)證信息UAI進(jìn)行hash 運(yùn)算得到用戶的身份信息摘要IS,返回給用戶,并通知用戶注冊(cè)身份信息正確。
(5)用戶U 收到身份信息摘要IS 后,用自己的私鑰USK 對(duì)身份信息摘要進(jìn)行加密,生成數(shù)字簽名DS,發(fā)送給業(yè)務(wù)系統(tǒng)。
(6)業(yè)務(wù)系統(tǒng)BS 收到用戶數(shù)字簽名DS 后,將其與用戶身份UID、用戶公鑰UPK 發(fā)送給區(qū)塊鏈節(jié)點(diǎn)s。
(7)區(qū)塊鏈結(jié)點(diǎn)s 接收到業(yè)務(wù)系統(tǒng)發(fā)來(lái)的相關(guān)信息后,將信息打包共識(shí)到區(qū)塊鏈網(wǎng)絡(luò),并由可信授權(quán)中心為用戶發(fā)布數(shù)字證書(shū)DC。
(8)當(dāng)區(qū)塊鏈網(wǎng)絡(luò)將注冊(cè)信息共識(shí)成功后,由業(yè)務(wù)系統(tǒng)BS 通知用戶U 注冊(cè)成功,并將數(shù)字證書(shū)DC 返回給用戶,由用戶保存。
1.2.2 認(rèn)證身份流程
用戶認(rèn)證流程如下:
(1)用戶U 在業(yè)務(wù)系統(tǒng)認(rèn)證接口輸入用戶身份UID、用戶認(rèn)證信息UAI 與數(shù)字證書(shū)DC。
(2)業(yè)務(wù)系統(tǒng)BS 接收到用戶發(fā)來(lái)的認(rèn)證信息(UID,UAI,DC)后,將其廣播到聯(lián)盟鏈上的所有業(yè)務(wù)系統(tǒng)中,一起對(duì)其進(jìn)行驗(yàn)證。并由各系統(tǒng)對(duì)認(rèn)證信息進(jìn)行共識(shí)投票。
(3)業(yè)務(wù)系統(tǒng)BS 根據(jù)用戶身份UID 到區(qū)塊鏈節(jié)點(diǎn)s上查找注冊(cè)時(shí)UID 對(duì)應(yīng)的公鑰UPK′。并判斷鏈上用戶公鑰UPK′與數(shù)字證書(shū)DC 內(nèi)的用戶公鑰UPK 是否一致。若UPK≠UPK′,則說(shuō)明用戶身份信息與注冊(cè)時(shí)綁定的用戶公鑰不一致,在認(rèn)證共識(shí)中投反對(duì)票;若UPK=UPK′,則說(shuō)明用戶身份信息與注冊(cè)時(shí)綁定的用戶公鑰一致,進(jìn)行下一步驗(yàn)證。
(4)業(yè)務(wù)系統(tǒng)BS 根據(jù)用戶身份UID 進(jìn)一步到區(qū)塊鏈節(jié)點(diǎn)處獲取注冊(cè)時(shí)UID 對(duì)應(yīng)的用戶數(shù)字簽名DS。并用用戶數(shù)字證書(shū)DC 內(nèi)的用戶公鑰UPK 對(duì)數(shù)字簽名DS 進(jìn)行解密,得到用戶身份對(duì)比身份信息摘要IS′。
(5)業(yè)務(wù)系統(tǒng)BS 對(duì)用戶身份UID 與用戶認(rèn)證信息UAI進(jìn)行hash 計(jì)算,得到用戶認(rèn)證身份信息摘要UIS。若IS≠I(mǎi)S′,則說(shuō)明用戶輸入的認(rèn)證信息UAI 不正確,認(rèn)證失??;若IS=IS′,則說(shuō)明用戶輸入的身份信息與注冊(cè)時(shí)無(wú)誤,驗(yàn)證成功,在認(rèn)證共識(shí)中投通過(guò)票。
(6)聯(lián)盟鏈網(wǎng)絡(luò)根據(jù)最終的認(rèn)證共識(shí)投票情況給出認(rèn)證結(jié)果,業(yè)務(wù)系統(tǒng)BS 根據(jù)認(rèn)證結(jié)果判斷是否為用戶提供服務(wù)。
為了使身份認(rèn)證系統(tǒng)工作更加高效,提高其注冊(cè)、認(rèn)證的吞吐量,本節(jié)對(duì)PBFT 算法[13]進(jìn)行優(yōu)化,以滿足分布式身份認(rèn)證對(duì)共識(shí)效率的要求。
節(jié)點(diǎn)數(shù)為N 的傳統(tǒng)PBFT 算法網(wǎng)絡(luò),可以容錯(cuò)f 個(gè)拜占庭節(jié)點(diǎn),其中f=(N-1)/3。但是為了這個(gè)容錯(cuò)能力,產(chǎn)生了很多無(wú)效的通信[14]。因?yàn)楣?jié)點(diǎn)在收到2f+1 個(gè)正確的消息之后就可以進(jìn)入下一階段,但是每個(gè)節(jié)點(diǎn)要向網(wǎng)絡(luò)中廣播大于3f 個(gè)消息[15]。無(wú)效的通信主要發(fā)生在準(zhǔn)備階段的全網(wǎng)廣播。因此,改進(jìn)的PBFT 算法引入動(dòng)態(tài)權(quán)重機(jī)制,稱其為“動(dòng)態(tài)實(shí)用拜占庭容錯(cuò)算法(Dynamic Practical Byzantine Fault Tolerance,DPBFT)”,根據(jù)節(jié)點(diǎn)在共識(shí)過(guò)程中的表現(xiàn)情況來(lái)動(dòng)態(tài)調(diào)整不同節(jié)點(diǎn)之間的權(quán)重值。每個(gè)共識(shí)節(jié)點(diǎn)維護(hù)一個(gè)權(quán)重向量表WT={w1,w2,…,wi,…,wN},其中權(quán)重p=n/N 反映出i 節(jié)點(diǎn)的動(dòng)態(tài)通信性能和可信度。WT會(huì)隨著共識(shí)的進(jìn)行而不斷更新,在每輪共識(shí)結(jié)束之后,每個(gè)共識(shí)節(jié)點(diǎn)會(huì)根據(jù)此次共識(shí)的投票和通信情況對(duì)自己維護(hù)的WT進(jìn)行更新。共識(shí)期間選擇權(quán)重最大的那幾個(gè)節(jié)點(diǎn)來(lái)進(jìn)行選擇性廣播。之后在共識(shí)流程的廣播階段,節(jié)點(diǎn)將在各自的廣播域內(nèi)進(jìn)行投票消息廣播,并且廣播域?qū)㈦S著WT的更新而更新。引入一個(gè)動(dòng)態(tài)參數(shù)p 來(lái)表示選擇性廣播域的大小,其中p=n/N。n 為選擇性廣播域中節(jié)點(diǎn)的個(gè)數(shù)。
算法流程如圖2 所示。首先初始化共識(shí)節(jié)點(diǎn)的投票權(quán)重,開(kāi)始進(jìn)行一次正常的PBFT 投票流程。然后根據(jù)每次投票的結(jié)果,動(dòng)態(tài)調(diào)整權(quán)重,構(gòu)建選擇性廣播域。改進(jìn)的PBFT 算法與傳統(tǒng)的PBFT 算法流程大體相似,只是在一致性協(xié)議的廣播階段進(jìn)行相應(yīng)改進(jìn)。這里對(duì)改進(jìn)后的算法一致性協(xié)議階段進(jìn)行主要功能描述:
圖2 改進(jìn)的PBFT 算法流程圖
(1)PRE-PREPARE 階段:主節(jié)點(diǎn)接收客戶端發(fā)送的PRE-PREPARE 消息,并將消息廣播給參與共識(shí)的所有節(jié)點(diǎn)。
(2)PREPARE 階段:從節(jié)點(diǎn)收到主節(jié)點(diǎn)發(fā)送的PREPREPARE 消息后生成PREPARE 消息,根據(jù)WT和p 值去定一個(gè)選擇性廣播域,將PREPARE 消息選擇性廣播給自己的共識(shí)域內(nèi)的節(jié)點(diǎn)。如果接收到超過(guò)2f+1 個(gè)正確的準(zhǔn)備消息,則會(huì)進(jìn)入COMMIT 階段。
(3)COMMIT 階段:節(jié)點(diǎn)生成COMMIT 消息并廣播到共識(shí)域內(nèi)節(jié)點(diǎn),其他節(jié)點(diǎn)驗(yàn)證COMMIT 消息,驗(yàn)證通過(guò)后,進(jìn)行ADJUST 階段。
(4)ADJUST 階段:根據(jù)共識(shí)結(jié)果給每個(gè)參與共識(shí)節(jié)點(diǎn)的情況進(jìn)行打分。根據(jù)各個(gè)節(jié)點(diǎn)提交commit 的時(shí)間,為每個(gè)節(jié)點(diǎn)離散化0~100 分?jǐn)?shù)。根據(jù)式(1):
式中Qi為i 節(jié)點(diǎn)本輪共識(shí)的得分,ti為i 節(jié)點(diǎn)提交commit的時(shí)間,T 為第一個(gè)commit 發(fā)生到共識(shí)結(jié)束總耗時(shí)。第一個(gè)提交commit 的節(jié)點(diǎn)得分100 分,未參加commit 的節(jié)點(diǎn)得分為0。并根據(jù)式(2)動(dòng)態(tài)調(diào)整每個(gè)節(jié)點(diǎn)權(quán)重。
式中q 為上一狀態(tài)權(quán)重在新權(quán)重中所占比例,wi為上一狀態(tài)中i 節(jié)點(diǎn)權(quán)重值。
區(qū)塊鏈節(jié)點(diǎn)上只保存用戶認(rèn)證信息的摘要,不保存用戶認(rèn)證信息UAI 的明文信息,攻擊者即使攻破聯(lián)盟鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)也無(wú)法獲取用戶對(duì)應(yīng)的認(rèn)證信息UAI。并且用戶公鑰由可信授權(quán)中心頒發(fā)數(shù)字證書(shū),只有合法注冊(cè)的公鑰才能在業(yè)務(wù)系統(tǒng)上驗(yàn)證。攻擊者很難同時(shí)獲取用戶的數(shù)字證書(shū)DC 和認(rèn)證信息UAI 來(lái)偽造用戶身份。因此本系統(tǒng)可以有效保證用戶的身份信息安全。
用戶身份信息加密保存在區(qū)塊鏈節(jié)點(diǎn),每個(gè)業(yè)務(wù)系統(tǒng)都可以通過(guò)訪問(wèn)聯(lián)盟鏈網(wǎng)絡(luò)獲取用戶加密身份信息進(jìn)行驗(yàn)證。當(dāng)某個(gè)業(yè)務(wù)認(rèn)證系統(tǒng)癱瘓后,用戶可以選擇就近業(yè)務(wù)系統(tǒng)進(jìn)行驗(yàn)證。因此本系統(tǒng)可以實(shí)現(xiàn)單點(diǎn)注冊(cè),多點(diǎn)認(rèn)證,提升可用性的同時(shí)有效防止中心化業(yè)務(wù)認(rèn)證系統(tǒng)的易崩潰,不穩(wěn)定的風(fēng)險(xiǎn)。
基于GO 編程語(yǔ)言實(shí)現(xiàn)了一個(gè)多節(jié)點(diǎn)聯(lián)盟鏈實(shí)驗(yàn)系統(tǒng),用以模擬在本設(shè)計(jì)方案中用戶注冊(cè)以及用戶行為上鏈共識(shí)過(guò)程。在該系統(tǒng)中對(duì)原PBFT 算法和本文提出的DPBFT 算法進(jìn)行了性能測(cè)試。主要分析PBFT 與DPBFT在不同的p、q 值的選取上存在的性能差異。
認(rèn)證時(shí)延是指企業(yè)或授權(quán)中心向區(qū)塊鏈網(wǎng)絡(luò)發(fā)送上鏈信息到區(qū)塊鏈網(wǎng)絡(luò)完成共識(shí)的時(shí)間間隔。在不同節(jié)點(diǎn)數(shù)量的情況下,比較了PBFT 和DPBFT 算法的認(rèn)證時(shí)延,同時(shí)引入影響廣播域大小的因子p 和分?jǐn)?shù)調(diào)整的衰減因子q 來(lái)觀察其對(duì)認(rèn)證時(shí)延的影響。每個(gè)數(shù)據(jù)都是重復(fù)測(cè)試20 次后取的平均值。實(shí)驗(yàn)結(jié)果如圖3 所示,DPBFT 算法比PBFT 算法所產(chǎn)生的認(rèn)證時(shí)延要小。當(dāng)區(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)量和衰減因子q 確定時(shí),p 的大小決定了節(jié)點(diǎn)選擇性廣播域的大小。從圖中可以看出,p 越小,交易時(shí)延越小,共識(shí)效率越高。但不可為了追求共識(shí)效率設(shè)置很小的p 值,因?yàn)楫?dāng)p 值小于2/3 時(shí),節(jié)點(diǎn)不能接收到足夠的信息進(jìn)入確認(rèn)狀態(tài),導(dǎo)致全網(wǎng)不能共識(shí)。
圖3 相同q 值不同p 值的DPBFT 算法與PBFT 算法的交易時(shí)延
衰減因子q 對(duì)選擇性廣播域的大小沒(méi)有影響,因此其對(duì)共識(shí)效率也沒(méi)有影響。在無(wú)網(wǎng)絡(luò)波動(dòng)的情況下,觀察了區(qū)塊鏈網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)量和影響廣播域因子p 確定時(shí),不同的衰減因子q 對(duì)網(wǎng)絡(luò)共識(shí)時(shí)間的影響,結(jié)果如圖4(a)所示。衰減因子q 越大,最近一次共識(shí)得分對(duì)整體分?jǐn)?shù)的影響效果越大。因此,q 越大,網(wǎng)絡(luò)收斂到最佳廣播域的速度越快。但當(dāng)存在網(wǎng)絡(luò)波動(dòng)時(shí),如圖4(b)所示,最近一次共識(shí)結(jié)果的得分不能象征整體網(wǎng)絡(luò)中節(jié)點(diǎn)的可依靠程度。因此,q 越大,節(jié)點(diǎn)得分調(diào)整幅度過(guò)大,導(dǎo)致一直沒(méi)法收斂到最佳狀態(tài),共識(shí)效率提升不高。所以,為了使共識(shí)效率達(dá)到最理想狀態(tài),應(yīng)該根據(jù)網(wǎng)絡(luò)波動(dòng)情況,選擇合適的q 值。
圖4 相同p 值不同q 值的DPBFT 算法與PBFT 算法的共識(shí)時(shí)間
“吞吐量(Transaction Per Second,TPS)”指的是在單位時(shí)間內(nèi)完成的認(rèn)證的數(shù)量。實(shí)驗(yàn)中每秒向區(qū)塊鏈網(wǎng)絡(luò)發(fā)送100 條認(rèn)證請(qǐng)求,記錄每秒能夠完成認(rèn)證的數(shù)量,并在不同節(jié)點(diǎn)個(gè)數(shù)的情況下進(jìn)行測(cè)試。圖5 所示為改進(jìn)前后的PBFT 的吞吐量對(duì)比圖??梢钥闯?,在相同節(jié)點(diǎn)數(shù)量和相同衰減因子q 的情況下,改進(jìn)的PBFT 算法比PBFT 算法吞吐量高,隨著網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)量的增加,每種算法的吞吐量都會(huì)下降,因?yàn)楣沧R(shí)階段需要廣播的消息變多了。同時(shí),在相同節(jié)點(diǎn)數(shù)量的情況下,p 越小,選擇性廣播域越小,每一條消息的共識(shí)時(shí)間越短,因此吞吐量越高。
圖5 DPBFT 算法與PBFT 算法的吞吐量比較
針對(duì)傳統(tǒng)身份認(rèn)證技術(shù)的弊端,提出了一種基于聯(lián)盟鏈的分布式身份認(rèn)證方法。用戶在業(yè)務(wù)系統(tǒng)注冊(cè)身份之后,身份信息加密廣播共識(shí)到所有聯(lián)盟鏈節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都可以對(duì)注冊(cè)的用戶進(jìn)行認(rèn)證,達(dá)成用戶單點(diǎn)注冊(cè)多點(diǎn)登錄的功能并有效防止了用戶身份隱私泄露的風(fēng)險(xiǎn)。用戶認(rèn)證過(guò)程由全網(wǎng)共識(shí)投票,即使服務(wù)節(jié)點(diǎn)故障,也可依靠整個(gè)系統(tǒng)的分布式魯棒性來(lái)保證認(rèn)證系統(tǒng)的正常工作,提高系統(tǒng)的抗攻擊能力。最后通過(guò)實(shí)驗(yàn)表明,本方法比傳統(tǒng)聯(lián)盟鏈共識(shí)效率更快,吞吐量更高??筛鶕?jù)網(wǎng)絡(luò)情況調(diào)整p、q 值,達(dá)到效率最大化。