筆者在研究四層負載均衡的時候,有讀到這麼一篇博客:
https://blog.csdn.net/friends99/article/details/79803638
文中提到的一點筆者存在一些困惑,我把原文截圖出來:
對於文章中的描述,筆者不是太理解爲什麼服務器會和客戶端直接建立連接,負載均衡會修改數據包源地址又是什麼意思?所以下面筆者做了實驗並抓包分析。
首先第一次使用的是haproxy,實驗拓撲如下
筆者將環境部署好後,用client去訪問負載均衡以請求web內容,同時分別在haproxy的內網口和client的網口上抓包進行查看,下面的截圖是抓到的包中筆者認爲比較重要的部分:
haproxy內網口
client網口
從抓到的數據包中可以分析TCP三次握手與四次揮手,負載均衡以源IP爲自己,目的IP爲後端的web,將數據包進行了轉發,可證實博客中我劃了紅線的部分
下面是對藍線部分的抓包分析,拓撲類似,僅將haproxy換成了lvs
以同樣的方法進行抓包,得到:
client網口,lvs起轉發作用
lvs內網口,可以看到web是直接將數據包回給client的
這裏我的理解是,lvs將client的請求進行轉發,轉發的時候將包的源地址(本來應該是lvs)改成了client,web根據接收請求數據包的源地址,在回包的時候直接將數據包路由給client。我想到的這麼做的理由是,client來自外網,那web向client回數據必定需要路由,若負載均衡不是網關且不修改轉發的包的源地址(這樣的話源地址是負載均衡),那麼web將會把包回給負載均衡設備,負載均衡再經過網關將數據路由給client……這麼做相當於回包的時候還要從負載均衡走一趟,浪費資源。
通過上面兩次觀察,筆者大致能理解博客中所說的意思,只是不知道有沒有理解偏差。歡迎廣大讀者留下建議,若文章中有什麼不對的地方也請批評指出。感謝!!