本發(fā)明涉及網(wǎng)絡(luò)通信,特別涉及基于延遲與帶寬中繼比較算子的網(wǎng)絡(luò)通信路徑選擇方法。
背景技術(shù):
1、大型和跨國(guó)企業(yè)一般在不同地區(qū)設(shè)有分公司,分公司的數(shù)據(jù)一般會(huì)通過互聯(lián)網(wǎng)進(jìn)行異地內(nèi)網(wǎng)組網(wǎng)加密傳輸;視頻和直播平臺(tái)為了滿足不同地區(qū)的用戶的觀看體驗(yàn),一般會(huì)在不同地區(qū)設(shè)立內(nèi)容分發(fā)服務(wù)器,以提高用戶獲取視頻資源的速度;對(duì)于有異地辦公需求的普通人群,能快速連接到位于路由器后的私人電腦是提升辦公體驗(yàn)的重要組成部分。因此,為互聯(lián)網(wǎng)上的兩臺(tái)主機(jī)選擇對(duì)彼此而言延時(shí)盡可能低且傳輸帶寬盡可能高的網(wǎng)絡(luò)路徑是實(shí)現(xiàn)這一切的重要步驟。
2、目前兩臺(tái)主機(jī)建立網(wǎng)絡(luò)連接主要采用的手段包括三類:第一類是傳統(tǒng)的點(diǎn)對(duì)點(diǎn)連接,通常用于互聯(lián)網(wǎng)公司的網(wǎng)站等需要直接面向互聯(lián)網(wǎng)提供的服務(wù),需要至少有一臺(tái)主機(jī)具備公網(wǎng)可訪問的ip地址,連接雙方通過各自的ip地址建立直接連接,這種連接的延遲僅和運(yùn)營(yíng)商網(wǎng)絡(luò)有關(guān),且傳輸帶寬為兩臺(tái)主機(jī)可占用的最大帶寬,不需要其他網(wǎng)絡(luò)資源輔助,但至少有一方擁有公網(wǎng)ip才可實(shí)現(xiàn),因此實(shí)現(xiàn)難度相對(duì)較高;第二類是利用圓錐形nat建立連接,通常用于影音視聽平臺(tái)大量且快速分發(fā)內(nèi)容的服務(wù)和微信語(yǔ)音通話等對(duì)網(wǎng)絡(luò)質(zhì)量有一定要求的服務(wù),連接雙方均位于路由器之后且均不具備可直接連接的公網(wǎng)ip,但有一方的nat類型為ip受限錐型及以上或雙方均為端口受限錐型及以上,此時(shí)雙方可通過路由器的nat轉(zhuǎn)發(fā)功能建立直接連接,這種連接的延遲和帶寬與第一類方案相同,且為民用級(jí)別成本相對(duì)最低的方案,但需要至少一方的路由器支持錐型nat且路由器不是網(wǎng)絡(luò)性能瓶頸;第三類是利用中繼主機(jī)進(jìn)行數(shù)據(jù)包轉(zhuǎn)發(fā),通常用于向日葵、todesk等遠(yuǎn)程訪問工具和其他僅保證連通性的服務(wù),此類方法一般用作前兩類方法均不可用時(shí)的后備替代方案,雙方主機(jī)同時(shí)連接到一個(gè)可被直接連接的第三方主機(jī),并將所有數(shù)據(jù)包通過這臺(tái)第三方主機(jī)進(jìn)行轉(zhuǎn)發(fā),此方案實(shí)現(xiàn)難度相對(duì)最低,但連接延遲和傳輸帶寬除依賴運(yùn)營(yíng)商網(wǎng)絡(luò)和雙方主機(jī)的最大帶寬外,還依賴第三方主機(jī)的性能及其運(yùn)營(yíng)商網(wǎng)絡(luò)延遲和最大帶寬,因此網(wǎng)絡(luò)連接質(zhì)量相對(duì)較差。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明目的是為了解決現(xiàn)有的網(wǎng)絡(luò)通信路徑選擇方法還存在網(wǎng)絡(luò)連接質(zhì)量差的問題,而提出了基于延遲與帶寬中繼比較算子的網(wǎng)絡(luò)通信路徑選擇方法。
2、基于延遲與帶寬中繼比較算子的網(wǎng)絡(luò)通信路徑選擇方法具體過程為:
3、s1,輸入多個(gè)位于公網(wǎng)的中繼服務(wù)器ip地址組成中繼服務(wù)器地址列表moonipaddresslist,利用moonipaddresslist獲取候選通信路徑列表ablemoontraceroutelist、候選通信路徑延遲列表ablemoontraceroutelatencylist、候選通信路徑帶寬列表ablemoontraceroutebandwidthlist;
4、s2,利用ablemoontraceroutelist和ablemoontraceroutelatencylist建立延遲優(yōu)先通信路徑列表獲取算子gettraceroutelistforlatency,gettraceroutelistforlatency的輸入為待獲取延遲優(yōu)先通信路徑的目標(biāo)ip地址ipaddressforlatency,輸出為本機(jī)到ipaddressforlatency最快的通信路徑列表;
5、s3,利用ablemoontraceroutelist和ablemoontraceroutebandwidthlist建立帶寬優(yōu)先通信路徑列表獲取算子gettraceroutelistforbandwidth,gettraceroutelistforbandwidth的輸入為待獲取帶寬優(yōu)先通信路徑的目標(biāo)ip地址ipaddressforbandwidth,輸出為本機(jī)到ipaddressforbandwidth可用帶寬最高的通信路徑列表;
6、s4,輸入連接地址connectoip,利用gettraceroutelistforlatency和gettraceroutelistforbandwidth,獲得最終通信路徑traceroute。
7、進(jìn)一步地,所述s1中的輸入多個(gè)位于公網(wǎng)的中繼服務(wù)器ip地址組成中繼服務(wù)器地址列表moonipaddresslist,利用moonipaddresslist獲取候選通信路徑列表ablemoontraceroutelist、候選通信路徑延遲列表ablemoontraceroutelatencylist、候選通信路徑帶寬列表ablemoontraceroutebandwidthlist,具體為:
8、s101,輸入多個(gè)位于公網(wǎng)的中繼服務(wù)器ip地址,組成中繼服務(wù)器地址列表moonipaddresslist;
9、s102,初始化候選通信路徑列表ablemoontraceroutelist,初始化候選通信路徑延遲列表ablemoontraceroutelatencylist,初始化候選通信路徑帶寬列表ablemoontraceroutebandwidthlist;
10、對(duì)moonipaddresslist中的每個(gè)元素進(jìn)行窮舉排列,將排列結(jié)果暫存于ablemoontraceroutelist;
11、s103,初始化列表計(jì)數(shù)器listcounter=1;
12、s104,獲取暫存候選通信路徑ablemoontraceroute=讀取ablemoontraceroutelist第listcounter個(gè)元素;
13、s105,初始化元素計(jì)數(shù)器setcounter=1,延遲記錄器latencylog=0,帶寬記錄器bandwidthlog=-1;
14、s106,如果setcounter=1,則轉(zhuǎn)到s107,否則轉(zhuǎn)到s114;
15、s107,暫存首次中繼網(wǎng)絡(luò)地址currentmoonip=讀取ablemoontraceroute第setcounter個(gè)元素;
16、s108,計(jì)算首次中繼網(wǎng)絡(luò)延遲currentmooniplatency=本機(jī)到currentmoonip的網(wǎng)絡(luò)延遲;
17、s109,更新latencylog=latencylog+currentmooniplatency;
18、s110,計(jì)算并暫存首次中繼網(wǎng)絡(luò)上傳帶寬currentmoonipuploadbandwidth;計(jì)算并暫存首次中繼網(wǎng)絡(luò)下載帶寬currentmoonipdownloadbandwidth;
19、s111,暫存首次中繼網(wǎng)絡(luò)帶寬currentmoonipbandwidth=取currentmoonipuploadbandwidth和currentmoonipdownloadbandwidth中的較小值;
20、s112,如果bandwidthlog為-1,則令bandwidthlog=currentmoonipbandwidth,否則,令bandwidthlog=bandwidthlog和currentmoonipbandwidth之間的較小值;
21、s113,令setcounter=setcounter+1,并轉(zhuǎn)到s106;
22、s114,如果setcounter大于ablemoontraceroute中的元素?cái)?shù)量,則轉(zhuǎn)到s121,否則轉(zhuǎn)到s115;
23、s115,暫存二次中繼網(wǎng)絡(luò)地址nextmoonip=讀取ablemoontraceroute第setcounter個(gè)元素;
24、暫存前置中繼網(wǎng)絡(luò)地址pervmoonip=讀取ablemoontraceroute第setcounter-1個(gè)元素;
25、s116,向pervmoonip傳遞nextmoonip;
26、s117,暫存二次中繼網(wǎng)絡(luò)延遲nextmooniplatency=計(jì)算pervmoonip到nextmoonip的網(wǎng)絡(luò)延遲;
27、更新latencylog=latencylog+nextmooniplatency;
28、s118,計(jì)算并暫存二次中繼網(wǎng)絡(luò)上傳帶寬nextmoonipuploadbandwidth=pervmoonip到nextmoonip的最大上傳帶寬;
29、計(jì)算并暫存二次中繼網(wǎng)絡(luò)下載帶寬nextmoonipdownloadbandwidth=pervmoonip到nextmoonip的最大下載帶寬;
30、s119,暫存二次中繼網(wǎng)絡(luò)帶寬nextmoonipbandwidth=nextmoonipuploadbandwidth和nextmoonipdownloadbandwidth之間的較小值;
31、s120,bandwidthlog=取bandwidthlog和nextmoonipbandwidth的較小值,并轉(zhuǎn)到s113;
32、s121,將latencylog存入ablemoontraceroutelatencylist,將bandwidthlog存入ablemoontraceroutebandwidthlist;
33、s122,令listcounter=listcounter+1
34、s123,如果listcounter大于ablemoontraceroutelist中的元素?cái)?shù)量,則轉(zhuǎn)到s124,否則轉(zhuǎn)到s104;
35、s124,步驟s1運(yùn)行結(jié)束。
36、進(jìn)一步地,所述s110中的currentmoonipuploadbandwidth=本機(jī)到currentmoonip的最大上傳帶寬。
37、進(jìn)一步地,所述s110中的currentmoonipdownloadbandwidth=本機(jī)到currentmoonip的最大下載帶寬。
38、進(jìn)一步地,所述s2中的利用ablemoontraceroutelist和ablemoontraceroutelatencylist建立延遲優(yōu)先通信路徑列表獲取算子gettraceroutelistforlatency,gettraceroutelistforlatency的輸入為待獲取延遲優(yōu)先通信路徑的目標(biāo)ip地址ipaddressforlatency,輸出為本機(jī)到ipaddressforlatency最快的通信路徑列表,具體為:
39、s201,建立延遲優(yōu)先通信路徑列表獲取算子gettraceroutelistforlatency,輸入待獲取延遲優(yōu)先通信路徑的目標(biāo)地址ipaddressforlatency;
40、s202,本機(jī)與ipaddressforlatency嘗試建立直接通信,如果建立成功,則轉(zhuǎn)到s204,否則轉(zhuǎn)到s203;
41、s203,本機(jī)與ipaddressforlatency嘗試建立圓錐nat通信,如果建立成功,則轉(zhuǎn)到s204,否則轉(zhuǎn)到s205;
42、s204,暫存到目標(biāo)地址的延遲iplatency=本機(jī)到ipaddressforlatency的網(wǎng)絡(luò)延遲,然后轉(zhuǎn)到s205;
43、s205,初始化地址映射表計(jì)數(shù)器mapcounter=1;
44、s206,暫存待測(cè)速中繼地址speedtestipaddress=讀取moonipaddresslist第mapcounter個(gè)元素;
45、s207,向ipaddressforlatency傳遞speedtestipaddress;
46、s208,暫存測(cè)速結(jié)果speedtestlatenccy=計(jì)算ipaddressforlatency到speedtestipaddress的網(wǎng)絡(luò)延遲;
47、s209,暫存加數(shù)序列列表pendinglatencypluslist=取ablemoontraceroutelist中所有以speedtestipaddress為末位地址的元素位置;
48、s210,暫存完整通信路徑延遲列表fullmoontraceroutelatencylist=復(fù)制ablemoontraceroutelatencylist;
49、s211,初始化自增計(jì)數(shù)器pluscounter=1;
50、s212,計(jì)算fullmoontraceroutelatencylist的第pendinglatencypluslist[pluscounter]個(gè)元素的值=fullmoontraceroutelatencylist[pendinglatencypluslist[pluscounter]]+?speedtestlatenccy;
51、其中,pendinglatencypluslist[pluscounter]是pendinglatencypluslist中的第pluscounter個(gè)元素;fullmoontraceroutelatencylist[pendinglatencypluslist[pluscounter]]是fullmoontraceroutelatencylist中的第pendinglatencypluslist[pluscounter]個(gè)元素;
52、s213,令pluscounter=pluscounter+1;
53、s214,如果pluscounter大于pendinglatencypluslist的元素?cái)?shù)量,則轉(zhuǎn)到s215,否則轉(zhuǎn)到s212;
54、s215,令mapcounter=mapcounter+1;
55、s216,如果mapcounter大于moonipaddresslist的元素?cái)?shù)量,則轉(zhuǎn)到s217,否則轉(zhuǎn)到s206;
56、s217,暫存最快中轉(zhuǎn)延遲fatestmoonlatency=取fullmoontraceroutelatencylist中最小的一個(gè)值元素;
57、暫存最快中轉(zhuǎn)路徑序列號(hào)fatestmoonrouteno=fullmoontraceroutelatencylist中fatestmoonlatency的位置;
58、s218,暫存最快中轉(zhuǎn)路徑fastesttraceroute=取ablemoontraceroutelist中第fatestmoonlatencyno個(gè)元素;
59、s219,令fastesttraceroute=fastesttraceroute+ipaddressforlatency;
60、s220,如果iplatency存在,且iplatency小于fatestmoonlatency,則覆蓋fastesttraceroute=本機(jī)到ipaddressforlatency的直接通信;否則直接轉(zhuǎn)到s221;
61、s221,將fastesttraceroute作為gettraceroutelistforlatency算子的結(jié)果輸出。
62、進(jìn)一步地,所述s3中的利用ablemoontraceroutelist和ablemoontraceroutebandwidthlist建立帶寬優(yōu)先通信路徑列表獲取算子gettraceroutelistforbandwidth,gettraceroutelistforbandwidth的輸入為待獲取帶寬優(yōu)先通信路徑的目標(biāo)ip地址ipaddressforbandwidth,輸出為本機(jī)到ipaddressforbandwidth可用帶寬最高的通信路徑列表,具體為:
63、s301,建立帶寬優(yōu)先通信路徑列表獲取算子gettraceroutelistforbandwidth,輸入待獲取帶寬優(yōu)先通信路徑的目標(biāo)地址ipaddressforbandwidth;
64、s302,本機(jī)與ipaddressforbandwidth嘗試建立直接通信,如果建立成功,則轉(zhuǎn)到s304,否則轉(zhuǎn)到s303;
65、s303,本機(jī)與ipaddressforbandwidth嘗試建立圓錐nat通信,如果建立成功,則轉(zhuǎn)到s304,否則轉(zhuǎn)到s306;
66、s304,計(jì)算并暫存目標(biāo)地址上傳帶寬ipuploadbandwidth;
67、計(jì)算并暫存目標(biāo)地址下載帶寬ipdownloadbandwidth;
68、s305,暫存目標(biāo)地址網(wǎng)絡(luò)帶寬ipbandwidth=取ipuploadbandwidth和ipdownloadbandwidth中的較小值,然后轉(zhuǎn)到s306;
69、s306,初始化地址對(duì)照表計(jì)數(shù)器hashmapcounter=1;
70、s307,暫存待測(cè)寬中繼地址bandtestipaddress=讀取moonipaddresslist第hashmapcounter個(gè)元素;
71、s308,向ipaddressforbandwidth傳遞bandtestipaddress;
72、s309,計(jì)算并暫存中繼地址上傳帶寬bandtestuploadbandwidth=ipaddressforbandwidth到bandtestipaddress的最大上傳帶寬;
73、計(jì)算并暫存中繼地址下載帶寬bandtestdownloadbandwidth=ipaddressforbandwidth到bandtestipaddress的最大下載帶寬;
74、s310,暫存中繼測(cè)寬結(jié)果bandtestbandwidth=取bandtestuploadbandwidth和bandtestdownloadbandwidth中的較小值;
75、s311,暫存比較序列列表pendingbandcomparelist=取ablemoontraceroutelist中所有以bandtestipaddress為末位地址的元素位置;
76、s312,暫存完整通信路徑帶寬列表fullmoontraceroutebandwidthlist=復(fù)制ablemoontraceroutebandwidthlist;
77、s313,初始化帶寬映射表計(jì)數(shù)器kvcounter=1;
78、s314,計(jì)算fullmoontraceroutebandwidthlist的第pendingbandcomparelist[kvcounter]個(gè)元素的值=取fullmoontraceroutebandwidthlist[pendingbandcomparelist[kvcounter]]和bandtestbandwidth的較小值;
79、其中,pendingbandcomparelist[kvcounter]是pendingbandcomparelist中的第kvcounter個(gè)元素,fullmoontraceroutebandwidthlist[pendingbandcomparelist[kvcounter]]是fullmoontraceroutebandwidthlist中的第pendingbandcomparelist[kvcounter]個(gè)元素;
80、s315,令kvcounter=kvcounter+1;
81、s316,如果kvcounter大于pendingbandcomparelist的元素?cái)?shù)量,則轉(zhuǎn)到s317,否則轉(zhuǎn)到s314;
82、s317,令hashmapcounter=hashmapcounter+1;
83、s318,如果hashmapcounter大于moonipaddresslist的元素?cái)?shù)量,則轉(zhuǎn)到s319,否則轉(zhuǎn)到s307;
84、s319,暫存最佳中轉(zhuǎn)帶寬widestmoonbandwidth=取fullmoontraceroutebandwidthlist中最大的一個(gè)值元素;
85、暫存最佳中轉(zhuǎn)路徑序列號(hào)widestmoonrouteno=fullmoontraceroutebandwidthlist中widestmoonbandwidth的位置;
86、s320,暫存最佳中轉(zhuǎn)路徑widesttraceroute=取ablemoontraceroutelist中第widestmoonrouteno個(gè)元素;
87、s321,令widesttraceroute=widesttraceroute+ipaddressforbandwidth;
88、s322,如果ipbandwidth存在,且ipbandwidth大于widestmoonbandwidth,則覆蓋widesttraceroute=本機(jī)到ipaddressforbandwidth的直接通信;否則,直接轉(zhuǎn)到s323;
89、s323,將widesttraceroute作為gettraceroutelistforbandwidth算子的結(jié)果輸出。
90、進(jìn)一步地,所述s304中的ipuploadbandwidth=本機(jī)到ipaddressforbandwidth的最大上傳帶寬。
91、進(jìn)一步地,所述s304中的ipdownloadbandwidth=本機(jī)到ipaddressforbandwidth的最大下載帶寬。
92、進(jìn)一步地,所述?s5中的輸入連接地址connectoip,利用gettraceroutelistforlatency和gettraceroutelistforbandwidth,獲得最終通信路徑traceroute,具體為:
93、s401,輸入連接地址connectoip;
94、所述connectoip中包含如下字段:
95、ipaddress:待連接到的ip地址;
96、preferred:偏好的網(wǎng)絡(luò)路徑,preferred取latency或bandwidth,preferred初始默認(rèn)為latency;
97、s402,初始化通信路徑traceroute;
98、s403,如果connectoip.?preferred=?bandwidth,則轉(zhuǎn)到s405;否則,轉(zhuǎn)到s404;
99、其中,connectoip.?preferred是connectoip中的preferred字段;
100、s404,利用gettraceroutelistforlatency獲得traceroute并更新traceroute,然后轉(zhuǎn)到s406;
101、gettraceroutelistforlatency的輸入為connectoip.?ipaddress;
102、其中,connectoip.?ipaddress是connectoip中的ipaddress字段;
103、s405,利用gettraceroutelistforbandwidth獲得traceroute并更新traceroute,并轉(zhuǎn)到s406;
104、s406,輸出traceroute作為最終結(jié)果。
105、進(jìn)一步地,所述s405中的gettraceroutelistforbandwidth的輸入為connectoip.ipaddress。
106、本發(fā)明的有益效果為:
107、本發(fā)明提供一種延遲與帶寬中繼比較算子的網(wǎng)絡(luò)通信路徑選擇方法。建立了一種中繼網(wǎng)絡(luò)節(jié)點(diǎn)的互聯(lián)延遲和帶寬比較算子,能夠分析兩臺(tái)主機(jī)的網(wǎng)絡(luò)質(zhì)量情況,并根據(jù)兩臺(tái)主機(jī)的連接需求,利用一個(gè)中繼連接池來保證主機(jī)之間的連接連通性,同時(shí)使連接雙方的延遲盡可能達(dá)到最低,可利用帶寬盡可能最大化,從而提升了網(wǎng)絡(luò)連接質(zhì)量。本發(fā)明既能夠保證兩臺(tái)主機(jī)不受地域空間和網(wǎng)絡(luò)資源的限制的互相連接,又能夠降低延遲、避免帶寬瓶頸,同時(shí)能夠降低成本,提高網(wǎng)絡(luò)連接的質(zhì)量,滿足了不同場(chǎng)景下的網(wǎng)絡(luò)使用需求。本發(fā)明大大提升了個(gè)人使用遠(yuǎn)程連接、音視頻通話的服務(wù)質(zhì)量,同時(shí)能夠優(yōu)化視聽平臺(tái)的內(nèi)容分發(fā)服務(wù)質(zhì)量,實(shí)現(xiàn)利用互聯(lián)網(wǎng)傳輸包括加密數(shù)據(jù)在內(nèi)的任何數(shù)據(jù);本發(fā)明拓展性高,可承載任何基于網(wǎng)絡(luò)層的業(yè)務(wù),滿足了異地組網(wǎng)的需求。