本申請(qǐng)涉及通信技術(shù)領(lǐng)域,尤其涉及一種報(bào)文處理方法和裝置。
背景技術(shù):
因特網(wǎng)協(xié)議安全(IP Security,IPsec)是IETF制定的三層隧道加密協(xié)議,它為Internet上傳輸?shù)臄?shù)據(jù)提供了高質(zhì)量的、可互操作的、基于密碼學(xué)的安全保證,是一種傳統(tǒng)的實(shí)現(xiàn)三層虛擬專用網(wǎng)絡(luò)(Virtual Private Network,VPN)的安全技術(shù)。
傳統(tǒng)的IPsec VPN一般支持基于窗口的抗重放技術(shù),即IPsec接收方可檢測(cè)并拒絕接收過(guò)時(shí)或重復(fù)的報(bào)文,這類過(guò)時(shí)或重復(fù)的報(bào)文常被稱為重放報(bào)文。IPsec通過(guò)滑動(dòng)窗口(抗重放窗口)機(jī)制檢測(cè)重放報(bào)文。如果收到的報(bào)文的序列號(hào)與已經(jīng)解封裝過(guò)的報(bào)文序列號(hào)相同,或收到的報(bào)文的序列號(hào)出現(xiàn)得較早,即已經(jīng)超過(guò)了抗重放窗口的范圍,則認(rèn)為該報(bào)文為重放報(bào)文,直接將重放報(bào)文放棄。
但研究發(fā)現(xiàn),傳統(tǒng)IPsec VPN的抗重放技術(shù)只適用于IPsec VPN,不適用于組域虛擬專用網(wǎng)絡(luò)(Group Domain VPN,GD VPN)的各組成員(Group Member,GM)之間。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請(qǐng)?zhí)峁┮环N報(bào)文處理方法和裝置,能夠讓GD VPN的GM之間支持抗重放技術(shù)。
具體地,本申請(qǐng)是通過(guò)如下技術(shù)方案實(shí)現(xiàn)的:
本申請(qǐng)第一方面,提供了一種報(bào)文處理方法,所述方法應(yīng)用于GD VPN中的本端GM,所述方法包括:
接收GD VPN中的對(duì)端GM發(fā)送的第一報(bào)文,所述第一報(bào)文中包括序列號(hào);
查詢與所述第一報(bào)文匹配的第一快轉(zhuǎn)表項(xiàng),所述第一快轉(zhuǎn)表項(xiàng)中增加了用于指示抗重放窗口的區(qū)間和已接收序列號(hào)的新字段;
根據(jù)所述第一快轉(zhuǎn)表項(xiàng)中的新字段確定出抗重放窗口的區(qū)間和已接收序列號(hào),并結(jié)合所述抗重放窗口的區(qū)間、已接收序列號(hào)以及所述第一報(bào)文包括的序列號(hào),對(duì)所述第一報(bào)文進(jìn)行抗重放檢測(cè);
如果所述第一報(bào)文通過(guò)抗重放檢測(cè),則解封裝所述第一報(bào)文,并在解封裝成功后更新所述第一快轉(zhuǎn)表項(xiàng);
如果所述第一報(bào)文沒(méi)有通過(guò)抗重放檢測(cè),則丟棄所述第一報(bào)文。
本申請(qǐng)第二方面,提供了一種報(bào)文處理裝置,所述裝置應(yīng)用于GD VPN中的本端GM,所述裝置包括:
接收單元,用于接收GD VPN中的對(duì)端GM發(fā)送的第一報(bào)文,所述第一報(bào)文中包括序列號(hào);
查詢單元,用于查詢與所述第一報(bào)文匹配的第一快轉(zhuǎn)表項(xiàng),所述第一快轉(zhuǎn)表項(xiàng)中增加了用于指示抗重放窗口的區(qū)間和已接收序列號(hào)的新字段;
抗重放檢測(cè)單元,用于根據(jù)所述第一快轉(zhuǎn)表項(xiàng)中的新字段確定出抗重放窗口的區(qū)間和已接收序列號(hào),并結(jié)合所述抗重放窗口的區(qū)間、已接收序列號(hào)以及所述第一報(bào)文包括的序列號(hào),對(duì)所述第一報(bào)文進(jìn)行抗重放檢測(cè);
報(bào)文處理單元,用于在所述第一報(bào)文通過(guò)抗重放檢測(cè)時(shí)解封裝所述第一報(bào)文;在所述第一報(bào)文沒(méi)有通過(guò)抗重放檢測(cè)時(shí)丟棄所述第一報(bào)文;
表項(xiàng)處理單元,用于在所述第一報(bào)文解封裝成功后更新所述第一快轉(zhuǎn)表項(xiàng)。
本申請(qǐng)?zhí)峁┑募夹g(shù)方案通過(guò)在用于解封裝的快轉(zhuǎn)表項(xiàng)中引入用于指示抗重放窗口區(qū)間和已接收?qǐng)?bào)文序列號(hào)的新字段,這樣接收端即使無(wú)法識(shí)別報(bào)文來(lái)自于哪個(gè)GM,也可以根據(jù)與該報(bào)文唯一對(duì)應(yīng)的快轉(zhuǎn)表項(xiàng)確定接收端已從該報(bào)文對(duì)應(yīng)的發(fā)送端接收的報(bào)文序列號(hào)和當(dāng)前抗重放窗口的區(qū)間,同時(shí)結(jié)合報(bào)文攜帶的序列號(hào),即可實(shí)現(xiàn)GD VPN中的報(bào)文抗重放功能。
附圖說(shuō)明
圖1是GD VPN的組網(wǎng)結(jié)構(gòu)示意圖;
圖2是本申請(qǐng)實(shí)施例提供的一種本端GM在發(fā)送報(bào)文時(shí)的報(bào)文處理方法流程圖;
圖3是本申請(qǐng)實(shí)施例提供的一種發(fā)送報(bào)文時(shí)使用的快轉(zhuǎn)表項(xiàng)的示意圖;
圖4A是本申請(qǐng)實(shí)施例提供的傳輸模式和隧道模式下的ESP協(xié)議加封裝過(guò)程示意圖;
圖4B是本申請(qǐng)實(shí)施例提供的傳輸模式和隧道模式下的AH協(xié)議加封裝過(guò)程示意圖;
圖4C是本申請(qǐng)實(shí)施例提供的傳輸模式和隧道模式下的AH-ESP協(xié)議加封裝過(guò)程示意圖;
圖5是本申請(qǐng)實(shí)施例提供的一種本端GM在接收?qǐng)?bào)文時(shí)的報(bào)文處理方法流程圖;
圖6A是本申請(qǐng)實(shí)施例提供的一種接收?qǐng)?bào)文時(shí)使用的快轉(zhuǎn)表項(xiàng)的示意圖;
圖6B是本申請(qǐng)實(shí)施例提供的一種接收?qǐng)?bào)文時(shí)使用的快轉(zhuǎn)表項(xiàng)的示意圖;
圖7是本申請(qǐng)實(shí)施例提供的一種抗重放檢測(cè)的處理示意圖;
圖8是本申請(qǐng)實(shí)施例提供的一種GD VPN中的報(bào)文處理的組網(wǎng)示意圖;
圖9是本申請(qǐng)實(shí)施例提供的一種報(bào)文處理裝置的功能模塊框圖;
圖10是本申請(qǐng)實(shí)施例提供的一種報(bào)文處理裝置的硬件架構(gòu)圖。
具體實(shí)施方式
這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說(shuō)明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請(qǐng)相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書(shū)中所詳述的、本申請(qǐng)的一些方面相一致的裝置和方法的例子。
在本申請(qǐng)使用的術(shù)語(yǔ)是僅僅出于描述特定實(shí)施例的目的,而非旨在限制本申請(qǐng)。在本申請(qǐng)和所附權(quán)利要求書(shū)中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應(yīng)當(dāng)理解,本文中使用的術(shù)語(yǔ)“和/或”是指并包含一個(gè)或多個(gè)相關(guān)聯(lián)的列出項(xiàng)目的任何或所有可能組合。
應(yīng)當(dāng)理解,盡管在本申請(qǐng)可能采用術(shù)語(yǔ)第一、第二、第三等來(lái)描述各種信息,但這些信息不應(yīng)限于這些術(shù)語(yǔ)。這些術(shù)語(yǔ)僅用來(lái)將同一類型的信息彼此區(qū)分開(kāi)。例如,在不脫離本申請(qǐng)范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語(yǔ)境,如在此所使用的詞語(yǔ)“如果”可以被解釋成為“在……時(shí)”或“當(dāng)……時(shí)”或“響應(yīng)于確定”。
以下,首先對(duì)GD VPN進(jìn)行簡(jiǎn)單介紹。
GD VPN提供了一種基于組的IPsec安全模型。組是一個(gè)安全策略及密鑰的集合,屬于同一個(gè)組的所有成員共享相同的安全策略及密鑰,安全策略及密鑰可統(tǒng)稱為IPsec安全聯(lián)盟(Security Association,SA),IPsec SA限定了保護(hù)的數(shù)據(jù)流信息、加密算法、認(rèn)證算法、封裝模式等。
GD VPN的組網(wǎng)結(jié)構(gòu)參見(jiàn)圖1所示,由密鑰服務(wù)器(Key Server,KS)和組成員(Group Member,GM)組成,其中,KS通過(guò)劃分不同的組來(lái)管理不同的IPsec SA,GM通過(guò)向KS注冊(cè)加入相應(yīng)的組,從KS獲取IPsec SA,并使用獲取到的IPsec SA對(duì)數(shù)據(jù)流加密和解密。
目前的GD VPN尚不能支持抗重放技術(shù),而傳統(tǒng)IPsec VPN雖然支持抗重放技術(shù),但傳統(tǒng)IPsec VPN中的抗重放技術(shù)卻無(wú)法照搬到GD VPN中使用,主要原因如下:
傳統(tǒng)IPsec VPN是一種點(diǎn)對(duì)點(diǎn)的VPN,因此報(bào)文只可能從一個(gè)固定的對(duì)端發(fā)過(guò)來(lái),接收端可以直接通過(guò)比較報(bào)文的序列號(hào)是否在抗重放窗口的范圍內(nèi),實(shí)現(xiàn)抗重放檢測(cè)。而GD VPN是一種點(diǎn)到多點(diǎn)的VPN,在GD VPN中,報(bào)文經(jīng)過(guò)一個(gè)GM加密之后,會(huì)保留原始報(bào)文的IP頭,即加密后外層IP頭和原始報(bào)文的IP頭一樣,報(bào)文到達(dá)另一個(gè)GM解封裝時(shí),另一個(gè)GM無(wú)法區(qū)分該報(bào)文是從哪個(gè)特定GM發(fā)送過(guò)來(lái)的。比如,GM1和GM2都向GM3發(fā)送報(bào)文,如果GM1先向GM3發(fā)送了一個(gè)序列號(hào)為n的報(bào)文后,GM2又向GM3發(fā)送了一個(gè)序列號(hào)為n的報(bào)文,則由于GM3無(wú)法識(shí)別報(bào)文來(lái)自于哪個(gè)GM,按照IPsec VPN中的抗重放方法GM3將認(rèn)為GM2在后發(fā)送的序列號(hào)為n的報(bào)文為重放報(bào)文,從而將該報(bào)文丟棄。但實(shí)質(zhì)上GM1和GM2發(fā)送的這兩個(gè)報(bào)文都有可能是合法報(bào)文,GM3將序列號(hào)相同的后到報(bào)文認(rèn)為是重放報(bào)文這顯然是不恰當(dāng)?shù)摹?/p>
所以目前解封裝時(shí)GM都會(huì)忽略對(duì)報(bào)文做抗重放檢測(cè)。這樣,當(dāng)攻擊者抓到某個(gè)加封裝之后的報(bào)文,并大量將其轉(zhuǎn)發(fā)至特定GM,會(huì)導(dǎo)致該特定GM不停地對(duì)此報(bào)文進(jìn)行解封裝,這樣就會(huì)消耗設(shè)備大量的資源,甚至導(dǎo)致設(shè)備拒絕服務(wù)。
為在GD VPN中的GM上實(shí)現(xiàn)抗重放功能,本申請(qǐng)?zhí)峁┝艘环N解決方案,通過(guò)在快轉(zhuǎn)表項(xiàng)中引入用于指示抗重放窗口區(qū)間和已接收?qǐng)?bào)文序列號(hào)的新字段,這樣接收端即使無(wú)法識(shí)別報(bào)文來(lái)自于哪個(gè)GM,也可以根據(jù)與該報(bào)文唯一對(duì)應(yīng)的快轉(zhuǎn)表項(xiàng)查找到接收端已從該報(bào)文對(duì)應(yīng)的發(fā)送端接收的報(bào)文序列號(hào)和當(dāng)前抗重放窗口的區(qū)間,同時(shí)結(jié)合報(bào)文攜帶的序列號(hào),即可實(shí)現(xiàn)GD VPN中的報(bào)文抗重放功能。
本申請(qǐng)具體實(shí)現(xiàn)時(shí),可以在KS上新增抗重放配置,該抗重放配置可以包括抗重放開(kāi)關(guān)和抗重放窗口大小,其中抗重放開(kāi)關(guān)用于指示GM開(kāi)啟或關(guān)閉抗重放功能。該抗重放配置可以通過(guò)KS下發(fā)給同一個(gè)組里的所有GM,從而在該同一個(gè)組里的所有GM上統(tǒng)一開(kāi)啟或統(tǒng)一關(guān)閉抗重放功能,這樣可以簡(jiǎn)化GD VPN組網(wǎng)的整體配置。
下面結(jié)合附圖,依次說(shuō)明在GM根據(jù)KS下發(fā)的抗重放開(kāi)關(guān)開(kāi)啟本申請(qǐng)?zhí)峁┑目怪胤殴δ軙r(shí),如何實(shí)現(xiàn)報(bào)文的抗重放處理。
參見(jiàn)圖2,圖2為本端GM在發(fā)送報(bào)文時(shí)的報(bào)文處理方法流程圖,可包括以下步驟:
步驟201:本端GM在加封裝待發(fā)送給對(duì)端GM的報(bào)文之前,查詢與該報(bào)文匹配的快轉(zhuǎn)表項(xiàng),該快轉(zhuǎn)表項(xiàng)中增加了與本端GM已發(fā)送的報(bào)文條數(shù)有關(guān)的新字段,該新字段為最大已發(fā)送序列號(hào)。
步驟201中所說(shuō)的本端GM待發(fā)送給對(duì)端GM的報(bào)文,可以是本端GM自身生成的報(bào)文,也可以是主機(jī)、其它GM等網(wǎng)元設(shè)備發(fā)送到本端GM進(jìn)行中轉(zhuǎn)的報(bào)文。
這里的快轉(zhuǎn)表項(xiàng)是基于報(bào)文五元組及入接口等信息生成的表項(xiàng),可以指導(dǎo)報(bào)文的轉(zhuǎn)發(fā),即在快轉(zhuǎn)表項(xiàng)中可以找到報(bào)文的出接口、下一跳等信息。同時(shí)在快轉(zhuǎn)表項(xiàng)中還可以找到與報(bào)文處理相關(guān)的業(yè)務(wù)信息,如用于加封裝或用于解封裝的IPsec SA等。GM可以基于一條數(shù)據(jù)流的首個(gè)報(bào)文創(chuàng)建快轉(zhuǎn)表項(xiàng),后續(xù)屬于同一條數(shù)據(jù)流的報(bào)文可以直接查找相應(yīng)的快轉(zhuǎn)表項(xiàng)進(jìn)行快速轉(zhuǎn)發(fā)。其中,同一條數(shù)據(jù)流一般指特征比較相似的一組數(shù)據(jù)包,如可以將五元組(包括源地址、目的地址、源端口號(hào)、目的端口號(hào)、協(xié)議號(hào))完全相同的一組數(shù)據(jù)包稱為一條流??燹D(zhuǎn)表項(xiàng)通過(guò)將流特征和這條流需要做的處理關(guān)聯(lián)起來(lái),提高了轉(zhuǎn)發(fā)的處理效率。
步驟202:如果沒(méi)有查詢到匹配的快轉(zhuǎn)表項(xiàng),則本端GM新建與該報(bào)文對(duì)應(yīng)的快轉(zhuǎn)表項(xiàng),新建的快轉(zhuǎn)表項(xiàng)中增加最大已發(fā)送序列號(hào),最大已發(fā)送序列號(hào)的初始值為0;本端GM將新建的快轉(zhuǎn)表項(xiàng)中記錄的最大已發(fā)送序列號(hào)按預(yù)設(shè)步長(zhǎng)增量累加,并將累加后的最大已發(fā)送序列號(hào)作為該報(bào)文的序列號(hào)添加到該報(bào)文的報(bào)文頭中,之后加封裝該報(bào)文。
當(dāng)本端GM未查詢到與待發(fā)送的報(bào)文匹配的快轉(zhuǎn)表項(xiàng)時(shí),表明該報(bào)文可能是一條流的首個(gè)報(bào)文,或者可能是本端GM在舊IPsec SA老化后使用新IPsec SA保護(hù)的一條流的后續(xù)報(bào)文中的首個(gè)報(bào)文,因此本端GM通過(guò)慢轉(zhuǎn)流程加封裝該報(bào)文,具體過(guò)程為:將待發(fā)送的報(bào)文與KS(密鑰服務(wù)器)提前下發(fā)的訪問(wèn)控制列表(Access Control List,ACL)進(jìn)行匹配,如果匹配結(jié)果為許可(permit),表明這個(gè)報(bào)文所屬的流需要被加密保護(hù);繼而使用該報(bào)文的報(bào)文信息(如五元組)查找對(duì)應(yīng)的IPsec SA,根據(jù)查找到的IPsec SA對(duì)報(bào)文加封裝。
本端GM在慢轉(zhuǎn)流程中找到IPsec SA之后,可以新建與該報(bào)文對(duì)應(yīng)的快轉(zhuǎn)表項(xiàng)。本申請(qǐng)實(shí)施例提供的快轉(zhuǎn)表項(xiàng)除了包含現(xiàn)有快轉(zhuǎn)表項(xiàng)所包含的五元組、轉(zhuǎn)發(fā)信息和業(yè)務(wù)信息等字段之外,還新增了“最大已發(fā)送序列號(hào)”這一字段,本申請(qǐng)實(shí)施例提供的快轉(zhuǎn)表項(xiàng)的具體形式可參見(jiàn)圖3所示。其中“最大已發(fā)送序列號(hào)”這一字段與本端GM已向目的GM發(fā)送的報(bào)文條數(shù)有關(guān),GM可以按照預(yù)設(shè)步長(zhǎng)對(duì)最大已發(fā)送序列號(hào)進(jìn)行增量累加,一種較為簡(jiǎn)單的累加方式是以每次遞增1的方式更新最大已發(fā)送序列號(hào)的值。
屬于同一條流、用同一個(gè)IPsec SA加封裝的報(bào)文應(yīng)該攜帶互不相同的序列號(hào),報(bào)文接收端正是基于報(bào)文攜帶的序列號(hào)對(duì)報(bào)文進(jìn)行抗重放檢測(cè),至于報(bào)文接收端如何對(duì)報(bào)文進(jìn)行抗重放檢測(cè)將在下文描述,暫不贅述。
步驟203:如果查詢到匹配的快轉(zhuǎn)表項(xiàng),則本端GM將查詢到的快轉(zhuǎn)表項(xiàng)中記錄的最大已發(fā)送序列號(hào)按預(yù)設(shè)步長(zhǎng)累加,并將累加后的最大已發(fā)送序列號(hào)作為該報(bào)文的序列號(hào)添加到該報(bào)文的報(bào)文頭中,之后加封裝該報(bào)文。
當(dāng)本端GM能夠查詢到與待發(fā)送的報(bào)文匹配的快轉(zhuǎn)表項(xiàng)時(shí),表明該報(bào)文可能是同一個(gè)IPsec SA保護(hù)的一條流的后續(xù)報(bào)文,因此本端GM可以通過(guò)快轉(zhuǎn)流程加封裝該報(bào)文,即直接根據(jù)查詢到的快轉(zhuǎn)表項(xiàng)中記錄的IPsec SA對(duì)報(bào)文加封裝。
步驟202和步驟203中本端GM在加封裝報(bào)文時(shí),可以使用標(biāo)準(zhǔn)的封裝安全載荷(Encapsulating Security Payload,ESP)協(xié)議,或是標(biāo)準(zhǔn)的認(rèn)證頭(Authentication Header,AH)協(xié)議,或是結(jié)合以上兩種協(xié)議。具體使用何種協(xié)議由KS下發(fā)的IPsec SA規(guī)定。
參見(jiàn)圖4A,為傳輸模式和隧道模式下的ESP協(xié)議加封裝過(guò)程示意圖,其中,當(dāng)報(bào)文進(jìn)行安全傳輸?shù)钠瘘c(diǎn)和終點(diǎn)為報(bào)文的實(shí)際起點(diǎn)和終點(diǎn)時(shí)一般使用傳輸模式,當(dāng)報(bào)文進(jìn)行安全傳輸?shù)钠瘘c(diǎn)或終點(diǎn)不為數(shù)據(jù)的實(shí)際起點(diǎn)和終點(diǎn)時(shí)一般使用隧道模式。圖4A中,GM可以將基于快轉(zhuǎn)表項(xiàng)獲得的序列號(hào)添加到報(bào)文的ESP頭的序列號(hào)(Sequence Number)字段中。
參見(jiàn)圖4B,為傳輸模式和隧道模式下的AH協(xié)議加封裝過(guò)程示意圖,GM可以將基于快轉(zhuǎn)表項(xiàng)獲得的序列號(hào)添加到報(bào)文的AH頭的Sequence Number字段中。
參見(jiàn)圖4C,為傳輸模式和隧道模式下結(jié)合AH協(xié)議和ESP協(xié)議的加封裝過(guò)程示意圖,GM可以將基于快轉(zhuǎn)表項(xiàng)獲得的序列號(hào)添加到報(bào)文的AH頭的Sequence Number字段中。
需要注意的是,ESP頭和AH頭包含的安全索引參數(shù)(Security Parameter Index,SPI)和Sequance Number兩個(gè)字段均為明文。
基于IPsec SA中規(guī)定的封裝協(xié)議,本端GM先在原始報(bào)文的基礎(chǔ)上擴(kuò)展出一個(gè)ESP頭或AH頭,再在ESP頭或AH頭中填入基于快轉(zhuǎn)表項(xiàng)獲得的序列號(hào),然后對(duì)報(bào)文加封裝。對(duì)端GM在解封裝報(bào)文時(shí)需要帶上報(bào)文包括的序列號(hào)進(jìn)行數(shù)據(jù)完整性校驗(yàn),如果攻擊方截獲了報(bào)文并改寫(xiě)了報(bào)文的序列號(hào),該報(bào)文將解封裝失敗。
步驟202和步驟203后,本端GM根據(jù)加封裝后的報(bào)文重新查找匹配的快轉(zhuǎn)表項(xiàng),并根據(jù)重新找到的快轉(zhuǎn)表項(xiàng)將加封裝后的報(bào)文發(fā)送給對(duì)端GM。
至此,完成對(duì)圖2所示流程的描述。
通過(guò)圖2所示流程可以看出,本端GM在發(fā)送報(bào)文時(shí)基于本申請(qǐng)實(shí)施例提供的快轉(zhuǎn)表項(xiàng),可以在找到轉(zhuǎn)發(fā)信息和轉(zhuǎn)發(fā)過(guò)程中的業(yè)務(wù)信息的同時(shí),根據(jù)快轉(zhuǎn)表項(xiàng)中記錄的最大已發(fā)送序列號(hào)在報(bào)文的報(bào)文頭添加對(duì)應(yīng)的序列號(hào),報(bào)文不需要通過(guò)額外的字段來(lái)區(qū)分該報(bào)文的來(lái)源。
下面介紹本端GM在接收?qǐng)?bào)文時(shí)的報(bào)文處理方法,參見(jiàn)圖5所示,該方法可包括以下步驟:
步驟501:本端GM接收GD VPN中的對(duì)端GM發(fā)送的報(bào)文,該報(bào)文中包括序列號(hào)。
對(duì)端GM可以按照?qǐng)D2所示的流程處理報(bào)文并將加封裝后的報(bào)文發(fā)送給本端GM。
本端GM接收到的報(bào)文可以是標(biāo)準(zhǔn)ESP協(xié)議報(bào)文,也可以是標(biāo)準(zhǔn)AH協(xié)議報(bào)文。該報(bào)文的序列號(hào)承載在該報(bào)文的ESP報(bào)文頭或AH報(bào)文頭的Sequence Number字段中。
步驟502:本端GM查詢與接收的報(bào)文匹配的快轉(zhuǎn)表項(xiàng),該快轉(zhuǎn)表項(xiàng)中增加了用于指示抗重放窗口的區(qū)間和已接收序列號(hào)的新字段。
步驟503:如果沒(méi)有查詢到匹配的快轉(zhuǎn)表項(xiàng),則本端GM新建與接收的報(bào)文對(duì)應(yīng)的快轉(zhuǎn)表項(xiàng),新建的快轉(zhuǎn)表項(xiàng)中增加用于指示抗重放窗口的區(qū)間和已接收序列號(hào)的新字段;之后,本端GM解封裝該報(bào)文,并在解封裝成功后根據(jù)該報(bào)文包括的序列號(hào)更新新建的快轉(zhuǎn)表項(xiàng)。
當(dāng)本端GM未查詢到與接收到的報(bào)文匹配的快轉(zhuǎn)表項(xiàng)時(shí),表明該報(bào)文可能是一條流的首個(gè)報(bào)文,或者可能是本端GM在舊IPsec SA老化后使用新IPsec SA保護(hù)的一條流的后續(xù)報(bào)文中的首個(gè)報(bào)文,因此本端GM默認(rèn)該報(bào)文不是重放報(bào)文,并通過(guò)慢轉(zhuǎn)流程解封裝該報(bào)文,具體過(guò)程為:將接收到的報(bào)文與KS提前下發(fā)的ACL進(jìn)行匹配,如果匹配結(jié)果為permit表明該報(bào)文需要通過(guò)IPsec SA解封裝,繼而根據(jù)該報(bào)文的報(bào)文頭中攜帶的SPI查找對(duì)應(yīng)的IPsec SA,根據(jù)查找到的IPsec SA對(duì)報(bào)文解封裝。
本端GM在慢轉(zhuǎn)流程中找到IPsec SA之后,可以新建與接收到的報(bào)文對(duì)應(yīng)的快轉(zhuǎn)表項(xiàng)。本申請(qǐng)實(shí)施例提供的快轉(zhuǎn)表項(xiàng)除了包含現(xiàn)有快轉(zhuǎn)表項(xiàng)所包含的五元組、轉(zhuǎn)發(fā)信息和業(yè)務(wù)信息等字段之外,還增加了用于抗重放檢測(cè)的新的字段,其中,該新的字段可以有多種形式,本申請(qǐng)實(shí)施例主要列舉以下兩種:
第一種:該新的字段可以是“抗重放窗口的左端點(diǎn)和右端點(diǎn)”、以及“已接收序列號(hào)”,快轉(zhuǎn)表項(xiàng)的具體形式參見(jiàn)圖6A所示;其中,“抗重放窗口的左端點(diǎn)和右端點(diǎn)”這一字段用于指示抗重放窗口的區(qū)間,“已接收序列號(hào)”這一字段用于表示本端GM已從源GM接收的報(bào)文序列號(hào)。在新建的快轉(zhuǎn)表項(xiàng)中,抗重放窗口的左端點(diǎn)的初始值為0,右端點(diǎn)的初始值為抗重放窗口的大小N,已接收序列號(hào)的初始值為空。
第二種:該新的字段可以是“最大已接收序列號(hào)”、以及“已接收序列號(hào)”,快轉(zhuǎn)表項(xiàng)的具體形式參見(jiàn)圖6B所示;其中,“已接收序列號(hào)”字段如前文所述,用于表示本端GM已從源GM接收的報(bào)文序列號(hào),“最大已接收序列號(hào)”這一字段用于表示本端GM已從源GM接收的各報(bào)文序列號(hào)中的最大值,可用于計(jì)算抗重放窗口的區(qū)間。在新建的快轉(zhuǎn)表項(xiàng)中,最大已接收序列號(hào)的初始值為抗重放窗口的大小N,已接收序列號(hào)的初始值為空。
步驟504:如果查詢到匹配的快轉(zhuǎn)表項(xiàng),則本端GM根據(jù)查詢到的快轉(zhuǎn)表項(xiàng)中的新字段確定出抗重放窗口的區(qū)間和已接收序列號(hào);并結(jié)合確定出的抗重放窗口的區(qū)間、已接收序列號(hào)以及接收的報(bào)文包括的序列號(hào),對(duì)該報(bào)文進(jìn)行抗重放檢測(cè);如果該報(bào)文通過(guò)抗重放檢測(cè),則解封裝該報(bào)文,并在解封裝成功后更新查詢到的快轉(zhuǎn)表項(xiàng);如果該報(bào)文沒(méi)有通過(guò)抗重放檢測(cè),則丟棄該報(bào)文。
當(dāng)本端GM能夠查詢到匹配的快轉(zhuǎn)表項(xiàng)時(shí),表明接收到的報(bào)文可能是同一個(gè)IPsec SA保護(hù)的一條流的后續(xù)報(bào)文,因此本端GM首先對(duì)該報(bào)文進(jìn)行抗重放檢測(cè),如果該報(bào)文通過(guò)抗重放檢測(cè),再通過(guò)快轉(zhuǎn)流程,即直接根據(jù)查詢到的快轉(zhuǎn)表項(xiàng)中記錄的IPsec SA對(duì)報(bào)文解封裝。如果該報(bào)文未通過(guò)抗重放檢測(cè),則可以將該報(bào)文視為重放報(bào)文丟棄。
可選的,抗重放檢測(cè)的具體過(guò)程可以是:
1)根據(jù)查詢到的快轉(zhuǎn)表項(xiàng)確定當(dāng)前抗重放窗口的區(qū)間和本端GM已接收的報(bào)文序列號(hào)。
具體地,根據(jù)圖6A和圖6B示出的兩種形式的快轉(zhuǎn)表項(xiàng),在確定抗重放窗口的區(qū)間時(shí)可以有以下兩種方式:
方式一:對(duì)應(yīng)圖6A所示的快轉(zhuǎn)表項(xiàng),本端GM可以根據(jù)快轉(zhuǎn)表項(xiàng)中記錄的抗重放窗口的左端點(diǎn)L和右端點(diǎn)R,直接確定出抗重放窗口的區(qū)間為[L,R]。
方式二:對(duì)應(yīng)圖6B所示的快轉(zhuǎn)表項(xiàng),本端GM可以根據(jù)快轉(zhuǎn)表項(xiàng)中記錄的最大已接收序列號(hào)M計(jì)算抗重放窗口的區(qū)間,如果快轉(zhuǎn)表項(xiàng)中記錄的最大已接收序列號(hào)M小于等于抗重放窗口的大小N,則確定抗重放窗口的區(qū)間為[1,N];如果快轉(zhuǎn)表項(xiàng)中記錄的最大已接收序列號(hào)M大于抗重放窗口的大小N,則確定抗重放窗口的區(qū)間為[M-N+1,M]。
至于本端GM已接收的報(bào)文序列號(hào),則可以根據(jù)快轉(zhuǎn)表項(xiàng)中記錄的“已接收序列號(hào)”字段的內(nèi)容直接確定。
2)判斷接收的報(bào)文的序列號(hào)相對(duì)于抗重放窗口的區(qū)間的位置,根據(jù)判斷出的位置確定該報(bào)文是否通過(guò)抗重放檢測(cè)。
具體地,如果接收的報(bào)文的序列號(hào)在抗重放窗口的區(qū)間的左側(cè),則可以直接確定該報(bào)文沒(méi)有通過(guò)抗重放檢測(cè)。
如果該報(bào)文的序列號(hào)在抗重放窗口的區(qū)間的右側(cè),則可以直接確定該報(bào)文通過(guò)抗重放檢測(cè)。
如果接收的報(bào)文的序列號(hào)在抗重放窗口的區(qū)間內(nèi),則還需要進(jìn)一步判斷該報(bào)文的序列號(hào)是否與本端GM已接收的報(bào)文序列號(hào)重復(fù);如果不重復(fù),則確定該報(bào)文通過(guò)抗重放檢測(cè);如果重復(fù),則確定該報(bào)文沒(méi)有通過(guò)抗重放檢測(cè)。
較佳地,“已接收序列號(hào)”字段可以采用數(shù)組的方式保存本端GM在當(dāng)前抗重放窗口內(nèi)接收的報(bào)文序列號(hào)的情況,比如抗重放窗口的大小為128時(shí),“已接收序列號(hào)”字段可以是大小為128元素的數(shù)組,數(shù)組下標(biāo)為0到127,下標(biāo)為0的數(shù)組元素對(duì)應(yīng)當(dāng)前抗重放窗口的左端點(diǎn),下標(biāo)為127的數(shù)組元素對(duì)應(yīng)當(dāng)前抗重放窗口的右端點(diǎn)。一種判斷報(bào)文的序列號(hào)是否重復(fù)的方式是:計(jì)算報(bào)文的序列號(hào)和數(shù)組中第一個(gè)元素(即當(dāng)前抗重放窗口的左端點(diǎn))的差值絕對(duì)值,以該差值絕對(duì)值作為數(shù)組下標(biāo),根據(jù)該數(shù)組下標(biāo)查找到數(shù)組中的對(duì)應(yīng)位置,里面記錄了是否收到過(guò)此序列號(hào)的報(bào)文。
本端GM在確定接收到的報(bào)文通過(guò)抗重放檢測(cè)后,對(duì)報(bào)文解封裝。如果解封裝失敗,則丟棄該報(bào)文,并且無(wú)需更新快轉(zhuǎn)表項(xiàng)中記錄的抗重放窗口的區(qū)間和已接收序列號(hào)。其中,解封裝失敗可能是因舊IPsec SA老化導(dǎo)致報(bào)文接收端找不到對(duì)應(yīng)的IPsec SA來(lái)解封裝報(bào)文;也可能是因?yàn)閳?bào)文在傳輸過(guò)程中被改寫(xiě)導(dǎo)致數(shù)據(jù)完整性校驗(yàn)失敗。對(duì)于后一種情況,由于本申請(qǐng)中在報(bào)文發(fā)送端采用了先在報(bào)文中添加用于抗重放檢測(cè)的序列號(hào),后對(duì)報(bào)文加封裝的方式;所以報(bào)文接收端在解封裝報(bào)文時(shí)還要帶上報(bào)文的序列號(hào)進(jìn)行數(shù)據(jù)完整性校驗(yàn)。這樣,即使攻擊方改寫(xiě)了報(bào)文的序列號(hào)使得該報(bào)文通過(guò)了抗重放檢測(cè),但由于報(bào)文的序列號(hào)被篡改無(wú)法成功解封裝,從而報(bào)文接收端無(wú)需根據(jù)該報(bào)文的序列號(hào)更新本地的抗重放窗口的區(qū)間和已接收序列號(hào),避免了對(duì)設(shè)備的抗重放功能的影響。
如果本端GM對(duì)接收的報(bào)文成功解封裝,則還需要更新快轉(zhuǎn)表項(xiàng)。根據(jù)圖6A和圖6B示出的兩種形式的快轉(zhuǎn)表項(xiàng),可以有以下兩種更新方式:
方式一:對(duì)應(yīng)圖6A所示的快轉(zhuǎn)表項(xiàng),如果接收的報(bào)文的序列號(hào)X在抗重放窗口的區(qū)間內(nèi),則本端GM在更新快轉(zhuǎn)表項(xiàng)時(shí)只需在快轉(zhuǎn)表項(xiàng)記錄的已接收序列號(hào)中標(biāo)記收到過(guò)序列號(hào)X,不需要更新快轉(zhuǎn)表項(xiàng)中記錄的抗重放窗口的左端點(diǎn)和右端點(diǎn)。如果接收的報(bào)文的序列號(hào)X在抗重放窗口的區(qū)間的右側(cè),則本端GM可以將快轉(zhuǎn)表項(xiàng)中記錄的抗重放窗口右移,使抗重放窗口的左端點(diǎn)L更新為報(bào)文的序列號(hào)X-N+1,右端點(diǎn)更新為X,以及將在快轉(zhuǎn)表項(xiàng)記錄的已接收序列號(hào)中標(biāo)記收到過(guò)序列號(hào)X;這里的N表示抗重放窗口的大小。如果接收的報(bào)文的序列號(hào)X在抗重放窗口的左側(cè),則該報(bào)文不會(huì)通過(guò)抗重放檢測(cè),本端GM自然不需要更新快轉(zhuǎn)表項(xiàng)。
方式二:對(duì)應(yīng)圖6B所示的快轉(zhuǎn)表項(xiàng),如果接收的報(bào)文的序列號(hào)X在抗重放窗口的區(qū)間內(nèi),則本端GM在更新轉(zhuǎn)發(fā)表項(xiàng)時(shí)只需在快轉(zhuǎn)表項(xiàng)記錄的已接收序列號(hào)中標(biāo)記收到過(guò)序列號(hào)X,不需要更新快轉(zhuǎn)表項(xiàng)中記錄的最大已接收序列號(hào)。如果接收的報(bào)文的序列號(hào)X在抗重放窗口的區(qū)間的右側(cè),則本端GM可以將快轉(zhuǎn)表項(xiàng)中記錄的最大已接收序列號(hào)M更新為該報(bào)文的序列號(hào)X,以及在快轉(zhuǎn)表項(xiàng)記錄的已接收序列號(hào)中標(biāo)記收到過(guò)序列號(hào)X。同樣,對(duì)于接收的報(bào)文的序列號(hào)X在抗重放窗口的左側(cè)的情況,由于報(bào)文不會(huì)通過(guò)抗重放檢測(cè),因此本端GM無(wú)需更新更新快轉(zhuǎn)表項(xiàng)。
一種基于抗重放窗口的區(qū)間和已接收序列號(hào)進(jìn)行抗重放檢測(cè)的處理示意圖參見(jiàn)圖7,如圖7中的(1)所示,抗重放窗口的大小為64,一開(kāi)始還未有任何序列號(hào)被標(biāo)記。當(dāng)GM一開(kāi)始收到一個(gè)序列號(hào)為1的報(bào)文時(shí),如果解封裝成功,GM會(huì)標(biāo)記已經(jīng)收到過(guò)序列號(hào)為1的報(bào)文,即如圖7中的(2)所示,陰影表示GM已處理過(guò)此報(bào)文。之后,當(dāng)GM又收到一個(gè)序列號(hào)為60的報(bào)文時(shí),該報(bào)文的序列號(hào)在抗重放窗口內(nèi)且未被標(biāo)記過(guò),GM會(huì)解封裝該報(bào)文,并在解封裝成功后標(biāo)記已經(jīng)收到過(guò)序列號(hào)為60的報(bào)文,如圖7中的(3)所示。如果此時(shí)GM又收到序列號(hào)為60的報(bào)文,由于60已被標(biāo)記過(guò),則GM在解封裝前會(huì)認(rèn)為該報(bào)文是重放報(bào)文,直接丟棄該報(bào)文,如圖7中的(4)所示。之后,當(dāng)GM收到序列號(hào)為100的報(bào)文時(shí),由于該報(bào)文在窗口右側(cè),則GM解封裝該報(bào)文,并在解封裝成功后將抗重放窗口整體右移,使抗重放窗口的右端點(diǎn)為該報(bào)文的序列號(hào)100,如圖7中的(5)所示。之后,如果GM收到序列號(hào)小于37(如36)的報(bào)文,則該報(bào)文會(huì)被認(rèn)為是重放報(bào)文而被丟棄,如圖7中的(6)所示。
步驟503和步驟504后,本端GM可以根據(jù)解封裝后的報(bào)文重新查找匹配的快轉(zhuǎn)表項(xiàng),并根據(jù)重新找到的快轉(zhuǎn)表項(xiàng)轉(zhuǎn)發(fā)解封裝后的報(bào)文。
至此,完成對(duì)圖5所示流程的描述。
通過(guò)圖5所示流程可以看出,本申請(qǐng)實(shí)施例通過(guò)在用于解封裝的快轉(zhuǎn)表項(xiàng)中引入用于指示抗重放窗口區(qū)間和已接收?qǐng)?bào)文序列號(hào)的新字段,這樣接收端即使無(wú)法識(shí)別報(bào)文來(lái)自于哪個(gè)GM,也可以根據(jù)與該報(bào)文唯一對(duì)應(yīng)的快轉(zhuǎn)表項(xiàng)確定接收端已從該報(bào)文對(duì)應(yīng)的發(fā)送端接收的報(bào)文序列號(hào)和當(dāng)前抗重放窗口的區(qū)間,同時(shí)結(jié)合報(bào)文攜帶的序列號(hào),即可實(shí)現(xiàn)GD VPN中的報(bào)文抗重放功能。并且本申請(qǐng)中報(bào)文采用標(biāo)準(zhǔn)ESP協(xié)議或標(biāo)準(zhǔn)AH協(xié)議封裝,不需要攜帶額外信息,如不需要在報(bào)文中引入GM標(biāo)識(shí)來(lái)指示發(fā)送該報(bào)文的GM,兼容性較好。
隨著本端GM處理的數(shù)據(jù)流的增多,本端GM中保存的快轉(zhuǎn)表項(xiàng)會(huì)越來(lái)越多,為了節(jié)省設(shè)備的存儲(chǔ)資源,可以對(duì)本申請(qǐng)?zhí)峁┑目燹D(zhuǎn)表項(xiàng)進(jìn)行老化,具體的老化策略可以有以下幾種,本端GM可以采用其中一種或結(jié)合多種方式來(lái)老化快轉(zhuǎn)表項(xiàng):
第一種:依據(jù)在發(fā)送報(bào)文時(shí)使用的用于加封裝報(bào)文的快轉(zhuǎn)表項(xiàng)。當(dāng)如圖3所示的快轉(zhuǎn)表項(xiàng)中記錄的最大已發(fā)送序列號(hào)達(dá)到設(shè)定閾值(比如序列號(hào)的理論最大值的90%)時(shí),本端GM可以通知GD VPN中的KS下發(fā)新的IPsec SA,KS收到通知后將給該GM以及與該GM屬于同一組的其它GM下發(fā)新的IPsec SA。當(dāng)本端GM以及其它GM接收到KS下發(fā)的新的IPsec SA時(shí),啟動(dòng)老化定時(shí)器,在老化定時(shí)器超期后刪除舊的IPsec SA,以及刪除與該舊的IPsec SA相關(guān)的快轉(zhuǎn)表項(xiàng),包括發(fā)送報(bào)文時(shí)使用的用于加封裝報(bào)文的快轉(zhuǎn)表項(xiàng)以及接收?qǐng)?bào)文時(shí)使用的用于解封裝報(bào)文的快轉(zhuǎn)表項(xiàng)。
第二種:依據(jù)在接收?qǐng)?bào)文時(shí)使用的用于解封裝報(bào)文的快轉(zhuǎn)表項(xiàng)。當(dāng)如圖6A所示的快轉(zhuǎn)表項(xiàng)中記錄的抗重放窗口的右端點(diǎn)達(dá)到設(shè)定閾值時(shí),或是當(dāng)如圖6B所示的快轉(zhuǎn)表項(xiàng)中記錄的最大已接收序列號(hào)達(dá)到設(shè)定閾值時(shí),本端GM可以通知GD VPN中的KS下發(fā)新的IPsec SA,KS收到通知后將給該GM以及與該GM屬于同一組的其它GM下發(fā)新的IPsec SA。當(dāng)本端GM以及其它GM接收到KS下發(fā)的新的IPsec SA時(shí),啟動(dòng)老化定時(shí)器,在老化定時(shí)器超期后刪除舊的IPsec SA,以及刪除與該舊的IPsec SA相關(guān)的快轉(zhuǎn)表項(xiàng),包括發(fā)送報(bào)文時(shí)使用的用于加封裝報(bào)文的快轉(zhuǎn)表項(xiàng)以及接收?qǐng)?bào)文時(shí)使用的用于解封裝報(bào)文的快轉(zhuǎn)表項(xiàng)。
第三種:依據(jù)IPsec SA的生命周期。IPsec SA具有一個(gè)軟生命周期(比如20分鐘),一個(gè)硬生命周期(比如30分鐘),其中,硬生命周期是IPSec SA的真正生命周期,即只有硬生命周期結(jié)束后,IPSec SA才會(huì)被刪除。而軟生命周期短于硬生命周期,軟生命周期結(jié)束后,IPsec SA不會(huì)被刪除,本端GM將通知GD VPN中的KS下發(fā)新的IPsec SA給所有GM。本端GM收到KS下發(fā)的新的IPsec SA后,等待舊的IPsec SA的硬生命周期到期后,刪除舊的IPsec SA,以及刪除與該舊的IPsec SA相關(guān)的快轉(zhuǎn)表項(xiàng)。在舊的IPsec SA刪除之后,本端GM才使用新的IPsec SA加封裝報(bào)文和創(chuàng)建新的快轉(zhuǎn)表項(xiàng)。
實(shí)際應(yīng)用中,如果組網(wǎng)使用32位的序列號(hào),則序列號(hào)的理論最大值為2^32=4294967296,報(bào)文攜帶的序列號(hào)一旦超過(guò)這個(gè)理論最大值,將影響GM的抗重放功能的準(zhǔn)確性。為了避免序列號(hào)溢出,在組網(wǎng)使用32位序列號(hào)的場(chǎng)景下,實(shí)現(xiàn)本申請(qǐng)?zhí)峁┑膱?bào)文處理方法時(shí)優(yōu)先使用前兩種老化策略,即在序列號(hào)達(dá)到理論最大值之前,提前對(duì)序列號(hào)進(jìn)行翻轉(zhuǎn)。而在支持?jǐn)U展序列號(hào)(Extended Sequence Number,ESN)的組網(wǎng)中,序列號(hào)為64位,其理論最大值為2^64=1.844674407371*1019,這個(gè)數(shù)量的序列號(hào)一般是足夠用的,所以在實(shí)現(xiàn)時(shí)可以不必考慮序號(hào)溢出的問(wèn)題,可以優(yōu)先使用第三種老化策略。
由上述三種老化策略可以看到,本申請(qǐng)?zhí)峁┑挠糜诩臃庋b報(bào)文和用于解封裝報(bào)文的快轉(zhuǎn)表項(xiàng)隨著IPsec SA的老化而老化,如果IPsec SA沒(méi)有老化,說(shuō)明后續(xù)可能還會(huì)有流繼續(xù)使用此IPsec SA,從而還會(huì)使用到與該IPsec SA相關(guān)的快轉(zhuǎn)表項(xiàng),因此本申請(qǐng)可以設(shè)置不允許手工刪除用于加封裝報(bào)文和用于解封裝報(bào)文的快轉(zhuǎn)表項(xiàng)。例如,當(dāng)GM在運(yùn)行過(guò)程中檢測(cè)到通過(guò)命令行輸入的指示刪除某個(gè)快轉(zhuǎn)表項(xiàng)的命令時(shí),該GM可以為該命令指定的快轉(zhuǎn)表項(xiàng)設(shè)置一個(gè)隱藏標(biāo)記,使該快轉(zhuǎn)表項(xiàng)對(duì)外不可見(jiàn),如果后續(xù)有報(bào)文匹配上該快轉(zhuǎn)表項(xiàng)時(shí),再激活該快轉(zhuǎn)表項(xiàng)使其對(duì)外可見(jiàn),這樣就可以沿用原有快轉(zhuǎn)表項(xiàng)中記錄的序列號(hào)繼續(xù)處理報(bào)文了。
下面通過(guò)一個(gè)具體示例,說(shuō)明本申請(qǐng)如何實(shí)現(xiàn)GD VPN中的報(bào)文處理。
參見(jiàn)圖8,某企業(yè)的三個(gè)分支機(jī)構(gòu)分別連著GM1、GM2和GM3。所有GM都向KS進(jìn)行注冊(cè),KS下發(fā)了相同的IPsec SA給所有GM。三臺(tái)GM使用相同的IPsec SA對(duì)GM之間的流進(jìn)行加、解封裝。KS給所有GM均下發(fā)了開(kāi)啟抗重放功能的開(kāi)關(guān)及大小為64的抗重放窗口。假設(shè)加封裝前的報(bào)文是UDP(User Datagram Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)報(bào)文,加封裝后的報(bào)文是ESP報(bào)文,源端口號(hào)為1234,目的端口號(hào)為5678,IPsec SA對(duì)應(yīng)的SPI為65535。
由于GD VPN采用IP頭保留技術(shù),所以加封裝后報(bào)文的源IP和目的IP沒(méi)變,但由于加封裝后報(bào)文為ESP報(bào)文,協(xié)議號(hào)發(fā)生了變化,所以GM在加封裝前和加封裝后都會(huì)建立快轉(zhuǎn)表項(xiàng)。
圖8中,GM1到GM2有兩條流:100.1.1.1—>100.1.3.1和100.1.1.2—>100.1.3.1;其加封裝前后,GM1上建立的快轉(zhuǎn)表項(xiàng)可以如下表1所示。其中,對(duì)于GD VPN而言,這里的源端口和目的端口是抽象出來(lái)的概念,源端口和目的端口可以是SPI中的高、低2個(gè)字節(jié)。
表1
以100.1.1.1—>100.1.3.1這條流為例,當(dāng)屬于這條流的某個(gè)報(bào)文進(jìn)入GM1后,會(huì)匹配上表1中的第一個(gè)表項(xiàng),GM1基于該第一個(gè)表項(xiàng)中記錄的IPsec SA(未在表1中示出)加封裝該報(bào)文,并根據(jù)第一個(gè)表項(xiàng)中記錄的最大已發(fā)送序列號(hào)的值100,將該報(bào)文的序列號(hào)設(shè)置為101,以及將第一個(gè)表項(xiàng)中記錄的最大已發(fā)送序列號(hào)的值由100更新為101。加封裝后的報(bào)文會(huì)匹配上表1中的第二個(gè)表項(xiàng),GM1根據(jù)第二個(gè)表項(xiàng)記錄的轉(zhuǎn)發(fā)信息將加封裝后的報(bào)文從出接口Eth1/1發(fā)出。
GM3到GM2有一條流:100.1.2.1—>100.1.3.1;其加封裝前后,GM3上可以建立如表2所示的快轉(zhuǎn)表項(xiàng)。
表2
相應(yīng)的,GM2上對(duì)GM1和GM3發(fā)送的流進(jìn)行解封裝前后,可以建立如表3所示的快轉(zhuǎn)表項(xiàng)。
表3
以100.1.1.1—>100.1.3.1這條流為例,當(dāng)屬于這條流的報(bào)文進(jìn)入GM2后,會(huì)匹配上表3中的第一個(gè)表項(xiàng)。GM2根據(jù)第一個(gè)表項(xiàng)中記錄的最大已接收序列號(hào)的值100,結(jié)合KS下發(fā)的抗重放窗口64,可以計(jì)算出當(dāng)前抗重放窗口的區(qū)間為[37,100],同時(shí)結(jié)合快轉(zhuǎn)表項(xiàng)中記錄的已接收序列號(hào),可以判斷出是否解封裝過(guò)該報(bào)文。假設(shè)報(bào)文中攜帶的序列號(hào)為101,則GM2根據(jù)上述信息可以確定該報(bào)文通過(guò)抗重放檢測(cè),從而解封裝該報(bào)文,同時(shí)在第一個(gè)表項(xiàng)的已接收序列號(hào)字段中標(biāo)記收到過(guò)序列號(hào)101。解封裝后的報(bào)文會(huì)匹配上表3中的第二個(gè)表項(xiàng),GM2根據(jù)第二個(gè)表項(xiàng)記錄的轉(zhuǎn)發(fā)信息將解封裝后的報(bào)文從出接口Eth1/0發(fā)出。
需要注意的是,由于GM2需要在解封裝前判斷出報(bào)文是否為重放報(bào)文,因此“最大已接收序列號(hào)”和“已接收序列號(hào)”這兩個(gè)字段只能記錄在解封裝前建立的快轉(zhuǎn)表項(xiàng)中。另外,為靈活起見(jiàn),GM2也可以將KS下發(fā)的抗重放窗口的大小也記錄在快轉(zhuǎn)表項(xiàng)中。
當(dāng)GM1、GM2和GM3接收到KS下發(fā)的新的IPsec SA時(shí),各GM將會(huì)老化本設(shè)備上包含了本申請(qǐng)?zhí)岢龅男伦侄蔚目燹D(zhuǎn)表項(xiàng),即GM1會(huì)老化表1中的第一個(gè)和第三個(gè)表項(xiàng),GM2會(huì)刪除表2中的第一個(gè)表項(xiàng),GM3會(huì)刪除表3中的第一個(gè)、第三個(gè)和第五個(gè)表項(xiàng)。
以上對(duì)本申請(qǐng)?zhí)峁┑姆椒ㄟM(jìn)行了描述。下面對(duì)本申請(qǐng)?zhí)峁┑难b置進(jìn)行描述。
參見(jiàn)圖9,為本申請(qǐng)實(shí)施例提供的一種報(bào)文處理裝置的功能模塊框圖,該裝置可以應(yīng)用于GD VPN中的本端GM,所述裝置包括:
接收單元901,用于接收GD VPN中的對(duì)端GM發(fā)送的第一報(bào)文,所述第一報(bào)文中包括序列號(hào)。
查詢單元902,用于查詢與所述第一報(bào)文匹配的第一快轉(zhuǎn)表項(xiàng),所述第一快轉(zhuǎn)表項(xiàng)中增加了用于指示抗重放窗口的區(qū)間和已接收序列號(hào)的新字段。
抗重放檢測(cè)單元903,用于根據(jù)所述第一快轉(zhuǎn)表項(xiàng)中的新字段確定出抗重放窗口的區(qū)間和已接收序列號(hào),并結(jié)合所述抗重放窗口的區(qū)間、已接收序列號(hào)以及所述第一報(bào)文包括的序列號(hào),對(duì)所述第一報(bào)文進(jìn)行抗重放檢測(cè)。
報(bào)文處理單元904,用于在所述第一報(bào)文通過(guò)抗重放檢測(cè)時(shí)解封裝所述第一報(bào)文;在所述第一報(bào)文沒(méi)有通過(guò)抗重放檢測(cè)時(shí)丟棄所述第一報(bào)文。
表項(xiàng)處理單元905,用于在所述第一報(bào)文解封裝成功后更新所述第一快轉(zhuǎn)表項(xiàng)。
可選的,所述新字段可以為抗重放窗口的左端點(diǎn)L和右端點(diǎn)R,以及已接收序列號(hào);從而在根據(jù)所述第一快轉(zhuǎn)表項(xiàng)確定抗重放窗口的區(qū)間時(shí),所述抗重放檢測(cè)單元903具體用于:根據(jù)所述第一快轉(zhuǎn)表項(xiàng)中記錄的抗重放窗口的左端點(diǎn)L和右端點(diǎn)R,確定抗重放窗口的區(qū)間為[L,R]。
可選的,所述新字段可以為最大已接收序列號(hào)M,以及已接收序列號(hào);從而在根據(jù)所述第一快轉(zhuǎn)表項(xiàng)確定抗重放窗口的區(qū)間時(shí),所述抗重放檢測(cè)單元903具體用于:如果所述第一快轉(zhuǎn)表項(xiàng)中記錄的最大已接收序列號(hào)M小于等于抗重放窗口的大小N,則確定抗重放窗口的區(qū)間為[1,N];如果所述第一快轉(zhuǎn)表項(xiàng)中記錄的最大已接收序列號(hào)M大于抗重放窗口的大小N,則確定抗重放窗口的區(qū)間為[M-N+1,M]。
可選的,在對(duì)所述第一報(bào)文進(jìn)行抗重放檢測(cè)時(shí),所述抗重放檢測(cè)單元903具體用于:判斷所述第一報(bào)文的序列號(hào)相對(duì)于所述抗重放窗口的區(qū)間的位置;如果所述第一報(bào)文的序列號(hào)在所述抗重放窗口的區(qū)間內(nèi),則進(jìn)一步判斷所述第一報(bào)文的序列號(hào)是否與所述已接收序列號(hào)重復(fù);如果不重復(fù),則確定所述第一報(bào)文通過(guò)抗重放檢測(cè);如果重復(fù),則確定所述第一報(bào)文沒(méi)有通過(guò)抗重放檢測(cè);如果所述第一報(bào)文的序列號(hào)在所述抗重放窗口的區(qū)間的左側(cè),則確定所述第一報(bào)文沒(méi)有通過(guò)抗重放檢測(cè);如果所述第一報(bào)文的序列號(hào)在所述抗重放窗口的區(qū)間的右側(cè),則確定所述第一報(bào)文通過(guò)抗重放檢測(cè)。
可選的,當(dāng)所述新字段為抗重放窗口的左端點(diǎn)L和右端點(diǎn)R,以及已接收序列號(hào)時(shí);在更新所述第一快轉(zhuǎn)表項(xiàng)時(shí),所述表項(xiàng)處理單元905具體用于:如果所述第一報(bào)文的序列號(hào)X在所述抗重放窗口的區(qū)間內(nèi),則在所述第一快轉(zhuǎn)表項(xiàng)中標(biāo)記收到過(guò)序列號(hào)X;如果所述第一報(bào)文的序列號(hào)X在所述抗重放窗口的區(qū)間的右側(cè),則將所述第一快轉(zhuǎn)表項(xiàng)中記錄的抗重放窗口右移,使抗重放窗口的左端點(diǎn)L更新為X-N+1、右端點(diǎn)更新為X,以及在所述第一快轉(zhuǎn)表項(xiàng)中標(biāo)記收到過(guò)序列號(hào)X;其中,N表示抗重放窗口的大小。
可選的,當(dāng)所述新字段為最大已接收序列號(hào)M,以及已接收序列號(hào)時(shí);在更新所述第一快轉(zhuǎn)表項(xiàng)時(shí),所述表項(xiàng)處理單元905具體用于:如果所述第一報(bào)文的序列號(hào)X在所述抗重放窗口的區(qū)間內(nèi),則在所述第一快轉(zhuǎn)表項(xiàng)記錄的已接收序列號(hào)中標(biāo)記收到過(guò)序列號(hào)X;如果所述第一報(bào)文的序列號(hào)X在所述抗重放窗口的區(qū)間的右側(cè),則將所述第一快轉(zhuǎn)表項(xiàng)中記錄的最大已接收序列號(hào)M更新為所述第一報(bào)文的序列號(hào)X,以及在所述第一快轉(zhuǎn)表項(xiàng)記錄的已接收序列號(hào)中標(biāo)記收到過(guò)序列號(hào)X。
可選的,所述表項(xiàng)處理單元905,還可以用于在所述查詢單元902沒(méi)有查詢到所述第一快轉(zhuǎn)表項(xiàng)時(shí),新建與所述第一報(bào)文對(duì)應(yīng)的快轉(zhuǎn)表項(xiàng);新建的快轉(zhuǎn)表項(xiàng)中增加抗重放窗口的左端點(diǎn)和右端點(diǎn)、已接收序列號(hào);或,新建的快轉(zhuǎn)表項(xiàng)中增加最大已接收序列號(hào)、已接收序列號(hào);其中,抗重放窗口的左端點(diǎn)的初始值為0,右端點(diǎn)的初始值為抗重放窗口的大小N;最大已接收序列號(hào)的初始值為抗重放窗口的大小N;已接收序列號(hào)的初始值為空。
相應(yīng)的,所述報(bào)文處理單元904,還用于在所述表項(xiàng)處理單元905新建與所述第一報(bào)文對(duì)應(yīng)的快轉(zhuǎn)表項(xiàng)之后,解封裝所述第一報(bào)文。
相應(yīng)的,所述表項(xiàng)處理單元905,還用于在所述第一報(bào)文解封裝成功后根據(jù)所述第一報(bào)文包括的序列號(hào)更新所述新建的快轉(zhuǎn)表項(xiàng)。
可選的,所述查詢單元902,還可以用于在本端GM加封裝待發(fā)送給對(duì)端GM的第二報(bào)文之前,查詢與所述第二報(bào)文匹配的第二快轉(zhuǎn)表項(xiàng),所述第二快轉(zhuǎn)表項(xiàng)中增加了與本端GM已發(fā)送的報(bào)文條數(shù)有關(guān)的新字段,該新字段為最大已發(fā)送序列號(hào)。
相應(yīng)的,所述表項(xiàng)處理單元905,還可以用于在所述查詢單元902查詢到所述第二快轉(zhuǎn)表項(xiàng)時(shí),將所述第二快轉(zhuǎn)表項(xiàng)中記錄的最大已發(fā)送序列號(hào)按預(yù)設(shè)步長(zhǎng)增量累加;在所述查詢單元902沒(méi)有查詢到所述第二快轉(zhuǎn)表項(xiàng)時(shí),新建與所述第二報(bào)文對(duì)應(yīng)的快轉(zhuǎn)表項(xiàng),新建的快轉(zhuǎn)表項(xiàng)中增加最大已發(fā)送序列號(hào),最大已發(fā)送序列號(hào)的初始值為0,將新建的快轉(zhuǎn)表項(xiàng)中記錄的最大已發(fā)送序列號(hào)按預(yù)設(shè)步長(zhǎng)增量累加。
相應(yīng)的,所述報(bào)文處理單元904,還可以用于將累加后的最大已發(fā)送序列號(hào)作為所述第二報(bào)文的序列號(hào)添加到所述第二報(bào)文的報(bào)文頭中,之后加封裝所述第二報(bào)文。
可選的,當(dāng)解封裝前的所述第一報(bào)文為標(biāo)準(zhǔn)ESP協(xié)議報(bào)文時(shí),所述第一報(bào)文的序列號(hào)可以承載在所述第一報(bào)文的ESP頭的Sequence Number字段中;當(dāng)解封裝前的所述第一報(bào)文為標(biāo)準(zhǔn)AH協(xié)議報(bào)文時(shí),所述第一報(bào)文的序列號(hào)可以承載在所述第一報(bào)文的AH頭的Sequence Number字段中。
可選的,所述接收單元901,還可以用于在接收對(duì)端GM發(fā)送的第一報(bào)文之前,接收KS下發(fā)的抗重放開(kāi)關(guān)和抗重放窗口的大小。
相應(yīng)的,所述抗重放檢測(cè)單元903,還可以用于根據(jù)所述抗重放開(kāi)關(guān)的指示開(kāi)啟抗重放功能。
可選的,所述裝置還包括:
發(fā)送單元,用于當(dāng)所述第二快轉(zhuǎn)表項(xiàng)中記錄的最大已發(fā)送序列號(hào)達(dá)到設(shè)定閾值,或者,當(dāng)所述第一快轉(zhuǎn)表項(xiàng)中記錄的最大已接收序列號(hào)或抗重放窗口的右端點(diǎn)達(dá)到設(shè)定閾值時(shí),通知GD VPN中的KS下發(fā)新的IP安全I(xiàn)Psec安全聯(lián)盟SA。
老化單元,用于當(dāng)所述接收單元901接收到KS下發(fā)的新的IPsec SA時(shí),老化所述第一快轉(zhuǎn)表項(xiàng)和所述第二快轉(zhuǎn)表項(xiàng)。
需要說(shuō)明的是,本發(fā)明實(shí)施例中對(duì)單元的劃分是示意性的,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式。在本申請(qǐng)的實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
如圖10所示,本申請(qǐng)實(shí)施例還提供一種報(bào)文處理裝置,所述裝置包括通信接口1001、處理器1002、存儲(chǔ)器1003和總線1004;其中,通信接口1001、處理器1002、存儲(chǔ)器1003通過(guò)總線1004完成相互間的通信。
其中,通信接口1001,用于與GD VPN中的其它GM和KS通信。處理器1002可以是一個(gè)CPU,存儲(chǔ)器1003可以是非易失性存儲(chǔ)器(non-volatile memory),并且存儲(chǔ)器1003中存儲(chǔ)有報(bào)文處理邏輯指令,處理器1002可以執(zhí)行存儲(chǔ)器1003中存儲(chǔ)的報(bào)文處理邏輯指令,以實(shí)現(xiàn)圖2和圖5所示的報(bào)文處理方法,具體可參見(jiàn)圖2和圖5所示的流程。
以上所述僅為本申請(qǐng)的較佳實(shí)施例而已,并不用以限制本申請(qǐng),凡在本申請(qǐng)的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)保護(hù)的范圍之內(nèi)。