專利名稱:一種保持安全套接層會話持續性的方法及設備的制作方法
技術領域:
本發明涉及數據通信技術領域,具體涉及一種保持安全套接層會話持續性
的方法及^:備。
背景技術:
安全套接層(SSL, Security Socket Layer)協議在傳輸控制協議(TCP) 層之上建立了一條力。密連接,可以保證通訊雙方傳輸數據的私密性。SSL協議 的通訊過程分為兩個階段
一、 握手階段SSL的客戶端與服務器端通過SSL握手協議協商密鑰等 會話參數,建立SSL連接;
二、 數據傳輸階段SSL客戶端與服務器端使用協商出來的密鑰對通訊數 據進行加密,并傳送給對方;對方接收后會使用協商處出來的密鑰解密,得到 通訊數據。
由于建立SSL連接的握手過程涉及較多的復雜計算,所以SSL協議提供 了一種會話恢復機制,以快速恢復會話。通常情況下,使用會話恢復的次數要 遠遠多于新建連接的次數。會話恢復機制的流程如下
(1)在進行第一次通訊時,客戶端與服務器端執行完整的握手過程,協 商出會話密鑰,具體包含以下特殊的處理步驟
客戶端首先發送一個新建SSL連接請求報文(ClientHello報文),該報文 中的會話標識(session—id)字段為0,表示自己沒有緩存的會話參數,請求建 立新的會話連接;
SSL服務器會為新建立的SSL連接分配一個會話ID,并針對ClientHello 報文返回一個響應報文(ServerHello )。該報文中有一個session—id字段,用于 記錄服務器端為本次會話所分配的會話標識(ID)。根據SSL協議規定,會話 ID是一個32字節的隨機數,其構造完全由實現者自行定義。
6在客戶端與服務器端交互完ClientHello和ServerHello后,雙方就可以進 一步協商會話參數,建立SSL會話連接,這一過程較復雜、耗時較多,在此 介紹從略。
(2) 在完成一次數據傳送任務后,可以由客戶端或者服務器端發起斷開 SSL連接的操作,但通訊雙方仍可以在本地保留剛才使用過的會話參數。
(3) 當再次發起與服務器端的連接請求時,客戶端可以繼續使用仍在本 地保存的會話,在ClientHello報文中使用該會話的會話ID來填充session—id 字段,發起SSL連接恢復請求。服務器端接收到該SSL連接恢復請求后,在 本地的會話緩存中查找與該session—id相對應的會話記錄如果找到了 ,服務 器根據本地保存的該session—id的會話參數進行會話恢復,通訊雙方通過一個 簡單的驗證過程,就可以恢復會話的使用了,從而避免了再次建立SSL連接 所消耗的大量時間;如果會話ID無效,表明在服務器已不存在指定的會話記 錄了,服務器就會分配一個新的會話ID,并將該會話ID放入ServerHello報 文中返回,之后,通訊雙方執行新的完整的會話協商過程以建立SSL連接。
負載均衡(LB, Load Balance)是通過LB設備根據后臺服務器的負載情 況,將客戶端發來的請求均衡地分發給服務器進行處理,從而使得整個系統的 計算資源得到充分的利用。SLB (Site Load Balance)是指本地設備的負載均 衡,即LB設備和服務器處在同一個局域網中。SLB有網絡地址轉換(NAT, Network Address Translation)才莫式和直4妄^各由(DR, Direct-Routing)才莫式兩 種工作模式。
如圖l所示,NAT模式中,SLB設備對外提供一個可訪問的IP地址IPO。 后臺服務器有各自的IP地址IP1 IP3。 SLB設備對IP |艮文的處理過程如下 (1 ) SLB設備接收來自客戶端的目的地址為IPO的IP報文。
(2) SLB設備根據負載均衡算法,確定哪臺服務器適合處理此報文,比 如是服務器1。
(3) SLB設備將來自客戶端的IP報文的目的地址改寫為IPl,并通過路 由轉發出去。
(4 )服務器1接收到目的IP為IP1的報文,對其進行處理,生成響應報 文,該響應l艮文的目的IP為客戶端的IP地址,而源IP為本才幾的IP1 。(5)在服務器1上設置路由的默認網關為SLB設備。這樣,服務器1根 據路由將響應報文轉發給SLB設備。
(6 ) SLB設備對IP報文的源IP地址進行轉換,改寫為IP0。
(7 ) SLB設備將經過源地址轉換過的IP報文轉發給客戶端。 在上述負載均衡的實現過程中,SLB設備對客戶端和服務器之間的報文在 進行地址轉換處理之后再轉發,因此稱為NAT;漠式。
SLB的另一種工作模式為直接路由(DR, Direct-Routing)模式,如圖2 所示。SLB設備和后臺服務器一起構成了一個虛擬服務,對外提供可訪問的 IP地址IP0。其中,SLB設備上配置真實的IP地址IP0,以及與IPO相對應的 MAC地址MACO;服務器1 ~服務器3上只配置虛擬的IP服務地址IP0,即 服務器1 ~服務器3可以接收目的地址為IPO的IP報文,但并不響應外界對 IPO發出的地址解析協議(ARP, Address Resolution Protocol)請求。各服務器 有自己的MAC地址MAC1 ~ MAC3。如圖2所示,服務器和SLB設備都連接 在同一臺交換設備上。該交換設備是一臺三層交換設備,既可以進行二層交換, 又可以進行三層的路由轉發。DR模式下的負載均衡處理過程如下
(1)客戶端發送目的地址為IPO的IP報文。
(2 )交換設備收到上述IP報文后,會發出ARP請求,尋找IPO對應的 MAC地址。
(3)此時在服務器網段內,各服務器不響應上述ARP請求,只有SLB 設備會返回自己的應答,報告IPO對應的MAC地址為MAC0。交換設備學習 到此ARP表項IPO <—> MACO后,在后續的l艮文轉發過程中就可以不再重 復發送ARP請求了。
(4 )交換設備給IP報文加上目的MAC地址MACO后,就將報文轉發給 SLB設備。
(5 )SLB設備根據服務器的負載狀況,決定由哪臺服務器處理此IP報文, 比如是服務器1。
(6) SLB設備將IP報文的目的MAC地址改寫為服務器1的MAC地址 MAC1,然后SLB設備將報文發送給交換設備,交換設備根據目的MAC地址 將報文轉發給服務器1。(7) 服務器1接收目的IP為IPO的報文,對其進行處理。處理完后生成 響應報文,響應l艮文的目的IP為客戶端的IP,源IP為虛擬服務地址IP0。
(8) 在服務器上,配置默認網關為交換設備。這樣,服務器l返回的響 應報文就發送給了交換設備,由交換設備根據路由直接轉發給了客戶端。
上述流程中,服務器1返回的響應報文沒有經過SLB設備,而是通過交 換設備直接路由到客戶端,因此,被稱為DR模式。 以下說明TCP報文和SSL報文的負載均衡的特點
在通常的客戶端/服務器(C/S)應用中,客戶端通過TCP連接發送請求, 而服務器通過同一條TCP連接來返回響應。當客戶端和服務器端完成一次通 訊任務后,才會斷開TCP連接。在對TCP報文進行均衡處理時,通常要求保 持TCP連接的持續性,即將一條TCP連接分配到同一服務器上處理在TCP 連接活動期間,要求SLB設備能將來自同一個客戶端同一條TCP連接上的所 有報文都發送給同一臺服務器進行處理,這樣才能保證服務器處理業務的正確 性。由于一條TCP連接可以被五元組(目的IP,目的端口號,源IP,源端口 號,協議號)唯一標識。在TCP報文在經由IP層轉發被分片時,還可以根據 IP報頭中的報文ID來判斷IP報文屬于哪條TCP連接,從而可以根據TCP連 接與服務器之間的對應關系,將同一 TCP連接上的報文發送給同 一臺服務器。
SSL才艮文承載于TCP報文之中,TCP報文又承載于IP報文之中。SSL協 議以一個TCP服務的形式對外提供,使用固定的TCP服務端口。用戶也可以 自行配置SSL服務所使用的端口號。通過在SLB設備上配置說明SSL服務使 用的TCP端口號,從而SLB設備根據TCP報文的目的端口號就可以識別出一 個TCP/IP才艮文是否為SSL報文。在對SSL報文進行負載均衡處理時,SLB設 備需要分析SSL報文,了解會話過程,之后才能做出如何分發報文的判斷。 SSL記錄頭是明文的,接收者可以直接對其進行分析。SSL握手協議報文一 般是明文的,因為之前尚未協商出通訊密鑰。在數據傳輸階段,記錄層的負載 一般是加密的,無法直接進行分析。
在對SSL報文進行負載均衡處理時,同樣需要保持SSL報文的持續性。 對SSL會話來說,保持會話的持續性要求SLB設備將屬于同一 SSL會話的報 文轉發到同一臺服務器上。屬于同一 SSL會話的通訊過程包括新建立連接的通訊、以及通過SSL會話恢復而建立連接的通訊,這兩個通訊過程使用同一 組會話密鑰參數。在服務器群組中, 一個會話的參數只保存在其中的一臺服務
器上,所以要求SLB設備不但能將新建SSL連接持續性地分發給同 一臺服務 器,還要能將會話恢復建立的SSL連接分發給保存有原來會話參數的服務器。 否則,就會造成會話恢復失敗而重新建立連接,這將大大降低系統建立SSL 連接的效率。
現有技術中,可以采用TCP代理的方法實現SSL報文的負載均衡
SLB設備和服務器群組按照NAT模式組網,SLB設備作為TCP代理。首 先客戶端通過TCP的三次握手與SLB設備建立起TCP連接1。隨后,SLB設 備接收SSL握手報文并進行分析,對新建連接進行負載均衡處理,確定由哪 臺服務器負責處理。隨后,SLB設備通過TCP三次握手與所確定的后臺服務 器建立起新的TCP連接2,在本地保存TCP連接1和TCP連接2之間的映射 關系,轉發這兩個TCP連接之間的報文,實現客戶端與服務器之間的通訊。 但是,TCP代理方式效率不高,存在以下問題
(1 ) SLB設備成為通訊的瓶頸,負責轉發所有的通訊報文。 (2)要通過TCP連接收發應用層的報文,需要SLB設備在接收報文時 完成對TCP分片報文的重組;在通過IP層發送時,又要對TCP報文進行分片。
為了提高傳輸效率,SLB設備最好能對接收到的TCP報文直接轉發出去。 但是TCP連接1跟TCP連接2是不同的,兩者TCP報頭中的序列號是不一樣 的,現有技術又提出一種"TCP粘連"技術,通過SLB設備對收到的TCP報 文轉換其中的序列號,以提高轉發效率,如圖3所示,可以采用以下步驟
步驟1 ~ 3,客戶端通過TCP的三次握手與SLB設備建立起TCP連接1, 客戶端的初始序列號為X, SLB設備的初始序列號為Y;
步驟4 ~ 8, SLB設備接收ClientHello報文(新建SSL連接請求)后,選 擇服務器l,并通過三次握手與服務器1建立起TCP連接2。為了提高處理效 率,SLB設備向服務器1發送的TCP連接建立(SYN)使用的初始序列號與 客戶端發來的SYN報文中的一樣(X),服務器返回的初始序列號為Z。
這樣以后SLB設備只需要保存TCP連接1與連接2之間初始序列號的差 值Z-Y,在以后的收發的報文中對于來自TCP連接1的報文,將客戶端的確認號(ACK)加上這個差值再直接轉發到TCP連接2;對于來自TCP連接 2的報文,將服務器1的序列號(SN)減去這個差值再直接轉發到TCP連接 1即可。
為了保持SSL報文的持續性,現有技術釆用以下方法對報文進行分析轉
發
(1 )當收到的ClientHello報文中的會話ID為0時,SLB設備判斷出這 是一個新建SSL連接請求,于是根據負載均衡算法將此新建連接請求分配給 任何一臺合適的服務器,如服務器1去處理。
(2 ) SLB設備接收并分析服務器1返回的ServerHello報文,從中提取會 話ID,在本地保存一條映射表項SSL會話ID <—>服務器1
(3) 隨后SLB設備使用保持TCP連接持續性的方法(具體的可以通過 保存TCP連接與服務器之間的對應關系,根據該對應關系確定對應的服務 器),,以及前述的序列號轉換方法,將客戶端的報文持續發送到服務器1。
(4) 在客戶端與服務器1完成一次會話后,SSL連接和TCP連接就斷開 了 , TCP連接與服務器之間的對應關系也相應地被刪除。
(5) 當客戶端要再次與服務器端建立SSL連接時,會重新發送一個 ClientHello報文,其中的會話ID為原來的會話ID,表示請求恢復SSL連接。
(6 ) SLB設備截獲上述ClientHello報文,獲得要恢復使用的會話ID,查 詢本地保存的SSL會話ID映射表如果找到了,就將該報文轉發給原來的服 務器進行處理;否則重新分配一個服務器進行處理。
從以上所述可以看出,現有技術方案在實現保持SSL會話的持續性時, 需要維護會話ID和服務器之間的對應關系,這存在以下缺點
1 )SLB設備需要分析ServerHello報文,從中獲取會話ID,而對ServerHello 報文的分析需要占用SLB設備的處理器資源,增加SLB設備的工作負擔;
2)由于后臺服務器有多個,每個服務器在工作期間通常會分配多個會話 ID,因此,會話ID的數量通常都遠遠大于服務器的數量。SLB設備需要在內 存中保存每個會話ID和服務器之間的對應關系,顯然,保存該對應關系會占 用較多的內存資源;并且,在每新建一個SSL會話時,都要向該對應關系中 增加新的內容,因此,維護該對應關系也將增加SLB設備的工作負擔。同時,為了避免內存耗盡,SLB設備不得不對該對應關系進行老化,對其中長時間未 訪問的會話ID進行刪除,老化工作必然又會增加LB設備的工作負擔。
發明內容
本發明所要解決的技術問題是提供一種保持SSL會話持續性的方法及設 備,減少對SLB設備內存資源的占用,減輕SLB設備的工作負擔。
為解決上述技術問題,本發明提供方案如下
一種保持安全套接層SSL會話持續性的方法,包括
A,本地負載均衡SLB設備接收第一客戶端發送的攜帶有第一會話標識的 SSL連接恢復請求,所述第一會話標識中包含有第一服務器的設備標識;
B, SLB設備從所述SSL連接恢復請求中獲取第一服務器的設備標識,并 根據預存的服務器的設備標識和服務器地址之間的第一對應關系,確定第一服 務器的設備標識對應的第一服務器的地址,并將所述SSL連接恢復請求發送 至第一服務器;
C,第一服務器根據所述SSL連接恢復請求,恢復本服務器與第一客戶端 之間的SSL連接。
較佳的,上述方法中,所述第一對應關系是根據各服務器預先配置的設備 標識和地址,在SLB設備上手工配置并保存的;或者是SLB設備根據接收到 的各服務器的地址以及本SLB設備為各服務器所分配的設備標識,自動建立 并保存的。
較佳的,上述方法中,所述步驟A之前還包括
SLB設備接收第一客戶端發送的新建SSL連接請求,根據預定的負載均 衡算法從服務器群組中選擇出第一服務器,并將所述新建SSL連接請求發送 至第一服務器;
第一服務器根據所述新建SSL連接請求,建立本服務器與第一客戶端之 間的第一 SSL連接,為第一 SSL連接分配包含有自身設備標識的第一會話標 識,并向第"客戶端返回攜帶有所述第一會話標識的第一響應報文。
較佳的,上述方法中,SLB設備和服務器群組中的各服務器都連接到同一 個交換設備,SLB設備和服務器群組中的各服務器之間都建立有控制通道;所述新建SSL連接請求是通過第 一客戶端與SLB設備之間的第一 TCP連 接發送的;在選擇出第一服務器之后,SLB設備進一步通過所述控制通道將第 一 TCP連接的狀態信息和所述新建SSL連接請求發送給第一服務器;
第一服務器進一步接收并維護第一TCP連接的狀態信息,并根據第一TCP 連接的狀態信息,設置所述第一響應報文中的對應信息,并將所述第一響應報 文通過所述交換設備發送至第 一客戶端。
較佳的,上述方法中,在選擇出第一服務器之后,SLB設備進一步保存第 一 TCP連接與第一服務器之間的第二對應關系,并根據第二對應關系,將后 續來自所述第一 TCP連接的所有報文都轉發至第一服務器。
6.如權利要求5所述的方法,其特征在于,
所述SSL連接恢復請求是通過第一客戶端與SLB設備之間的第二 TCP連 接發送的;在確定第一服務器的設備標識對應的第一服務器的地址之后,SLB 設備進一步通過所述控制通道將第二 TCP連接的狀態信息和所述SSL連接恢 復請求發送至第一服務器;
第一服務器進一步接收并維護第二 TCP連接的狀態信息,生成所述SSL 連接恢復請求的第二響應報文,并根據第二 TCP連接的狀態信息,設置第二 響應報文中的對應信息,并將所述第二響應報文通過所述交換設備發送至第一 客戶端。
較佳的,上述方法中,在確定第一服務器的設備標識對應的第一服務器的 地址之后,SLB設備進一步保存第二 TCP連接與第一服務器之間的第三對應 關系,并根據第三對應關系,將后續來自所述第二 TCP連接的所有報文都轉 發至第一服務器。
本發明還提供了一種本地負載均衡SLB設備,包括
接收單元,用于接收第一客戶端發送的攜帶有第一會話標識的SSL連接 恢復請求,所述第一會話標識中包含有第一服務器的設備標識;
服務器選擇單元,用于從所述SSL連接恢復請求中獲取第一服務器的設 備標識,并根據預存的服務器的設備標識和服務器地址之間的第一對應關系, 確定第 一服務器的設備標識對應的第 一服務器的地址;
轉發單元,用于根據所述服務器選擇單元確定的第一服務器的地址,將所述SSL連接恢復請求發送至第一服務器。
較佳的,上述的SLB設備還包括
第 一對應關系保存單元,用于接收并保存外部輸入的所述第 一對應關系; 或者用于根據本SLB設備接收到的各服務器的地址以及本SLB設備為各服務 器所分配的設備標識,建立并保存所述第一對應關系。
較佳的,上述的SLB設備中,
所述接收單元,還用于接收第一客戶端發送的新建SSL連接請求;
所述服務器選擇單元,還用于在接收到所述新建SSL連接請求后,根據 預定的負載均衡算法從服務器群組中選擇出第一服務器;
所述轉發單元,還用于將所述新建SSL連接請求發送至所述服務器選擇 單元選擇出的第一服務器。
較佳的,上述的SLB設備中,
所述接收單元,進一步用于建立與第一客戶端之間的第一 TCP連接,通 過第一 TCP連接接收所述新建SSL連接請求;
所述轉發單元,進一步用于通過本SLB設備和第一服務器之間的控制通 道,將所述新建SSL連接請求和第一 TCP連接的狀態信息發送給第一服務器; 以及在所述服務器選擇單元選擇出第一服務器之后,進一步保存第一 TCP連 接與第一服務器之間的第二對應關系,并根據第二對應關系,將后續來自所述 第一 TCP連接的所有報文都轉發至第一服務器。
較佳的,上述的SLB設備中,
所述接收單元,進一步用于建立與第一客戶端之間的第二 TCP連接,通 過第二 TCP連接接收所述SSL連接恢復請求;
所述轉發單元,進一步用于通過本SLB設備和第一服務器之間的控制通 道,將所述SSL連接恢復請求和第二 TCP連接的狀態信息發送給第一服務器; 以及在所述服務器選擇單元確定出第 一服務器的設備標識對應的第 一服務器 的地址之后,進一步保存第二 TCP連接與第一服務器之間的第三對應關系, 并根據第三對應關系,將后續來自所述第二 TCP連接的所有報文都轉發至第 一服務器。
本發明還提供了一種服務器,包括接收單元,用于接收SLB設備轉發的來自第一客戶端的SSL連接恢復請
求;
SSL處理單元,用于根據所述SSL連接恢復請求,恢復本服務器與第一 客戶端之間的SSL連接。
較佳的,上述服務器中,所述接收單元,還用于接收SLB設備轉發的來 自第一客戶端的新建SSL連接請求;
所述SSL處理單元,還用于根據所述新建SSL連接請求,建立本服務器 與第 一客戶端之間的第一 SSL連接,為第一 SSL連接分配包含有自身設備標 識的第一會話標識,并生成攜帶有所述第一會話標識的第一響應報文;
所述服務器還包括
發送單元,用于將所述第一響應報文發送給第一客戶端。 較佳的,上述服務器中,所述接收單元,進一步用于通過本服務器與SLB 設備之間的控制通道,接收所述新建SSL連接請求和第一 TCP連接的狀態信 息,所述第一 TCP連接是第一客戶端與SLB設備之間發送所述新建SSL連接 請求的TCP連接;
所述發送單元,進一步用于維護所述第一 TCP連接的狀態信息,并根據 第一 TCP連接的狀態信息,設置所述第一響應報文中的對應信息;
所述SSL處理單元,還用于處理SLB設備轉發的來自所述第一 TCP連接 的報文。
較佳的,上述服務器中,所述接收單元,進一步用于通過本服務器與SLB 設備之間的控制通道,接收所述SSL連接恢復請求和第二 TCP連接的狀態信 息,所述第二TCP連接是第一客戶端與SLB設備之間發送所述SSL連接恢復 請求的TCP連接;
所述SSL處理單元,還用于生成所述SSL連接恢復請求的第二響應報文, 以及用于處理SLB設備轉發的來自所述第二 TCP連接的報文;
所述發送單元,進一步用于維護所述第二 TCP連接的狀態信息,并根據 第二 TCP連接的狀態信息,設置所述第二響應報文中的對應信息。
從以上所述可以看出,本發明提供的保持SSL會話持續性的方法及設備, 具有以下有益效果1 ) SLB設備不需要分析ServerHello報文,從而可以減輕SLB設備的工 作負擔。
2 ) SLB設備也無需保持SSL會話的會話ID和服務器之間的對應關系, 而只需保存較為簡單的設備ID與服務器之間的對應關系。由于負載均衡系統 中的服務器的數量穩定且有限,因此,保存設備ID與服務器之間的對應關系 通常只需要較小的內存空間。本發明所保存的對應關系不需要老化操作,并且 由于該對應關系具有很好的穩定性,在服務器群組不發生變化的情況下,無需 維護操作。因此,本發明可以節約SLB設備的內存資源,減輕SLB設備的工 作負擔。
3)最后,由于本發明中SLB設備無需截獲并分析ServerHello報文,因 此可以在采用DR模式的SSL報文負載均衡的情況下保持SSL會話的持續性, 而DR模式的負載均衡通常能夠達到較高的報文轉發性能,因此,本發明可以 在保持SSL會話持續性的同時達到較高的報文轉發性能。
圖1為現有技術的NAT模式的負載均衡系統的示意圖2為現有技術的DR模式的負載均衡系統的示意圖3為現有技術的SLB設備對TCP報文序列號的轉換示意圖4為TCP遷移技術的應用環境示意圖5為TCP遷移技術對應用層報文的處理示意圖6為本發明實施例所述保持SSL會話持續性的方法流程圖7為本發明實施例所述SLB設備的結構示意圖8為本發明實施例所述服務器的結構示意圖。
具體實施例方式
本發明的主要思想是通過在SSL會話的會話ID中攜帶服務器設備ID 的信息,在SLB設備上配置服務器的設備ID和服務器地址之間的對應關系, 從而在后續的SSL會話恢復時SLB設備根據會話ID中的設備ID就可以選擇 對應的服務器進行SSL會話恢復。雖然服務器群組可能分配很多個會話ID,但服務器群組中所包括的服務器的數目是固定的且有限的,因此,相對于現有 技術,保存服務器的設備ID和服務器地址之間的對應關系只需要很小的內存
資源且無需老化等維護操作,從而可以節約內存資源和減輕SLB設備工作負
擔。以下通過附圖結合具體實施例對本發明作進一步說明。
根據背景技術中的分析,現有技術在實現保持SSL會話的持續性時,需 要通過SLB設備分析ServerHello報文,提取其中的會話ID。由于DR模式的 SSL報文的負載均衡中,服務器返回的ServerHello報文被發送到默認網關交 換設備上,由交換設備直接路由到客戶端,因此,SLB設備不能截獲ServerHello 報文,從而現有技術無法在DR模式下保持SSL會話的持續性。
在NAT模式中,來自客戶端和服務器的報文都經由SLB設備轉發,SLB 設備成為報文轉發的瓶頸。而在DR模式中,服務器返回的報文不通過SLB 設備,而是通過交換設備直接傳送給了客戶端。在一般情況下,進行二、三層 報文轉發的交換設備可以實現較高的轉發性能。所以相對而言,DR模式的報 文轉發性能較高。本發明無需分析ServerHello報文,可以在DR模式下保持 SSL會話的持續性,同時達到較好的報文轉發性能。為了更好的理解本實施例, 這里首先對TCP遷移技術進行簡單介紹。
TCP遷移技術的系統的組網如圖4所示,TCP遷移技術包括
1、 準備階段
如圖4所示,SLB設備與服務器群組按照DR模式組網。整個群組對外公 開的服務地址為IP0。在LB上配置真實的IP地址IPO和IP_0;各服務器除了 配置一個虛擬服務地址IPO以外,還配置一個真實的IP地址,如IP1 IP3, 用于內部通訊。SLB設備與群組內各服務器之間建立起一條控制通道(如圖4 中的虛線雙向箭頭所示),比如一條一直不斷開的TCP常連接,用于SLB設 備與各服務器之間傳遞控制信息。
2、 對應用層^^艮文的負載均衡處理 如圖5所示,通訊過程如下
步驟1 ~3,通過三次握手,客戶端與SLB設備之間建立起了 TCP連接。 步驟4,客戶端向服務器端發送應用層服務請求報文;SLB設備分析應用 層服務請求報文,根據負載情況,確定一個合適的服務器來處理此請求,比如是服務器1。
步驟5,通過控制通道,SLB設備將與客戶端建立的TCP連接的狀態信 息同步給月良務器l。同步的信息包括TCP連接的源IP、源端口號、目的IP、 目的端口號、收發雙方當前的TCP序列號,以及應用層請求報文。服務器1 建立新的TCP控制塊,按照SLB設備同步過來的狀態信息進行設置。并且由 服務器上的應用層模塊處理應用層請求報文。處理完應用層請求報文后,服務 器向客戶端返回應答報文。由于采用DR模式,此報文將通過交換設備直接轉 發給客戶端,不經過SLB設備。
后續由客戶端發送來的應用層報文,由于目的IP為IPO,故仍會到達SLB 設備。SLB設備采用保持TCP連接持續性的方法,將后續報文轉發給了服務 器1。而服務器1的后續報文仍然通過交換設備轉發給了客戶端。
上述這種通過同步TCP連接的狀態,實現TCP連接被轉移到另 一臺設備 上去處理的方法,被稱為"TCP遷移"。
本實施例以基于DR模式的TCP遷移技術為例進行說明。根據SSL協議, 會話ID是一個32字節的隨機數,ID值的構造可以由實現者自行定義。因此, 本實施例中在會話ID中攜帶服務器的設備ID,該設備ID是服務器群組中唯 一標識該服務器的標識。例如,在會話ID的32個字節中選擇出特定字節部分 (如第1個字節)用于保存設備ID,服務器在為SSL會話分配會話ID時,該 特定字節部分的內容為服務器自身的設備ID,其它字節內容可以由服務器自 行分配。
如圖6所示,本實施例所述保持SSL會話持續性的方法包括以下步驟 步驟601,通過TCP三次握手,客戶端與SLB設備之間建立起了第一 TCP 連接。
步驟602,客戶端通過第一 TCP連接發送新建SSL連接請求(ClientHello 報文),該報文中的會話ID為0。
步驟603, SLB設備分析ClientHello報文,根據會話ID為0,判斷出這 是一個新建SSL連接請求。SLB設備根據預定的負載均衡算法,選擇出一個 合適的服務器來處理此請求,比如是服務器l,同時,SLB設備在本地保存第 一 TCP連接和服務器1之間的對應關系。本步驟中,可以利用現有技術中已有的負載均衡算法,選擇服務器處理新 建SSL連接請求。
步驟604,通過控制通道,SLB設備將ClientHello報文和第一TCP連接 的狀態信息同步給服務器1。所述狀態信息包括第一TCP連接的源IP、源 端口號、目的IP、目的端口號、收發雙方當前的TCP序列號。這里,第一TCP 連接的源IP是SLB設備的IP地址,源端口號是SLB設備對應于該第一 TCP 連接的端口號,目的IP是客戶端的IP地址,目的端口號是客戶端對應于該第 一TCP連接的目的端口。
步驟605,服務器1建立新的TCP控制塊,按照SLB設備同步過來的第 一 TCP連接的狀態信息設置該TCP控制塊,通過TCP控制塊維護第一 TCP 連接的狀態信息,從而將第一 TCP連接的端點從SLB設備遷移到服務器1, 即服務器替代SLB設備作為第一 TCP連接中對應于客戶端的端點,對第一 TCP連接上的來自客戶端的報文進行處理并返回響應報文。對于其中的 ClientHello報文,由服務器1上的SSL模塊來處理。
步驟606,服務器1上的SSL模塊處理完ClientHello報文后,為新建立 的SSL連接分配一個包含服務器1自身設備ID的會話ID,并生成ServerHello 報文,該報文中攜帶有所分配的會話ID;并根據TCP控制塊中的第一TCP連 接的狀態信息設置ServerHello報文的TCP頭和IP頭中的對應信息具體包括 設置TCP序列號、源/目的IP地址、源/目的端口號,其中,ServerHello報文 的目的IP是客戶端的IP地址,目的端口號是客戶端對應于第一 TCP連接的 端口號,源IP是SLB設備的IP地址(即整個系統的虛擬服務IP地址,對應 于圖4中的IP0),源端口號是SLB設備對應于第一TCP連接的端口號,TCP 序列號為收發雙方當前的序列號;由于采用DR模式,該ServerHello報文被 發送到服務器1的默認網關(交換設備),再由交換設備根據路由將該報文直 接轉發給客戶端,不經過SLB設備。
在所述新建SSL連接請求之后,后續由客戶端發送來的SSL協議報文, 由于目的IP地址為SLB設備的IP地址,故仍會到達SLB設備。SLB設備采 用保持TCP連接持續性的方法,對于后續來自第一 TCP連接上接收到的所有 報文,轉發到第一 TCP連接對應的服務器1,具體的可以是將該報文的目的MAC地址改寫為服務器1的MAC地址,然后將該報文發送給交換設備,交 換設備根據目的MAC地址將報文轉發給服務器1。而服務器1的后續的SSL 協議報文則仍然通過交換設備直接路由至客戶端。在客戶端與服務器端交互完 ClientHello和ServerHello后,雙方就可以進一步協商會話參數,建立SSL會 話連接。
在客戶端與服務器端完成一次SSL會話后,SSL連接和TCP連接就斷開 了 , SLB設備同時會刪除先前保存的第一 TCP連接與服務器1之間的對應關 系。
步驟607,當客戶端想要再次與服務器端建立SSL連接時,需要再通過 TCP的三次握手與SLB設備建立起第二 TCP連接,并通過該第二 TCP連接重 新發送一個SSL連接恢復請求(ClientHello報文),其中的會話ID為先前分 配的會話ID。
步驟608, SLB設備在本地保存有服務器設備ID和服務器地址之間的對 應關系表,所述服務器地址是服務器的MAC地址;SLB設備接收到上述SSL 連接恢復請求后,獲得要恢復使用的SSL連接的會話ID,根據該會話ID中包 含的設備ID,查詢本地保存的對應關系表如果找到了與該設備ID對應的服 務器地址,如服務器1的MAC地址,則通過控制通道,SLB設備將ClientHello 報文和第二TCP連接的狀態信息同步給服務器1,該狀態信息包括第二TCP 連接的源IP、源端口號、目的IP、目的端口號、收發雙方當前的TCP序列號, 并且在本地保存第二 TCP連接和服務器1之間的對應關系,然后進入步驟609; 如果沒找到對應的服務器,則重新分配一個服務器進行處理,接下來的流程同 上述步驟603 ~步驟606。
這里,SLB設備上保存的服務器設備ID和服務器地址之間的所述對應 關系,可以按照以下方式建立
(1 )如果SLB設備與服務器之間彼此獨立,可以預先在每個服務器處分 別配置該服務器地址和設備ID,然后在SLB設備上手工配置并保存系統中所 有的服務器設備ID與服務器地址之間的對應關系;
(2 )如果SLB設備與服務器之間構成集群,則可以通過私有的集群協議, 服務器在加入集群時,向SLB設備報告自己的地址;SLB設備接收各服務器的地址,為各服務器分配設備ID,并同時保存該服務器設備ID與服務器地址 之間的對應關系。
步驟609,服務器1建立新的TCP控制塊,按照SLB設備同步過來的狀 態信息進行設置,并由服務器上的SSL模塊來處理SSL連接恢復請求,在這 里應該進行會話恢復的處理在本地會話緩存中查找與其中會話ID相對應的 會話參數,并根據找到的會話參數進行會話恢復,恢復SSL會話。
在所述SSL連接恢復請求之后,SLB設備根據本地保存第二 TCP連接和 服務器l之間的對應關系,將后續來自所述第二TCP連接的所有報文都轉發 至服務器1。
本實施例在DR模式下保持了 SSL報文的持續性。與現有技術相比,本 實施例不需要分析ServerHello報文,從而可以減輕SLB設備的工作負擔;本 實施例無需保持SSL會話的會話ID和服務器之間的對應關系,而只需保存較 為簡單的設備ID與服務器之間的對應關系。由于負載均衡系統中的服務器的 數量穩定且有限,因此,保存設備ID與服務器之間的對應關系通常只需要較 小的內存空間。該對應關系不需要老化操作,并且,該對應關系具有很好的穩 定性,在服務器群組不發生變化的情況下,無需變動。最后,由于在DR模式 中,服務器返回的報文不通過SLB設備,而是通過交換設備直接傳送給了客 戶端。而通常進行二、三層報文轉發的交換設備可以實現較高的轉發性能。本 實施例可以獲得較高的報文轉發性能。
基于上述保持SSL會話持續性的方法,本實施例還相應提供了一種本地 負載均衡SLB設備和服務器。
本實施例所述SLB設備,包括
接收單元,用于"l妄收第一客戶端發送的攜帶有第一會話標識的SSL連接 恢復請求,所述第一會話標識中包含有第一服務器的設備標識;
服務器選擇單元,用于從所述SSL連接恢復請求中獲取第一服務器的設 備標識,并根據預存的服務器的設備標識和服務器地址之間的第一對應關系, 確定第 一服務器的設備標識對應的第 一服務器的地址;
轉發單元,用于根據所述服務器選擇單元確定的第一服務器的地址,將所 述SSL連接恢復請求發送至第一服務器。這里,SLB設備還可以包括有第一對應關系保存單元,用于接收并保存外 部輸入的所述第一對應關系;或者用于根據本SLB設備接收到的各服務器的 地址以及本SLB設備為各服務器所分配的設備標識,建立并保存所述第一對 應關系。
這里,SLB設備也可以接收新建SSL連接請求,并為客戶端分配合適的 服務器,此時,所述接收單元,還用于接收第一客戶端發送的新建SSL連接 請求;所述服務器選擇單元,還用于在接收到所述新建SSL連接請求后,根 據預定的負載均衡算法從服務器群組中選擇出第一服務器;所述轉發單元,還 用于將所述新建SSL連接請求發送至所述服務器選擇單元選擇出的第一服務 器。
這里,所述接收單元,還可以進一步用于建立與第一客戶端之間的第一 TCP連接,通過第一TCP連接接收所述新建SSL連接請求;所述轉發單元, 進一步用于通過本SLB設備和第一服務器之間的控制通道,將所述新建SSL 連接請求和第一 TCP連接的狀態信息發送給第一服務器;以及在所述服務器 選擇單元選擇出第一服務器之后,進一步保存第一 TCP連接與第一服務器之 間的第二對應關系,并根據第二對應關系,將后續來自所述第一 TCP連接的 所有報文都轉發至第一服務器。這里,所述后續是指在接收到所述新建SSL 連接請求之后。
這里,所述接收單元,還可以進一步用于建立與第一客戶端之間的第二 TCP連接,通過第二TCP連接接收所述SSL連接恢復請求;所述轉發單元, 還可以進一步用于通過本SLB設備和第 一服務器之間的控制通道,將所述SSL 連接恢復請求和第二 TCP連接的狀態信息發送給第一服務器;以及在所述服 務器選擇單元確定出第 一服務器的設備標識對應的第 一服務器的地址之后,進 一步保存第二 TCP連接與第一服務器之間的第三對應關系,并根據第三對應 關系,將后續來自所述第二TCP連接的所有報文都轉發至第一服務器,這里, 所述后續是指在接收到所述SSL連接恢復請求之后。
本實施例所述的服務器,包括
接收單元,用于接收SLB設備轉發的來自第一客戶端的SSL連接恢復請
求;SSL處理單元,用于根據所述SSL連接恢復請求,恢復本服務器與第一 客戶端之間的SSL連接。
這里,服務器還可以接收新建SSL連接請求,并為新建的SSL會話分配 會話ID,此時,所述接收單元,還用于接收SLB設備轉發的來自第一客戶端 的新建SSL連接請求;所述SSL處理單元,還用于根據所述新建SSL連接請 求,建立本服務器與第一客戶端之間的第一SSL連接,為第一SSL連接分配 包含有自身設備標識的第一會話標識,并生成攜帶有所述第一會話標識的第一 響應報文;所述服務器還包括
發送單元,用于將所述第一響應報文發送給第一客戶端。
這里,所述接收單元,還可以進一步用于通過本服務器與SLB設備之間 的控制通道,接收所述新建SSL連接請求和第一TCP連接的狀態信息,所述 第一 TCP連接是第一客戶端與SLB設備之間發送所述新建SSL連接請求的 TCP連接;所述發送單元,進一步用于維護所述第一TCP連接的狀態信息, 并根據第一 TCP連接的狀態信息,設置所述第一響應報文中的對應信息;所 述SSL處理單元,還用于處理SLB設備轉發的來自所述第一 TCP連接的報文。
這里,所述接收單元,還可以進一步用于通過本服務器與SLB設備之間 的控制通道,接收所述SSL連接恢復請求和第二TCP連接的狀態信息,所述 第二 TCP連接是第一客戶端與SLB設備之間發送所述SSL連接恢復請求的 TCP連接;所述SSL處理單元,還用于生成所述SSL連接恢復請求的第二響 應報文,以及用于處理SLB設備轉發的來自所述第二TCP連接的報文;所述 發送單元,進一步用于維護所述第二TCP連接的狀態信息,并才艮據第二TCP 連接的狀態信息,設置所述第二響應報文中的對應信息。
從以上所述可以看出,通過在SLB設備處保存服務器設備ID與服務器地 址之間的對應關系,根據SSL連接恢復請求中的設備ID來選擇對應的服務器 來處理SSL報文,從而保持了 SSL會話的持續性。顯然,在SLB設備與服務 器群組按照NAT模式組網的情況下,本發明也完全可以適用。
本發明所述保持SSL會話持續性的方法及設備,并不僅僅限于說明書和 實施方式中所列運用,它完全可以被適用于各種適合本發明之領域,對于熟悉 本領域的人員而言可容易地實現另外的優點和進行修改,因此在不背離權利要求及等同范圍所限定的一4殳;f既念的精神和范圍的情況下,本發明并不限于特定 的細節、代表性的設備和這里示出與描述的圖示示例。
權利要求
1.一種保持安全套接層SSL會話持續性的方法,其特征在于,包括A,本地負載均衡SLB設備接收第一客戶端發送的攜帶有第一會話標識的SSL連接恢復請求,所述第一會話標識中包含有第一服務器的設備標識;B,SLB設備從所述SSL連接恢復請求中獲取第一服務器的設備標識,并根據預存的服務器的設備標識和服務器地址之間的第一對應關系,確定第一服務器的設備標識對應的第一服務器的地址,并將所述SSL連接恢復請求發送至第一服務器;C,第一服務器根據所述SSL連接恢復請求,恢復本服務器與第一客戶端之間的SSL連接。
2. 如權利要求l所述的方法,其特征在于,所述第一對應關系是根據各服務器預先配置的設備標識和地址,在SLB 設備上手工配置并保存的;或者是SLB設備根據接收到的各服務器的地址以 及本SLB設備為各服務器所分配的設備標識,自動建立并保存的。
3. 如權利要求l所述的方法,其特征在于,所述步驟A之前還包括 SLB設備接收第一客戶端發送的新建SSL連接請求,根據預定的負載均衡算法從服務器群組中選擇出第一服務器,并將所述新建SSL連接請求發送 至第一服務器;第一服務器根據所述新建SSL連接請求,建立本服務器與第一客戶端之 間的第一 SSL連接,為第一 SSL連接分配包含有自身設備標識的第 一會話標 識,并向第一客戶端返回攜帶有所述第一會話標識的第一響應報文。
4. 如權利要求3所述的方法,其特征在于,SLB設備和服務器群組中的 各服務器都連接到同一個交換設備,SLB設備和服務器群組中的各服務器之間 都建立有控制通道;所述新建SSL連接請求是通過第 一客戶端與SLB設備之間的第一 TCP連 接發送的;在選擇出第一服務器之后,SLB設備進一步通過所述控制通道將第 一 TCP連接的狀態信息和所述新建SSL連接請求發送給第一服務器;第 一服務器進一步接收并維護第一 TCP連接的狀態信息,并根據第一 TCP連接的狀態信息,設置所述第一響應報文中的對應信息,并將所述第一響應報 文通過所述交換設備發送至第 一客戶端。
5. 如權利要求4所述的方法,其特征在于,在選擇出第一服務器之后,SLB設備進一步保存第一 TCP連接與第一服 務器之間的第二對應關系,并根據第二對應關系,將后續來自所述第一TCP 連接的所有報文都轉發至第 一服務器。
6. 如權利要求5所述的方法,其特征在于,所述SSL連接恢復請求是通過第一客戶端與SLB設備之間的第二 TCP連 接發送的;在確定第一服務器的設備標識對應的第一服務器的地址之后,SLB 設備進一步通過所述控制通道將第二 TCP連接的狀態信息和所述SSL連接恢 復請求發送至第一服務器;第一服務器進一步接收并維護第二 TCP連接的狀態信息,生成所述SSL 連接恢復請求的第二響應報文,并根據第二 TCP連接的狀態信息,設置第二 響應報文中的對應信息,并將所述第二響應報文通過所述交換設備發送至第一 客戶端。
7. 如權利要求6所述的方法,其特征在于,在確定第一服務器的設備標識對應的第一服務器的地址之后,SLB設備進 一步保存第二 TCP連接與第一服務器之間的第三對應關系,并根據第三對應 關系,將后續來自所述第二 TCP連接的所有報文都轉發至第一服務器。
8. —種本地負載均衡SLB設備,其特征在于,包括接收單元,用于接收第一客戶端發送的攜帶有第一會話標識的SSL連接 恢復請求,所述第一會話標識中包含有第一服務器的設備標識;服務器選擇單元,用于從所述SSL連接恢復請求中獲取第一服務器的設 備標識,并根據預存的服務器的設備標識和服務器地址之間的第一對應關系, 確定第一服務器的設備標識對應的第一服務器的地址;轉發單元,用于根據所述服務器選擇單元確定的第一服務器的地址,將所 述SSL連接恢復請求發送至第一服務器。
9. 如權利要求8所述的SLB設備,其特征在于,還包括第 一對應關系保存單元,用于接收并保存外部輸入的所述第 一對應關系;或者用于根據本SLB設備接收到的各服務器的地址以及本SLB設備為各服務 器所分配的設備標識,建立并保存所述第一對應關系。
10. 如權利要求8所述的SLB設備,其特征在于, 所述接收單元,還用于接收第一客戶端發送的新建SSL連接請求; 所述服務器選擇單元,還用于在接收到所述新建SSL連接請求后,根據預定的負載均衡算法從服務器群組中選擇出第一服務器;所述轉發單元,還用于將所述新建SSL連接請求發送至所述服務器選擇 單元選擇出的第一服務器。
11. 如權利要求IO所述的SLB設備,其特征在于,所述接收單元,進一步用于建立與第一客戶端之間的第一 TCP連接,通 過第一 TCP連接接收所述新建SSL連接請求;所述轉發單元,進一步用于通過本SLB設備和第一服務器之間的控制通 道,將所述新建SSL連接請求和第一 TCP連接的狀態信息發送給第一服務器; 以及在所述服務器選擇單元選擇出第一服務器之后,進一步保存第一 TCP連 接與第一服務器之間的第二對應關系,并根據第二對應關系,將后續來自所述 第一 TCP連接的所有報文都轉發至第一服務器。
12. 如權利要求11所述的SLB設備,其特征在于,所述接收單元,進一步用于建立與第一客戶端之間的第二 TCP連接,通 過第二 TCP連接接收所述SSL連接恢復請求;所述轉發單元,進一步用于通過本SLB設備和第一服務器之間的控制通 道,將所述SSL連接恢復請求和第二 TCP連接的狀態信息發送給第一服務器; 以及在所述服務器選擇單元確定出第一服務器的設備標識對應的第一服務器 的地址之后,進一步保存第二 TCP連接與第 一服務器之間的第三對應關系, 并根據第三對應關系,將后續來自所述第二 TCP連接的所有報文都轉發至第 一服務器。
13. —種服務器,其特征在于,包括接收單元,用于接收SLB設備轉發的來自第一客戶端的SSL連接恢復請求;SSL處理單元,用于根據所述SSL連接恢復請求,恢復本服務器與第一客戶端之間的SSL連接。
14. 如權利要求13所述的服務器,其特征在于,所述接收單元,還用于接收SLB設備轉發的來自第一客戶端的新建SSL 連接:清求;所述SSL處理單元,還用于根據所述新建SSL連接請求,建立本服務器 與第一客戶端之間的第一 SSL連接,為第一 SSL連接分配包含有自身設備標 識的第一會話標識,并生成攜帶有所述第一會話標識的第一響應報文;所述服務器還包括發送單元,用于將所述第一響應報文發送給第一客戶端。
15. 如權利要求14所述的服務器,其特征在于,所述接收單元,進一步用于通過本服務器與SLB設備之間的控制通道, 接收所述新建SSL連接請求和第一 TCP連接的狀態信息,所述第一 TCP連接 是第一客戶端與SLB設備之間發送所述新建SSL連接請求的TCP連接;所述發送單元,進一步用于維護所述第一 TCP連接的狀態信息,并根據 第一 TCP連接的狀態信息,設置所述第一響應報文中的對應信息;所述SSL處理單元,還用于處理SLB設備轉發的來自所述第一 TCP連接 的報文。
16. 如權利要求15所述的服務器,其特征在于,所述接收單元,進一步用于通過本服務器與SLB設備之間的控制通道, 接收所述SSL連接恢復請求和第二 TCP連接的狀態信息,所述第二 TCP連接 是第一客戶端與SLB設備之間發送所述SSL連接恢復請求的TCP連接;所述SSL處理單元,還用于生成所述SSL連接恢復請求的第二響應報文, 以及用于處理SLB設備轉發的來自所述第二 TCP連接的報文;所述發送單元,進一步用于維護所述第二 TCP連接的狀態信息,并根據 第二TCP連接的狀態信息,設置所述第二響應報文中的對應信息。
全文摘要
本發明提供了一種保持安全套接層會話持續性的方法及設備。所述方法包括A.本地負載均衡SLB設備接收第一客戶端發送的攜帶有第一會話標識的SSL連接恢復請求,所述第一會話標識中包含有第一服務器的設備標識;B.SLB設備從所述SSL連接恢復請求中獲取第一服務器的設備標識,并根據預存的服務器的設備標識和服務器地址之間的第一對應關系,確定第一服務器的設備標識對應的第一服務器的地址,并將所述SSL連接恢復請求發送至第一服務器;C.第一服務器根據所述SSL連接恢復請求,恢復本服務器與第一客戶端之間的SSL連接。按照本發明,可以減少對SLB設備內存資源的占用,減輕SLB設備的工作負擔。
文檔編號H04L29/06GK101296238SQ20081011512
公開日2008年10月29日 申請日期2008年6月17日 優先權日2008年6月17日
發明者明 薛 申請人:杭州華三通信技術有限公司