本發(fā)明涉及互聯(lián)網(wǎng)技術(shù)領(lǐng)域,尤其涉及一種傳輸控制協(xié)議選項的處理方法及裝置。
背景技術(shù):
TCP(Transmission Control Protocol,傳輸控制協(xié)議)選項作為TCP通信中一種可選的功能,一般出現(xiàn)在TCP連接建立階段。在客戶端和服務(wù)器建立TCP連接時,若客戶端向服務(wù)器發(fā)送的SYN(Synchronize,同步)包中攜帶TCP選項信息,則還要與服務(wù)器協(xié)商是否支持該TCP選項。常見的TCP選項包括SACK(Selective Acknowledgment,選擇性確認)選項、窗口擴大選項、時間戳選項等,這些TCP選項使得TCP連接能夠適應(yīng)復雜的網(wǎng)絡(luò)環(huán)境,改善網(wǎng)絡(luò)傳輸?shù)男屎唾|(zhì)量。
TCP協(xié)議作為一種常用的網(wǎng)絡(luò)協(xié)議,有自身的弱點?,F(xiàn)有技術(shù)中,為了防護TCP連接建立過程中的SYN Flood(SYN洪水)攻擊,可以在客戶端和服務(wù)器中間增加一個流量管理設(shè)備來進行安全防護。流量管理設(shè)備通常采用SYN Cookie(一種專門防范SYN Flood攻擊的手段)方法來有效地防護SYN Flood攻擊,通過將接收到的客戶端發(fā)送的SYN報文進行統(tǒng)一處理然后丟棄,可以以一種統(tǒng)一的方式來防護代理流量、轉(zhuǎn)發(fā)流量和本地流量三種流量類型下的SYN Flood攻擊,有效地提高了防護性能。
然而,在此過程中,流量管理設(shè)備并未對SYN報文攜帶的TCP選項進行處理,因而不能獲知服務(wù)器所支持的TCP選項信息,導致在防護SYN Flood攻擊時,客戶端和目標服務(wù)器經(jīng)由流量管理設(shè)備所建立的連接遺漏或不支持某些TCP優(yōu)化選項,從而影響了網(wǎng)絡(luò)傳輸?shù)男屎唾|(zhì)量,降低了用戶體驗。
技術(shù)實現(xiàn)要素:
本發(fā)明的主要目的在于提出一種傳輸控制協(xié)議選項的處理方法及裝置,旨在實現(xiàn)流量管理設(shè)備在防護SYN Flood攻擊過程中對TCP選項進行合理處理,從而提升網(wǎng)絡(luò)傳輸?shù)男屎唾|(zhì)量,提升用戶體驗。
為實現(xiàn)上述目的,本發(fā)明提供一種傳輸控制協(xié)議選項的處理方法,所述方法包括如下步驟:
接收客戶端發(fā)送的握手報文,所述握手報文攜帶TCP選項請求信息;
根據(jù)所述握手報文判斷流入流量管理設(shè)備的流量類型,所述流量類型包括代理流量和非代理流量;
若所述流量類型為代理流量,則向所述客戶端回送支持所述TCP選項的握手報文;
若所述流量類型為非代理流量,則向所述客戶端回送支持所述TCP選項的握手報文,并向目標服務(wù)器協(xié)商是否支持所述TCP選項,若所述目標服務(wù)器不支持所述TCP選項,則向所述客戶端反饋協(xié)商結(jié)果。
可選地,所述根據(jù)所述握手報文判斷流入流量管理設(shè)備的流量類型的步驟之前,還包括:
檢測預設(shè)時長內(nèi)接收到的所述客戶端發(fā)送的握手報文的數(shù)量是否超過預設(shè)閾值;
若是,則基于cookie校驗機制,校驗所述客戶端是否合法;若所述客戶端不合法,則丟棄所述客戶端發(fā)送的握手報文;若所述客戶端合法,則執(zhí)行根據(jù)所述握手報文判斷流入流量管理設(shè)備的流量類型的步驟。
可選地,所述向所述客戶端反饋協(xié)商結(jié)果的步驟包括:
在后續(xù)接收到所述客戶端發(fā)送的非代理流量類型的握手報文時,向所述客戶端回送不支持所述TCP選項的握手報文。
可選地,若所述目標服務(wù)器支持所述TCP選項,則在所述客戶端與所述目標服務(wù)器經(jīng)由所述流量管理設(shè)備進行通信時,對應(yīng)調(diào)整通信數(shù)據(jù)包中所述TCP選項的序列號,并完成所述數(shù)據(jù)包的轉(zhuǎn)發(fā)。
可選地,所述在所述客戶端與所述目標服務(wù)器經(jīng)由所述流量管理設(shè)備進行通信時,對應(yīng)調(diào)整通信數(shù)據(jù)包中所述TCP選項的序列號的步驟包括:
計算所述目標服務(wù)器與所述客戶端序列號的差值;
當接收到所述客戶端向所述目標服務(wù)器轉(zhuǎn)發(fā)的第一數(shù)據(jù)包時,將所述第一數(shù)據(jù)包中TCP選項的序列號加上所述差值;
當接收到所述目標服務(wù)器向所述客戶端轉(zhuǎn)發(fā)的第二數(shù)據(jù)包時,將所述第二數(shù)據(jù)包中TCP選項的序列號減去所述差值。
可選地,所述TCP選項包括SACK選項和時間戳選項,所述向所述客戶端回送支持所述TCP選項的握手報文的步驟包括:
將支持所述SACK選項的信息編碼進所述時間戳選項的時間戳值中,并將所述時間戳值添加到回送給所述客戶端的握手報文中進行回送。
此外,為實現(xiàn)上述目的,本發(fā)明還提供一種傳輸控制協(xié)議選項的處理裝置,所述裝置包括:
接收模塊,用于接收客戶端發(fā)送的握手報文,所述握手報文攜帶TCP選項請求信息;
判斷模塊,用于根據(jù)所述握手報文判斷流入流量管理設(shè)備的流量類型,所述流量類型包括代理流量和非代理流量;
第一處理模塊,用于若所述流量類型為代理流量,則向所述客戶端回送支持所述TCP選項的握手報文;
第二處理模塊,用于若所述流量類型為非代理流量,則向所述客戶端回送支持所述TCP選項的握手報文,并向目標服務(wù)器協(xié)商是否支持所述TCP選項,若所述目標服務(wù)器不支持所述TCP選項,則向所述客戶端反饋協(xié)商結(jié)果。
可選地,所述裝置還包括:
檢測模塊,用于檢測預設(shè)時長內(nèi)接收到的所述客戶端發(fā)送的握手報文的數(shù)量是否超過預設(shè)閾值;
校驗模塊,用于若預設(shè)時長內(nèi)接收到的所述客戶端發(fā)送的握手報文的數(shù)量超過預設(shè)閾值,則基于cookie校驗機制,校驗所述客戶端是否合法;若所述客戶端不合法,則丟棄所述客戶端發(fā)送的握手報文;若所述客戶端合法,則判斷模塊根據(jù)所述握手報文判斷流入流量管理設(shè)備的流量類型。
可選地,所述第二處理模塊還用于:
在后續(xù)接收到所述客戶端發(fā)送的非代理流量類型的握手報文時,向所述客戶端回送不支持所述TCP選項的握手報文。
可選地,所述第二處理模塊還用于:
若所述目標服務(wù)器支持所述TCP選項,則在所述客戶端與所述目標服務(wù)器經(jīng)由所述流量管理設(shè)備進行通信時,對應(yīng)調(diào)整通信數(shù)據(jù)包中所述TCP選項的序列號,并完成所述數(shù)據(jù)包的轉(zhuǎn)發(fā)。
可選地,所述第二處理模塊還包括:
計算單元,用于計算所述目標服務(wù)器與所述客戶端序列號的差值;
第一處理單元,用于當接收到所述客戶端向所述目標服務(wù)器轉(zhuǎn)發(fā)的第一數(shù)據(jù)包時,將所述第一數(shù)據(jù)包中TCP選項的序列號加上所述差值;
第二處理單元,用于當接收到所述目標服務(wù)器向所述客戶端轉(zhuǎn)發(fā)的第二數(shù)據(jù)包時,將所述第二數(shù)據(jù)包中TCP選項的序列號減去所述差值。
可選地,所述TCP選項包括SACK選項和時間戳選項,所述第一處理模塊和所述第二處理模塊還用于:
將支持所述SACK選項的信息編碼進所述時間戳選項的時間戳值中,并將所述時間戳值添加到回送給所述客戶端的握手報文中進行回送。
本發(fā)明流量管理設(shè)備接收客戶端發(fā)送的握手報文,所述握手報文攜帶TCP選項請求信息;根據(jù)所述握手報文判斷流入流量管理設(shè)備的流量類型,所述流量類型包括代理流量和非代理流量;若所述流量類型為代理流量,則向所述客戶端回送支持所述TCP選項的握手報文;若所述流量類型為非代理流量,則向所述客戶端回送支持所述TCP選項的握手報文,并向目標服務(wù)器協(xié)商是否支持所述TCP選項,若所述目標服務(wù)器不支持所述TCP選項,則向所述客戶端反饋協(xié)商結(jié)果。通過上述方式,在防護SYN Flood攻擊過程中,流量管理設(shè)備在接收到客戶端發(fā)送的TCP選項請求信息時,首先統(tǒng)一回復支持TCP選項,若流入流量管理設(shè)備的流量為非代理流量,則流量管理設(shè)備還要以探測的方式與目標服務(wù)器協(xié)商TCP選項,并向客戶端進行相應(yīng)反饋,以使得客戶端調(diào)整其后續(xù)發(fā)送的握手報文。本發(fā)明能夠?qū)崿F(xiàn)流量管理設(shè)備在防護SYN Flood攻擊過程中對TCP選項進行合理處理,從而能夠提升網(wǎng)絡(luò)傳輸?shù)男屎唾|(zhì)量,提升用戶體驗。
附圖說明
圖1為本發(fā)明傳輸控制協(xié)議選項的處理方法第一實施例的流程示意圖;
圖2為本發(fā)明代理流量支持TCP選項的系統(tǒng)交互示意圖;
圖3為本發(fā)明非代理流量不支持TCP選項的系統(tǒng)交互示意圖;
圖4為本發(fā)明非代理流量支持TCP選項的系統(tǒng)交互示意圖;
圖5為本發(fā)明第二實施例中流量管理設(shè)備調(diào)整TCP選項序列號的細化步驟示意圖;
圖6為本發(fā)明傳輸控制協(xié)議選項的處理裝置第一實施例的功能模塊示意圖;
圖7為圖6中第二處理模塊的細化功能模塊示意圖。
本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進一步說明。
具體實施方式
應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明的傳輸控制協(xié)議TCP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,是Internet最基本的協(xié)議。一般地,客戶端與服務(wù)器建立TCP連接過程中需要進行三次握手,正常的握手過程是:客戶端發(fā)送一個包含同步標志的SYN包給服務(wù)器;服務(wù)器分配相應(yīng)的控制塊,比如連接跟蹤,并給客戶端回送SYN+ACK包,其中ACK(Acknowledgement)為確認字符,表示發(fā)來的數(shù)據(jù)確認接收無誤;客戶端收到服務(wù)器的回應(yīng)后,再向服務(wù)器發(fā)送ACK包,連接建立成功。
TCP協(xié)議作為最常用的網(wǎng)絡(luò)通信協(xié)議,有自身的弱點,網(wǎng)絡(luò)攻擊者經(jīng)常利用這些弱點來進行DDOS(Distributed Denial of Service,分布式拒絕服務(wù))攻擊。SYN Flood(SYN洪水)攻擊是一種廣為人知的DDOS方式,現(xiàn)有技術(shù)中,可以在客戶端和服務(wù)器中間增加一個流量管理設(shè)備來進行安全防護。
流量管理設(shè)備除了具有維護網(wǎng)絡(luò)安全的功能外,還具有代理和數(shù)據(jù)轉(zhuǎn)發(fā)功能。一般流入流量管理設(shè)備的流量有三種:代理流量、轉(zhuǎn)發(fā)流量和本地流量,其中,代理流量是流量管理設(shè)備作為客戶端與服務(wù)器中間的代理的流量,轉(zhuǎn)發(fā)流量是流量管理設(shè)備轉(zhuǎn)發(fā)出去的流量,本地流量是訪問流量管理設(shè)備本身的流量。流量管理設(shè)備一般使用SYN Cookie(一種專門防范SYN Flood攻擊的手段)方法來有效地防護SYN Flood攻擊,通過將接收到的客戶端發(fā)送的SYN報文進行統(tǒng)一處理然后丟棄,可以以一種統(tǒng)一的方式來防護三種流量類型下的SYN Flood攻擊,有效地提高了防護性能。
TCP選項作為TCP通信中一種可選的功能,一般出現(xiàn)在TCP連接建立階段,也就是TCP的三次握手的數(shù)據(jù)包中。常見的TCP選項包括SACK(Selective Acknowledgment,選擇性確認)選項、窗口擴大選項、時間戳選項等,這些TCP選項使得TCP連接能夠適應(yīng)復雜的網(wǎng)絡(luò)環(huán)境,改善網(wǎng)絡(luò)傳輸?shù)男屎唾|(zhì)量。
基于上述的流量管理設(shè)備及TCP協(xié)議,提出本發(fā)明的各個實施例。
本發(fā)明提供一種傳輸控制協(xié)議選項的處理方法。
參照圖1,圖1為本發(fā)明傳輸控制協(xié)議選項的處理方法第一實施例的流程示意圖。所述方法包括如下步驟:
步驟S10,接收客戶端發(fā)送的握手報文,所述握手報文攜帶TCP選項請求信息。
在本實施例中,流量管理設(shè)備接收客戶端發(fā)送的握手報文,即SYN包,該SYN包中包含了TCP選項請求信息,用于向接收方請求支持攜帶的TCP選項。
步驟S20,根據(jù)所述握手報文判斷流入流量管理設(shè)備的流量類型,所述流量類型包括代理流量和非代理流量。
流量管理設(shè)備在接收到客戶端發(fā)送的SYN包后,對該SYN包進行解析,從而區(qū)分流入流量管理設(shè)備的流量類型,本實施例將流入流量管理設(shè)備的流量類型劃分為代理流量和非代理流量,其中非代理流量包括轉(zhuǎn)發(fā)流量和本地流量。
步驟S30,若所述流量類型為代理流量,則向所述客戶端回送支持所述TCP選項的握手報文。
對于代理的流量,有兩條TCP連接需要建立:一條是客戶端與流量管理設(shè)備之間的TCP連接,一條是流量管理設(shè)備與服務(wù)器之間的TCP連接。
在本實施例中,流量管理設(shè)備具有TCP選項支持功能。參照圖2,圖2為本發(fā)明代理流量支持TCP選項的系統(tǒng)交互示意圖。若流量管理設(shè)備判斷流量類型為代理流量,則向客戶端回送支持所述TCP選項的握手報文,即SYN+ACK包(帶TCP選項),客戶端再向流量管理設(shè)備返回ACK包(帶TCP選項),從而建立了客戶端與流量管理設(shè)備之間的TCP連接,且該TCP連接支持SYN包中攜帶的TCP選項。對于第二條TCP連接,由于服務(wù)器和客戶端之間沒有直接通信,因而無需考慮服務(wù)器否支持TCP選項,流量管理設(shè)備和服務(wù)器可以根據(jù)一般情況來進行三次握手,與正常通信沒有區(qū)別。
步驟S40,若所述流量類型為非代理流量,則向所述客戶端回送支持所述TCP選項的握手報文,并向目標服務(wù)器協(xié)商是否支持所述TCP選項,若所述目標服務(wù)器不支持所述TCP選項,則向所述客戶端反饋協(xié)商結(jié)果。
對于非代理流量,以轉(zhuǎn)發(fā)流量為例,服務(wù)器與流量管理設(shè)備三次握手完成后,流量管理設(shè)備只保留一條TCP連接,即客戶端與服務(wù)器之間的連接,流量管理設(shè)備只起到數(shù)據(jù)轉(zhuǎn)發(fā)的作用。本地流量和轉(zhuǎn)發(fā)流量類似,也是只保留一條TCP連接,與轉(zhuǎn)發(fā)流量不同的是,客戶端訪問的是流量管理設(shè)備本地,此時根據(jù)內(nèi)核協(xié)議棧進行相應(yīng)處理即可。
若流量管理設(shè)備判斷流量類型為非代理流量,則向客戶端回送支持所述TCP選項的握手報文,此外,還要向目標服務(wù)器協(xié)商是否支持客戶端請求的TCP選項,若服務(wù)器不支持,則向所述客戶端反饋不支持的信息;若服務(wù)器支持,則可以不做其他處理,在客戶端與服務(wù)器建立TCP連接之后,完成相應(yīng)的數(shù)據(jù)轉(zhuǎn)發(fā)功能即可,該TCP連接支持TCP選項。
需要說明的是,上述處理TCP選項的方法可應(yīng)用于正常的TCP連接過程,也可應(yīng)用于流量管理設(shè)備在防護SYN FLOOD攻擊的過程中,對于后者,具體地,所述步驟S20之前,還可以包括:
步驟S201,檢測預設(shè)時長內(nèi)接收到的所述客戶端發(fā)送的握手報文的數(shù)量是否超過預設(shè)閾值;
步驟S202,若預設(shè)時長內(nèi)接收到的所述客戶端發(fā)送的握手報文的數(shù)量超過預設(shè)閾值,則基于cookie校驗機制,校驗所述客戶端是否合法;若所述客戶端不合法,則丟棄所述客戶端發(fā)送的握手報文;若所述客戶端合法,則執(zhí)行根據(jù)所述握手報文判斷流入流量管理設(shè)備的流量類型的步驟。
當流量管理設(shè)備在較短時間內(nèi)檢測到大量客戶端發(fā)送的SYN包時,即判定受到了SYN洪水攻擊,隨即自動開啟SYN FLOOD防護功能,此時,流量管理設(shè)備可以基于cookie校驗機制,校驗所述客戶端是否合法。
cookie校驗機制,其原理在于,流量管理設(shè)備在接收到SYN包時,不分配一個專門的數(shù)據(jù)區(qū),而是根據(jù)這個SYN包計算出一個cookie值,并將該cookie值添加到回送給客戶端的SYN+ACK包中。
其中,cookie值即初始TCP序列號。流量管理設(shè)備可以按照預設(shè)的加密算法計算cookie值,比如,根據(jù)TCP SYN報文的TCP首部信息(尤指源IP地址、源端口號或本地時間),利用加密算法(如md5算法)計算出cookie值,使用該算法得到的cookie值是動態(tài)值,能夠使得攻擊者無法仿制出相同的cookie值,從而能夠保證TCP連接過程的可靠性。
之后,如果一個ACK包從客戶端返回,流量管理設(shè)備將根據(jù)該ACK包中的cookie值校驗客戶端的合法性,若校驗成功,則將所述ACK報文的源IP地址標記為合法用戶,再執(zhí)行以下處理TCP選項的過程,否則將所述ACK報文的源IP地址標記為攻擊方,并丟棄接收到的該IP地址的握手報文。由于不必保持等候ACK包的半連接狀態(tài),從而避免了服務(wù)器資源的大量占用,即防護了SYN FLOOD攻擊。
進一步地,參照圖3,圖3為本發(fā)明非代理流量不支持TCP選項的系統(tǒng)交互示意圖?;谏鲜鰣D1所示的實施例,所述向所述客戶端反饋協(xié)商結(jié)果的步驟可以包括:
步驟S41,在后續(xù)接收到所述客戶端發(fā)送的非代理流量類型的握手報文時,向所述客戶端回送不支持所述TCP選項的握手報文。
流量管理設(shè)備與服務(wù)器協(xié)商TCP選項時,首先構(gòu)造并向服務(wù)器發(fā)送SYN包(帶TCP選項),若服務(wù)器不支持TCP選項,則向流量管理設(shè)備回送SYN+ACK包(不帶TCP選項),流量管理設(shè)備回應(yīng)ACK包。至此,流量管理設(shè)備獲知服務(wù)器不支持TCP選項,并關(guān)閉非代理流量類型下的TCP選項支持功能。在后續(xù)接收到所述客戶端發(fā)送的非代理流量類型的握手報文時,即SYN包(帶TCP選項),向所述客戶端回送不支持所述TCP選項的握手報文,即SYN+ACK包(不帶TCP選項),客戶端回應(yīng)ACK包,之后,流量管理設(shè)備和服務(wù)器的握手也不會協(xié)商是否支持TCP選項,這樣客戶端與目標服務(wù)器建立的連接也就不支持TCP選項。
在本實施例中,流量管理設(shè)備接收客戶端發(fā)送的握手報文,所述握手報文攜帶TCP選項請求信息;根據(jù)所述握手報文判斷流入流量管理設(shè)備的流量類型,所述流量類型包括代理流量和非代理流量;若所述流量類型為代理流量,則向所述客戶端回送支持所述TCP選項的握手報文;若所述流量類型為非代理流量,則向所述客戶端回送支持所述TCP選項的握手報文,并向目標服務(wù)器協(xié)商是否支持所述TCP選項,若所述目標服務(wù)器不支持所述TCP選項,則向所述客戶端反饋協(xié)商結(jié)果。通過上述方式,在防護SYN Flood攻擊過程中,流量管理設(shè)備在接收到客戶端發(fā)送的TCP選項請求信息時,首先統(tǒng)一回復支持TCP選項,若流入流量管理設(shè)備的流量為非代理流量,則流量管理設(shè)備還要以探測的方式與目標服務(wù)器協(xié)商TCP選項,并向客戶端進行相應(yīng)反饋,以使得客戶端調(diào)整其后續(xù)發(fā)送的握手報文。本發(fā)明能夠?qū)崿F(xiàn)流量管理設(shè)備在防護SYN Flood攻擊過程中對TCP選項進行合理處理,從而能夠提升網(wǎng)絡(luò)傳輸?shù)男屎唾|(zhì)量,提升用戶體驗。
進一步地,基于上述圖1所示的實施例,提出本發(fā)明傳輸控制協(xié)議選項的處理方法的第二實施例。本實施例中,所述向目標服務(wù)器協(xié)商是否支持所述TCP選項的步驟之后,還包括:
步驟S50,若所述目標服務(wù)器支持所述TCP選項,則在所述客戶端與所述目標服務(wù)器經(jīng)由所述流量管理設(shè)備進行通信時,對應(yīng)調(diào)整通信數(shù)據(jù)包中所述TCP選項的序列號,并完成所述數(shù)據(jù)包的轉(zhuǎn)發(fā)。
參照圖4,圖4為本發(fā)明非代理流量支持TCP選項的系統(tǒng)交互示意圖。
流量管理設(shè)備與服務(wù)器協(xié)商TCP選項時,首先構(gòu)造并向服務(wù)器發(fā)送SYN包(帶TCP選項),若服務(wù)器支持TCP選項,則向流量管理設(shè)備回送SYN+ACK包(帶TCP選項),流量管理設(shè)備回應(yīng)ACK包。至此,流量管理設(shè)備獲知服務(wù)器支持TCP選項,此時只需保留客戶端與服務(wù)器之間的一條TCP連接,且該TCP連接支持TCP選項。
在本實施例中,流量管理設(shè)備獲知到目標服務(wù)器支持TCP選項的信息后,保留客戶端與服務(wù)器之間的一條連接。由于之前流量代理設(shè)備是代替客戶端完成和服務(wù)器的握手,因此客戶端和目標服務(wù)器此時的序列號和時間戳值會存在一個差值,從而客戶端與服務(wù)器的TCP選項的序列號并不一致,如果不做調(diào)整,將導致通信無法正常進行,此時流量管理設(shè)備在進行后續(xù)的數(shù)據(jù)包轉(zhuǎn)發(fā)時,需要對應(yīng)調(diào)整數(shù)據(jù)包中TCP選項的序列號,再完成所述數(shù)據(jù)包的轉(zhuǎn)發(fā)。
具體地,參照圖5,圖5為本發(fā)明第二實施例中流量管理設(shè)備調(diào)整TCP選項序列號的細化步驟示意圖。所述在所述客戶端與所述目標服務(wù)器經(jīng)由所述流量管理設(shè)備進行通信時,對應(yīng)調(diào)整通信數(shù)據(jù)包中所述TCP選項的序列號的步驟可以包括:
步驟S51,計算所述目標服務(wù)器與所述客戶端序列號的差值;
流量管理設(shè)備使用SYN Cookie方式進行SYN Flood防護時,在建立客戶端與服務(wù)器之間的連接后,客戶端與服務(wù)器序列號存在差值K,該差值K可以由流量管理設(shè)備計算并保存。流量管理設(shè)備可以記錄在之前握手過程中發(fā)送給客戶端的序列號C,及服務(wù)器發(fā)送給客戶端的序列號S,通過S減去C就可以得到差值K,即存在等式:K=S-C。
步驟S52,當接收到所述客戶端向所述目標服務(wù)器轉(zhuǎn)發(fā)的第一數(shù)據(jù)包時,將所述第一數(shù)據(jù)包中TCP選項的序列號加上所述差值;
步驟S53,當接收到所述目標服務(wù)器向所述客戶端轉(zhuǎn)發(fā)的第二數(shù)據(jù)包時,將所述第二數(shù)據(jù)包中TCP選項的序列號減去所述差值。
后續(xù)通信過程中,當流量管理設(shè)備接收到所述客戶端向所述目標服務(wù)器轉(zhuǎn)發(fā)的第一數(shù)據(jù)包時,將所述第一數(shù)據(jù)包中TCP選項的序列號加上所述差值,比如接收到的客戶端發(fā)送給服務(wù)器的TCP選項的序列號C1,將調(diào)整為C1+K;
當流量管理設(shè)備接收到所述目標服務(wù)器向所述客戶端轉(zhuǎn)發(fā)的第二數(shù)據(jù)包時,將所述第二數(shù)據(jù)包中TCP選項的序列號減去所述差值。比如接收到的服務(wù)器發(fā)送給客戶端的TCP選項的序列號S1,將調(diào)整為S1-K。
依次區(qū)分出是客戶端方向的序列號還是服務(wù)器方向的序列號,進行調(diào)整,就能使得客戶端與服務(wù)器正常通信。
需要說明的是,若所述TCP選項中存在時間戳選項,則還要對相應(yīng)的時間戳回顯值進行調(diào)整,調(diào)整的具體方法與上述序列號的調(diào)整方法類似,在此不做贅述。進一步需要說明的是,只有轉(zhuǎn)發(fā)流量和本地流量需要調(diào)整TCP選項序列號和時間戳選項值,代理流量不需要,并且轉(zhuǎn)發(fā)流量和本地流量的調(diào)整方式是一致的。
在本實施例中,為保證網(wǎng)絡(luò)連接的安全,尤其是在防護SYN Flood攻擊時,流量管理設(shè)備代替客戶端和服務(wù)器完成握手,然而握手完成后服務(wù)器和客戶端看到的序列號并不一致,流量管理設(shè)備通過調(diào)整TCP選項序列號和時間戳值,能夠保證客戶端與服務(wù)器之間正常通信,且該通信支持TCP選項,從而能夠在防護SYN Flood攻擊的同時支持TCP選項,進一步提升了網(wǎng)絡(luò)傳輸?shù)男屎唾|(zhì)量。
進一步地,基于上述的實施例,所述TCP選項包括SACK選項和時間戳選項,所述向所述客戶端回送支持所述TCP選項的握手報文的步驟可以包括:
將支持所述SACK選項的信息編碼進所述時間戳選項的時間戳值中,并將所述時間戳值添加到回送給所述客戶端的握手報文中進行回送。
SACK即選擇性確認,是一種TCP優(yōu)化選項,通過SACK選項可以使TCP發(fā)送方只發(fā)送丟失的數(shù)據(jù)而不用發(fā)送后續(xù)全部數(shù)據(jù),提高了數(shù)據(jù)的傳輸效率;時間戳記錄了數(shù)據(jù)傳輸?shù)漠斍皶r間,能夠用來計算數(shù)據(jù)傳輸往返的時間。
以客戶端和流量管理設(shè)備之間的握手進行說明:當客戶端請求的TCP選項中包含SACK選項時,客戶端向流量管理設(shè)備發(fā)送SYN包(帶SACK選項),作為一種實施方式,若客戶端同時也支持時間戳選項,則流量管理設(shè)備可以將支持所述SACK選項的信息編碼進時間戳值中,并將所述時間戳值添加到回送給所述客戶端的握手報文中進行回送,即回送SYN+ACK包(帶SACK選項和時間戳選項),客戶端再返回ACK包。這樣,客戶端與流量管理設(shè)備建立的連接也就支持SACK選項和時間戳選項,提升了TCP數(shù)據(jù)傳輸?shù)男省?/p>
本發(fā)明還提供一種傳輸控制協(xié)議選項的處理裝置。
參照圖6,圖6為本發(fā)明傳輸控制協(xié)議選項的處理裝置第一實施例的功能模塊示意圖。所述裝置包括:
接收模塊10,用于接收客戶端發(fā)送的握手報文,所述握手報文攜帶TCP選項請求信息;
在本實施例中,接收模塊10接收客戶端發(fā)送的握手報文,即SYN包,該SYN包中包含了TCP選項請求信息,用于向接收方請求支持攜帶的TCP選項。
判斷模塊20,用于根據(jù)所述握手報文判斷流入流量管理設(shè)備的流量類型,所述流量類型包括代理流量和非代理流量;
接收模塊10在接收到客戶端發(fā)送的SYN包后,判斷模塊20對該SYN包進行解析,從而區(qū)分流入流量管理設(shè)備的流量類型,本實施例將流入流量管理設(shè)備的流量類型劃分為代理流量和非代理流量,其中非代理流量包括轉(zhuǎn)發(fā)流量和本地流量。
第一處理模塊30,用于若所述流量類型為代理流量,則向所述客戶端回送支持所述TCP選項的握手報文;
對于代理的流量,有兩條TCP連接需要建立:一條是客戶端與流量管理設(shè)備之間的TCP連接,一條是流量管理設(shè)備與服務(wù)器之間的TCP連接。
在本實施例中,流量管理設(shè)備具有TCP選項支持功能。參照圖2,圖2為本發(fā)明代理流量支持TCP選項的系統(tǒng)交互示意圖。若判斷模塊20判斷流量類型為代理流量,則第一處理模塊30向客戶端回送支持所述TCP選項的握手報文,即SYN+ACK包(帶TCP選項),客戶端再向流量管理設(shè)備返回ACK包(帶TCP選項),從而建立了客戶端與流量管理設(shè)備之間的TCP連接,且該TCP連接支持SYN包中攜帶的TCP選項。對于第二條TCP連接,由于服務(wù)器和客戶端之間沒有直接通信,因而無需考慮服務(wù)器否支持TCP選項,流量管理設(shè)備和服務(wù)器可以根據(jù)一般情況來進行三次握手,與正常通信沒有區(qū)別。
第二處理模塊40,用于若所述流量類型為非代理流量,則向所述客戶端回送支持所述TCP選項的握手報文,并向目標服務(wù)器協(xié)商是否支持所述TCP選項,若所述目標服務(wù)器不支持所述TCP選項,則向所述客戶端反饋協(xié)商結(jié)果。
對于非代理流量,以轉(zhuǎn)發(fā)流量為例,服務(wù)器與流量管理設(shè)備三次握手完成后,流量管理設(shè)備只保留一條TCP連接,即客戶端與服務(wù)器之間的連接,流量管理設(shè)備只起到數(shù)據(jù)轉(zhuǎn)發(fā)的作用。本地流量和轉(zhuǎn)發(fā)流量類似,也是只保留一條TCP連接,與轉(zhuǎn)發(fā)流量不同的是,客戶端訪問的是流量管理設(shè)備本地,此時根據(jù)內(nèi)核協(xié)議棧進行相應(yīng)處理即可。
若判斷模塊20判斷流量類型為非代理流量,則第二處理模塊40向客戶端回送支持所述TCP選項的握手報文,此外,第二處理模塊40還要向目標服務(wù)器協(xié)商是否支持客戶端請求的TCP選項,若服務(wù)器不支持,則向所述客戶端反饋不支持的信息;若服務(wù)器支持,則可以不做其他處理,在客戶端與服務(wù)器建立TCP連接之后,完成相應(yīng)的數(shù)據(jù)轉(zhuǎn)發(fā)功能即可,該TCP連接支持TCP選項。
需要說明的是,上述處理TCP選項的方法可應(yīng)用于正常的TCP連接過程,也可應(yīng)用于流量管理設(shè)備在防護SYN FLOOD攻擊的過程中,對于后者,當流量管理設(shè)備在較短時間內(nèi)檢測到大量客戶端發(fā)送的SYN包時,即判定受到了SYN洪水攻擊,隨即自動開啟SYN FLOOD防護功能,此時,流量管理設(shè)備需要對接收到的SYN包統(tǒng)一處理然后丟棄。具體地,所述裝置還包括:
檢測模塊201,用于檢測預設(shè)時長內(nèi)接收到的所述客戶端發(fā)送的握手報文的數(shù)量是否超過預設(shè)閾值;
校驗模塊202,用于若預設(shè)時長內(nèi)接收到的所述客戶端發(fā)送的握手報文的數(shù)量超過預設(shè)閾值,則基于cookie校驗機制,校驗所述客戶端是否合法;若所述客戶端不合法,則丟棄所述客戶端發(fā)送的握手報文;若所述客戶端合法,則判斷模塊根據(jù)所述握手報文判斷流入流量管理設(shè)備的流量類型。
當檢測模塊201在較短時間內(nèi)檢測到大量客戶端發(fā)送的SYN包時,即判定受到了SYN洪水攻擊,隨即流量管理設(shè)備自動開啟SYN FLOOD防護功能,此時,校驗模塊202可以基于cookie校驗機制,校驗所述客戶端是否合法。
cookie校驗機制,其原理在于,流量管理設(shè)備在接收到SYN包時,不分配一個專門的數(shù)據(jù)區(qū),而是根據(jù)這個SYN包計算出一個cookie值,并將該cookie值添加到回送給客戶端的SYN+ACK包中。
其中,cookie值即初始TCP序列號。流量管理設(shè)備可以按照預設(shè)的加密算法計算cookie值,比如,根據(jù)TCP SYN報文的TCP首部信息(尤指源IP地址、源端口號或本地時間),利用加密算法(如md5算法)計算出cookie值,使用該算法得到的cookie值是動態(tài)值,能夠使得攻擊者無法仿制出相同的cookie值,從而能夠保證TCP連接過程的可靠性。
之后,如果一個ACK包從客戶端返回,校驗模塊202將根據(jù)該ACK包中的cookie值校驗客戶端的合法性,若校驗成功,則將所述ACK報文的源IP地址標記為合法用戶,判斷模塊20再根據(jù)所述握手報文判斷流入流量管理設(shè)備的流量類型;否則,將所述ACK報文的源IP地址標記為攻擊方,并丟棄接收到的該IP地址的握手報文。由于不必保持等候ACK包的半連接狀態(tài),從而避免了服務(wù)器資源的大量占用,即防護了SYN FLOOD攻擊。
進一步地,參照圖3,圖3為本發(fā)明非代理流量不支持TCP選項的系統(tǒng)交互示意圖。基于上述的實施例,所述第二處理模塊40還用于:
在后續(xù)接收到所述客戶端發(fā)送的非代理流量類型的握手報文時,向所述客戶端回送不支持所述TCP選項的握手報文。
流量管理設(shè)備與服務(wù)器協(xié)商TCP選項時,首先第二處理模塊40構(gòu)造并向服務(wù)器發(fā)送SYN包(帶TCP選項),若服務(wù)器不支持TCP選項,則向流量管理設(shè)備回送SYN+ACK包(不帶TCP選項),流量管理設(shè)備回應(yīng)ACK包。至此,流量管理設(shè)備獲知服務(wù)器不支持TCP選項,并關(guān)閉非代理流量類型下的TCP選項支持功能。在后續(xù)接收到所述客戶端發(fā)送的非代理流量類型的握手報文時,即SYN包(帶TCP選項),向所述客戶端回送不支持所述TCP選項的握手報文,即SYN+ACK包(不帶TCP選項),客戶端回應(yīng)ACK包,之后,流量管理設(shè)備和服務(wù)器的握手也不會協(xié)商是否支持TCP選項,這樣客戶端與目標服務(wù)器建立的連接也就不支持TCP選項。
在本實施例中,接收模塊10接收客戶端發(fā)送的握手報文,所述握手報文攜帶TCP選項請求信息;判斷模塊20根據(jù)所述握手報文判斷流入流量管理設(shè)備的流量類型,所述流量類型包括代理流量和非代理流量;若所述流量類型為代理流量,則第一處理模塊30向所述客戶端回送支持所述TCP選項的握手報文;若所述流量類型為非代理流量,則第二處理模塊40向所述客戶端回送支持所述TCP選項的握手報文,并向目標服務(wù)器協(xié)商是否支持所述TCP選項,若所述目標服務(wù)器不支持所述TCP選項,則向所述客戶端反饋協(xié)商結(jié)果。通過上述方式,在防護SYN Flood攻擊過程中,流量管理設(shè)備在接收到客戶端發(fā)送的TCP選項請求信息時,首先統(tǒng)一回復支持TCP選項,若流入流量管理設(shè)備的流量為非代理流量,則流量管理設(shè)備還要以探測的方式與目標服務(wù)器協(xié)商TCP選項,并向客戶端進行相應(yīng)反饋,以使得客戶端調(diào)整其后續(xù)發(fā)送的握手報文。本發(fā)明能夠?qū)崿F(xiàn)流量管理設(shè)備在防護SYN Flood攻擊過程中對TCP選項進行合理處理,從而能夠提升網(wǎng)絡(luò)傳輸?shù)男屎唾|(zhì)量,提升用戶體驗。
進一步地,繼續(xù)參照圖6,所述第二處理模塊40還用于:
若所述目標服務(wù)器支持所述TCP選項,則在所述客戶端與所述目標服務(wù)器經(jīng)由所述流量管理設(shè)備進行通信時,對應(yīng)調(diào)整通信數(shù)據(jù)包中所述TCP選項的序列號,并完成所述數(shù)據(jù)包的轉(zhuǎn)發(fā)。
參照圖4,圖4為本發(fā)明非代理流量支持TCP選項的系統(tǒng)交互示意圖。
流量管理設(shè)備與服務(wù)器協(xié)商TCP選項時,首先構(gòu)造并向服務(wù)器發(fā)送SYN包(帶TCP選項),若服務(wù)器支持TCP選項,則向流量管理設(shè)備回送SYN+ACK包(帶TCP選項),流量管理設(shè)備回應(yīng)ACK包。至此,流量管理設(shè)備獲知服務(wù)器支持TCP選項,此時只需保留客戶端與服務(wù)器之間的一條TCP連接,且該TCP連接支持TCP選項。
在本實施例中,流量管理設(shè)備獲知到目標服務(wù)器支持TCP選項的信息后,保留客戶端與服務(wù)器之間的一條連接。由于之前流量代理設(shè)備是代替客戶端完成和服務(wù)器的握手,因此客戶端和目標服務(wù)器此時的序列號和時間戳值會存在一個差值,從而客戶端與服務(wù)器的TCP選項的序列號并不一致,如果不做調(diào)整,將導致通信無法正常進行,此時流量管理設(shè)備在進行后續(xù)的數(shù)據(jù)包轉(zhuǎn)發(fā)時,第二處理模塊40需要對應(yīng)調(diào)整數(shù)據(jù)包中TCP選項的序列號,再完成所述數(shù)據(jù)包的轉(zhuǎn)發(fā)。
具體地,參照圖7,圖7為圖6中第二處理模塊的細化功能模塊示意圖。所述第二處理模塊40還可以包括:
計算單元41,用于計算所述目標服務(wù)器與所述客戶端序列號的差值;
流量管理設(shè)備使用SYN Cookie方式進行SYN Flood防護時,在建立客戶端與服務(wù)器之間的連接后,客戶端與服務(wù)器序列號存在差值K,該差值K可以由計算單元41計算并保存。計算單元41可以記錄在之前握手過程中發(fā)送給客戶端的序列號C,及服務(wù)器發(fā)送給客戶端的序列號S,通過S減去C就可以得到差值K,即存在等式:K=S-C。
第一處理單元42,用于當接收到所述客戶端向所述目標服務(wù)器轉(zhuǎn)發(fā)的第一數(shù)據(jù)包時,將所述第一數(shù)據(jù)包中TCP選項的序列號加上所述差值;
第二處理單元43,用于當接收到所述目標服務(wù)器向所述客戶端轉(zhuǎn)發(fā)的第二數(shù)據(jù)包時,將所述第二數(shù)據(jù)包中TCP選項的序列號減去所述差值。
后續(xù)通信過程中,當流量管理設(shè)備接收到所述客戶端向所述目標服務(wù)器轉(zhuǎn)發(fā)的第一數(shù)據(jù)包時,第一處理單元42將所述第一數(shù)據(jù)包中TCP選項的序列號加上所述差值,比如接收到的客戶端發(fā)送給服務(wù)器的TCP選項的序列號C1,將調(diào)整為C1+K;
當流量管理設(shè)備接收到所述目標服務(wù)器向所述客戶端轉(zhuǎn)發(fā)的第二數(shù)據(jù)包時,第二處理單元43將所述第二數(shù)據(jù)包中TCP選項的序列號減去所述差值。比如接收到的服務(wù)器發(fā)送給客戶端的TCP選項的序列號S1,將調(diào)整為S1-K。
依次區(qū)分出是客戶端方向的序列號還是服務(wù)器方向的序列號,進行調(diào)整,就能使得客戶端與服務(wù)器正常通信。
需要說明的是,若所述TCP選項中存在時間戳選項,則第二處理模塊40還要對相應(yīng)的時間戳回顯值進行調(diào)整,調(diào)整的具體方法與上述序列號的調(diào)整方法類似,在此不做贅述。進一步需要說明的是,只有轉(zhuǎn)發(fā)流量和本地流量需要調(diào)整TCP選項序列號和時間戳選項值,代理流量不需要,并且轉(zhuǎn)發(fā)流量和本地流量的調(diào)整方式是一致的。
在本實施例中,為保證網(wǎng)絡(luò)連接的安全,尤其是在防護SYN Flood攻擊時,流量管理設(shè)備代替客戶端和服務(wù)器完成握手,然而握手完成后服務(wù)器和客戶端看到的序列號并不一致,第二處理模塊40通過調(diào)整TCP選項序列號和時間戳值,能夠保證客戶端與服務(wù)器之間正常通信,且該通信支持TCP選項,從而能夠在防護SYN Flood攻擊的同時支持TCP選項,進一步提升了網(wǎng)絡(luò)傳輸?shù)男屎唾|(zhì)量。
進一步地,基于上述的實施例,所述TCP選項包括SACK選項和時間戳選項,所述所述第一處理模塊30和所述第二處理模塊40還用于:
將支持所述SACK選項的信息編碼進所述時間戳選項的時間戳值中,并將所述時間戳值添加到回送給所述客戶端的握手報文中進行回送。
SACK即選擇性確認,是一種TCP優(yōu)化選項,通過SACK選項可以使TCP發(fā)送方只發(fā)送丟失的數(shù)據(jù)而不用發(fā)送后續(xù)全部數(shù)據(jù),提高了數(shù)據(jù)的傳輸效率;時間戳記錄了數(shù)據(jù)傳輸?shù)漠斍皶r間,能夠用來計算數(shù)據(jù)傳輸往返的時間。
以客戶端和流量管理設(shè)備之間的握手進行說明:當客戶端請求的TCP選項中包含SACK選項時,客戶端向流量管理設(shè)備發(fā)送SYN包(帶SACK選項),作為一種實施方式,若客戶端同時也支持時間戳選項,則第一處理模塊30或者第二處理模塊40可以將支持所述SACK選項的信息編碼進時間戳值中,并將所述時間戳值添加到回送給所述客戶端的握手報文中進行回送,即回送SYN+ACK包(帶SACK選項和時間戳選項),客戶端再返回ACK包。這樣,客戶端與流量管理設(shè)備建立的連接也就支持SACK選項和時間戳選項,提升了TCP數(shù)據(jù)傳輸?shù)男省?/p>
以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。