端木占軍
廣域網(wǎng)中擁塞控制方法
端木占軍
計(jì)算機(jī)網(wǎng)絡(luò)吞吐量將隨輸入負(fù)荷的增大而下降,造成擁塞。本文提出的解決方案,可以有效進(jìn)行控制,網(wǎng)絡(luò)不易出現(xiàn)擁塞現(xiàn)象和死鎖。
擁塞 死鎖 結(jié)點(diǎn)緩存 擁塞控制機(jī)制
計(jì)算機(jī)網(wǎng)絡(luò)中的網(wǎng)絡(luò)資源包括鏈路容量(即帶寬)、交換結(jié)點(diǎn)中的緩存和處理機(jī)速度。在某段時(shí)間,若對(duì)網(wǎng)絡(luò)中某一資源的需求超過了該資源所能提供的范圍,網(wǎng)絡(luò)的性能就要變壞,這種情況就叫做擁塞(congestion)。網(wǎng)絡(luò)擁塞往往是由許多因素引起的,如帶寬、結(jié)點(diǎn)緩存的容量、結(jié)點(diǎn)處理機(jī)的速度,及包的生存時(shí)間等。TCP擁塞控制機(jī)制包括慢啟動(dòng)(slow start)、擁塞避免、快速重傳(fast retransmit)、快速恢復(fù)(fast recovery)、選擇性應(yīng)答(SACK)等。通過在終端上對(duì)網(wǎng)絡(luò)的擁塞情況作出適當(dāng)?shù)恼{(diào)整,可以大大提高網(wǎng)絡(luò)傳輸?shù)男阅?,減少擁塞發(fā)生的可能性。
圖一 網(wǎng)絡(luò)中擁塞控制的作用
在一個(gè)源IP主機(jī)和一個(gè)目標(biāo)IP主機(jī)之間(單播)或者一個(gè)源IP主機(jī)和網(wǎng)絡(luò)中所有的IP主機(jī)之間(廣播)進(jìn)行的?,F(xiàn)在要將信息發(fā)送給網(wǎng)絡(luò)中的多個(gè)而非所有IP主機(jī),如果采用傳統(tǒng)的IP通信技術(shù)就有兩種方法可以選擇:要么采用廣播方式,要么由源IP主機(jī)分別向網(wǎng)絡(luò)中的多個(gè)目標(biāo)IP主機(jī)單播發(fā)送IP包。廣播方式不僅會(huì)將信息發(fā)送給不需要的IP主機(jī)而浪費(fèi)帶寬,也可能由于路由回環(huán)引起一場(chǎng)嚴(yán)重的廣播風(fēng)暴。單播方式由于IP包的重復(fù)發(fā)送而白白浪費(fèi)掉大量帶寬,同時(shí)也增加了服務(wù)器的負(fù)載。傳統(tǒng)網(wǎng)絡(luò)設(shè)備采用被動(dòng)隊(duì)列管理PQM來(lái)管理網(wǎng)絡(luò)中間節(jié)點(diǎn)數(shù)據(jù)包的排隊(duì),它采用FIFO的Drop-tail丟包策略,僅在輸入溢出時(shí)進(jìn)行丟包,這種方式容易產(chǎn)生鎖外、滿列、全局同步等問題,可見傳統(tǒng)的IP通信技術(shù)不能有效地解決單點(diǎn)發(fā)送多點(diǎn)接收的問題。
3.2 圖一橫坐標(biāo)是提供的負(fù)載(offered load),代表單位時(shí)間內(nèi)輸入給網(wǎng)絡(luò)的分組數(shù)目,因此,提供的負(fù)載也稱為輸入負(fù)載或網(wǎng)絡(luò)負(fù)載??v坐標(biāo)是吞吐量(throughput),代表單位時(shí)間內(nèi)從網(wǎng)絡(luò)輸出的分組數(shù)目。具有理想擁塞控制的網(wǎng)絡(luò),在吞吐量飽和之前,網(wǎng)絡(luò)吞吐量應(yīng)等于提供的負(fù)載,故吞吐量曲線是45°的斜線。但當(dāng)提供的負(fù)載超過某一限度時(shí),由于網(wǎng)絡(luò)資源受限,吞吐量不再增長(zhǎng)而保持為水平線,即吞吐量達(dá)到飽和,這就表明提供的負(fù)載中有一部分損失掉了(例如,輸入到網(wǎng)絡(luò)的某些分組被某個(gè)結(jié)點(diǎn)丟棄了)。死鎖(deadlock)。圖一顯示隨著提供的負(fù)載的增大,網(wǎng)絡(luò)吞吐量的增長(zhǎng)速率逐漸減小。也就是說(shuō),在網(wǎng)絡(luò)吞吐量還未達(dá)到飽和時(shí),就已經(jīng)有一部分的輸入分組被丟棄了。當(dāng)網(wǎng)絡(luò)的吞吐量明顯地小于理想的吞吐量時(shí),網(wǎng)絡(luò)就進(jìn)入了輕度擁塞的狀態(tài)。更值得注意的是,當(dāng)輸入負(fù)載達(dá)到某一數(shù)值時(shí),網(wǎng)絡(luò)的吞吐量反而隨提供的負(fù)載的增大而下降,這時(shí)網(wǎng)絡(luò)就進(jìn)入了擁塞狀態(tài)。當(dāng)輸入的負(fù)載繼續(xù)增大到某一數(shù)值時(shí),網(wǎng)絡(luò)的吞吐量就下降到零,網(wǎng)絡(luò)已無(wú)法工作。
3.3 使用擁塞控制算法。TCP是目前在互聯(lián)網(wǎng)中使用最廣泛的傳輸協(xié)議。廣義的來(lái)講,TCP擁塞控制的概念是每個(gè)源端判斷當(dāng)前網(wǎng)絡(luò)中有多少可用容量,從而知道它可以安全完成傳送的分組數(shù)。一旦某個(gè)源端有這么多分組在傳送,它用確認(rèn)(ACK)信號(hào)的到達(dá)表明它有一個(gè)分組已經(jīng)離開網(wǎng)絡(luò),因而它不需要增加擁塞級(jí)別就可以安全地向網(wǎng)絡(luò)中發(fā)送一個(gè)新的分組,通過使用確認(rèn)信息來(lái)協(xié)調(diào)分組的傳送,TCP稱為自同步(self-clocking)的。
3.4 目前TCP使用丟包作為隱式的擁塞指示信號(hào),即發(fā)送方檢測(cè)到重復(fù)的ACK或者重傳超時(shí)的時(shí)候認(rèn)為發(fā)生擁塞,這種機(jī)制在用于檢測(cè)擁塞時(shí)開銷較大,需要等待較長(zhǎng)的周期才能發(fā)現(xiàn)擁塞,降低了擁塞控制的效率。為此,顯示擁塞通告算法ECN可以減少由于不比要的丟包產(chǎn)生的延時(shí),其主要思想是通過路由器對(duì)擁塞的判斷,顯示的設(shè)置擁塞標(biāo)記,發(fā)送端主機(jī)通過網(wǎng)絡(luò)中返回的帶擁塞反饋標(biāo)記的包發(fā)現(xiàn)擁塞。
3.5 新的互聯(lián)網(wǎng)擁塞控制機(jī)制XCP。XCP(eXplicit Control Protocol)事實(shí)上是對(duì)ECN機(jī)制的一種擴(kuò)充,它的主要思想是充分利用網(wǎng)絡(luò)中間節(jié)點(diǎn)對(duì)鏈路帶寬的認(rèn)知,為端到端擁塞控制機(jī)制提供比是否發(fā)生擁塞更多和更有效的網(wǎng)絡(luò)帶寬提示,從而使控制機(jī)制能夠更快的適應(yīng)當(dāng)前的網(wǎng)絡(luò)狀況。
3.6 TCP中使用的擁塞控制算法已經(jīng)成為保證目前互聯(lián)網(wǎng)穩(wěn)定性的重要因素。
在擁塞控制時(shí)付出的代價(jià)就是:當(dāng)輸入的負(fù)載較小時(shí),有實(shí)際擁塞控制的吞吐量反而比無(wú)擁塞控制時(shí)要小。