一種維持tcp長(zhǎng)連接的自適應(yīng)心跳方法及其系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種維持TCP長(zhǎng)連接的自適應(yīng)心跳方法及其系統(tǒng),該自適應(yīng)心跳方法,包括:連接建立步驟、連接狀態(tài)探測(cè)步驟和自適應(yīng)調(diào)整步驟;連接建立步驟用于完成通信雙方初始化,通信雙方建立網(wǎng)絡(luò)連接;連接狀態(tài)探測(cè)步驟用于通信雙方中的一方作為發(fā)送方發(fā)送心跳包對(duì)所述網(wǎng)絡(luò)連接狀態(tài)進(jìn)行探測(cè);自適應(yīng)調(diào)整步驟用于根據(jù)所述網(wǎng)絡(luò)連接狀態(tài)探測(cè)結(jié)果,通過(guò)連接探測(cè)參數(shù)的自適應(yīng)調(diào)整,使所述發(fā)送方自主的調(diào)整發(fā)送心跳包的頻率,以維持TCP長(zhǎng)連接。本發(fā)明只需對(duì)通信終端上運(yùn)行的程序稍加修改,而無(wú)需改變網(wǎng)絡(luò)中已有的其他設(shè)備,也不需要修改通信所使用的網(wǎng)絡(luò)協(xié)議,具有實(shí)現(xiàn)簡(jiǎn)單和部署方便的有益效果。
【專利說(shuō)明】一種維持TCP長(zhǎng)連接的自適應(yīng)心跳方法及其系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種自適應(yīng)機(jī)制,特別涉及一種NAT環(huán)境下維持TCP長(zhǎng)連接的自適應(yīng)心跳方法和系統(tǒng)。
【背景技術(shù)】
[0002]嵌入式設(shè)備是一種用于控制、監(jiān)視或者輔助操作的裝置,從它誕生起就一直是最有發(fā)展前景的IT應(yīng)用領(lǐng)域之一。如今,嵌入式設(shè)備在數(shù)量上已經(jīng)遠(yuǎn)遠(yuǎn)超過(guò)了各種通用計(jì)算機(jī)。在可以預(yù)見的將來(lái),人們對(duì)嵌入式的需求將持續(xù)增長(zhǎng),嵌入式領(lǐng)域?qū)⒗^續(xù)蓬勃發(fā)展。
[0003]大部分的嵌入式設(shè)備都能夠通過(guò)無(wú)線方式接入網(wǎng)絡(luò)。然而,由于互聯(lián)網(wǎng)公有地址數(shù)量有限,無(wú)法為這些無(wú)線設(shè)備分配唯一的IP地址。因此,絕大部分的無(wú)線設(shè)備采用NAT方式接入到互聯(lián)網(wǎng)。NAT能夠?qū)⑺接蠭P地址映射成公有IP地址,并通過(guò)修改數(shù)據(jù)包中的IP地址完成NAT內(nèi)部設(shè)備和外部終端之間的通信。但是,NAT可用的公有地址數(shù)無(wú)法滿足所有的無(wú)線設(shè)備,因此,NAT采用動(dòng)態(tài)刷新的方式為最近需要聯(lián)網(wǎng)的無(wú)線設(shè)備選擇可用的公有IP地址。如果無(wú)線設(shè)備和外部主機(jī)所建立的連接長(zhǎng)時(shí)間空閑,NAT將刪除與之相對(duì)應(yīng)的記錄,導(dǎo)致鏈路斷開。
[0004]一方面,在大部分場(chǎng)景中,無(wú)線設(shè)備需要保持和服務(wù)器的連接以便實(shí)時(shí)的發(fā)送和接收數(shù)據(jù)。另一方面,出于便攜性考慮,無(wú)線設(shè)備大都體積較小,其計(jì)算能力、存儲(chǔ)能力和能源相比于PC機(jī)而言都較低。一旦與服務(wù)器的連接斷開,無(wú)線設(shè)備需要向服務(wù)器重新發(fā)起連接,消耗了不必要的資源。
[0005]現(xiàn)有的技術(shù)使用定時(shí)發(fā)送心跳包的方式來(lái)維持連接的穩(wěn)定,要求發(fā)送心跳包的間隔小于NAT的刷新間隔。因此,使用確定的時(shí)間間隔發(fā)送心跳包的方式需要事先知道NAT的刷新間隔。然而,通常情況下NAT的刷新時(shí)間是不確定的。另一方面,無(wú)線設(shè)備所處的NAT網(wǎng)絡(luò)環(huán)境可能隨時(shí)發(fā)生變化,采用定時(shí)發(fā)送心跳包的方式將很難適應(yīng)網(wǎng)絡(luò)的變化。當(dāng)然,可以采用非常小的間隔來(lái)發(fā)送心跳包,但是這種方式過(guò)于極端,同時(shí)會(huì)消耗大量的網(wǎng)絡(luò)流量,對(duì)于流量十分寶貴的無(wú)線設(shè)備而言,這種方式是不可取的。
[0006]綜上所述,在NAT環(huán)境下提供一套行之有效的以最少流量代價(jià)維持通信兩端連接存活的自適應(yīng)機(jī)制迫在眉睫。
【發(fā)明內(nèi)容】
[0007]現(xiàn)有的無(wú)線設(shè)備大部分通過(guò)定時(shí)發(fā)送心跳包的方式來(lái)維持與NAT外部服務(wù)器的連接,這種方式需要知道當(dāng)前NAT環(huán)境下的刷新間隔,而且一旦網(wǎng)絡(luò)環(huán)境發(fā)生變化,修改相應(yīng)的配置代價(jià)過(guò)高。本發(fā)明為了克服這些不足,提供一種自適應(yīng)的連接存活維持機(jī)制,能夠讓通信端自主的調(diào)整向?qū)Χ税l(fā)送心跳包的頻率,以此來(lái)維持不同NAT環(huán)境下的長(zhǎng)連接。通過(guò)這種方式,本發(fā)明能夠大大的降低數(shù)據(jù)丟失的概率和重建連接的開銷,通信雙方能夠使用最小的代價(jià)維持與對(duì)端的長(zhǎng)連接,避免了數(shù)據(jù)的丟失和繁瑣的重連接。
[0008]為達(dá)上述目的,本發(fā)明提供一種維持TCP長(zhǎng)連接的自適應(yīng)心跳方法,其特征在于,所述方法包括:
[0009]連接建立步驟:完成通信雙方初始化,通信雙方建立網(wǎng)絡(luò)連接;
[0010]連接狀態(tài)探測(cè)步驟:通信雙方中的一方作為發(fā)送方發(fā)送心跳包對(duì)所述網(wǎng)絡(luò)連接狀態(tài)進(jìn)行探測(cè);
[0011]自適應(yīng)調(diào)整步驟:根據(jù)所述網(wǎng)絡(luò)連接狀態(tài)探測(cè)結(jié)果,通過(guò)連接探測(cè)參數(shù)的自適應(yīng)調(diào)整,使所述發(fā)送方自主的調(diào)整發(fā)送心跳包的頻率,以維持TCP長(zhǎng)連接。
[0012]上述維持TCP長(zhǎng)連接的自適應(yīng)心跳方法,其特征在于,所述連接探測(cè)參數(shù),包括:空閑時(shí)間間隔Time,心跳包發(fā)送時(shí)間間隔Intvl和probes個(gè)心跳包。
[0013]上述維持TCP長(zhǎng)連接的自適應(yīng)心跳方法,其特征在于,所述連接狀態(tài)探測(cè)步驟,還包括:
[0014]心跳包發(fā)送步驟:當(dāng)鏈路空閑時(shí)間等于所述空閑時(shí)間間隔Time,所述發(fā)送方向?qū)Ψ桨l(fā)送一個(gè)心跳包,探測(cè)所述網(wǎng)絡(luò)連接狀態(tài);
[0015]連接成功標(biāo)記步驟:如果所述發(fā)送方收到所述對(duì)方的應(yīng)答包,所述網(wǎng)絡(luò)連接狀態(tài)標(biāo)記為成功;
[0016]連接失敗標(biāo)記步驟:如果所述發(fā)送方?jīng)]有收到所述對(duì)方的應(yīng)答包,則所述發(fā)送方繼續(xù)以所述心跳包發(fā)送時(shí)間間隔Intvl定時(shí)向?qū)Ψ桨l(fā)送probes個(gè)心跳包,如果所述發(fā)送方仍然沒有收到所述對(duì)方的應(yīng)答包,所述連接狀態(tài)標(biāo)記為失敗。
[0017]上述維持TCP長(zhǎng)連接的自適應(yīng)心跳方法,其特征在于,所述自適應(yīng)調(diào)整步驟,還包括:
[0018]連接成功自適應(yīng)調(diào)整步驟:所述連接狀態(tài)為成功的情況下,自適應(yīng)調(diào)整所述連接探測(cè)參數(shù),分別為所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包增加處理,并且重復(fù)執(zhí)行所述連接狀態(tài)探測(cè)步驟;
[0019]連接失敗自適應(yīng)調(diào)整步驟:所述連接狀態(tài)為失敗的情況下,自適應(yīng)調(diào)整所述連接探測(cè)參數(shù),分別為所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包減少處理后,對(duì)所述網(wǎng)絡(luò)連接狀態(tài)進(jìn)行判斷。
[0020]上述維持TCP長(zhǎng)連接的自適應(yīng)心跳方法,其特征在于,所述連接失敗自適應(yīng)調(diào)整步驟,還包括:
[0021]網(wǎng)絡(luò)環(huán)境不變調(diào)整步驟:在所述連接失敗自適應(yīng)調(diào)整步驟中,如果所述網(wǎng)絡(luò)連接狀態(tài)為成功,此時(shí)記錄所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包的值,作為自適應(yīng)策略存儲(chǔ),重復(fù)執(zhí)行所述連接狀態(tài)探測(cè)步驟;
[0022]網(wǎng)絡(luò)環(huán)境變化調(diào)整步驟:在所述連接失敗自適應(yīng)調(diào)整步驟中,如果所述網(wǎng)絡(luò)連接狀態(tài)為失敗,判斷所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包是否已經(jīng)達(dá)到預(yù)設(shè)置最小值,如果是則重復(fù)執(zhí)行所述連接狀態(tài)探測(cè)步驟,否則,將所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包的值減少處理,重復(fù)執(zhí)行所述連接狀態(tài)探測(cè)步驟。
[0023]上述維持TCP長(zhǎng)連接的自適應(yīng)心跳方法,其特征在于,所述連接建立步驟,還包括:
[0024]網(wǎng)段自適應(yīng)策略查找步驟:如果所述發(fā)送方為服務(wù)器端,根據(jù)不同的IP網(wǎng)段查找所述自適應(yīng)策略,如果查找成功,所述服務(wù)器端會(huì)對(duì)不同IP網(wǎng)段直接采用已經(jīng)存儲(chǔ)的所述自適應(yīng)策略。
[0025]本發(fā)明還提供一種維持TCP長(zhǎng)連接的自適應(yīng)心跳系統(tǒng),采用所述的自適應(yīng)心跳方法,其特征在于,所述系統(tǒng)包括:
[0026]連接建立模塊:用于完成通信雙方初始化,通信雙方建立網(wǎng)絡(luò)連接;
[0027]連接狀態(tài)探測(cè)模塊:用于通信雙方中的一方作為發(fā)送方發(fā)送心跳包對(duì)所述網(wǎng)絡(luò)連接狀態(tài)進(jìn)行探測(cè);
[0028]自適應(yīng)調(diào)整模塊:用于根據(jù)所述網(wǎng)絡(luò)連接狀態(tài)探測(cè)結(jié)果,通過(guò)連接探測(cè)參數(shù)的自適應(yīng)調(diào)整,使所述發(fā)送方自主的調(diào)整發(fā)送心跳包的頻率,以維持TCP長(zhǎng)連接。
[0029]上述維持TCP長(zhǎng)連接的自適應(yīng)心跳系統(tǒng),其特征在于,所述連接探測(cè)參數(shù),包括:空閑時(shí)間間隔Time,心跳包發(fā)送時(shí)間間隔Intvl和probes個(gè)心跳包。
[0030]上述維持TCP長(zhǎng)連接的自適應(yīng)心跳系統(tǒng),其特征在于,所述連接狀態(tài)探測(cè)模塊,還包括:
[0031]心跳包發(fā)送模塊:用于當(dāng)鏈路空閑時(shí)間等于所述空閑時(shí)間間隔Time,所述發(fā)送方向?qū)Ψ桨l(fā)送一個(gè)心跳包,探測(cè)所述網(wǎng)絡(luò)連接狀態(tài);
[0032]連接成功標(biāo)記模塊:用于判斷如果所述發(fā)送方收到所述對(duì)方的應(yīng)答包,所述網(wǎng)絡(luò)連接狀態(tài)標(biāo)記為成功;
[0033]連接失敗標(biāo)記模塊:用于判斷如果所述發(fā)送方?jīng)]有收到所述對(duì)方的應(yīng)答包,則所述發(fā)送方繼續(xù)以所述心跳包發(fā)送時(shí)間間隔Intvl定時(shí)向?qū)Ψ桨l(fā)送probes個(gè)心跳包,如果所述發(fā)送方仍然沒有收到所述對(duì)方的應(yīng)答包,所述連接狀態(tài)標(biāo)記為失敗。
[0034]上述維持TCP長(zhǎng)連接的自適應(yīng)心跳系統(tǒng),其特征在于,所述自適應(yīng)調(diào)整模塊,還包括:
[0035]連接成功自適應(yīng)調(diào)整模塊:用于在所述連接狀態(tài)為成功的情況下,自適應(yīng)調(diào)整所述鏈路探測(cè)參數(shù),分別為所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包增加處理;
[0036]連接失敗自適應(yīng)調(diào)整模塊:用于在所述連接狀態(tài)為失敗的情況下,自適應(yīng)調(diào)整所述連接探測(cè)參數(shù),分別為所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包減少處理后,并對(duì)所述網(wǎng)絡(luò)連接狀態(tài)進(jìn)行判斷。
[0037]上述維持TCP長(zhǎng)連接的自適應(yīng)心跳系統(tǒng),其特征在于,所述連接失敗自適應(yīng)調(diào)整模塊,還包括:
[0038]網(wǎng)絡(luò)環(huán)境不變調(diào)整模塊:用于在所述網(wǎng)絡(luò)連接狀態(tài)為成功時(shí),存儲(chǔ)所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包的值,作為自適應(yīng)存儲(chǔ)策略;
[0039]網(wǎng)絡(luò)環(huán)境變化調(diào)整模塊:用于當(dāng)所述網(wǎng)絡(luò)連接狀態(tài)為失敗時(shí),判斷所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包是否已經(jīng)達(dá)到預(yù)設(shè)置最小值,如果沒有達(dá)到所述最小值,將所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包的值減少處理。
[0040]上述維持TCP長(zhǎng)連接的自適應(yīng)心跳系統(tǒng),其特征在于,所述連接建立模塊,還包括:
[0041]網(wǎng)段自適應(yīng)策略查找模塊:用于當(dāng)所述發(fā)送方為服務(wù)器端時(shí),根據(jù)不同的IP網(wǎng)段查找存儲(chǔ)所述自適應(yīng)策略的數(shù)據(jù)庫(kù),如果查找成功,所述服務(wù)器端會(huì)對(duì)不同IP網(wǎng)段直接采用已經(jīng)存儲(chǔ)的所述自適應(yīng)策略。
[0042]本發(fā)明與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于,能夠讓通信一端自主的調(diào)整向?qū)Χ税l(fā)送心跳包的策略,以此來(lái)維持不同NAT環(huán)境下與通信對(duì)端的長(zhǎng)連接;能夠讓通信雙方使用最小的代價(jià)維持與對(duì)端的長(zhǎng)連接,避免了數(shù)據(jù)的丟失和繁瑣的重連接。
【專利附圖】
【附圖說(shuō)明】
[0043]圖1為本發(fā)明維持TCP長(zhǎng)連接的自適應(yīng)心跳方法的流程示意圖;
[0044]圖2為本發(fā)明一實(shí)施例在客戶端實(shí)現(xiàn)自適應(yīng)方法的流程示意圖;
[0045]圖3為本發(fā)明一實(shí)施例在服務(wù)器端實(shí)現(xiàn)自適應(yīng)方法的流程示意圖;
[0046]圖4為本發(fā)明一實(shí)施例的實(shí)例場(chǎng)景圖;
[0047]圖5為本發(fā)明維持TCP長(zhǎng)連接的自適應(yīng)心跳系統(tǒng)的系統(tǒng)結(jié)構(gòu)圖。
[0048]其中,附圖標(biāo)記:
[0049]I連接建立模塊2連接狀態(tài)探測(cè)模塊
[0050]3自適應(yīng)調(diào)整模塊
[0051]11網(wǎng)段自適應(yīng)策略查找模塊 21心跳包發(fā)送模塊
[0052]22連接成功標(biāo)記模塊23連接失敗標(biāo)記模塊
[0053]31連接成功自適應(yīng)調(diào)整模塊 32連接失敗自適應(yīng)調(diào)整模塊
[0054]321網(wǎng)絡(luò)環(huán)境不變調(diào)整模塊 322網(wǎng)絡(luò)環(huán)境變化調(diào)整模塊
[0055]SI~S3、S11、S21~S23、S31~S32、S321~S322:本發(fā)明的實(shí)施例步驟
【具體實(shí)施方式】
[0056]以下結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述,但不作為對(duì)本發(fā)明的限定。
[0057]下面結(jié)合附圖和【具體實(shí)施方式】,對(duì)本發(fā)明做進(jìn)一步的說(shuō)明。
[0058]在詳細(xì)說(shuō)明自適應(yīng)方法前,需要解釋三個(gè)名詞的含義。
[0059]Time:每當(dāng)鏈路空閑時(shí),本方將按照Time規(guī)定的時(shí)間間隔向?qū)Ψ桨l(fā)送心跳包,一旦發(fā)送間隔內(nèi)鏈路重新忙碌,本方將等待鏈路空閑重新按照Time規(guī)定的時(shí)間間隔發(fā)送心跳包。
[0060]Intvl:一旦對(duì)方不回復(fù)相應(yīng)的心跳包,本方將以Intvl規(guī)定的時(shí)間間隔定時(shí)向?qū)Ψ桨l(fā)送心跳包。通常情況下,Intvl的值小于Time規(guī)定的時(shí)間間隔。
[0061]Probes:在本方以Intvl規(guī)定的時(shí)間間隔發(fā)送了 probes個(gè)心跳包后若對(duì)方仍然無(wú)響應(yīng),本方標(biāo)記鏈路為斷開。
[0062]本發(fā)明提供的一種維持TCP長(zhǎng)連接的自適應(yīng)心跳方法,如圖1所示,包括以下步驟:
[0063]連接建立步驟S1:完成通信雙方初始化,通信雙方建立網(wǎng)絡(luò)連接;
[0064]連接狀態(tài)探測(cè)步驟S2:通信雙方中的一方作為發(fā)送方發(fā)送心跳包對(duì)網(wǎng)絡(luò)連接狀態(tài)進(jìn)行探測(cè);
[0065]自適應(yīng)調(diào)整步驟S3:根據(jù)網(wǎng)絡(luò)連接狀態(tài)探測(cè)結(jié)果,通過(guò)發(fā)送方的連接探測(cè)參數(shù)的自適應(yīng)調(diào)整,使發(fā)送方自主的調(diào)整發(fā)送心跳包的頻率,以維持TCP長(zhǎng)連接。[0066]該自適應(yīng)心跳方法的連接狀態(tài)探測(cè)步驟S2,還包括以下步驟:
[0067]心跳包發(fā)送步驟S21:當(dāng)鏈路空閑時(shí)間等于空閑時(shí)間間隔Time,發(fā)送方向?qū)Ψ桨l(fā)送一個(gè)心跳包,探測(cè)網(wǎng)絡(luò)連接狀態(tài);
[0068]連接成功標(biāo)記步驟S22:如果發(fā)送方收到對(duì)方的應(yīng)答包,網(wǎng)絡(luò)連接狀態(tài)標(biāo)記為成功;
[0069]連接失敗標(biāo)記步驟S23:如果發(fā)送方?jīng)]有收到對(duì)方的應(yīng)答包,則發(fā)送方繼續(xù)以心跳包發(fā)送時(shí)間間隔Intvl定時(shí)向?qū)Ψ桨l(fā)送probes個(gè)心跳包,如果發(fā)送方仍然沒有收到對(duì)方的應(yīng)答包,所述連接狀態(tài)標(biāo)記為失敗。
[0070]該自適應(yīng)心跳方法的自適應(yīng)調(diào)整步驟S3,還包括以下步驟:
[0071]連接成功自適應(yīng)調(diào)整步驟S31:連接狀態(tài)為成功的情況下,自適應(yīng)調(diào)整鏈路探測(cè)參數(shù),分別為空閑時(shí)間間隔Time值,心跳包發(fā)送時(shí)間間隔Intvl和probes個(gè)心跳包增加處理,并且重復(fù)執(zhí)行連接狀態(tài)探測(cè)步驟;
[0072]連接失敗自適應(yīng)調(diào)整步驟S32:連接狀態(tài)為失敗的情況下,自適應(yīng)調(diào)整連接探測(cè)參數(shù),分別為空閑時(shí)間間隔Time值,心跳包發(fā)送時(shí)間間隔Intvl和probes個(gè)心跳包減少處理后,對(duì)網(wǎng)絡(luò)連接狀態(tài)進(jìn)行判斷。
[0073]該自適應(yīng)心跳方法的連接失敗自適應(yīng)調(diào)整步驟S32,還包括以下步驟:
[0074]網(wǎng)絡(luò)環(huán)境不變調(diào)整步驟S321:在連接失敗自適應(yīng)調(diào)整步驟中,如果網(wǎng)絡(luò)連接狀態(tài)為成功,此時(shí)記錄空閑時(shí)間間隔Time值,心跳包發(fā)送時(shí)間間隔Intvl和probes個(gè)心跳包的值,作為自適應(yīng)策略存儲(chǔ),重復(fù)執(zhí)行所述連接狀態(tài)探測(cè)步驟;
[0075]網(wǎng)絡(luò)環(huán)境變化調(diào)整步驟S322:在所述連接失敗自適應(yīng)調(diào)整步驟中,如果所述網(wǎng)絡(luò)連接狀態(tài)為失敗,判斷所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包是否已經(jīng)達(dá)到預(yù)設(shè)置最小值,如果是,則重復(fù)執(zhí)行所述連接狀態(tài)探測(cè)步驟,否則,將所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包的值減少處理,重復(fù)執(zhí)行所述連接狀態(tài)探測(cè)步驟。
[0076]該自適應(yīng)心跳方法的連接建立步驟SI,還包括以下步驟:
[0077]網(wǎng)段自適應(yīng)策略查找步驟Sll:如果發(fā)送方為服務(wù)器端,根據(jù)不同的IP網(wǎng)段查找存儲(chǔ)自適應(yīng)策略的數(shù)據(jù)庫(kù),如果查找成功,服務(wù)器端會(huì)對(duì)不同IP網(wǎng)段直接采用已經(jīng)存儲(chǔ)的自適應(yīng)策略。
[0078]以下結(jié)合本發(fā)明具體實(shí)施例,對(duì)維持TCP長(zhǎng)連接的自適應(yīng)心跳方法進(jìn)行詳細(xì)說(shuō)明。
[0079]一般情況下,當(dāng)連接空閑時(shí),通過(guò)發(fā)送心跳包的方式,能夠讓NAT刷新對(duì)該無(wú)線設(shè)備的映射,從而保持連接的穩(wěn)定。對(duì)于某一個(gè)特定的場(chǎng)景而言,如果心跳包發(fā)送過(guò)慢,NAT刷新的時(shí)間間隔小于心跳包的發(fā)送間隔,心跳包將失去作用,連接依然會(huì)斷開。如果心跳包發(fā)送過(guò)快,心跳包可以起到刷新NAT映射表的作用,但是卻消耗了不必要的網(wǎng)絡(luò)流量和資源。因此,需要為不同NAT環(huán)境下的無(wú)線設(shè)備選擇合適的心跳包發(fā)送策略。
[0080]本發(fā)明提供的自適應(yīng)機(jī)制依據(jù)每次連接的成功與否來(lái)調(diào)整前述三個(gè)參數(shù)。通信中的一方穿過(guò)NAT和另外一方建立連接后,由其中一方啟動(dòng)自適應(yīng)機(jī)制,當(dāng)鏈路處于忙碌狀態(tài)時(shí),自適應(yīng)機(jī)制休眠不工作。一旦鏈路空閑,自適應(yīng)機(jī)制在本方啟動(dòng)定時(shí)器。如果在Time時(shí)間內(nèi),鏈路中有數(shù)據(jù)傳輸,則本方等待數(shù)據(jù)傳輸結(jié)束后將定時(shí)器清O并重新啟動(dòng)定時(shí)器。如果在定時(shí)器規(guī)定的時(shí)間內(nèi),鏈路依然空閑,則本方將發(fā)送一個(gè)心跳包給對(duì)方。此時(shí)可能遇到兩種情況,如果對(duì)方在RTO時(shí)間內(nèi)回復(fù)該心跳包的ACK,則表明此時(shí)通信對(duì)端仍然可達(dá),本方重新啟動(dòng)定時(shí)器,重復(fù)上述過(guò)程,直至連接成功結(jié)束。如果本方?jīng)]有收到對(duì)方回復(fù)的ACK,則本方將以Intvl時(shí)間間隔定時(shí)向?qū)Ψ桨l(fā)送心跳包。其中,RTO為TCP標(biāo)準(zhǔn)協(xié)議中的超時(shí)重傳等待時(shí)間,其取值范圍為200ms — 120s。不同的TCP實(shí)現(xiàn)版本所選擇的RTO取值也不一樣,一般情況下,RTO的值被設(shè)置為200ms。如果對(duì)方在本方已經(jīng)發(fā)送了 probes個(gè)心跳包后仍然沒有任何響應(yīng),則標(biāo)記鏈路斷開,此次連接失敗。對(duì)于建立的每一次連接來(lái)說(shuō),它可能成功完成,也可能失敗。下面就這兩種情況分別描述自適應(yīng)機(jī)制的參數(shù)調(diào)整策略:
[0081]①如果連接成功完成,表明當(dāng)前網(wǎng)絡(luò)狀況良好,NAT的刷新時(shí)間間隔大于心跳包的發(fā)送間隔,按照當(dāng)前的心跳包發(fā)送策略能夠?qū)崿F(xiàn)維持連接的功能。出于節(jié)省流量的考慮,Time的值增加一個(gè)單位,Intvl的值增加一個(gè)單位,Probes的值增加I,在下一次連接建立時(shí),機(jī)制將使用這三個(gè)新的參數(shù)值。
[0082]②如果連接斷開,表明當(dāng)前網(wǎng)絡(luò)狀況一般,NAT的刷新時(shí)間間隔小于心跳包的發(fā)送間隔,按照當(dāng)前的心跳包發(fā)送策略無(wú)法維持連接。造成這種情況的原因有兩個(gè):1)NAT刷新時(shí)間不變,而心跳包發(fā)送間隔大于NAT刷新間隔。2)心跳包發(fā)送間隔不變,而NAT刷新時(shí)間小于心跳包發(fā)送間隔。因此,自適應(yīng)機(jī)制需要判斷連接斷開的原因。首先,將Time、Intvl和Probes的值都減少一個(gè)單位。然后觀察調(diào)整之后的連接是否成功,如果成功,說(shuō)明當(dāng)前心跳間隔正好為臨界點(diǎn),并且NAT網(wǎng)絡(luò)環(huán)境并沒有發(fā)生變化,則參數(shù)調(diào)整完畢,自適應(yīng)過(guò)程結(jié)束,保存Time、Intvl和Probes的值作為自適應(yīng)調(diào)整策略,并且以已經(jīng)保存的Time、Intvl和Probes的值繼續(xù)定時(shí)向?qū)Χ税l(fā)送心跳包,進(jìn)行連接狀態(tài)探測(cè)。如果之后的連接失敗,則說(shuō)明此時(shí)NAT網(wǎng)絡(luò)環(huán)境已經(jīng)發(fā)生變化,NAT的刷新間隔已經(jīng)遠(yuǎn)遠(yuǎn)小于心跳包的發(fā)送間隔,需要重新調(diào)整參數(shù)。此時(shí)對(duì)Time、Intvl和Probes的值進(jìn)行判斷,是否已經(jīng)達(dá)到預(yù)設(shè)置的最小值,如果已經(jīng)達(dá)到最小值,貝1J采用Time、Intvl和Probes的預(yù)設(shè)置最小值,繼續(xù)向?qū)Χ税l(fā)送心跳包,進(jìn)行連接狀態(tài)探測(cè);如果Time、Intvl和Probes的值沒有達(dá)到預(yù)設(shè)置的最小值,將Time、Intvl和Probes的值減半,然后繼續(xù)觀察連接是否斷開,如果連接成功完成,貝Ij回到策略①,以I為單位繼續(xù)增加Time、Intvl和Probes的值,直到達(dá)到臨界點(diǎn),自適應(yīng)過(guò)程結(jié)束,繼續(xù)定時(shí)向?qū)Χ税l(fā)送心跳包,進(jìn)行連接狀態(tài)探測(cè)。值得注意的是,假設(shè)在物理鏈路正常的情況下,NAT的刷新間隔始終是一個(gè)大于O的數(shù),因此,對(duì)Time、Intvl和Probes三個(gè)值持續(xù)減半,一定會(huì)存在一個(gè)時(shí)刻使得Time的值小于NAT的刷新間隔,此時(shí)連接將成功,然后回到策略①,以I為單位增加Time、Intvl和Probes的值,直至達(dá)到NAT刷新間隔的臨界點(diǎn),自適應(yīng)過(guò)程結(jié)束。
[0083]經(jīng)過(guò)上述過(guò)程,心跳包的發(fā)送策略將最終趨于穩(wěn)定。心跳發(fā)送間隔略低于NAT的刷新間隔,最大限度的節(jié)省了流量。可以看到,自適應(yīng)機(jī)制簡(jiǎn)潔明了,使用統(tǒng)一的方式解決了問(wèn)題,能夠適應(yīng)不同地區(qū)的NAT設(shè)備和不同的網(wǎng)絡(luò)擁塞狀況。
[0084]本發(fā)明提供的自適應(yīng)心跳機(jī)制可以在任意一端進(jìn)行配置,在通信兩端進(jìn)行配置各自有各自的優(yōu)勢(shì),下面分別進(jìn)行討論。
[0085]本發(fā)明在客戶端的一較佳實(shí)施例,具體說(shuō)明如下:
[0086]在客戶端部署自適應(yīng)機(jī)制相對(duì)簡(jiǎn)單,由位于NAT內(nèi)部的客戶端主動(dòng)啟動(dòng)自適應(yīng)機(jī)制,經(jīng)過(guò)一段時(shí)間后,客戶端將適應(yīng)當(dāng)前的NAT網(wǎng)絡(luò)環(huán)境。這種方式的優(yōu)點(diǎn)的是客戶端能主動(dòng)適應(yīng)所處的NAT環(huán)境,并且每個(gè)客戶端相互獨(dú)立互不影響。缺點(diǎn)是當(dāng)客戶端發(fā)現(xiàn)連接已經(jīng)斷開后,將重新建立連接。對(duì)于服務(wù)器而言,它并不知曉客戶端已經(jīng)斷開,因此它將維持連接狀態(tài)直到主動(dòng)發(fā)送數(shù)據(jù)無(wú)響應(yīng)為止,造成了不必要的服務(wù)器資源消耗。另一方面,客戶端的數(shù)量較大,不方便進(jìn)行統(tǒng)一的管理和配置。
[0087]如圖2所示,本發(fā)明在客戶端的心跳維持方法的具體步驟如下:
[0088]初始化步驟S201:在無(wú)線客戶設(shè)備上修改客戶端代碼,在程序中定義三個(gè)和心跳包發(fā)送策略相關(guān)的參數(shù)。這三個(gè)參數(shù)分別是time、intvl、probes。其中,前兩個(gè)參數(shù)的單位都為秒,第三個(gè)參數(shù)無(wú)量綱。
[0089]創(chuàng)建套接字,并使用setsockopt函數(shù)對(duì)其進(jìn)行設(shè)置,打開相應(yīng)的keepalive功能,并使用上述三個(gè)默認(rèn)值設(shè)置套接字的keepalive功能。
[0090]連接服務(wù)器步驟S202:與服務(wù)器建立連接,進(jìn)行通信。
[0091]設(shè)置默認(rèn)心跳參數(shù)S203:在通信過(guò)程中,keepalive機(jī)制會(huì)按照配置好的三個(gè)參數(shù)在鏈路空閑時(shí)發(fā)送心跳包。
[0092]啟動(dòng)自適應(yīng)過(guò)程S204:如果通信成功結(jié)束,將time值加I,intvl值加I,probes值加I。如果本次通信失敗,并且上一次通信也失敗,則將time值減半,intvl值減半,probes值減半,直至達(dá)到預(yù)設(shè)置最小值。如果本次通信失敗,并且上一次通信成功,則將time值減I, intvl值減I, probes值減I。此時(shí)time、intvl、probes三個(gè)值不再變化。
[0093]配置心跳策略S205:在下一次該客戶端向服務(wù)器發(fā)起連接時(shí),使用新的time、intvl和probes值對(duì)其進(jìn)行設(shè)置。
[0094]經(jīng)過(guò)一段時(shí)間的或成功或失敗的嘗試后,time、intvl和probes三個(gè)值都將穩(wěn)定,完成自適應(yīng)過(guò)程。繼續(xù)向服務(wù)器發(fā)送心跳包,進(jìn)行連接狀態(tài)探測(cè),如果此時(shí)NAT環(huán)境再次發(fā)生改變,重復(fù)上述過(guò)程。
[0095]本發(fā)明在服務(wù)器端的一較佳實(shí)施例,具體說(shuō)明如下:
[0096]在服務(wù)器部署自適應(yīng)機(jī)制,由服務(wù)器主動(dòng)記錄和其他所有客戶端的通信情況,為處于不同網(wǎng)段的客戶端維護(hù)相應(yīng)的心跳發(fā)送策略。這種方式的優(yōu)點(diǎn)是,由服務(wù)器統(tǒng)一管理心跳策略,便于修改和控制自適應(yīng)過(guò)程。這種方式的缺點(diǎn)是,當(dāng)客戶端的數(shù)量很大時(shí),服務(wù)器需要使用額外的資源來(lái)為不同網(wǎng)段的客戶端維護(hù)相應(yīng)的心跳發(fā)送策略。
[0097]服務(wù)器自適應(yīng)機(jī)制的實(shí)現(xiàn)過(guò)程和客戶端基本相同,唯一不同的是,服務(wù)器增加了網(wǎng)段心跳策略。由于互聯(lián)網(wǎng)中的IP地址和設(shè)備 對(duì)應(yīng),對(duì)于同一個(gè)NAT來(lái)說(shuō),它所可用的公網(wǎng)IP地址是有限的,并且是固定的,同時(shí),這些IP地址處于同一網(wǎng)段。也就是說(shuō),網(wǎng)段和NAT是一一對(duì)應(yīng)的。因此,當(dāng)服務(wù)器收到來(lái)自NAT的連接請(qǐng)求時(shí),可以通過(guò)分析源IP地址的網(wǎng)段判斷該請(qǐng)求所屬的NAT,并根據(jù)以往存儲(chǔ)的策略信息,相應(yīng)的選擇適合該NAT的心跳發(fā)送策略,省去了重新自適應(yīng)的過(guò)程。
[0098]如圖3所示,本發(fā)明在服務(wù)器端的心跳維持方法的具體步驟如下:
[0099]初始化步驟S301:在服務(wù)器端修改代碼,在程序中定義三個(gè)和心跳包發(fā)送策略相關(guān)的參數(shù)。這三個(gè)參數(shù)分別是time、intvl、probes。其中,前兩個(gè)參數(shù)的單位都為秒,第三個(gè)參數(shù)無(wú)量綱。
[0100]創(chuàng)建套接字步驟S302:并使用setsockopt函數(shù)對(duì)其進(jìn)行設(shè)置,打開相應(yīng)的keepalive功能,并使用上述三個(gè)默認(rèn)值設(shè)置套接字的keepalive功能。并將該套接字設(shè)為監(jiān)聽模式。
[0101]接受客戶端連接請(qǐng)求步驟S303:提取客戶端請(qǐng)求數(shù)據(jù)包中的IP地址網(wǎng)段。
[0102]相應(yīng)網(wǎng)段心跳策略步驟S304:然后根據(jù)該網(wǎng)段查找數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)中存儲(chǔ)了所有曾經(jīng)和該服務(wù)器建立過(guò)連接的NAT所處的網(wǎng)段以及和這些網(wǎng)段對(duì)應(yīng)的心跳策略。服務(wù)器從數(shù)據(jù)庫(kù)中查找是否已經(jīng)存儲(chǔ)了與本次連接來(lái)自網(wǎng)段相對(duì)應(yīng)的Time、Intvl以及Probes的值。如果已經(jīng)存在,貝丨』直接使用數(shù)據(jù)庫(kù)中的這三個(gè)值初始化Time、Intvl和Probes。如果不存在,則使用默認(rèn)值初始化Time、Intvl和Probes。
[0103]自適應(yīng)啟動(dòng)步驟S305:在上一步中,如果服務(wù)器不存在相應(yīng)心跳策略,則在通信過(guò)程中,啟動(dòng)自適應(yīng)機(jī)制。如果通信成功結(jié)束,將time值加I, intvl值加I, probes值加
I。如果本次通信失敗,并且上一次通信也失敗,說(shuō)明當(dāng)前NAT刷新較為頻繁,則將time值減半,intvl值減半,probes值減半,直至Time、Intvl和Probes值達(dá)到預(yù)設(shè)置的最小值,通信成功為止。如果本次通信失敗,并且上一次通信成功,則將time值減I, intvl值減I,probes 值減 I。
[0104]配置相應(yīng)心跳策略步驟S306:此時(shí)time、intvl、probes三個(gè)值不再變化并將對(duì)應(yīng)新網(wǎng)段的策略存儲(chǔ)在服務(wù)器中。
[0105]在下一個(gè)客戶端向服務(wù)器發(fā)起連接時(shí),重復(fù)上述過(guò)程。
[0106]如圖4所示,本發(fā)明應(yīng)用的一個(gè)場(chǎng)景,圖4中有兩個(gè)無(wú)線設(shè)備,分別為A和B。兩個(gè)無(wú)線設(shè)備都通過(guò)無(wú)線鏈路連接到可以訪問(wèn)外網(wǎng)的NAT上,NAT再接入到Internet上。以無(wú)線設(shè)備A為例,由A通過(guò)NAT和服務(wù)器建立一個(gè)TCP長(zhǎng)連接。當(dāng)連接建立后,在鏈路空閑時(shí),A啟動(dòng)自適應(yīng)機(jī)制,使用默認(rèn)值初始化Time、Intvl和Probes三個(gè)值,緊接著啟動(dòng)定時(shí)器,將該定時(shí)器的時(shí)間設(shè)置為Time。鏈路持續(xù)空閑,定時(shí)器的時(shí)間減少,當(dāng)定時(shí)器的時(shí)間降為O時(shí),A發(fā)送一個(gè)心跳包給服務(wù)器,如果服務(wù)器響應(yīng)一個(gè)ACK,則證明連接正常,NAT刷新一次映射表,定時(shí)器重新設(shè)置為Time,`重復(fù)上述步驟,長(zhǎng)連接繼續(xù)保持。如果沒有收到ACK回復(fù),證明連接異常,定時(shí)器設(shè)置為Intvl,當(dāng)Intvl降為O時(shí),A發(fā)送一個(gè)心跳包,并重復(fù)Probes次。如果在此期間,A重新收到ACK,或者重新忙碌,證明連接恢復(fù)正常,定時(shí)器再次重置為Time,重復(fù)以上步驟。如果在此期間,A沒有收到ACK,則鏈路斷開,A將記錄下此時(shí)的Time、Intvl和Probes三個(gè)值。在下一次建立連接時(shí),將這三個(gè)值加I,并重復(fù)上述過(guò)程,直至逼近NAT的刷新時(shí)間,至此,A完成自適應(yīng)過(guò)程,Time、Intvl和Probes三個(gè)值已經(jīng)和當(dāng)前NAT環(huán)境相匹配。如果A更換了網(wǎng)絡(luò)接入點(diǎn),通過(guò)另外一個(gè)NAT接入到網(wǎng)絡(luò),并且該NAT的刷新時(shí)間小于A之前配置好的心跳間隔,則A將重新進(jìn)行適配。具體方式是,首先,A將Time、Intvl和Probes三個(gè)值都減I。如果連接成功,適配完成。如果連接依舊失敗,則將該三個(gè)值減半,直至連接重新成功為止。在之后的過(guò)程中,只要連接成功,就將該三個(gè)值加1,直至逼近新的NAT環(huán)境刷新時(shí)間。至此,自適應(yīng)機(jī)制完成。
[0107]本發(fā)明提供的維持TCP長(zhǎng)連接的自適應(yīng)心跳系統(tǒng),如圖5所示,包括以下模塊:連接建立模塊I,連接狀態(tài)探測(cè)模塊2,自適應(yīng)調(diào)整模塊3,連接建立模塊I用于完成通信雙方初始化,通信雙方建立網(wǎng)絡(luò)連接;連接狀態(tài)探測(cè)模塊2用于通信雙方中的一方作為發(fā)送方發(fā)送心跳包對(duì)網(wǎng)絡(luò)連接狀態(tài)進(jìn)行探測(cè);自適應(yīng)調(diào)整模塊3用于根據(jù)網(wǎng)絡(luò)連接狀態(tài)探測(cè)結(jié)果,通過(guò)連接探測(cè)參數(shù)的自適應(yīng)調(diào)整,使發(fā)送方自主的調(diào)整發(fā)送心跳包的頻率,以維持TCP長(zhǎng)連接。[0108]其中,連接建立模塊I,還包括:網(wǎng)段自適應(yīng)策略查找模塊11用于當(dāng)發(fā)送方為服務(wù)器端時(shí),根據(jù)不同的IP網(wǎng)段查找存儲(chǔ)自適應(yīng)策略的數(shù)據(jù)庫(kù),如果查找成功,所述服務(wù)器端會(huì)對(duì)不同IP網(wǎng)段直接采用已經(jīng)存儲(chǔ)的自適應(yīng)策略。
[0109]其中,連接狀態(tài)探測(cè)模塊2,還包括:心跳包發(fā)送模塊21,連接成功標(biāo)記模塊22,連接失敗標(biāo)記模塊23 ;心跳包發(fā)送模塊21用于當(dāng)鏈路空閑時(shí)間等于空閑時(shí)間間隔Time,發(fā)送方向?qū)Ψ桨l(fā)送一個(gè)心跳包,探測(cè)網(wǎng)絡(luò)連接狀態(tài);連接成功標(biāo)記模塊22用于判斷如果發(fā)送方收到對(duì)方的應(yīng)答包,網(wǎng)絡(luò)連接狀態(tài)標(biāo)記為成功;連接失敗標(biāo)記模塊23用于判斷如果發(fā)送方?jīng)]有收到對(duì)方的應(yīng)答包,則發(fā)送方繼續(xù)以心跳包發(fā)送時(shí)間間隔Intvl定時(shí)向?qū)Ψ桨l(fā)送probes個(gè)心跳包,如果發(fā)送方仍然沒有收到對(duì)方的應(yīng)答包,連接狀態(tài)標(biāo)記為失敗。
[0110]其中,自適應(yīng)調(diào)整模塊3,還包括:連接成功自適應(yīng)調(diào)整模塊31,連接失敗自適應(yīng)調(diào)整模塊32 ;連接成功自適應(yīng)調(diào)整模塊31用于在連接狀態(tài)為成功的情況下,自適應(yīng)調(diào)整連接探測(cè)參數(shù),分別為所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包增加處理;連接失敗自適應(yīng)調(diào)整模塊32用于在連接狀態(tài)為失敗的情況下,自適應(yīng)調(diào)整連接探測(cè)參數(shù),分別為空閑時(shí)間間隔Time值,心跳包發(fā)送時(shí)間間隔Intvl和probes個(gè)心跳包減少處理后,并對(duì)網(wǎng)絡(luò)連接狀態(tài)進(jìn)行判斷。
[0111]其中,連接失敗自適應(yīng)調(diào)整模塊32,還包括:網(wǎng)絡(luò)環(huán)境不變調(diào)整模塊321,網(wǎng)絡(luò)環(huán)境變化調(diào)整模塊322,網(wǎng)絡(luò)環(huán)境不變調(diào)整模塊321用于在網(wǎng)絡(luò)連接狀態(tài)為成功時(shí),存儲(chǔ)所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包的值,作為自適應(yīng)存儲(chǔ)策略;網(wǎng)絡(luò)環(huán)境變化調(diào)整模塊322用于當(dāng)網(wǎng)絡(luò)連接狀態(tài)為失敗時(shí),判斷空閑時(shí)間間隔Time值,心跳包發(fā)送時(shí)間間隔Intvl和probes個(gè)心跳包是否已經(jīng)達(dá)到預(yù)設(shè)置最小值,如果沒有達(dá)到所述最小值,將所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包的值減少處理。
[0112]當(dāng)然,本發(fā)明還可有其它多種實(shí)施例,在不背離本發(fā)明精神及其實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明做出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。
【權(quán)利要求】
1.一種維持TCP長(zhǎng)連接的自適應(yīng)心跳方法,其特征在于,所述方法包括: 連接建立步驟:完成通信雙方初始化,通信雙方建立網(wǎng)絡(luò)連接; 連接狀態(tài)探測(cè)步驟:所述通信雙方中的一方作為發(fā)送方發(fā)送心跳包對(duì)所述網(wǎng)絡(luò)連接狀態(tài)進(jìn)行探測(cè); 自適應(yīng)調(diào)整步驟:根據(jù)所述網(wǎng)絡(luò)連接狀態(tài)探測(cè)結(jié)果,通過(guò)連接探測(cè)參數(shù)的自適應(yīng)調(diào)整,使所述發(fā)送方自主的調(diào)整發(fā)送心跳包的頻率,以維持TCP長(zhǎng)連接。
2.根據(jù)權(quán)利要求1所述維持TCP長(zhǎng)連接的自適應(yīng)心跳方法,其特征在于,所述連接探測(cè)參數(shù),包括:空閑時(shí)間間隔Time,心跳包發(fā)送時(shí)間間隔Intvl和probes個(gè)心跳包。
3.根據(jù)權(quán)利要求2所述維持TCP長(zhǎng)連接的自適應(yīng)心跳方法,其特征在于,所述連接狀態(tài)探測(cè)步驟,還包括: 心跳包發(fā)送步驟:當(dāng)鏈路空閑時(shí)間等于所述空閑時(shí)間間隔Time,所述發(fā)送方向?qū)Ψ桨l(fā)送一個(gè)心跳包,探測(cè)所述網(wǎng)絡(luò)連接狀態(tài); 連接成功標(biāo)記步驟:如果所述發(fā)送方收到所述對(duì)方的應(yīng)答包,所述網(wǎng)絡(luò)連接狀態(tài)標(biāo)記為成功; 連接失敗標(biāo)記步驟:如果所述發(fā)送方?jīng)]有收到所述對(duì)方的應(yīng)答包,則所述發(fā)送方繼續(xù)以所述心跳包發(fā)送時(shí)間間隔Intvl定時(shí)向?qū)Ψ桨l(fā)送probes個(gè)心跳包,如果所述發(fā)送方仍然沒有收到所述對(duì)方的 應(yīng)答包,所述連接狀態(tài)標(biāo)記為失敗。
4.根據(jù)權(quán)利要求3所述維持TCP長(zhǎng)連接的自適應(yīng)心跳方法,其特征在于,所述自適應(yīng)調(diào)整步驟,還包括: 連接成功自適應(yīng)調(diào)整步驟:所述連接狀態(tài)為成功的情況下,自適應(yīng)調(diào)整所述連接探測(cè)參數(shù),分別為所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包增加處理,并且重復(fù)執(zhí)行所述連接狀態(tài)探測(cè)步驟; 連接失敗自適應(yīng)調(diào)整步驟:所述連接狀態(tài)為失敗的情況下,自適應(yīng)調(diào)整所述連接探測(cè)參數(shù),分別為所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包減少處理后,對(duì)所述網(wǎng)絡(luò)連接狀態(tài)進(jìn)行判斷。
5.根據(jù)權(quán)利要求4所述維持TCP長(zhǎng)連接的自適應(yīng)心跳方法,其特征在于,所述連接失敗自適應(yīng)調(diào)整步驟,還包括: 網(wǎng)絡(luò)環(huán)境不變調(diào)整步驟:在所述連接失敗自適應(yīng)調(diào)整步驟中,如果所述網(wǎng)絡(luò)連接狀態(tài)為成功,此時(shí)記錄所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包的值,作為自適應(yīng)策略存儲(chǔ),重復(fù)執(zhí)行所述連接狀態(tài)探測(cè)步驟; 網(wǎng)絡(luò)環(huán)境變化調(diào)整步驟:在所述連接失敗自適應(yīng)調(diào)整步驟中,如果所述網(wǎng)絡(luò)連接狀態(tài)為失敗,判斷所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包是否已經(jīng)達(dá)到預(yù)設(shè)置最小值,如果是,則重復(fù)執(zhí)行所述連接狀態(tài)探測(cè)步驟,否則,將所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包的值減少處理,重復(fù)執(zhí)行所述連接狀態(tài)探測(cè)步驟。
6.根據(jù)權(quán)利要求5所述維持TCP長(zhǎng)連接的自適應(yīng)心跳方法,其特征在于,所述連接建立步驟,還包括: 網(wǎng)段自適應(yīng)策略查找步驟:如果所述發(fā)送方為服務(wù)器端,根據(jù)不同的IP網(wǎng)段查找所述自適應(yīng)策略,如果查找成功,所述服務(wù)器端會(huì)對(duì)不同IP網(wǎng)段直接采用已經(jīng)存儲(chǔ)的所述自適應(yīng)策略。
7.一種維持TCP長(zhǎng)連接的自適應(yīng)心跳系統(tǒng),采用如權(quán)利要求1-6中任一項(xiàng)所述的自適應(yīng)心跳方法,其特征在于,所述系統(tǒng)包括: 連接建立模塊:用于完成通信雙方初始化,通信雙方建立網(wǎng)絡(luò)連接; 連接狀態(tài)探測(cè)模塊:用于通信雙方中的一方作為發(fā)送方發(fā)送心跳包對(duì)所述網(wǎng)絡(luò)連接狀態(tài)進(jìn)行探測(cè); 自適應(yīng)調(diào)整模塊:用于根據(jù)所述網(wǎng)絡(luò)連接狀態(tài)探測(cè)結(jié)果,通過(guò)連接探測(cè)參數(shù)的自適應(yīng)調(diào)整,使所述發(fā)送方自主的調(diào)整發(fā)送心跳包的頻率,以維持TCP長(zhǎng)連接。
8.根據(jù)權(quán)利要求7所述維持TCP長(zhǎng)連接的自適應(yīng)心跳系統(tǒng),其特征在于,所述連接探測(cè)參數(shù),包括:空閑 時(shí)間間隔Time,心跳包發(fā)送時(shí)間間隔Intvl和probes個(gè)心跳包。
9.根據(jù)權(quán)利要求8所述維持TCP長(zhǎng)連接的自適應(yīng)心跳系統(tǒng),其特征在于,所述連接狀態(tài)探測(cè)模塊,還包括: 心跳包發(fā)送模塊:用于當(dāng)鏈路空閑時(shí)間等于所述空閑時(shí)間間隔Time,所述發(fā)送方向?qū)Ψ桨l(fā)送一個(gè)心跳包,探測(cè)所述網(wǎng)絡(luò)連接狀態(tài); 連接成功標(biāo)記模塊:用于判斷如果所述發(fā)送方收到所述對(duì)方的應(yīng)答包,所述網(wǎng)絡(luò)連接狀態(tài)標(biāo)記為成功; 連接失敗標(biāo)記模塊:用于判斷如果所述發(fā)送方?jīng)]有收到所述對(duì)方的應(yīng)答包,則所述發(fā)送方繼續(xù)以所述心跳包發(fā)送時(shí)間間隔Intvl定時(shí)向?qū)Ψ桨l(fā)送probes個(gè)心跳包,如果所述發(fā)送方仍然沒有收到所述對(duì)方的應(yīng)答包,所述連接狀態(tài)標(biāo)記為失敗。
10.根據(jù)權(quán)利要求9所述維持TCP長(zhǎng)連接的自適應(yīng)心跳系統(tǒng),其特征在于,所述自適應(yīng)調(diào)整模塊,還包括: 連接成功自適應(yīng)調(diào)整模塊:用于在所述連接狀態(tài)為成功的情況下,自適應(yīng)調(diào)整所述連接探測(cè)參數(shù),分別為所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包增加處理; 連接失敗自適應(yīng)調(diào)整模塊:用于在所述連接狀態(tài)為失敗的情況下,自適應(yīng)調(diào)整所述連接探測(cè)參數(shù),分別為所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包減少處理后,并對(duì)所述網(wǎng)絡(luò)連接狀態(tài)進(jìn)行判斷。
11.根據(jù)權(quán)利要求10所述維持TCP長(zhǎng)連接的自適應(yīng)心跳系統(tǒng),其特征在于,所述連接失敗自適應(yīng)調(diào)整模塊,還包括: 網(wǎng)絡(luò)環(huán)境不變調(diào)整模塊:用于在所述網(wǎng)絡(luò)連接狀態(tài)為成功時(shí),存儲(chǔ)所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包的值,作為自適應(yīng)存儲(chǔ)策略; 網(wǎng)絡(luò)環(huán)境變化調(diào)整模塊:用于當(dāng)所述網(wǎng)絡(luò)連接狀態(tài)為失敗時(shí),判斷所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包是否已經(jīng)達(dá)到預(yù)設(shè)置最小值,如果沒有達(dá)到所述最小值,將所述空閑時(shí)間間隔Time值,所述心跳包發(fā)送時(shí)間間隔Intvl和所述probes個(gè)心跳包的值減少處理。
12.根據(jù)權(quán)利要求11所述維持TCP長(zhǎng)連接的自適應(yīng)心跳系統(tǒng),其特征在于,所述連接建立模塊,還包括: 網(wǎng)段自適應(yīng)策略查找模塊:用于當(dāng)所述發(fā)送方為服務(wù)器端時(shí),根據(jù)不同的IP網(wǎng)段查找存儲(chǔ)所述自適應(yīng)策略的數(shù)據(jù)庫(kù),如果查找成功,所述服務(wù)器端會(huì)對(duì)不同IP網(wǎng)段直接采用已經(jīng)存儲(chǔ)的所述自適應(yīng)策略。`
【文檔編號(hào)】H04L29/06GK103685241SQ201310610828
【公開日】2014年3月26日 申請(qǐng)日期:2013年11月26日 優(yōu)先權(quán)日:2013年11月26日
【發(fā)明者】周易子睿, 陳爽, 周安福, 劉敏 申請(qǐng)人:中國(guó)科學(xué)院計(jì)算技術(shù)研究所