F5 Local Traffic Manager 常被用來作應用交付負載均衡器,支持HTTP和SIP協議,以及從IP層(3層)到應用層(7層 standard)的負載均衡,同時兼具路由轉發功能。業界使用F5 LTM來完成HTTP請求負載較多,基於SIP協議的7層協議較少。在使用該負載均衡器的過程當中,我總結了一些問題:html
使用基於TCP的SIP協議傳輸大消息時,若是使用Standard模式,該消息會被切分,致使服務器端沒法正常接收到消息。所以,只能選擇Performance Layer4模式。後端
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 3581。server