本發(fā)明屬于通信技術(shù)領(lǐng)域,尤其涉及一種移動(dòng)Ad-hoc網(wǎng)絡(luò)中TCP連接性能的優(yōu)化方法。
背景技術(shù):
移動(dòng)Ad-hoc網(wǎng)絡(luò)是一種移動(dòng)通信和計(jì)算機(jī)網(wǎng)絡(luò)相結(jié)合的網(wǎng)絡(luò),是移動(dòng)計(jì)算機(jī)網(wǎng)絡(luò)的一種,用戶終端可以在網(wǎng)內(nèi)隨意移動(dòng)而保持通信。它是一種多跳的臨時(shí)性自治系統(tǒng),并且是一種分布式網(wǎng)絡(luò)。
傳輸控制協(xié)議(Transmission Control Protocol,TCP)是一種可靠的通信協(xié)議,工作于網(wǎng)絡(luò)中的傳輸層,它是獨(dú)立的且與底層網(wǎng)絡(luò)技術(shù)無關(guān)的一種協(xié)議。為了提供可靠的服務(wù),傳輸控制協(xié)議采用了超時(shí)重傳、發(fā)送和接收端到端的分組確認(rèn)機(jī)制等。但是在移動(dòng)自組織網(wǎng)絡(luò)中,路徑十分不穩(wěn)定,并且TCP端到端的數(shù)據(jù)可靠性檢測(cè)也存在著不足。這也導(dǎo)致了TCP的可靠性無法得到很好地保障,表征為移動(dòng)Ad-hoc網(wǎng)絡(luò)中TCP連接性能的下降。針對(duì)這一問題,已有的解決方案為:逐跳傳輸協(xié)議與分裂TCP方法。
逐跳傳輸協(xié)議在每一個(gè)節(jié)點(diǎn)都進(jìn)行數(shù)據(jù)包的可靠性檢測(cè),這在一定程度上可以提升數(shù)據(jù)的正確性并且提升吞吐量。該方法將一次檢驗(yàn)轉(zhuǎn)變?yōu)槎啻螜z驗(yàn)以提升可靠性,但是這一方法會(huì)更多地使用帶寬,能量以及存儲(chǔ)這一類的在網(wǎng)絡(luò)中比較稀缺的資源,并不適合于實(shí)際應(yīng)用。
分裂TCP方法則是通過將一個(gè)TCP連接分為多個(gè)TCP短連接,代理節(jié)點(diǎn)則作為每一個(gè)TCP短連接的終端節(jié)點(diǎn),這一方法在每一個(gè)短的TCP連接上完成可靠性檢測(cè)。分裂TCP方法也采用了分割的思路。雖然這一方法在TCP連接較少時(shí)表現(xiàn)良好,但是隨著TCP連接的增加,不僅僅代理節(jié)點(diǎn)的數(shù)量需要增加,這些節(jié)點(diǎn)的開銷也將大大增加。因此這一方法并不能適用于所有的實(shí)際情況。
總的來說,所有的解決移動(dòng)自組織網(wǎng)絡(luò)中TCP連接性能下降的方法均采用分割的思路。即將單一的端到端檢測(cè)分解為多個(gè)端到一個(gè)端以及多個(gè)端到端的檢測(cè),通過多次檢測(cè)來提高數(shù)據(jù)包的可靠性并且提高吞吐量。但是在分割的同時(shí),這些方法對(duì)于資源的使用卻無法做到優(yōu)化。因此,這些方法在使用了大量資源且付出了巨大開銷之后才可以達(dá)到相應(yīng)的目標(biāo),它們是低效的,并未從實(shí)質(zhì)上解決TCP端到端檢測(cè)存在的不足以及隨之而造成的TCP連接性能的下降。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于解決移動(dòng)Ad-hoc網(wǎng)絡(luò)中TCP連接性能差的問題,提出一種移動(dòng)Ad-hoc網(wǎng)絡(luò)中TCP連接性能的優(yōu)化方法,不需要使用過多的開銷分裂TCP段,且無需在每一個(gè)節(jié)點(diǎn)處檢查TCP包,僅通過使用單一的代理節(jié)點(diǎn),在傳輸層采用代理輔助方法來解決端到端以及逐跳傳輸方法低效率的問題。本發(fā)明所述的移動(dòng)Ad-hoc網(wǎng)絡(luò)中的TCP連接性能優(yōu)化方法適用于TCP協(xié)議的各個(gè)版本,能顯著降低開銷并提升吞吐量,從而提供一個(gè)高效率的方法。
本發(fā)明解決上述技術(shù)問題所采取的技術(shù)方案如下:
一種移動(dòng)Ad-hoc網(wǎng)絡(luò)中TCP連接性能的優(yōu)化方法,包括(1)選取代理節(jié)點(diǎn)、(2)代理節(jié)點(diǎn)進(jìn)行序列號(hào)檢測(cè)、(3)代理節(jié)點(diǎn)通知源節(jié)點(diǎn)TCP包丟失、(4)源節(jié)點(diǎn)接收丟失信息并重傳。
進(jìn)一步根據(jù)本發(fā)明所述一種移動(dòng)Ad-hoc網(wǎng)絡(luò)中TCP連接性能的優(yōu)化方法,(1)選取代理節(jié)點(diǎn),包括以下步驟:
(1-1)、在接收到來自應(yīng)用層的數(shù)據(jù)包后,移動(dòng)自組織網(wǎng)需要建立源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的連接,源節(jié)點(diǎn)向目的節(jié)點(diǎn)發(fā)送路徑請(qǐng)求RREQ,源節(jié)點(diǎn)向目的節(jié)點(diǎn)發(fā)送的路徑請(qǐng)求中包含源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的總跳數(shù)HC,RREQ通過各個(gè)中間節(jié)點(diǎn)最終到達(dá)目的節(jié)點(diǎn);
(1-2)、目的節(jié)點(diǎn)收到發(fā)自源節(jié)點(diǎn)的RREQ,從中讀取源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的總跳數(shù),若總跳數(shù)大于最小允許跳數(shù)值(最小允許跳數(shù)值表示在源節(jié)點(diǎn)與目的節(jié)點(diǎn)間采用代理節(jié)點(diǎn)時(shí)的最小跳數(shù)值,總跳數(shù)大于最小允許跳數(shù)值,則在源節(jié)點(diǎn)與目的節(jié)點(diǎn)間選取代理節(jié)點(diǎn),總跳數(shù)不大于最小允許跳數(shù)值,則不在源節(jié)點(diǎn)與目的節(jié)點(diǎn)間選取代理節(jié)點(diǎn),優(yōu)選的,最小允許跳數(shù)值設(shè)置為3),則在源節(jié)點(diǎn)與目的節(jié)點(diǎn)間選取代理節(jié)點(diǎn)并進(jìn)入(1-3),若總跳數(shù)不大于最小允許跳數(shù)值,則不在源節(jié)點(diǎn)與目的節(jié)點(diǎn)間選取代理節(jié)點(diǎn),目的節(jié)點(diǎn)與源節(jié)點(diǎn)之間采用正常的方式傳輸來自應(yīng)用層的數(shù)據(jù)包;
(1-3)、目的節(jié)點(diǎn)獲得代理跳數(shù),若源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的總跳數(shù)HC為偶數(shù),則將源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的總跳數(shù)HC除以2,得到代理跳數(shù)PHC,若源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的總跳數(shù)HC為奇數(shù),則將源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的總跳數(shù)HC加1后除以2,得代理跳數(shù)PHC;
(1-4)、目的節(jié)點(diǎn)向源節(jié)點(diǎn)回返一個(gè)路徑請(qǐng)求回應(yīng)消息RREP,其中包含上述在(1-3)中計(jì)算出的代理跳數(shù)PHC,該RREP經(jīng)過源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的各個(gè)中間節(jié)點(diǎn)到達(dá)源節(jié)點(diǎn),各個(gè)中間節(jié)點(diǎn)在接收到RREP時(shí),讀取RREP中包含的代理跳數(shù)PHC以及RREP所記錄的跳數(shù),并將RREP包含的代理跳數(shù)PHC與RREP所記錄的跳數(shù)進(jìn)行比較,其中RREP所記錄的跳數(shù)從目的節(jié)點(diǎn)處開始起算,由0開始,RREP每經(jīng)過一跳,RREP所記錄的跳數(shù)就增加1,直至RREP被傳送至源節(jié)點(diǎn),若中間節(jié)點(diǎn)所讀取的RREP中所包含的代理跳數(shù)PHC與RREP所記錄的跳數(shù)相等,該中間節(jié)點(diǎn)便被選為代理節(jié)點(diǎn),并將RREP繼續(xù)向源節(jié)點(diǎn)傳送,若RREP中包含的代理跳數(shù)PHC與RREP所記錄的跳數(shù)不等,則該中間節(jié)點(diǎn)就不被選為代理節(jié)點(diǎn),僅將RREP繼續(xù)向源節(jié)點(diǎn)傳送,通過這樣的RREP的傳遞過程,在中間節(jié)點(diǎn)中選取出代理節(jié)點(diǎn);
(1-5)、代理節(jié)點(diǎn)向目的節(jié)點(diǎn)發(fā)送一個(gè)代理信息P-INFORM包以告知目的節(jié)點(diǎn)代理節(jié)點(diǎn)的地址即代理地址,代理信息包中包括代理地址;
(1-6)、代理節(jié)點(diǎn)與目的節(jié)點(diǎn)間的各個(gè)中間節(jié)點(diǎn)在收到代理信息包P-INFORM后,各個(gè)中間節(jié)點(diǎn)讀取代理信息P-INFORM包中的代理地址,并進(jìn)行記錄;
(1-7)、代理節(jié)點(diǎn)將代理節(jié)點(diǎn)的地址附加到向源節(jié)點(diǎn)回送的RREP中,代理節(jié)點(diǎn)與源節(jié)點(diǎn)間的各個(gè)中間節(jié)點(diǎn)在收到RREP后,各個(gè)中間節(jié)點(diǎn)讀取代理信息 P-INFORM包中的代理地址并進(jìn)行記錄,網(wǎng)絡(luò)中的所有節(jié)點(diǎn)均確認(rèn)了被選為代理節(jié)點(diǎn)的中間節(jié)點(diǎn)在網(wǎng)絡(luò)中的位置。
進(jìn)一步根據(jù)本發(fā)明所述一種移動(dòng)Ad-hoc網(wǎng)絡(luò)中TCP連接性能的優(yōu)化方法,(2)代理節(jié)點(diǎn)進(jìn)行序列號(hào)檢測(cè),代理節(jié)點(diǎn)通過維護(hù)當(dāng)前序列號(hào)cur_seqno與期望序列號(hào)exp_seqno來判斷數(shù)據(jù)傳輸過程中是否出現(xiàn)TCP包丟失的情況,包括以下步驟:
(2-1)、代理節(jié)點(diǎn)維護(hù)當(dāng)前序列號(hào)cur_seqno與期望序列號(hào)exp_seqno,源節(jié)點(diǎn)向目的節(jié)點(diǎn)發(fā)送TCP包時(shí),TCP包從源節(jié)點(diǎn)處經(jīng)過中間節(jié)點(diǎn)傳輸至代理節(jié)點(diǎn),代理節(jié)點(diǎn)每次接收到發(fā)送自源節(jié)點(diǎn)的TCP包后都按照如下過程更新當(dāng)前序列號(hào)cur_seqno與期望序列號(hào)exp_seqno:代理節(jié)點(diǎn)將當(dāng)前序列號(hào)cur_seqno設(shè)置為接收到的TCP包的序列號(hào)tcp_seqno,若當(dāng)前序列號(hào)cur_seqno為1,則將期望序列號(hào)exp_seqno設(shè)置為當(dāng)前序列號(hào),若果當(dāng)前序列號(hào)cur_seqno不為1,則將期望序列號(hào)exp_seqno加1。代理節(jié)點(diǎn)每次按照上述過程更新當(dāng)前序列號(hào)cur_seqno與期望序列號(hào)exp_seqno。
(2-2)、代理節(jié)點(diǎn)將當(dāng)前序列號(hào)cur_seqno與期望序列號(hào)exp_seqno作比較,若當(dāng)前序列號(hào)cur_seqno與期望序列號(hào)exp_seqno相等,說明沒有任何TCP包丟失,若期望序列號(hào)exp_seqno小于當(dāng)前序列號(hào)cur_seqno,說明發(fā)生TCP包丟失,則代理節(jié)點(diǎn)將期望序列號(hào)exp_seqno作為首個(gè)丟失序列號(hào)first_miss_seqno,將當(dāng)前序列號(hào)cur_seqno減去期望序列號(hào)exp_seqno的值作為丟失TCP包的數(shù)量num_miss_pktcp并進(jìn)入(3),若期望序列號(hào)exp_seqno大于當(dāng)前序列號(hào)cur_seqno,說明重傳的TCP包被接收,則代理節(jié)點(diǎn)不再增加期望序列號(hào)exp_seqno的值,取當(dāng)前序列號(hào)cur_seqno與期望序列號(hào)exp_seqno的最大值作為期望序列號(hào)exp_seqno。
進(jìn)一步根據(jù)本發(fā)明所述一種移動(dòng)Ad-hoc網(wǎng)絡(luò)中TCP連接性能的優(yōu)化方法,(3)代理節(jié)點(diǎn)通知源節(jié)點(diǎn)TCP包丟失,代理節(jié)點(diǎn)向源節(jié)點(diǎn)發(fā)送代理確認(rèn)信息PACK包,代理確認(rèn)信息PACK包中包含在(2-2)得出的首個(gè)丟失序列號(hào)first_miss_seqno和丟失TCP包的數(shù)量num_miss_pktcp。
進(jìn)一步根據(jù)本發(fā)明所述一種移動(dòng)Ad-hoc網(wǎng)絡(luò)中TCP連接性能的優(yōu)化方法,(4)源節(jié)點(diǎn)接收丟失信息并重傳,當(dāng)源節(jié)點(diǎn)接收到PACK包時(shí),位于源節(jié)點(diǎn)處的TCP數(shù)據(jù)源會(huì)檢查這些ACK包,源節(jié)點(diǎn)根據(jù)首個(gè)丟失序列號(hào)與丟失TCP包的數(shù)量,確定源節(jié)點(diǎn)需要重傳的TCP的序列號(hào)與數(shù)量,并確保丟失的TCP包均被重傳。丟失的TCP包均會(huì)在來自目的節(jié)點(diǎn)的端到端確認(rèn)信息到達(dá)源節(jié)點(diǎn)之前向目的節(jié)點(diǎn)發(fā)送。
本發(fā)明的有益效果:
(1)、本發(fā)明創(chuàng)新了一種代理節(jié)點(diǎn)確認(rèn)機(jī)制,僅僅需要使用一個(gè)代理節(jié)點(diǎn),既無需在分裂TCP段生成許多代理節(jié)點(diǎn),又無需在每一個(gè)中間節(jié)點(diǎn)處進(jìn)行包的檢查,大大降低了開銷;
(2)、本發(fā)明所采用的代理節(jié)點(diǎn)確認(rèn)機(jī)制,要求代理節(jié)點(diǎn)在完成包檢測(cè)后及時(shí)向源節(jié)點(diǎn)發(fā)送確認(rèn)信息,在發(fā)生包丟失的狀況下,可以使源節(jié)點(diǎn)在端到端確認(rèn)到來之前進(jìn)行重傳,從而提升了吞吐量;
(3)、本發(fā)明引入的優(yōu)先重傳思想,打破了傳統(tǒng)TCP連接性能提升方案所采用的分割思路,轉(zhuǎn)而采用代理輔助的機(jī)制更好地完成端到端檢測(cè)的任務(wù)。
附圖說明
圖1是本發(fā)明涉及的移動(dòng)自組織Ad-hoc網(wǎng)絡(luò)的總體結(jié)構(gòu)框圖;
圖2是本發(fā)明提出的一種移動(dòng)Ad-hoc網(wǎng)絡(luò)中TCP連接性能的優(yōu)化方法的流程圖。
具體實(shí)施方式
以下結(jié)合附圖和實(shí)施例對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)的描述,以使本領(lǐng)域技術(shù)人員能夠更加清楚地理解本發(fā)明的方案,但并不因此限制本發(fā)明的保護(hù)范圍。
參照?qǐng)D1,本發(fā)明使用的移動(dòng)自組織Ad-hoc網(wǎng)絡(luò)由源節(jié)點(diǎn)S、目的節(jié)點(diǎn)D、中間節(jié)點(diǎn)M和代理節(jié)點(diǎn)P組成,代理節(jié)點(diǎn)P同時(shí)也是中間節(jié)點(diǎn),在中間節(jié)點(diǎn)中選取代理節(jié)點(diǎn)是本發(fā)明所述移動(dòng)Ad-hoc網(wǎng)絡(luò)中TCP連接性能的優(yōu)化方法中的關(guān)鍵之處。本發(fā)明通過在目的節(jié)點(diǎn)與源節(jié)點(diǎn)之間選擇代理節(jié)點(diǎn),由代理節(jié)點(diǎn)對(duì)網(wǎng)絡(luò)中傳輸?shù)腡CP包進(jìn)行提前檢測(cè),并由代理節(jié)點(diǎn)將TCP包的丟失情況通知源節(jié)點(diǎn),通過這種方式,在端到端的確認(rèn)信息到達(dá)源節(jié)點(diǎn)之前,源節(jié)點(diǎn)就可以針對(duì)代理節(jié)點(diǎn)發(fā)送的TCP包丟失情況進(jìn)行重傳,通過這一機(jī)制,可以實(shí)現(xiàn)網(wǎng)絡(luò)吞吐量的提升,實(shí)現(xiàn)TCP連接的優(yōu)化。
如圖2所示,本發(fā)明所述的一種移動(dòng)Ad-hoc網(wǎng)絡(luò)中TCP連接性能的優(yōu)化方法,具體實(shí)現(xiàn)步驟如下:
步驟一:選取代理節(jié)點(diǎn)。
步驟101,在接收到來自應(yīng)用層的數(shù)據(jù)包后,移動(dòng)自組織網(wǎng)需要建立源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的連接。源節(jié)點(diǎn)向目的節(jié)點(diǎn)發(fā)送路徑請(qǐng)求RREQ,源節(jié)點(diǎn)向目的節(jié)點(diǎn)發(fā)送的路徑請(qǐng)求中包含源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的總跳數(shù)HC,RREQ通過各個(gè)中間節(jié)點(diǎn)最終到達(dá)目的節(jié)點(diǎn)。
步驟102,目的節(jié)點(diǎn)收到發(fā)自源節(jié)點(diǎn)的RREQ,從中讀取源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的總跳數(shù),若總跳數(shù)大于最小允許跳數(shù)值,則在源節(jié)點(diǎn)與目的節(jié)點(diǎn)間選取代理節(jié)點(diǎn),進(jìn)入步驟103。若總跳數(shù)不大于最小允許跳數(shù)值,則不在源節(jié)點(diǎn)與目的節(jié)點(diǎn)間選取代理節(jié)點(diǎn),目的節(jié)點(diǎn)與源節(jié)點(diǎn)之間采用正常的方式傳輸來自應(yīng)用層的數(shù)據(jù)包,這屬于現(xiàn)有技術(shù),在此不再詳述。
所述最小允許跳數(shù)值表示在源節(jié)點(diǎn)與目的節(jié)點(diǎn)間采用代理節(jié)點(diǎn)時(shí)的最小跳數(shù)值,若總跳數(shù)大于最小允許跳數(shù)值,則在源節(jié)點(diǎn)與目的節(jié)點(diǎn)間選取代理節(jié)點(diǎn),若總跳數(shù)不大于最小允許跳數(shù)值,則不在源節(jié)點(diǎn)與目的節(jié)點(diǎn)間選取代理節(jié)點(diǎn),優(yōu)選的最小允許跳數(shù)值設(shè)置為3。
步驟103,目的節(jié)點(diǎn)獲得代理跳數(shù):
如果源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的總跳數(shù)HC為偶數(shù),則將源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的總跳數(shù)HC除以2,即得到代理跳數(shù)PHC;
如果源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的總跳數(shù)HC為奇數(shù),則將源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的總跳數(shù)HC加1后除以2,即得代理跳數(shù)PHC。
步驟104,目的節(jié)點(diǎn)向源節(jié)點(diǎn)返回一個(gè)路徑請(qǐng)求回應(yīng)消息RREP,其中包含上述在步驟103中計(jì)算出的代理跳數(shù)PHC。該RREP經(jīng)過源節(jié)點(diǎn)與目的節(jié)點(diǎn)間的各個(gè)中間節(jié)點(diǎn)到達(dá)源節(jié)點(diǎn)。各個(gè)中間節(jié)點(diǎn)在接收到RREP時(shí),讀取RREP中包含的代理跳數(shù)PHC以及RREP所記錄的跳數(shù),并將RREP包含的代理跳數(shù)PHC與RREP所記錄的跳數(shù)進(jìn)行比較。其中RREP所記錄的跳數(shù)從目的節(jié)點(diǎn)處開始起算,由0開始,RREP每經(jīng)過一跳,RREP所記錄的跳數(shù)就增加1,直至RREP被傳送至源節(jié)點(diǎn)。若中間節(jié)點(diǎn)所讀取的RREP中所包含的代理跳數(shù)PHC與RREP所記錄的跳數(shù)相等,該中間節(jié)點(diǎn)便被選為代理節(jié)點(diǎn),并將RREP繼續(xù)向源節(jié)點(diǎn)傳送;若RREP中包含的代理跳數(shù)PHC與RREP所記錄的跳數(shù)不等,則該中間節(jié)點(diǎn)就不被選為代理節(jié)點(diǎn),僅將RREP繼續(xù)向源節(jié)點(diǎn)傳送。通過這樣的RREP的傳遞過程,在中間節(jié)點(diǎn)中選取出代理節(jié)點(diǎn)。
步驟105,代理節(jié)點(diǎn)向目的節(jié)點(diǎn)發(fā)送一個(gè)代理信息P-INFORM包以告知目的節(jié)點(diǎn)代理節(jié)點(diǎn)的地址,即代理地址,代理信息包中包括代理地址。
步驟106,代理節(jié)點(diǎn)與目的節(jié)點(diǎn)間的各個(gè)中間節(jié)點(diǎn)在收到代理信息包P-INFORM后,各個(gè)中間節(jié)點(diǎn)讀取代理信息P-INFORM包中的代理地址,并進(jìn)行記錄。
步驟107,代理節(jié)點(diǎn)將代理節(jié)點(diǎn)的地址附加到向源節(jié)點(diǎn)回送的RREP中,代理節(jié)點(diǎn)與源節(jié)點(diǎn)間的各個(gè)中間節(jié)點(diǎn)在收到RREP后,各個(gè)中間節(jié)點(diǎn)讀取代理信息 P-INFORM包中的代理地址,并進(jìn)行記錄。
通過如上步驟,網(wǎng)絡(luò)中的所有節(jié)點(diǎn)均確認(rèn)了被選為代理節(jié)點(diǎn)的中間節(jié)點(diǎn)在網(wǎng)絡(luò)中的位置。
步驟二:代理節(jié)點(diǎn)進(jìn)行序列號(hào)檢測(cè)。
本發(fā)明所述方案中代理節(jié)點(diǎn)通過維護(hù)當(dāng)前序列號(hào)cur_seqno與期望序列號(hào)exp_seqno來判斷數(shù)據(jù)傳輸過程中是否出現(xiàn)TCP包丟失的情況。每個(gè)TCP包均包含有一個(gè)TCP包序列號(hào)tcp_seqno,用以區(qū)分和標(biāo)明各個(gè)TCP包從源節(jié)點(diǎn)發(fā)出時(shí)的順序。本發(fā)明所述的各個(gè)TCP包的TCP包序列號(hào)tcp_seqno按TCP包由源節(jié)點(diǎn)發(fā)出的順序依序遞增,首個(gè)發(fā)出的TCP包的TCP包序列號(hào)tcp_seqno為1,其后發(fā)出的TCP包的TCP包序列號(hào)tcp_seqno依次增加1。具體流程如下所述。
步驟201,代理節(jié)點(diǎn)維護(hù)當(dāng)前序列號(hào)cur_seqno與期望序列號(hào)exp_seqno。源節(jié)點(diǎn)向目的節(jié)點(diǎn)發(fā)送TCP包時(shí),TCP包從源節(jié)點(diǎn)處經(jīng)過中間節(jié)點(diǎn)傳輸至代理節(jié)點(diǎn),代理節(jié)點(diǎn)每次接收到發(fā)送自源節(jié)點(diǎn)的TCP包后都按照如下過程更新當(dāng)前序列號(hào)cur_seqno與期望序列號(hào)exp_seqno:代理節(jié)點(diǎn)將當(dāng)前序列號(hào)cur_seqno設(shè)置為接收到的TCP包的序列號(hào)tcp_seqno。如果當(dāng)前序列號(hào)cur_seqno為1,則將期望序列號(hào)exp_seqno設(shè)置為當(dāng)前序列號(hào);如果當(dāng)前序列號(hào)cur_seqno不為1,則將期望序列號(hào)exp_seqno加1。代理節(jié)點(diǎn)每次按照上述過程更新當(dāng)前序列號(hào)cur_seqno與期望序列號(hào)exp_seqno。
步驟202,代理節(jié)點(diǎn)將當(dāng)前序列號(hào)cur_seqno與期望序列號(hào)exp_seqno作比較。
若當(dāng)前序列號(hào)cur_seqno與期望序列號(hào)exp_seqno相等,說明沒有任何TCP包丟失,TCP包的傳輸正常進(jìn)行,代理節(jié)點(diǎn)繼續(xù)檢測(cè)經(jīng)過代理節(jié)點(diǎn)的TCP包的TCP包序列號(hào)tcp_seqno。
若期望序列號(hào)exp_seqno小于當(dāng)前序列號(hào)cur_seqno,說明按照源節(jié)點(diǎn)發(fā)出TCP包的順序,有一部分TCP包并未被代理節(jié)點(diǎn)檢測(cè)到,這一部分TCP包并未經(jīng)過代理節(jié)點(diǎn),即發(fā)生TCP包丟失,則代理節(jié)點(diǎn)將期望序列號(hào)exp_seqno作為首個(gè)丟失序列號(hào)first_miss_seqno,將當(dāng)前序列號(hào)cur_seqno減去期望序列號(hào)exp_seqno的值作為丟失TCP包的數(shù)量num_miss_pktcp并進(jìn)入步驟三;若期望序列號(hào)exp_seqno大于當(dāng)前序列號(hào)cur_seqno,說明重傳的TCP包被接收,則代理節(jié)點(diǎn)不再增加期望序列號(hào)exp_seqno的值,取當(dāng)前序列號(hào)cur_seqno與期望序列號(hào)exp_seqno的最大值作為期望序列號(hào)exp_seqno。
步驟三:代理節(jié)點(diǎn)通知源節(jié)點(diǎn)TCP包丟失。
步驟301,代理節(jié)點(diǎn)向源節(jié)點(diǎn)發(fā)送代理確認(rèn)信息PACK包,代理確認(rèn)信息PACK包中包含在步驟202得出的首個(gè)丟失序列號(hào)first_miss_seqno和丟失TCP包的數(shù)量num_miss_pktcp。
步驟四:源節(jié)點(diǎn)接收丟失信息并重傳。
步驟401,當(dāng)源節(jié)點(diǎn)接收到PACK包時(shí),位于源節(jié)點(diǎn)處的TCP數(shù)據(jù)源會(huì)檢查這些ACK包。
源節(jié)點(diǎn)根據(jù)首個(gè)丟失序列號(hào)與丟失TCP包的數(shù)量,確定源節(jié)點(diǎn)需要重傳的TCP的序列號(hào)與數(shù)量,并確保丟失的TCP包均被重傳。這些丟失的TCP包均會(huì)在來自目的節(jié)點(diǎn)的端到端確認(rèn)到達(dá)源節(jié)點(diǎn)之前向目的節(jié)點(diǎn)發(fā)送。
實(shí)施例1
下面給出一個(gè)傳輸過程中出現(xiàn)序列號(hào)丟失的以及之后重傳的情況。
假設(shè)現(xiàn)在存在一個(gè)Ad-hoc網(wǎng)絡(luò),其中存在著源節(jié)點(diǎn)S與目的節(jié)點(diǎn)D,在兩者之間共有4個(gè)中間節(jié)點(diǎn)M1-M4(由S到D,中間節(jié)點(diǎn)的順序依次為M1、M2、M3、M4)。在進(jìn)行數(shù)據(jù)傳輸之前,源節(jié)點(diǎn)S會(huì)首先向目的節(jié)點(diǎn)D發(fā)送RREQ,其中包含總跳數(shù),此時(shí)總跳數(shù)HC=5。目的節(jié)點(diǎn)收到RREQ后,從中提取HC,發(fā)現(xiàn)5>3,因而需要設(shè)置代理節(jié)點(diǎn),目的節(jié)點(diǎn)計(jì)算代理跳數(shù)(PHC)。此時(shí)可得,PHC=(5+1)÷2=3。目的節(jié)點(diǎn)將向源節(jié)點(diǎn)發(fā)送RREP,其中包含有PHC信息。由目的節(jié)點(diǎn)出發(fā),當(dāng)經(jīng)過M4時(shí),RREP中的跳數(shù)為1,經(jīng)過M3時(shí)則為2,在M2處,這一值增加為3,此時(shí)這一值與PHC相等,因此選擇M2為代理節(jié)點(diǎn)。代理節(jié)點(diǎn)發(fā)送P-INFORM信息,并且更新RREP,使得所有節(jié)點(diǎn)均完成路由表更新。此后,源節(jié)點(diǎn)開始向目的節(jié)點(diǎn)進(jìn)行數(shù)據(jù)傳輸,發(fā)送TCP包。當(dāng)代理節(jié)點(diǎn)監(jiān)測(cè)到序列號(hào)1時(shí),它將這一序列加入到當(dāng)前序列號(hào)中,即當(dāng)前序列號(hào)置為1,同時(shí),把期望序列號(hào)也置為1。此時(shí),期望序列號(hào)與當(dāng)前序列號(hào)同為1,沒有序列丟失,將期望序列號(hào)加1,繼續(xù)監(jiān)測(cè)。當(dāng)代理節(jié)點(diǎn)監(jiān)測(cè)到序列號(hào)2時(shí),繼續(xù)執(zhí)行上述操作。經(jīng)過一段時(shí)間后,代理節(jié)點(diǎn)路由表中的期望序列號(hào)為7,但是下一刻其監(jiān)測(cè)到的序列號(hào)為9,代理節(jié)點(diǎn)判斷發(fā)生了TCP包的丟失,因此將首個(gè)丟失序列號(hào)設(shè)置為序列號(hào)7,并計(jì)算丟失序列號(hào)的數(shù)量,此處該值為9-7=2。與此同時(shí),代理節(jié)點(diǎn)需要發(fā)送PACK通知源節(jié)點(diǎn)。源節(jié)點(diǎn)收到ACK后,會(huì)檢查ACK,此后源節(jié)點(diǎn)將丟失的TCP包進(jìn)行重傳。代理節(jié)點(diǎn)將期望序列號(hào)更新為9,下一個(gè)監(jiān)測(cè)到的序列號(hào)為9,繼續(xù)之前的正常操作,經(jīng)過一段時(shí)間后,代理節(jié)點(diǎn)的期望序列號(hào)為11,下一個(gè)監(jiān)測(cè)到的序列號(hào)為7,此時(shí)代理節(jié)點(diǎn)確認(rèn)接收到了重傳的TCP包,代理節(jié)點(diǎn)記錄的期望序列號(hào)不做改變,仍取11。代理節(jié)點(diǎn)完成重傳后,代理節(jié)點(diǎn)監(jiān)測(cè)到下一個(gè)序列號(hào)為11,繼續(xù)進(jìn)行正常操作。
由以上實(shí)施例可以看出,本方法改變了原有的在Ad-hoc網(wǎng)絡(luò)中數(shù)據(jù)傳輸操作的形式,引入了代理節(jié)點(diǎn)機(jī)制,使得在TCP包丟失發(fā)生時(shí),能夠更及時(shí)地進(jìn)行重傳操作而非等待端到端確認(rèn)后再重傳,進(jìn)而優(yōu)化了TCP連接的性能。
上述實(shí)施例僅僅是為清楚地說明本發(fā)明所作的舉例,并非對(duì)實(shí)施方式的限定。對(duì)于所屬領(lǐng)域的普通技術(shù)人員來說,在上述說明的基礎(chǔ)上還可以做出其他不同形式的變化或變動(dòng)。這里無需也無法對(duì)所有的實(shí)施方式予以窮舉,而由此所引申出的顯而易見的變化或變動(dòng)仍處于本發(fā)明的保護(hù)范圍之中。