趙昶宇
(天津津航計(jì)算技術(shù)研究所,天津 300308)
近年來,IP電話、網(wǎng)絡(luò)視頻會(huì)議、遠(yuǎn)程教育等實(shí)時(shí)流媒體被大量應(yīng)用,這些應(yīng)用大多采用UDP協(xié)議進(jìn)行傳輸。當(dāng)同一時(shí)刻網(wǎng)絡(luò)上出現(xiàn)過多的報(bào)文傳輸時(shí),就可能導(dǎo)致當(dāng)前網(wǎng)絡(luò)的性能急劇下降,這種現(xiàn)象稱為網(wǎng)絡(luò)擁塞。而UDP協(xié)議是一種無連接協(xié)議,雖然它在傳輸速度上有一定的優(yōu)勢(shì),但也存在著缺乏擁塞控制機(jī)制和傳輸可靠性差的問題。網(wǎng)絡(luò)擁塞會(huì)導(dǎo)致多種網(wǎng)絡(luò)傳輸性能大幅度變差,例如吞吐量下降、通訊時(shí)延加大、丟包率增大等,嚴(yán)重時(shí)甚至?xí)?dǎo)致整個(gè)網(wǎng)絡(luò)系統(tǒng)崩潰。擁塞控制就是在網(wǎng)絡(luò)節(jié)點(diǎn)中采取相應(yīng)的措施來避免擁塞現(xiàn)象的產(chǎn)生或者在擁塞發(fā)生時(shí)作出相應(yīng)的反應(yīng)。因此,為UDP協(xié)議集成一種良好、有效的擁塞控制方法既對(duì)工業(yè)網(wǎng)絡(luò)有著重要實(shí)際意義,也有著十分重要的研究?jī)r(jià)值。
網(wǎng)絡(luò)擁塞產(chǎn)生的根本原因是用戶的需求遠(yuǎn)遠(yuǎn)大于網(wǎng)絡(luò)上能夠提供的資源總量,導(dǎo)致網(wǎng)絡(luò)緩存空間不足、通信鏈路帶寬的容量不夠、網(wǎng)絡(luò)節(jié)點(diǎn)的處理能力下降等。當(dāng)網(wǎng)絡(luò)資源不足時(shí),不能減少或控制網(wǎng)絡(luò)用戶的數(shù)量,通常只能依靠降低網(wǎng)絡(luò)服務(wù)質(zhì)量來維持服務(wù)。一旦發(fā)生網(wǎng)絡(luò)擁塞,僅僅通過增加網(wǎng)絡(luò)資源的方式也無法緩解和避免擁塞的現(xiàn)狀。比如,增加網(wǎng)絡(luò)緩存空間后,很多網(wǎng)絡(luò)報(bào)文在消息隊(duì)列中長(zhǎng)時(shí)間處于排隊(duì)狀態(tài),會(huì)出現(xiàn)發(fā)送超時(shí)的現(xiàn)象,引發(fā)報(bào)文超時(shí)重發(fā),并且會(huì)影響下一級(jí)路由器,最終導(dǎo)致網(wǎng)絡(luò)資源浪費(fèi)嚴(yán)重,反而增加了擁塞的程度。因此,單純依靠增加網(wǎng)絡(luò)緩存空間和通信鏈路帶寬容量來提高網(wǎng)絡(luò)節(jié)點(diǎn)的處理能力是不能從根本上解決網(wǎng)絡(luò)擁塞的,必須采用網(wǎng)絡(luò)擁塞控制算法進(jìn)行動(dòng)態(tài)緩解[1]。
目前網(wǎng)絡(luò)擁塞控制算法的設(shè)計(jì)難點(diǎn)主要包括如下方面:①算法的分布性。由于網(wǎng)絡(luò)中的多個(gè)節(jié)點(diǎn)中均需應(yīng)用擁塞控制算法,因此各個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)必須協(xié)調(diào)工作,并使用不完整的信息完成擁塞控制。②網(wǎng)絡(luò)的環(huán)境復(fù)雜性。由于各種因素影響可能導(dǎo)致網(wǎng)絡(luò)傳輸不穩(wěn)定,無法保證網(wǎng)絡(luò)報(bào)文傳輸?shù)恼_性,甚至經(jīng)常會(huì)出現(xiàn)網(wǎng)絡(luò)丟包和報(bào)文亂序到達(dá)的情況,因此必須保證算法具有良好的適應(yīng)性。③算法的性能。在進(jìn)行擁塞控制算法設(shè)計(jì)時(shí)需要全面權(quán)衡算法的公平性、效率、穩(wěn)定性和收斂性等,因此對(duì)算法的性能提出了很高的要求。④算法的開銷。當(dāng)網(wǎng)絡(luò)擁塞發(fā)生時(shí),必須盡可能減少附加網(wǎng)絡(luò)流量,同時(shí)提升了算法設(shè)計(jì)的復(fù)雜性。在研究網(wǎng)絡(luò)擁塞控制算法時(shí),需對(duì)算法的好壞進(jìn)行評(píng)價(jià)。用戶關(guān)心的指標(biāo)是系統(tǒng)吞吐率、網(wǎng)絡(luò)丟包率以及傳輸時(shí)延,而系統(tǒng)更關(guān)注資源分配的效率和資源分配的公平性。
擁塞控制算法從控制理論方面看包括開環(huán)控制算法和閉環(huán)控制算法。其中,在可以事先獲取網(wǎng)絡(luò)的流量特征和性能要求的前提下采用開環(huán)控制算法,若無法準(zhǔn)確描述網(wǎng)絡(luò)流量特征或系統(tǒng)資源沒有預(yù)留時(shí)采用閉環(huán)控制算法。
從擁塞控制算法的實(shí)現(xiàn)位置角度出發(fā),將擁塞控制算法分為鏈路算法和源算法。當(dāng)需要檢測(cè)是否發(fā)生網(wǎng)絡(luò)擁塞,并需要反饋擁塞信息時(shí),在網(wǎng)絡(luò)設(shè)備中可以應(yīng)用鏈路算法;當(dāng)需要根據(jù)反饋的擁塞信息來調(diào)整網(wǎng)絡(luò)發(fā)送速率時(shí),在主機(jī)和網(wǎng)絡(luò)邊緣設(shè)備中可以應(yīng)用源算法。無論是鏈路算法還是源算法,算法的核心是要解決如何生成擁塞反饋信息以及如何對(duì)反饋的擁塞信息進(jìn)行及時(shí)響應(yīng)。
目前最常見的檢測(cè)UDP協(xié)議下?lián)砣刂扑惴ㄈ缦隆?/p>
這種擁塞控制的基本思想是接收端每收到N(N>0)個(gè)包或每隔t(t>0)s向接收端發(fā)送網(wǎng)絡(luò)丟包率的評(píng)估報(bào)告,發(fā)送端根據(jù)返回的丟包率來評(píng)估網(wǎng)絡(luò)擁塞程度,據(jù)此調(diào)整發(fā)送速率。該方法是在網(wǎng)絡(luò)發(fā)生擁塞后采取的措施,不能作為檢測(cè)擁塞的手段,并且這種定時(shí)時(shí)間間隔的大小直接影響擁塞的控制效果。接收端可通過計(jì)算成功接收到的數(shù)據(jù)包個(gè)數(shù)和丟失的數(shù)據(jù)包個(gè)數(shù)來獲取系統(tǒng)的丟包率,參見式(1):
式(1)中:P1為接收端丟包率;N1為丟失的數(shù)據(jù)包個(gè)數(shù);N2為在約定的時(shí)間內(nèi)成功接收到的數(shù)據(jù)包個(gè)數(shù)。
基于丟包率的擁塞控制算法的應(yīng)用前提是假設(shè)UDP通信的路由相對(duì)穩(wěn)定,它是一種基于端對(duì)端的擁塞控制算法。這個(gè)算法的關(guān)鍵是如何設(shè)置計(jì)算丟包率的間隔時(shí)間Δt。若間隔時(shí)間Δt太短,則會(huì)導(dǎo)致網(wǎng)絡(luò)上出現(xiàn)大量的擁塞反饋信息,給網(wǎng)絡(luò)增加額外的負(fù)擔(dān);若間隔時(shí)間Δt太長(zhǎng),又無法及時(shí)體現(xiàn)網(wǎng)絡(luò)的擁塞情況,導(dǎo)致網(wǎng)絡(luò)報(bào)文發(fā)送方無法及時(shí)調(diào)整發(fā)送速率。
該方法采用動(dòng)態(tài)估計(jì)的方式預(yù)測(cè)網(wǎng)絡(luò)擁塞狀況。RTT由通信鏈路的傳播時(shí)間、系統(tǒng)末端的處理時(shí)間以及在路由器緩存中的排隊(duì)和處理時(shí)間組成。通常在同一個(gè)TCP連接的情況下,通信鏈路的傳播時(shí)間和系統(tǒng)末端的處理時(shí)間是相對(duì)固定的,而路由器緩存中的排隊(duì)和處理時(shí)間的長(zhǎng)短則取決于網(wǎng)絡(luò)路由器的擁塞程度。該方法在發(fā)送端每發(fā)送N(N>0)個(gè)數(shù)據(jù)包或者每間隔t(t>0)s發(fā)送幾組探測(cè)包來獲知當(dāng)前網(wǎng)絡(luò)的擁塞程度,從而計(jì)算探測(cè)數(shù)據(jù)包的RTT值[2-3]。根據(jù)本次探測(cè)數(shù)據(jù)包的RTT值動(dòng)態(tài)預(yù)估下一個(gè)探測(cè)數(shù)據(jù)包的RTT值,最終根據(jù)預(yù)估的下一個(gè)探測(cè)數(shù)據(jù)包的RTT值得出下一個(gè)時(shí)間網(wǎng)絡(luò)的擁塞情況,具體算法參見式(2):
式(2)中:P為下一個(gè)時(shí)間的網(wǎng)絡(luò)擁塞情況;eRTT為預(yù)估的下一個(gè)時(shí)間的RTT值;nRTT為最小RTT值。如果P<Tunloaded(網(wǎng)絡(luò)低負(fù)載狀態(tài)),則表示網(wǎng)絡(luò)欠載;如果P>Tloaded(網(wǎng)絡(luò)輕度擁塞狀態(tài)),則表示網(wǎng)絡(luò)擁塞?;谕禃r(shí)延(RTT)的擁塞控制算法雖然理論上可以做到網(wǎng)絡(luò)擁塞的早期檢測(cè),但在實(shí)際網(wǎng)絡(luò)中RTT是很難計(jì)算準(zhǔn)確的,并且它還存在鏈路上的不對(duì)稱性,不能反映單向鏈路上的網(wǎng)絡(luò)狀況問題。
基于UDP協(xié)議進(jìn)行網(wǎng)絡(luò)傳輸時(shí),發(fā)送端將當(dāng)前報(bào)文包的序號(hào)和發(fā)送時(shí)的時(shí)戳作為報(bào)文內(nèi)容發(fā)送給接收端。接收端收到發(fā)送端的報(bào)文后,需要向發(fā)送端反饋接收確認(rèn)報(bào)文,接收確認(rèn)報(bào)文中包含報(bào)文序號(hào)和報(bào)文時(shí)戳,其中報(bào)文序號(hào)與發(fā)送端發(fā)送的報(bào)文序號(hào)相同,報(bào)文時(shí)戳是接收端收到報(bào)文后的時(shí)戳。UDP數(shù)據(jù)包的單程延時(shí)時(shí)間等于接收端發(fā)送的接收確認(rèn)報(bào)文中的時(shí)戳值與發(fā)送端發(fā)送報(bào)文中的時(shí)戳值之差[3]。
發(fā)送端收到接收端發(fā)送的接收確認(rèn)報(bào)文后,首先比較報(bào)文序號(hào)是否相同,若不相同,表明該條接收確認(rèn)報(bào)文不是來自當(dāng)前已發(fā)送報(bào)文的反饋,不計(jì)算單程延時(shí)時(shí)間;若相同,將接收端反饋的時(shí)戳值減去發(fā)送端發(fā)送的時(shí)戳值,得到UDP數(shù)據(jù)包的單程延時(shí)時(shí)間。由于網(wǎng)絡(luò)擁塞的狀況是動(dòng)態(tài)變化的,因此UDP數(shù)據(jù)包的單程延時(shí)時(shí)間也是動(dòng)態(tài)變化的,其不確定性體現(xiàn)在接收端反饋的時(shí)戳值是變化的。利用低通濾波器預(yù)測(cè)第n+1包的單程延時(shí)時(shí)間為:
式(3)中:α(0<α<1)為修正因子;bn為當(dāng)前實(shí)際測(cè)量的單程延時(shí)時(shí)間,根據(jù)α的大小可調(diào)節(jié)bn對(duì)Dn的影響;Dn為預(yù)測(cè)的第n包的單程延時(shí)時(shí)間。
在式(3)中,令D2=b1,即用實(shí)測(cè)得到的b1值作為第2包的單程預(yù)測(cè)延時(shí)時(shí)間。
根據(jù)UDP數(shù)據(jù)包的單程延時(shí)時(shí)間的波動(dòng)預(yù)測(cè)擁塞程度,定義UDP數(shù)據(jù)包的接收時(shí)間間隔和發(fā)送時(shí)間間隔的差值達(dá)到一定程度時(shí),表明網(wǎng)絡(luò)發(fā)生擁塞。相鄰2包的接收時(shí)間間隔和發(fā)送時(shí)間間隔差值越大,表明擁塞越嚴(yán)重。根據(jù)時(shí)間間隔差值的偏差程度定義UDP擁塞級(jí)別,并將UDP擁塞級(jí)別劃分為空閑、良好和擁塞3種。
令第n包報(bào)文的發(fā)送時(shí)戳為STn,第n+1包報(bào)文的發(fā)送時(shí)戳為STn+1,第n包報(bào)文的接收時(shí)戳為RTn,第n+1包報(bào)文的接收時(shí)戳為RTn+1,根據(jù)UDP數(shù)據(jù)包的接收時(shí)間間隔和發(fā)送時(shí)間間隔差值的偏差程度定義擁塞級(jí)別。
令L為擁塞級(jí)別,其計(jì)算方法如下:
式(4)中:RTn+1-RTn為相鄰2包的接收時(shí)間間隔;STn+1-STn為相鄰2包的發(fā)送時(shí)間間隔。L的值越大,表明網(wǎng)絡(luò)上數(shù)據(jù)包的延遲越大,網(wǎng)絡(luò)擁塞程度越高。
預(yù)測(cè)UDP擁塞級(jí)別的流程如圖1所示。
圖1 預(yù)測(cè)UDP擁塞級(jí)別的流程圖
將擁塞級(jí)別劃分為以下幾個(gè)等級(jí),如表1所示。
表1 擁塞級(jí)別的等級(jí)
為保證UDP發(fā)送速率的調(diào)整更為平滑,降低速率控制中存在的抖動(dòng)性,采用和式增加和和式減少的自適應(yīng)參數(shù)控制方法調(diào)整發(fā)送速率,有效緩解了網(wǎng)絡(luò)擁塞。
本文調(diào)整數(shù)據(jù)包發(fā)送速率的時(shí)機(jī)是在執(zhí)行完一次“發(fā)送—接收”操作后判斷擁塞級(jí)別后立即調(diào)整的,最大限度壓縮了擁塞級(jí)別的判斷間隔時(shí)間。為了滿足UDP數(shù)據(jù)包在傳輸過程中對(duì)負(fù)載平滑性的要求,采用自適應(yīng)參數(shù)設(shè)置的和式增加、和式減少的速率控制方法。
令UDP數(shù)據(jù)包傳輸速度區(qū)間范圍為[Ratemin,Ratemax],其中Ratemin為UDP數(shù)據(jù)包可接受的最小傳輸速率,Ratemax為UDP數(shù)據(jù)包的目標(biāo)速率,令Ratenow為UDP數(shù)據(jù)包的即時(shí)發(fā)送速率。
當(dāng)網(wǎng)絡(luò)處于空閑狀態(tài)時(shí),即0<L≤Wu,UDP數(shù)據(jù)包的即時(shí)發(fā)送速率Ratenow=min{Ratenow+β,Ratemax}。
此時(shí)網(wǎng)絡(luò)處于欠載狀態(tài),為了能快速充分利用網(wǎng)絡(luò)資源,β的取值由決定,即β的取值范圍為[Ratemax×20%,Ratemax×40%]。
當(dāng)網(wǎng)絡(luò)處于擁塞狀態(tài)時(shí),即L≥Wl,UDP數(shù)據(jù)包的即時(shí)發(fā)送速率Ratenow=max{Ratenow-γ,Ratemin}。
此時(shí)網(wǎng)絡(luò)處于擁塞狀態(tài),為了實(shí)現(xiàn)網(wǎng)絡(luò)負(fù)載平滑,γ的取值由決定。
上式中β為和式加因子,γ為和式減因子,β和γ的值根據(jù)擁塞級(jí)別L的值動(dòng)態(tài)確定[4]。
上述調(diào)整發(fā)送速率算法是為了當(dāng)網(wǎng)絡(luò)出現(xiàn)擁塞現(xiàn)象時(shí),在當(dāng)前的擁塞級(jí)別上減小相應(yīng)的一個(gè)定量的發(fā)送速率,緩解當(dāng)前的擁塞;當(dāng)網(wǎng)絡(luò)處于空閑狀態(tài)時(shí),增加一個(gè)定量的發(fā)送速率,充分利用網(wǎng)絡(luò)資源,這樣做能夠?qū)崿F(xiàn)實(shí)時(shí)流媒體應(yīng)用的負(fù)載平滑。
針對(duì)UDP協(xié)議傳輸可靠性差及缺乏擁塞控制機(jī)制的問題,本文提出了一種預(yù)測(cè)UDP擁塞程度的方法。本文提出的方法能夠根據(jù)單向鏈路的網(wǎng)絡(luò)狀況預(yù)測(cè)UDP網(wǎng)絡(luò)擁塞,同時(shí)不會(huì)增加網(wǎng)絡(luò)負(fù)擔(dān),導(dǎo)致網(wǎng)絡(luò)丟包率增大;該方法計(jì)算簡(jiǎn)單,最大限度壓縮了擁塞級(jí)別的判斷間隔時(shí)間,并采用線性函數(shù)動(dòng)態(tài)調(diào)整發(fā)送速率,提高了網(wǎng)絡(luò)資源的利用率,降低了數(shù)據(jù)包的丟包率。