本案涉及一種接收裝置,且特別涉及一種支援quic(quickudpinternetconnection)通信協(xié)議的接收裝置及其封包處理方法。
背景技術(shù):
quic通信協(xié)議系一種基于udp協(xié)議的低時延的網(wǎng)路傳輸層協(xié)議。支援quic通信協(xié)議的通信裝置先從其他通信裝置接收至少一片段數(shù)據(jù)封包,并將片段數(shù)據(jù)封包存儲到通信裝置的系統(tǒng)存儲器。通信裝置對每一個片段數(shù)據(jù)封包進行解密,以獲得片段數(shù)據(jù)封包中所載的負載數(shù)據(jù)。
目前的通信裝置系利用通信裝置的中央處理器對片段數(shù)據(jù)封包進行解密,因需解密每一個片段數(shù)據(jù)封包,中央處理器的使用率將提高,且目前的通信裝置需要耗費通信裝置的系統(tǒng)存儲器的存儲空間來存儲片段數(shù)據(jù)封包的標頭,造成系統(tǒng)存儲器可使用的空間大幅降低。
技術(shù)實現(xiàn)要素:
本案提供一種預處理片段數(shù)據(jù)封包成數(shù)據(jù)封包的接收裝置。接收裝置包括封包剖析器、數(shù)據(jù)存儲器、解密單元、傳輸引擎、標頭處理單元以及控制器。封包剖析器自片段數(shù)據(jù)封包的片段封包標頭取出片段封包標頭信息。數(shù)據(jù)存儲器存儲片段封包標頭。解密單元選擇性地對每一片段數(shù)據(jù)封包的加密數(shù)據(jù)進行解密,以獲得quic私密標頭以及片段負載數(shù)據(jù)。quic私密標頭包括片段數(shù)據(jù)封包的順序信息。傳輸引擎將片段負載數(shù)據(jù)輸出至系統(tǒng)存儲器的至少一特定位置。標頭處理單元根據(jù)quic私密標頭計算封包信息,并更新片段封包標頭,以產(chǎn)生封包標頭??刂破鞲鶕?jù)順序信息控制傳輸引擎將封包標頭輸出至系統(tǒng)存儲器,以將封包標頭以及片段負載數(shù)據(jù)組合成數(shù)據(jù)封包。
本案提供一種封包處理方法。封包處理方法包括以下步驟。步驟a:接 收片段數(shù)據(jù)封包,并自片段數(shù)據(jù)封包的片段封包標頭取出片段封包標頭信息。步驟b:存儲片段封包標頭至接收裝置的數(shù)據(jù)存儲器。步驟c:選擇性地對每一片段數(shù)據(jù)封包的加密數(shù)據(jù)進行解密,以獲得quic私密標頭以及片段負載數(shù)據(jù)。quic私密標頭包括片段數(shù)據(jù)封包的順序信息。步驟d:將片段負載數(shù)據(jù)輸出至系統(tǒng)存儲器的至少一特定位置。步驟e:根據(jù)quic私密標頭計算至少一封包信息,并更新片段封包標頭,以產(chǎn)生封包標頭。步驟f:根據(jù)順序信息控制傳輸引擎將封包標頭輸出至系統(tǒng)存儲器,以將封包標頭以及片段負載數(shù)據(jù)組合成數(shù)據(jù)封包。
附圖說明
圖1是本案一實施例提供的接收裝置的系統(tǒng)方塊圖。
圖2是本案一實施例提供的片段數(shù)據(jù)封包的示意圖。
圖3是本案一實施例提供的解密后的片段數(shù)據(jù)封包的示意圖。
圖4是本案一實施例提供的封包處理方法的流程圖。
圖5a~5b是本案一實施例提供的處理片段數(shù)據(jù)封包的示意圖。
其中,附圖標記說明如下:
10:接收裝置
11:系統(tǒng)存儲器
100:封包剖析器
101:數(shù)據(jù)存儲器
102:解密單元
103:傳輸引擎
104:標頭處理單元
105:控制器
2_1、2_2、2_3、2_1’、2_2’、2_3’:片段數(shù)據(jù)封包
20_1、20_2、20_3、20_1’、20_2’、20_3’:ip標頭
21_1、21_2、21_3、21_1’、21_2’、21_3’:udp標頭
22_1、22_2、22_3、22_1’、22_2’、22_3’:quic公開標頭
23_1、23_2、23_3:加密數(shù)據(jù)
24_1、24_2、24_3:quic私密標頭
25_1、25_2、25_3:片段負載數(shù)據(jù)
26_1、26_2、26_3:片段封包標頭
s401~s416:步驟
具體實施方式
參閱圖1,圖1是本案一實施例提供的接收裝置10的系統(tǒng)方塊圖。接收裝置10包括封包剖析器100、數(shù)據(jù)存儲器101、解密單元102、傳輸引擎103、標頭處理單元104與控制器105。數(shù)據(jù)存儲器101耦接封包剖析器100、解密單元102、傳輸引擎103、標頭處理單元104與控制器105。解密單元102耦接傳輸引擎103、標頭處理單元104與控制器105。傳輸引擎103耦接控制器105與系統(tǒng)存儲器11。標頭處理單元104耦接控制器105。
接收裝置10設(shè)置于任何可支援quic通信協(xié)議的通信裝置。接收裝置10從其他的通信裝置接收至少一片段數(shù)據(jù)封包,并預處理片段數(shù)據(jù)封包成數(shù)據(jù)封包。系統(tǒng)存儲器11可為任一種存儲媒體,設(shè)置于上述通信裝置中,用以存儲接收裝置10輸出的數(shù)據(jù)封包。
一并參閱圖2,圖2是本案一實施例提供的片段數(shù)據(jù)封包的示意圖。片段數(shù)據(jù)封包的結(jié)構(gòu)系由ip標頭、udp標頭、quic公開標頭以及加密數(shù)據(jù)所組成。ip標頭、udp標頭、quic公開標頭各自包括封包傳輸過程中需要用到的信息,例如封包大小、來源位址、目的地位址、使用的傳輸協(xié)議等信息。加密數(shù)據(jù)則包括通信裝置欲傳輸且經(jīng)加密后的信息。
封包剖析器100自片段數(shù)據(jù)封包取出片段封包標頭(此處為ip標頭、udp標頭及quic公開標頭),并根據(jù)片段封包標頭分析出片段封包標頭信息,隨后將片段封包標頭信息存儲于數(shù)據(jù)存儲器101,其中,片段封包標頭信息包括封包類型、目的地位址、循環(huán)冗余校驗碼(cyclicredundancycheck)的至少其中一者。
在一些實施例中,封包剖析器100還根據(jù)片段封包標頭信息判斷對應(yīng)的片段數(shù)據(jù)封包是否為quic封包。舉例來說,封包剖析器100根據(jù)封包類型判斷對應(yīng)的片段數(shù)據(jù)封包是否為quic封包,若是,數(shù)據(jù)存儲器101存儲此片段封包標頭信息;若否(如tcp封包),對應(yīng)的片段數(shù)據(jù)封包會由傳輸引擎103輸出至系統(tǒng)存儲器11,或是由接收裝置10的其他電路(未示出)處 理。
在一些實施例中,封包剖析器100還可根據(jù)片段封包標頭信息包含的目的地位址來判斷片段數(shù)據(jù)封包的目的地是否錯誤,或是根據(jù)片段封包標頭信息包含的循環(huán)冗余校驗碼判斷片段數(shù)據(jù)封包是否正確地傳輸,借以決定是否丟棄/刪除對應(yīng)的片段數(shù)據(jù)封包。
數(shù)據(jù)存儲器101例如為任一種存儲媒體,用以接收片段數(shù)據(jù)封包與封包剖析器100輸出的片段封包標頭信息。在一些實施例中,片段數(shù)據(jù)封包與片段封包標頭信息存儲于數(shù)據(jù)存儲器101的相同區(qū)塊。
解密單元102用以選擇性地對每一片段數(shù)據(jù)封包的加密數(shù)據(jù)進行解密,以獲得quic私密標頭以及片段負載數(shù)據(jù)。舉例來說,若片段數(shù)據(jù)封包為quic封包,解密單元102根據(jù)進階加解密標準(advancedencryptionstandard)或salsa20加解密標準對其加密數(shù)據(jù)進行解密,并輸出解出的quic私密標頭至標頭處理單元104,以及輸出片段負載數(shù)據(jù)至傳輸引擎103。此外,解密單元102亦可根據(jù)解出的quic私密標頭判斷片段數(shù)據(jù)封包的順序,進而將順序的信息輸出至控制器105。
一并參閱圖2~3,圖3是本案一實施例提供的解密后的片段數(shù)據(jù)封包的示意圖。解密單元102對加密數(shù)據(jù)23_1進行解密,以獲得quic私密標頭24_1以及片段負載數(shù)據(jù)25_1,使得第2圖中的片段數(shù)據(jù)封包可被視為圖3所示的片段數(shù)據(jù)封包。其中,以片段數(shù)據(jù)封包2_1’為例,ip標頭20_1’、udp標頭21_1’、quic公開標頭22_1’與quic私密標頭24_1定義為片段封包標頭26_1,其中,ip標頭20_1’、udp標頭21_1’、quic公開標頭22_1’系ip標頭20_1、udp標頭21_1、quic公開標頭22_1經(jīng)標頭處理單元104更新過后的數(shù)據(jù)(細節(jié)詳述如下)。
同理,解密單元102分別對加密數(shù)據(jù)23_2及加密數(shù)據(jù)23_3進行解密,圖2的片段數(shù)據(jù)封包2_2、2_3將可視為圖3的片段數(shù)據(jù)封包2_2’、2_3’。
傳輸引擎103根據(jù)控制器105的輸出將片段負載數(shù)據(jù)輸出至系統(tǒng)存儲器11的特定位置。在一些實施例中,傳輸引擎103更可將封包剖析器100判斷為非quic封包的片段數(shù)據(jù)封包輸出至系統(tǒng)存儲器11。
在一些實施例中,解密單元102解密后的片段負載數(shù)據(jù)亦可先寫回數(shù)據(jù)存儲器101,待接收裝置10預處理片段數(shù)據(jù)封包成數(shù)據(jù)封包后,再將完整數(shù) 據(jù)封包寫回系統(tǒng)存儲器11。
標頭處理單元104用以根據(jù)quic私密標頭更新數(shù)據(jù)存儲器101的片段封包標頭。進一步來說,標頭處理單元104根據(jù)quic私密標頭及原數(shù)據(jù)存儲器101的ip標頭、udp標頭及quic公開標頭計算更新后的ip校對和(checksum)、udp校對和、封包長度、片段負載數(shù)據(jù)長度及位元組偏移(byteoffset)的至少其中一者,并將計算出的封包信息覆寫至數(shù)據(jù)存儲器101的ip標頭、udp標頭及quic公開標頭的對應(yīng)位置,將quic私密標頭寫回至數(shù)據(jù)存儲器101中,借以產(chǎn)生數(shù)據(jù)存儲器101的片段封包標頭。值得注意的是,當數(shù)據(jù)存儲器101的片段封包標頭更新完畢后(即無接續(xù)的片段數(shù)據(jù)封包),或是當片段封包標頭完成一段時間或一定次數(shù)的更新后,數(shù)據(jù)存儲器101的更新完后的片段封包標頭可視為一封包標頭。
控制器105可例如為微控制器,用以接收標頭處理單元104計算出的封包信息及解密單元102輸出的順序信息(如封包編號),并根據(jù)順序信息控制傳輸引擎103將封包標頭及至少一片段負載數(shù)據(jù)輸出至系統(tǒng)存儲器11。至于控制器105如何控制其他元件將于下方段落配合圖4做詳細說明。
系統(tǒng)存儲器11可為任一種存儲媒體,用以存儲封包標頭以及片段負載數(shù)據(jù)。
一并參閱圖4,圖4是本案一實施例提供的封包處理方法的流程圖。封包處理方法適用于接收裝置10。于步驟s401,封包剖析器100與數(shù)據(jù)存儲器101接收一片段數(shù)據(jù)封包,封包剖析器100自片段數(shù)據(jù)封包取出片段封包標頭信息。
于步驟s402,封包剖析器100根據(jù)片段封包標頭信息判斷片段數(shù)據(jù)封包是否為quic封包。若是,進入步驟s403。若否,片段數(shù)據(jù)封包由傳輸引擎104傳輸至系統(tǒng)存儲器11,并回到步驟s401。
于步驟s403,數(shù)據(jù)存儲器101存儲片段封包標頭信息。
于步驟s404,解密單元102對片段數(shù)據(jù)封包的加密數(shù)據(jù)進行解密,以獲得quic私密標頭以及片段負載數(shù)據(jù)。解密單元102將quic私密標頭輸出至標頭處理單元104,并將片段負載數(shù)據(jù)輸出至傳輸引擎103。
于步驟s405,控制器105判斷片段負載數(shù)據(jù)是否為控制數(shù)據(jù),控制數(shù)據(jù)可能系由其他通信裝置傳輸給此通信裝置執(zhí)行特定動作的命令。若片段負載 數(shù)據(jù)為控制數(shù)據(jù),進入步驟s406。若片段負載數(shù)據(jù)并非控制數(shù)據(jù),進入步驟s407。
于步驟s406,傳輸引擎103將控制數(shù)據(jù)輸出至系統(tǒng)存儲器11,而標頭處理單元104根據(jù)quic私密標頭更新數(shù)據(jù)存儲器101內(nèi)的片段封包標頭,并由傳輸引擎103輸出至系統(tǒng)存儲器11。
于步驟s407,控制器105根據(jù)每一個片段數(shù)據(jù)封包的封包編號判斷是否將目前的片段負載數(shù)據(jù)與系統(tǒng)存儲器11存儲的其他片段負載數(shù)據(jù)合并。若控制器105判斷此片段負載數(shù)據(jù)可與其他片段負載數(shù)據(jù)合并,進入步驟s408。
于步驟s408,控制器105控制傳輸引擎103將片段負載數(shù)據(jù)依序輸出至系統(tǒng)存儲器的第一存儲空間,其中,第一存儲空間為另一片段負載數(shù)據(jù)的存儲空間,另一片段負載數(shù)據(jù)的封包編號與傳輸引擎103輸出的片段負載數(shù)據(jù)具有連續(xù)的封包編號。
于步驟s409,控制器105檢測并判斷系統(tǒng)存儲器11中是否有其他片段負載數(shù)據(jù)可合并。若系統(tǒng)存儲器11中有其他片段負載數(shù)據(jù)可合并,進入步驟s410。若系統(tǒng)存儲器11中沒有其他片段負載數(shù)據(jù)可合并,進入步驟s411。
于步驟s410,控制器105通過傳輸引擎103合并系統(tǒng)存儲器11的片段負載數(shù)據(jù)。
于步驟s411,數(shù)據(jù)存儲器101根據(jù)quic私密標頭及數(shù)據(jù)存儲器中101的片段封包標頭更新片段封包標頭。
回到步驟s407,若控制器105判斷片段負載數(shù)據(jù)無法與系統(tǒng)存儲器11中的其他片段負載數(shù)據(jù)合并,進入步驟s412。
于步驟s412,控制器105控制傳輸引擎13將片段負載數(shù)據(jù)25_3存儲至系統(tǒng)存儲器11的第二存儲空間,其中,第二存儲空間為系統(tǒng)存儲器11中未使用的存儲空間。
于步驟s413,標頭處理單元104根據(jù)quic私密標頭計算片段數(shù)據(jù)封包的校對和、封包長度、片段負載數(shù)據(jù)長度及位元組偏移的至少其中一者,并更新至數(shù)據(jù)存儲器101的片段封包標頭。
于步驟s414,控制器105判斷是否結(jié)束合并流程。若是,進入步驟s415。若否,回到步驟s401。
于一些實施例中,若控制器105檢測到片段封包標頭包括結(jié)束位元,控制器105判斷要結(jié)束片段封包合并流程。其中,結(jié)束位元僅存在于最后一個片段封包標頭,故控制器105可根據(jù)結(jié)束位元來判斷是否收到最后一個片段數(shù)據(jù)封包。在一些實施例中,由于最后一個片段封包標頭可能不是接收裝置10最后收到的片段封包標頭,故在控制器105檢測到片段封包標頭包括結(jié)束位元且數(shù)據(jù)存儲器101中無其他未合并的片段封包標頭,或在控制器105檢測到片段封包標頭包括結(jié)束位元且系統(tǒng)存儲器11中無其他未合并的片段負載數(shù)據(jù),控制器105判斷要結(jié)束片段封包合并流程。
于一些實施例中,控制器105可以利用內(nèi)部的計時器計算收到每一個片段數(shù)據(jù)封包的間隔時間,或是利用計數(shù)器來計算收到了幾個片段數(shù)據(jù)封包,借以判斷是否決定結(jié)束片段封包合并流程。舉例來說,當接收裝置10接收一片段數(shù)據(jù)封包后,經(jīng)過預定時間而沒有收到下一個片段數(shù)據(jù)封包,控制器105判斷要結(jié)束片段封包合并流程。反的,若在預定時間內(nèi)有收到下一片段數(shù)據(jù)封包,控制器105將判斷不結(jié)束片段封包合并流程。
于步驟s415,傳輸引擎103將封包標頭(即合并完的片段封包標頭)輸出至系統(tǒng)存儲器11,使得控制器105將封包標頭與負載數(shù)據(jù)(即合并完的片段負載數(shù)據(jù))組合成數(shù)據(jù)封包。于步驟s416,控制器105回報封包處理方法已經(jīng)結(jié)束的信息給包含接收裝置10的通信裝置。
舉例來說,一并參閱圖5a~5b,圖5a~5b是本案一實施例提供的處理片段數(shù)據(jù)封包的示意圖。其中圖5a~5b僅示出圖1的系統(tǒng)存儲器11及數(shù)據(jù)存儲器101,借以方便說明圖1的接收裝置10如何處理如圖2所示的三個片段數(shù)據(jù)封包2_1、2_2、2_3。在本實施例中,接收裝置10的接收順序為片段數(shù)據(jù)封包2_1、2_3、2_2,其中,三個片段數(shù)據(jù)封包2_1、2_2、2_3包含的片段負載數(shù)據(jù)25_1、25_2、25_3均非為控制數(shù)據(jù)。
首先,接收裝置10先接收片段數(shù)據(jù)封包2_1,并經(jīng)由圖4中的步驟s401~s404進行處理,借以產(chǎn)生圖3的quic私密標頭24_1及片段負載數(shù)據(jù)25_1。由于片段負載數(shù)據(jù)25_1非為控制數(shù)據(jù),且片段數(shù)據(jù)封包2_1為接收裝置10最早接收的片段數(shù)據(jù)封包,因此,接收裝置10將根據(jù)步驟s405、s407、s412、s413進行處理,使得片段負載數(shù)據(jù)25_1及片段封包標頭26_1分別存儲于系統(tǒng)存儲器11及數(shù)據(jù)存儲器101中。在步驟s414,由于片段封包標頭 26_1未包含結(jié)束位元,控制器105將判斷片段封包合并流程尚未結(jié)束。
接著,接收裝置10接收片段數(shù)據(jù)封包2_3,并經(jīng)由圖4中的s401~s404進行處理,借以產(chǎn)生圖3的quic私密標頭24_3及片段負載數(shù)據(jù)25_3。如圖5a所示,由于片段負載數(shù)據(jù)25_3非為控制數(shù)據(jù),且片段數(shù)據(jù)封包2_1、2_3非為連續(xù)的片段數(shù)據(jù)封包(即片段數(shù)據(jù)封包2_1、2_3包含的封包編號不連續(xù)),因此,接收裝置10將根據(jù)步驟s405、s407、s412、s413進行處理,使得片段負載數(shù)據(jù)25_3存儲于系統(tǒng)存儲器11中的另一存儲空間,片段封包標頭26_3存儲于數(shù)據(jù)存儲器101的另一存儲空間。在步驟s414,雖片段封包標頭26_3包含結(jié)束位元,但于系統(tǒng)存儲器11或是數(shù)據(jù)存儲器101均有離散的存儲數(shù)據(jù),因此控制器105將判斷片段封包合并流程尚未結(jié)束。
隨后,接收裝置10接收片段數(shù)據(jù)封包2_2,并經(jīng)由圖4中的s401~s404進行處理,借以產(chǎn)生圖3的quic私密標頭24_2及片段負載數(shù)據(jù)25_2。如圖5b所示,由于片段負載數(shù)據(jù)25_2非為控制數(shù)據(jù),且片段數(shù)據(jù)封包2_1、2_2為連續(xù)的片段數(shù)據(jù)封包(即片段數(shù)據(jù)封包2_1、2_2包含的封包編號為連續(xù)),因此,接收裝置10將根據(jù)步驟s405、s407、s408進行處理,以將片段負載數(shù)據(jù)25_1、25_2合并。接著,在步驟s409中,因系統(tǒng)存儲器11包含另一連續(xù)的片段負載數(shù)據(jù)25_3,故接收裝置10將系統(tǒng)存儲器11的片段負載數(shù)據(jù)25_3將與片段負載數(shù)據(jù)25_1、25_2合并,并執(zhí)行步驟s411以合并片段封包標頭26_1、26_2、26_3,合并后的片段封包標頭與片段封包標頭26_1具有相同的封包長度。
最后在步驟s414,由于合并后的片段封包標頭(包含片段封包標頭26_3的信息)具有結(jié)束位元,且系統(tǒng)存儲器11或是數(shù)據(jù)存儲器101無離散的存儲數(shù)據(jù),因此控制器105將判斷片段封包合并流程結(jié)束,使得控制器105將控制傳輸引擎103,以將合并后的封包標頭輸出至系統(tǒng)存儲器11,并回報封包處理方法已經(jīng)結(jié)束的信息給包含接收裝置105的通信裝置。
綜上所述,本案實施例所提供的接收裝置及其封包處理方法可以透過接收裝置對片段數(shù)據(jù)封包做解密,并預處理片段數(shù)據(jù)封包成數(shù)據(jù)封包。只要搭載本案實施例所提供的接收裝置,通信裝置的中央處理器的工作量可以被減少,進而降低中央處理器的利用率。
此外,片段數(shù)據(jù)封包的片段封包標頭系存儲于接收裝置的數(shù)據(jù)存儲器, 故系統(tǒng)存儲器不需要花費存儲空間來存放每一個片段數(shù)據(jù)封包的片段封包標頭。因此,系統(tǒng)存儲器可以釋放更多存儲空間來存儲其他數(shù)據(jù),使得系統(tǒng)存儲器的存儲空間可以更靈活地被運用。