任雁
(長(zhǎng)治學(xué)院計(jì)算機(jī)系,山西長(zhǎng)治046011)
基于窗口滑動(dòng)協(xié)議的UDP傳輸研究
任雁
(長(zhǎng)治學(xué)院計(jì)算機(jī)系,山西長(zhǎng)治046011)
文章解釋了滑動(dòng)窗口傳輸協(xié)議的概念,并與傳統(tǒng)的UDP傳輸方式進(jìn)行了比較,針對(duì)其在傳輸網(wǎng)絡(luò)中的應(yīng)用進(jìn)行了探討。并模仿了窗口滑動(dòng)協(xié)議傳輸方式,完整、高效的對(duì)數(shù)據(jù)進(jìn)行了實(shí)時(shí)傳輸,確保了數(shù)據(jù)文件在網(wǎng)絡(luò)傳輸應(yīng)用中的可靠性和高效性,為P2P網(wǎng)絡(luò)傳輸提供了參考。
UDP,窗口滑動(dòng)協(xié)議,C++
窗口滑動(dòng)協(xié)議[1]一般應(yīng)用于大數(shù)據(jù)實(shí)時(shí)傳輸。為確保數(shù)據(jù)傳輸?shù)目煽颗c高效,協(xié)議允許發(fā)送端在傳輸過(guò)程中可以一次性發(fā)送多個(gè)數(shù)據(jù)分組,在接收端確認(rèn)收到所有數(shù)據(jù)包,并規(guī)定只有接收端向前滑動(dòng)窗口時(shí),發(fā)送端才能向前滑動(dòng)窗口。接收方和發(fā)送方按照上面的規(guī)律不斷向前滑動(dòng)。
與傳統(tǒng)的傳輸方式(發(fā)送端每發(fā)送一個(gè)數(shù)據(jù)包后,必須等待接收端的確認(rèn),才能繼續(xù)發(fā)送下一個(gè)數(shù)據(jù)包)相比較,窗口滑動(dòng)協(xié)議可以在未接收到確認(rèn)消息之前,一次發(fā)送多個(gè)數(shù)據(jù)包,避免了發(fā)送端在數(shù)據(jù)傳輸過(guò)程中頻繁的等待確認(rèn),從而大大提高了傳輸效率。此外,窗口傳輸協(xié)議還可以很好的解決端到端的通信流量控制問(wèn)題,它允許接收端在擁有足夠數(shù)據(jù)緩沖之前對(duì)傳輸進(jìn)行限制。在實(shí)時(shí)傳輸中,滑動(dòng)窗口的大小可以隨時(shí)調(diào)整,接收端在進(jìn)行分組確認(rèn)時(shí),還可以交換滑動(dòng)窗口控制信息,使收發(fā)兩端的窗口大小可以根據(jù)需要?jiǎng)討B(tài)調(diào)整,在高效率傳輸數(shù)據(jù)的同時(shí),避免擁塞的發(fā)生。
2.1停止等待協(xié)議
當(dāng)發(fā)送端窗口和接收端窗口的大小都等于1時(shí)。
2.2回退N步協(xié)議
當(dāng)發(fā)送端窗口大于1,接收端窗口等于1時(shí)。
2.3選擇重發(fā)協(xié)議
當(dāng)發(fā)送端窗口和接收端窗口大小都大于1時(shí)。
假設(shè)發(fā)送窗口和接收窗口尺寸都為2。
首先,發(fā)送端無(wú)數(shù)據(jù)發(fā)出,發(fā)送窗口前后沿重合,接收端0號(hào)、1號(hào)窗口打開,等待接收0號(hào)、1號(hào)幀;發(fā)送方打開0號(hào)、1號(hào)窗口,表示0、1幀均在等待確認(rèn)隊(duì)列,發(fā)送方此時(shí)打開的窗口數(shù)已經(jīng)達(dá)到最大,在未收到新的確認(rèn)回復(fù)幀之前,將暫停發(fā)送新的數(shù)據(jù)幀。
接收方收到0號(hào)、1號(hào)幀,0、1號(hào)窗口關(guān)閉,2號(hào)、3號(hào)窗口打開,表示準(zhǔn)備接收2號(hào)、3號(hào)幀數(shù)據(jù);
發(fā)送方收到從接收方發(fā)來(lái)的0號(hào)、1號(hào)幀確認(rèn)回復(fù)信息后,關(guān)閉0號(hào)、1號(hào)窗口,表示從重發(fā)表中刪除0號(hào)、1號(hào)幀數(shù)據(jù),發(fā)送方繼續(xù)發(fā)送2、3號(hào)數(shù)據(jù)幀,2號(hào)、3號(hào)窗口打開,2、3號(hào)幀進(jìn)入等待確認(rèn)隊(duì)列。此時(shí),發(fā)送方打開的窗口數(shù)已經(jīng)達(dá)到最大值,在未收到新的確認(rèn)回復(fù)幀之前,將暫停發(fā)送新的數(shù)據(jù)幀。
接收方收到2、3號(hào)數(shù)據(jù)幀,2、3號(hào)窗口關(guān)閉,4、5號(hào)窗口打開,表示準(zhǔn)備接收4、5號(hào)幀。
發(fā)送方收到從接收方發(fā)來(lái)的2號(hào)、3號(hào)幀確認(rèn)回復(fù)信息后,關(guān)閉2號(hào)、3號(hào)窗口,表示從重發(fā)表中刪除2號(hào)、3號(hào)幀數(shù)據(jù),發(fā)送方繼續(xù)發(fā)送4、5號(hào)數(shù)據(jù)幀,4號(hào)、5號(hào)窗口打開。像這樣,窗口一直持續(xù)不斷的向前遞延,直到最后一幀數(shù)據(jù)被發(fā)送完成。如發(fā)送方發(fā)送的幀數(shù)據(jù)在設(shè)定時(shí)間內(nèi)未得到響應(yīng),將啟動(dòng)超時(shí)重發(fā)機(jī)制,對(duì)該數(shù)據(jù)進(jìn)行重發(fā),直至收到對(duì)方確認(rèn)回復(fù)信息。
文章采用C++編程語(yǔ)言進(jìn)行具體實(shí)現(xiàn)。
首先定義幀數(shù)據(jù)相關(guān)數(shù)據(jù)結(jié)構(gòu),格式如下:
在程序開始,需將上面相關(guān)數(shù)據(jù)初始化為0,這里不在一一列舉。接收端需建立相關(guān)監(jiān)聽程序,用來(lái)監(jiān)聽是否收到信息,并對(duì)接收到的幀信息進(jìn)行處理,例如拷貝數(shù)據(jù)段信息:
設(shè)置標(biāo)記為已接收:slot->recevied=TRUE。
回傳幀頭部信息:send_socket(LINK,m,ALEN)。
發(fā)送端需建立相關(guān)處理程序,用來(lái)接收確認(rèn)回復(fù)信息:slot=&state->sendQ[state->LAR++% SWS]。
刪除超時(shí)重發(fā)隊(duì)列相關(guān)信息:evCancel (&slot->timeout)。
發(fā)送端在未接收到新的回復(fù)信息時(shí),需等待發(fā)送窗口的打開:wait_for_semaphore= WaitForSingleObject(*sendWindowNotFull,-1);當(dāng)有消息進(jìn)入,并已確認(rèn)可以發(fā)送下一幀數(shù)據(jù)時(shí),需將幀序號(hào)加1,state->hdr.SeqNum=state->LFS++;并拷貝相關(guān)信息,msgAddHdr(frame,hbuf);msgSaveCopy (slot->msg,frame);發(fā)送并同時(shí)打開計(jì)時(shí)器slot->timeout=evSchedule(frame,SWP_SEND_ TIMEOUT);send_socket(LINK,frame,HLEN+DLEN)。如果在設(shè)定時(shí)間內(nèi),未收到對(duì)方確認(rèn)接收信息,那么,該條信息將被重新發(fā)送,程序則會(huì)一直重復(fù)下去,新的窗口被不斷的打開,直到所有數(shù)據(jù)傳輸完畢。
因篇幅所限,例如端口設(shè)置、創(chuàng)建綁定與監(jiān)聽線程、捕獲異常等基礎(chǔ)功能將不再贅述。
UDP是一種高效的傳輸協(xié)議,為了彌補(bǔ)它在傳輸過(guò)程中很容易丟包的缺點(diǎn),文章引入了滑動(dòng)窗口傳輸協(xié)議。與普通的傳輸方式相比,它的傳輸更加的有效,也更加的靈活。在數(shù)據(jù)傳輸和通信服務(wù)與日俱增的今天,滑動(dòng)窗口協(xié)議不失為一種較好的選擇。
[1]陳川,林亞平.滑動(dòng)窗口協(xié)議分析及其在微機(jī)上的模擬實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2000,2(2):24-26.
[2]Debbie Leung,Jonathan Oppenheim,Andreas Winter.Quantum Network Communication-TheButterfly and Beyond.IEEE Transactions on Information Theory.2010.
(責(zé)任編輯張劍妹)
TP393.021
A
1673-2014(2016)05-0040-02
長(zhǎng)治學(xué)院校級(jí)科研課題“基于IPv4向IPv6過(guò)渡的NAT穿越技術(shù)研究”(201520)。
2016—09—06
任雁(1984—),女,山西長(zhǎng)治人,實(shí)驗(yàn)師,主要從事無(wú)線寬帶通信研究。
長(zhǎng)治學(xué)院學(xué)報(bào)2016年5期