F5 LTM 在SIP消息負載均衡中存在的問題

F5 Local Traffic Manager 常被用來作應用交付負載均衡器,支持HTTP和SIP協議,以及從IP層(3層)到應用層(7層 standard)的負載均衡,同時兼具路由轉發功能。業界使用F5 LTM來完成HTTP請求負載較多,基於SIP協議的7層協議較少。在使用該負載均衡器的過程當中,我總結了一些問題:html

  1. 使用基於TCP的SIP協議傳輸大消息時,若是使用Standard模式,該消息會被切分,致使服務器端沒法正常接收到消息。所以,只能選擇Performance Layer4模式。後端

  2. F5 LTM支持AUTO MAP模式的NAT功能,卻沒法處理SIP消息的端口問題。
    F5爲全代理工做模式,設備同時與客戶端和真實服務器各創建一條鏈接,分別被定義爲client side和server side。客戶端會與F5的vs創建一條鏈接,F5會以自身接口IP與真實服務器創建一條鏈接。即:服務器

    Client Side    Server Side
    Client------F5 VS
    F5 接口IP------Server

    因爲F5與後端服務器通信時僅使用的自身一個接口IP,因此就須要經過不一樣的源端口來區分不一樣客戶端的Session。例:負載均衡

    192.168.1.1:2000--->192.168.1.100:8080
    192.168.1.200:2000--->192.168.1.254:8080
    192.168.1.200:2000<-----192.168.1.254:8080
    192.168.1.1:2000<-----192.168.1.100:8080

    如上爲當有一個客戶端時F5默認使用與客戶端相同端口轉發數據包,固定端口2000,不使用rport時,根據VIA字段回覆,能正確處理該消息。此時,有另外一個客戶端也是固定2000端口來訪問。例:ide

    192.168.1.2:2000--->192.168.1.100:8080
    192.168.1.200:5555--->192.168.1.254:8080
    192.168.1.200:**2000**<-----192.168.1.254:8080

    當同時有另一個客戶端訪問該VS時F5將使用隨機端口「舉例5555」與服務器通訊,否則則沒法區分Session。此處,沒有使用rport,致使回覆給F5的端口和F5發請求的端口不一致。(若是使用rport,服務器會根據rport來回復響應,此處,rport應爲5555)。代理

所以,在實際應用當中使用F5做爲SIP負載均衡器存在如下問題:固定端口後,大多數平臺和設備使用5060端口進行SIP信令傳輸,在上次請求鏈接沒有斷開時,下次請求會使用隨機端口向服務器發送請求響應。在不使用rport機制的狀況下,服務器默認向VIA字段裏的地址和端口進行回覆,即響應被回覆到了5060,致使F5沒法正確匹配請求和響應,從而響應沒法正確返回客戶端(而是回覆到了最初佔用5060端口的那個客戶端上了)。code

建議解決方案:統一收發端口後,使用rport機制,在VIA字段中攜帶rport,從而服務器在接收請求後會記錄F5發送請求的端口,回覆響應會回覆到該端口,讓F5匹配請求和響應。固定端口使得F5能正常將響應回覆到客戶端。orm

另,rport機制詳見:RFC 3581server

相關文章
相關標籤/搜索