則進(jìn)行分配。若這些鏈接的建立已完成所有資源的傳輸,則無 需再新建鏈接繼續(xù)進(jìn)行傳輸,否則新建鏈接,以進(jìn)行資源的傳輸,直到所有資源傳輸完成。 新建的鏈接將按照下述方式根據(jù)計(jì)算得到的實(shí)時(shí)分流權(quán)重分配到相應(yīng)的接口。
[0109] (2)根據(jù)接口速率和時(shí)延計(jì)算得到的實(shí)時(shí)分流權(quán)重將建立的鏈接分配到處于連通 狀態(tài)的接口
[0110] 具體的,這里的"建立的鏈接"包括兩種情況:
[0111] 第一種情況:"建立的鏈接"為上述新建的鏈接,即按照初始路由規(guī)則傳輸后,新建 立的用于繼續(xù)完成傳輸?shù)逆溄印?br>[0112] 此種情況下,由于網(wǎng)絡(luò)環(huán)境是實(shí)時(shí)變化的,各接口的連通狀態(tài)、速率等也是實(shí)時(shí)變 化的,因此,在數(shù)據(jù)業(yè)務(wù)的傳輸過程中,根據(jù)接口的速率和時(shí)延,計(jì)算分流權(quán)重;并基于計(jì)算 后的分流權(quán)重,調(diào)整分配到各處于連通狀態(tài)的接口的鏈接數(shù)。
[0113] 此種情況下,參見圖6,本發(fā)明實(shí)施例的數(shù)據(jù)傳輸方法具體包括以下步驟:S10、終 端實(shí)時(shí)檢測各接口的連通性;S20、終端檢測到有數(shù)據(jù)需要傳輸時(shí),基于初始分流權(quán)重,將建 立的多條鏈接分配到處于連通狀態(tài)的接口以進(jìn)行數(shù)據(jù)傳輸;S30、在數(shù)據(jù)傳輸?shù)倪^程中,計(jì) 算實(shí)時(shí)分流權(quán)重,并根據(jù)實(shí)時(shí)分流權(quán)重將新建立的鏈接分配到處于連通狀態(tài)的接口以進(jìn)行 數(shù)據(jù)傳輸。
[0114] 應(yīng)理解,在進(jìn)行數(shù)據(jù)傳輸時(shí),可將待下載的數(shù)據(jù)業(yè)務(wù)劃分為多個(gè)大小相同或不同 的數(shù)據(jù)塊,以分別通過建立的多條鏈接進(jìn)行傳輸。例如,可將一個(gè)10M大小的APK,劃分為10 個(gè)數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊的大小為1Μ,且每個(gè)數(shù)據(jù)塊通過一條鏈接進(jìn)行傳輸。
[0115] 在一些實(shí)施例中,終端100可建立的最大鏈接數(shù)不一定和劃分的數(shù)據(jù)塊相等,例 如,數(shù)據(jù)塊為10,而建立的最大鏈接數(shù)為5。則當(dāng)完成某一鏈接的傳輸完成時(shí),相應(yīng)的即可新 建一條鏈接以繼續(xù)傳輸剩下的數(shù)據(jù)。由此,本發(fā)明實(shí)施例中調(diào)整分配到處于連通狀態(tài)的接 口的鏈接數(shù)具體為:將新建的鏈接按照計(jì)算后的分流權(quán)重分配到處于連通狀態(tài)的接口。
[0116] 具體的,在數(shù)據(jù)的傳輸過程中,根據(jù)接口的速率和時(shí)延計(jì)算各接口的分流權(quán)重,以 將新建立的鏈接按照計(jì)算得到的分流權(quán)重分配到各接口,以實(shí)現(xiàn)優(yōu)化分配比例。由于接口 的速率在一定程度上體現(xiàn)了接口帶寬的大小,帶寬大的接口本應(yīng)承載更多的數(shù)據(jù)流,從而 不容易出現(xiàn)大量數(shù)據(jù)從帶寬小的接口流通,造成帶寬小的接口的擁塞,造成延時(shí)大,丟包的 狀況,提高接口利用率和數(shù)據(jù)傳輸速率。
[0117] 具體的,每隔一第一預(yù)設(shè)時(shí)間(例如,1秒)對(duì)接口進(jìn)行測速,每隔一第二預(yù)設(shè)時(shí)間 (例如,5秒)根據(jù)接口對(duì)應(yīng)的速率和時(shí)延計(jì)算分流權(quán)重。在一些實(shí)施例中,也可以僅根據(jù)接 口的實(shí)時(shí)速率計(jì)算分流權(quán)重而不考慮時(shí)延,僅考慮實(shí)時(shí)速率的情況將在后續(xù)介紹。
[0118] 在本發(fā)明的實(shí)施例中,按照以下方式進(jìn)行接口的速率檢測:
[0119] 每隔預(yù)設(shè)時(shí)間(例如,1秒),獲取接口字節(jié)數(shù)的變化作為接口的當(dāng)前速率。具體的, 若為第一次檢測某一接口的速率,則將檢測得到的字節(jié)數(shù)保存。若不是第一次檢測某一接 口的速率,則將獲取得到的接口字節(jié)數(shù)減去前一次獲取得到的接口字節(jié)數(shù),得到的差值再 除以兩次檢測的時(shí)間即為該接口的當(dāng)前速率。
[0120] 在本發(fā)明的實(shí)施例中,根據(jù)接口的速率和時(shí)延計(jì)算分流權(quán)重采用以下方式:
[0121]對(duì)接口進(jìn)行測速,并檢測接口是否處于擁塞狀態(tài),若是,則判斷當(dāng)前的實(shí)時(shí)速率比 之前統(tǒng)計(jì)的最大速率(max_speed)是否更小,如果更小,當(dāng)前實(shí)時(shí)速率加上一預(yù)設(shè)值(例如, lOOKB/s)后是否小于最大速率(max_Speed),如果是,則說明網(wǎng)絡(luò)環(huán)境發(fā)生了較大的變換, 將當(dāng)前實(shí)時(shí)速率賦值給最大速率(max_ Speed);
[0122] 若接口不處于擁塞狀態(tài),且當(dāng)前實(shí)時(shí)速率大于max_Speed,則將當(dāng)前實(shí)時(shí)速率賦值 給最大速率(max_speed);
[0123] 將最大速率與預(yù)設(shè)值(例如,50kb/s)進(jìn)行比較,若最大速率大于預(yù)設(shè)值,則根據(jù)接 口的速率計(jì)算分流權(quán)重;若最大速率不大于預(yù)設(shè)值,則根據(jù)接口的延時(shí)來確定分流權(quán)重。
[0124] 在本發(fā)明的實(shí)施例中,檢測接口是否處于擁塞狀態(tài),是通過檢測接口的時(shí)延獲知 的,接口的時(shí)延檢測方法有如下兩種方式:
[0125] 方式一:每隔預(yù)設(shè)時(shí)間(例如,5秒)通過接□發(fā)一組ping報(bào)文(例如,每組5個(gè)報(bào)文, 每個(gè)報(bào)64Bytes),并根據(jù)接收到回復(fù)的時(shí)間差獲取接口的時(shí)延。
[0126] 方式二:通過TCP三次握手計(jì)算時(shí)延,具體的:當(dāng)接收到一個(gè)syn+ack報(bào)文時(shí),判斷 是否處于SYN_SEND狀態(tài),若處于,則獲取當(dāng)前的系統(tǒng)時(shí)間,并將獲取的當(dāng)前系統(tǒng)時(shí)間減去系 統(tǒng)發(fā)送syn報(bào)文的時(shí)間,獲得一時(shí)間差。該時(shí)間差即為接口時(shí)延。
[0127]若時(shí)延大于或等于一預(yù)設(shè)值(例如,1000ms),則將該接口標(biāo)記為處于擁塞狀態(tài)。若 時(shí)延小于一預(yù)設(shè)值,則檢測此鏈接的syn報(bào)文是否重傳過,若重傳過,則將該接口標(biāo)記為處 于擁塞狀態(tài),將時(shí)延值設(shè)定為l〇〇〇ms;若未重傳過,則接口不處于擁塞狀態(tài),將計(jì)算出的時(shí) 延值作為接口的時(shí)延。
[0128] 在本發(fā)明的實(shí)施例中,當(dāng)根據(jù)接口的速率計(jì)算分流權(quán)重時(shí),按照以下公式進(jìn)行計(jì) 算:
[0129] 第i個(gè)接口的分流權(quán)重=第i個(gè)接口的最大速率/(第1個(gè)接口的最大速率+第2個(gè)接 口的最大速率+……+第i個(gè)接口的最大速率+……)
[0130] 應(yīng)理解,上述按照接口速率計(jì)算分流權(quán)重還可采用其它的方式,例如,預(yù)先設(shè)定速 率范圍與分流權(quán)重的關(guān)系,當(dāng)速率在第一范圍時(shí),分流權(quán)重為20 %,而在第二范圍時(shí),分流 權(quán)重為80 %等等方式。
[0131 ]當(dāng)根據(jù)時(shí)延計(jì)算分流權(quán)重時(shí),時(shí)延與分流權(quán)重成反比,例如,第一接口的時(shí)延為 D1、第二接口的時(shí)延為D2,則第一接口的分流權(quán)重為D2/(D1+D2),第二接口的權(quán)重為D1/(D1 +D2)〇
[0132] 應(yīng)理解,還可采用其它的方式設(shè)定時(shí)延與分流權(quán)重的關(guān)系,例如,預(yù)先設(shè)定時(shí)延超 過一定值時(shí),將其分流權(quán)重設(shè)為〇等方式。
[0133] 在一個(gè)實(shí)施例中,若出現(xiàn)預(yù)設(shè)異常情況,則將分流權(quán)重設(shè)定為1:1,即默認(rèn)按1:1的 權(quán)重進(jìn)行分流。例如,預(yù)設(shè)異常情況包括但不限于:當(dāng)最大速率不大于預(yù)設(shè)值,而未檢測到 接口的時(shí)延時(shí)。
[0134] 在本發(fā)明的實(shí)施例中,通過計(jì)算調(diào)整了分流權(quán)重后,即可根據(jù)實(shí)時(shí)分流權(quán)重將數(shù) 據(jù)傳輸過程中新建立的鏈接分配到各個(gè)接口以進(jìn)行數(shù)據(jù)業(yè)務(wù)的傳輸。由此,本發(fā)明實(shí)施例 中,可根據(jù)實(shí)時(shí)分流權(quán)重建立一當(dāng)前路由規(guī)則。當(dāng)前路由規(guī)則與初始路由規(guī)則的區(qū)別在于, 當(dāng)前路由規(guī)則中是根據(jù)計(jì)算得到的實(shí)時(shí)分流權(quán)重,將建立的鏈接分配到各個(gè)處于連通狀態(tài) 接口。例如,若連通的接口為3個(gè),建立的鏈接數(shù)為9條,計(jì)算得到的實(shí)時(shí)分流權(quán)重為3 :4: 2, 則分配到第一接口進(jìn)行傳輸?shù)逆溄訑?shù)調(diào)整為3條,分配到第二接口進(jìn)行傳輸?shù)逆溄訑?shù)調(diào)整 為4條,分配到第三接口進(jìn)行傳輸?shù)逆溄訑?shù)調(diào)整為2條。
[0135] 具體的,為了保證建立的鏈接按照分流權(quán)重(初始分流權(quán)重和實(shí)時(shí)分流權(quán)重)通過 相應(yīng)的接口進(jìn)行傳輸,本發(fā)明實(shí)施例中,采用標(biāo)記鏈接數(shù)據(jù)包的方式,對(duì)鏈接的數(shù)據(jù)包進(jìn)行 標(biāo)記。由此,在傳輸時(shí),根據(jù)數(shù)據(jù)包的標(biāo)記值使得不同鏈接可走相應(yīng)的接口進(jìn)行傳輸。
[0136] 參見表1,為一實(shí)施例中,根據(jù)分流權(quán)重對(duì)數(shù)據(jù)包進(jìn)行標(biāo)記后形成的路由規(guī)則。
[0137] 表1
[0139] 表1中的mark值是各鏈接中的數(shù)據(jù)包的標(biāo)記值。在本發(fā)明的實(shí)施例中,每條鏈接的 第一個(gè)數(shù)據(jù)包被進(jìn)行標(biāo)記,而后面的數(shù)據(jù)包則按照第一個(gè)數(shù)據(jù)包的接口進(jìn)行傳輸。
[0140] 具體的,參見圖7,在進(jìn)行標(biāo)記時(shí):首先獲取數(shù)據(jù)包,并判斷該數(shù)據(jù)包的鏈接跟蹤狀 態(tài)是否為預(yù)設(shè)狀態(tài)。在這里,預(yù)設(shè)狀態(tài)為new狀態(tài),即是否為某一鏈接的第一個(gè)數(shù)據(jù)包;
[0141] 如果為預(yù)設(shè)狀態(tài)(即為第一個(gè)數(shù)據(jù)包),則根據(jù)該鏈接被分配到的接口,對(duì)該數(shù)據(jù) 包進(jìn)行標(biāo)記,并將標(biāo)記值保存。具體的,可保存到對(duì)應(yīng)鏈接跟蹤標(biāo)記中;如果不是預(yù)設(shè)狀態(tài) (即不是第一個(gè)數(shù)據(jù)包),則將保存的該鏈接的第一個(gè)數(shù)據(jù)包的標(biāo)記值賦予該數(shù)據(jù)包,并根 據(jù)數(shù)據(jù)包的標(biāo)記值,將數(shù)據(jù)包分配至相應(yīng)的接口進(jìn)行傳輸。
[0142] 由此,本發(fā)明實(shí)施例中的數(shù)據(jù)包標(biāo)記值具有雙重意義,一是可以確定該數(shù)據(jù)包所 屬的鏈接,二是可以確定該數(shù)據(jù)包應(yīng)該走哪個(gè)接口進(jìn)行傳輸。
[0143] 在本發(fā)明的實(shí)施例中,對(duì)于已經(jīng)被分配到相應(yīng)接口的鏈接,會(huì)通過該接口進(jìn)行傳 輸直到完成。但若在傳輸過程中,處于連通狀態(tài)的接口變?yōu)槲催B通狀態(tài),則通過該接口傳輸 的鏈接被中止,而通過新建鏈接的方式繼續(xù)該鏈接的數(shù)據(jù)傳輸。具體的,例如,某一鏈接需 要傳輸?shù)臄?shù)據(jù)大小為1M,當(dāng)傳輸?shù)?.5M大小的時(shí)候,相應(yīng)的傳輸接口發(fā)生異常中斷,則這種 變化將體現(xiàn)在當(dāng)前路由規(guī)則中,分流權(quán)重會(huì)發(fā)生改變,新建鏈接后,將按照當(dāng)前路由規(guī)則將 該新建的鏈接分配到相應(yīng)的接口,以繼續(xù)進(jìn)行剩下〇. 5M數(shù)據(jù)的傳輸。
[0144] 在本發(fā)明實(shí)施例中,當(dāng)全部數(shù)據(jù)業(yè)務(wù)傳輸完成后,關(guān)閉接口,將當(dāng)前路由規(guī)則刪 除。為了某些需要,也可以不刪除路由規(guī)則,例如,保存的路由規(guī)則可供下次數(shù)據(jù)傳輸時(shí)使 用。
[0145] 該種情況下,初始建立的鏈接按照1:1的分流權(quán)重進(jìn)行分配,而新建立的連接基于 計(jì)算得到的分流權(quán)重進(jìn)行分配,可提高分配效率,提高接口利用率和傳輸速率。
[0146] 第二種情況:"建立的鏈接"為一開始即建立的鏈接,即檢測到有數(shù)據(jù)業(yè)務(wù)時(shí),最初 建立的鏈接即按照計(jì)算得到的分流權(quán)重被到相應(yīng)的接口進(jìn)行傳輸
[0147] 此種情況下,分流權(quán)重是基于上一次數(shù)據(jù)傳輸時(shí),根據(jù)接口的速率和時(shí)延計(jì)算得 到的實(shí)時(shí)分流權(quán)重。在本發(fā)明的實(shí)施例中,將其稱為預(yù)存的分流權(quán)重。具體的,若終端所處 的網(wǎng)絡(luò)環(huán)境未發(fā)生較大的改變,例如,終端的位置未發(fā)生改變、兩次數(shù)據(jù)傳輸?shù)拈g隔時(shí)間小 于10S等情況下,當(dāng)進(jìn)行新的數(shù)據(jù)傳輸時(shí),可以采用上一次數(shù)據(jù)傳輸?shù)姆至鳈?quán)重。終端的位 置是否發(fā)生改變,可由終端中的GPS等模塊獲取。而兩次數(shù)據(jù)傳輸?shù)拈g隔時(shí)間可通過計(jì)時(shí)器 等模塊獲取。
[0148] 此種情況下,本發(fā)明實(shí)施例的數(shù)據(jù)傳輸方法具體包括:終端實(shí)時(shí)檢測各接口的連 通性;終端檢測到有數(shù)據(jù)需要傳輸時(shí),基于預(yù)存的分流權(quán)重,將建立的多條鏈接分配到處于 連通狀態(tài)的接口以進(jìn)行數(shù)據(jù)傳輸;在數(shù)據(jù)業(yè)務(wù)的傳輸過程中,根據(jù)接口的速率和時(shí)延計(jì)算 分流權(quán)重,或根據(jù)接口的速率計(jì)算分流權(quán)重;并基于計(jì)算得到的實(shí)時(shí)分流權(quán)重,將新建的鏈 接按照實(shí)時(shí)分流權(quán)重分配到處于連通狀態(tài)的接口以進(jìn)行數(shù)據(jù)傳輸。
[0149] 應(yīng)理解,預(yù)存的分流權(quán)重即為"上一次數(shù)據(jù)傳輸?shù)姆至鳈?quán)重",其具體為當(dāng)前數(shù)據(jù) 傳輸最近的一次數(shù)據(jù)傳輸時(shí)的分流權(quán)重。在該實(shí)施例中