作者:不吃猫的鱼
链接:https://www.zhihu.com/question/20553431/answer/130698230
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

一、SLB产生背景:

SLB(服务器负载均衡):在多个提供相同服务的服务器的情况下,负载均衡设备存在虚拟服务IP地址。当大量客户端从外部访问虚拟服务IP地址时,负载均衡设备将这些报文请求根据负载均衡算法,将流量均衡的分配给后台服务器以平衡各个服务器的负载压力,避免在还有服务器压力较小情况下其他服务达到性能临界点出现运行缓慢甚至宕机情况,从而提高服务效率和质量。因此对客户端而言,RS(real server 实际服务器)的IP地址即是负载均衡设备VIP(虚拟服务地址IP)地址,真正的RS服务器IP地址对于客户端是不可见的。

二、SLB的三种传输模式:

七层SLB和四层SLB的区别:

四层SLB:配置负载均衡设备上服务类型为tcp/udp,负载均衡设备将只解析到4层,负载均衡设备与client三次握手之后就会和RS建立连接;

七层SLB:配置负载均衡设备服务类型为http/ftp/https等,负载均衡设备将解析报文到7层,在负载均衡设备与client三次握手之后,只有收到对应七层报文,才会跟RS建立连接。

在负载均衡设备中,SLB主要工作在以下的三种传输模式中:

  • 反向代理模式
  • 透传模式
  • 三角模式

(根据不同的模式,负载均衡设备的工作方式也不尽相同,但无论哪种模式,客户端发起的请求报文总是需要先到达负载均衡设备进行处理,这是LB正常工作的前提。)

模拟网络拓扑环境:

Client:10.8.21.40

负载均衡设备:172.16.75.83

VIP:172.16.75.84

RS1IP:172.16.75.82

RS2IP:172.16.75.85

在整个报文交互过程中,采用Tcpdump和Wireshark分别在RS和Client处抓包,然后使用Wireshark进行报文解析。

三、 反向代理模式:

反向代理:普通的代理设备是内网用户通过代理设备出外网进行访问,而工作在这种模式下的负载均衡设备,则是外网用户通过代理设备访问内网,因此称之为反向代理。

在反向代理模式下,当负载均衡设备收到客户端请求后,会记录下此报文( 源IP地址、目的IP地址、协议号、源端口、目的端口,服务类型以及接口索引),将报文(目的地址更改为优选后的RS设备的IP地址,目的端口号不变;源地址修改为负载均衡设备下行与对应RS设备接口的IP地址,源端口号随机)发送给RS;

当RS收到报文后,会以(RS接口IP地址为源,负载均衡设备地址为目的)回复报文;负载均衡设备将源修改为VIP,目的端口号修改为客户端的源端口号,目的IP修改为Client的源IP回复报文。

查看报文解析结果:

配置完成后,Client访问RS服务器,返回成功,整个报文交互过程如下 :

<img src="https://pic2.zhimg.com/v2-c10a0ba07129662dd4ad7c8c8a696695_b.png" data-rawwidth="610" data-rawheight="191" class="origin_image zh-lightbox-thumb" width="610" data-original="https://pic2.zhimg.com/v2-c10a0ba07129662dd4ad7c8c8a696695_r.png">

Client和负载均衡设备之间的报文交互过程 ↑

<img src="https://pic1.zhimg.com/v2-3ea4b99cad578b6b3cfd29d1890a60e0_b.png" data-rawwidth="620" data-rawheight="113" class="origin_image zh-lightbox-thumb" width="620" data-original="https://pic1.zhimg.com/v2-3ea4b99cad578b6b3cfd29d1890a60e0_r.png">

负载均衡设备和RS之间报文交互过程 ↑

结果分析

分析整个报文交互过程:

TCP握手过程:

首先Client向负载均衡设备发送TCP SYN报文请求建立连接,源IP为Client的IP 10.8.21.40,源端口号50894,目的IP为VIP地址172.16.75.84,目的端口号80;

收到请求报文后,负载均衡设备会以源IP为VIP地址172.16.75.84,端口号80,目的IP 10.8.21.40,目的端口号50894回应SYN ACK报文;

Client收到报文后回复ACK报文,TCP三次握手成功。

HTTP报文交互过程:

当负载均衡设备与client完成三次握手后,因为配置的七层SLB,如果收到HTTP请求,就会根据负载均衡算法和服务器健康状态优选出对应的RS(在这次过程中选择的RS设备为172.16.75.82),然后与RS建立TCP连接:

负载均衡设备发送TCP SYN报文请求连接,源IP为负载均衡设备与RS相连接口IP 172.16.75.83,源端口号随机4574,目的IP为RS的IP 172.16.75.82,目的端口号80;

RS收到报文后,以源IP 172.16.75.82,端口号80,目的IP 172.16.75.83,目的端口号4574回复SYN ACK报文,负载均衡设备回复ACK报文建立三次握手;

之后,负载均衡设备再将收到的HTTP报文源IP修改为与RS相连下行接口IP地址172.16.75.83,源端口号为随机端口号,将报文发送给RS;

当RS收到报文后,使用源为本地IP 172.16.75.82,目的IP为172.16.75.83进行回复,所以报文直接回复给负载均衡设备;

当负载均衡设备收到RS的回应报文后,将报文的源修改为VIP地址172.16.75.84,目的IP为10.8.21.40发送回Client,再将目的端口号修改为HTTP请求报文中的源端口号,服务器访问成功。

<img src="https://pic2.zhimg.com/v2-0ddbc3871dac8bce55d0dd26a6e5f1bd_b.png" data-rawwidth="903" data-rawheight="293" class="origin_image zh-lightbox-thumb" width="903" data-original="https://pic2.zhimg.com/v2-0ddbc3871dac8bce55d0dd26a6e5f1bd_r.png">

由上述的过程可以看出,在RS端上,client的真实IP地址被负载设备修改成与RS相连接口的IP地址,所以RS无法记录到Client的访问记录,为了解决这个问题,可以采用在HTTP报文头中添加X-Forwarded-For字段,本文不做赘述,可以自行查询。

四、透传模式:

当负载均衡设备工作在透传模式中时,RS无法感知到负载均衡设备的存在,对于Client来说,RS的IP地址就是负载均衡设备的VIP地址。

在这种模式下,当负载均衡设备收到源为Client的IP,目的IP为本地VIP地址的报文时,会将报文根据负载均衡策略和健康状况发送给最优的RS设备上,继而RS设备会收到目的为本地IP,源为Client实际IP的请求报文;然后RS将会直接回应此请求,报文的目的IP地址为Client的IP地址,当负载均衡设备收到此报文后,将源IP地址修改为VIP地址,然后将报文发送给Client。

报文解析结果:

同样在RS端和Client端抓取交互报文:

<img src="https://pic3.zhimg.com/v2-35504893ad1c1c5e31cde46777b52866_b.png" data-rawwidth="625" data-rawheight="136" class="origin_image zh-lightbox-thumb" width="625" data-original="https://pic3.zhimg.com/v2-35504893ad1c1c5e31cde46777b52866_r.png">

Client和负载均衡设备之间的报文交互过程 ↑

<img src="https://pic1.zhimg.com/v2-950fe59a2215c3aa311af25e2c16ad38_b.png" data-rawwidth="622" data-rawheight="117" class="origin_image zh-lightbox-thumb" width="622" data-original="https://pic1.zhimg.com/v2-950fe59a2215c3aa311af25e2c16ad38_r.png">

负载均衡设备和RS之间的报文交互过程 ↑

结果分析:

TCP握手过程:

同反向代理模式交互过程

HTTP报文交互过程:

Client向负载均衡设备的VIP地址172.16.75.84以源IP 10.8.21.40发送HTTP请求,当负载均衡设备收到报文后,与优选后的RS进行TCP三次握手,过程同反向代理模式,然后将收到的HTTP报文,不改变报文的源IP地址和源/目的端口号,只修改目的IP修改为优选后的RS地址172.16.75.82;

当RS收到源来自IP 10.8.21.40的报文后,回复报文给IP地址10.8.21.40,此时要注意,必须在RS上配置回复报文经过负载均衡设备,负载均衡设备会将源IP修改为VIP地址172.16.75.84,然后转发给Client,否则Client将会收到源IP为172.16.75.82的HTTP报文,服务器访问失败。

<img src="https://pic1.zhimg.com/v2-919aed35b9aa3e41f1a17044aaf52344_b.png" data-rawwidth="886" data-rawheight="299" class="origin_image zh-lightbox-thumb" width="886" data-original="https://pic1.zhimg.com/v2-919aed35b9aa3e41f1a17044aaf52344_r.png">

五、 三角模式:

在三角模式下,当客户端发送请求到负载设备上时,负载均衡设备会计算出最优RS,然后直接根据MAC地址将报文转发给RS,在RS上配置报文的源IP为VIP地址(一般配置在loopback口上),因此在这种情况下,RS会直接将报文发送给Client,即使回复报文经过负载均衡设备,此设备不做任何处理。由于报文在整个过程中传输途径类似于三角形,因此称之为三角模式。

报文解析结果:

分别在Client端和RS端抓包,内容如下:

<img src="https://pic3.zhimg.com/v2-f14dda14a2584b15e6feb82d9d30bea6_b.png" data-rawwidth="606" data-rawheight="119" class="origin_image zh-lightbox-thumb" width="606" data-original="https://pic3.zhimg.com/v2-f14dda14a2584b15e6feb82d9d30bea6_r.png">

Client和负载均衡设备之间的报文交互过程 ↑

<img src="https://pic4.zhimg.com/v2-667f8cb715128027cfc7d41a4bd80ba7_b.png" data-rawwidth="608" data-rawheight="116" class="origin_image zh-lightbox-thumb" width="608" data-original="https://pic4.zhimg.com/v2-667f8cb715128027cfc7d41a4bd80ba7_r.png">

RS 和负载均衡设备之间的报文交互过程 ↑

结果分析:

TCP握手过程:

由于采用了4层SLB,所以在TCP握手过程中与上述的7层SLB有些不同,当Client和RS完成三次握手之后,此时负载均衡设备会直接选择RS,然后跟RS建立TCP三次握手;

在三角模式环境中,由于RS的Loopback口和负载均衡设备上都存在着VIP地址172.16.75.84,当负载均衡设备经过负载均衡算法选择出对应的RS后,会根据实际配置的RS的IP地址对应的mac地址,将报文以目的mac为RS,目的IP为VIP的方式建立TCP连接。

HTTP报文交互过程:

首先Client向负载均衡设备的VIP发送HTTP请求,源为10.8.21.40,当负载均衡设备收到报文后,将报文直接转发给RS,当RS收到源IP为10.8.21.40,目的IP为本地Loopback口IP地址172.16.75.84的报文后,直接将报文回复给10.8.21.40,同样源为IP地址172.16.75.84,由此访问服务器成功。

<img src="https://pic4.zhimg.com/v2-ba2a56bdecbd0844a760a0486d54a56f_b.png" data-rawwidth="887" data-rawheight="299" class="origin_image zh-lightbox-thumb" width="887" data-original="https://pic4.zhimg.com/v2-ba2a56bdecbd0844a760a0486d54a56f_r.png">

在三角模式中,由于回复报文负载均衡设备不做任何处理,所以非常适合于RS到Client方向流量较大或者连接数目较多的组网环境。采用三角模式时,必须注意RS有路由可以到达Client,并且在RS的Loopback接口上必须有负载均衡设备的VIP地址,否则即使RS设备收到Client的请求报文也会直接丢弃报文,不作回应。

六、总结

由于反向代理模式中在RS侧只能收到源为负载均衡设备IP的报文,因此可以使用防火墙增加安全性,只允许源IP为负载均衡设备的IP地址的报文通过,同时增加X-Forwarded-For字段也可以让RS只允许有此字段的报文进行访问,因此安全性相对较高。

<img src="https://pic3.zhimg.com/v2-cbfce85101a299ea4e86a89b238efd56_b.png" data-rawwidth="937" data-rawheight="628" class="origin_image zh-lightbox-thumb" width="937" data-original="https://pic3.zhimg.com/v2-cbfce85101a299ea4e86a89b238efd56_r.png">

转载于:https://www.cnblogs.com/echo1937/p/6442365.html

反向代理和负载均衡有何区别?相关推荐

  1. 懂点 Nginx 反向代理与负载均衡,是面试加分项没有之一

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 学到老活到老 前端圈一直很新,一直要不停的学习,而且在进入大厂的路上,还要求熟悉一门后台语言等等 ...

  2. 使用Nginx实现服务器反向代理和负载均衡

    前言 同事总问我Nginx做反向代理负载均衡的问题,因此特意留下一篇扫盲贴! 直接部署服务器的风险 假设,我开发了一个网站,然后买了一台Web服务器和一台数据库服务器,直接部署到公共网络上.如下图,网 ...

  3. Nginx之反向代理与负载均衡实现动静分离实战

    Nginx之反向代理与负载均衡实现动静分离实战 什么是反向代理与负载均衡 Nginx仅仅作为Nginx  proxy反向代理使用的,因为这个反向代理功能表现的效果是负载均衡集群的效果. 负载均衡指的是 ...

  4. nginx的反向代理及负载均衡

    查看内核版本号: uname  -r 查看Linux发行版本 :cat /etc/issue 或cat /etc/release 查看bash 版本 : bash  --version <?xm ...

  5. nginx反向代理相关 负载均衡及优化

    一.反向代理 1.1.upstream简介 nginx的upstream可以同时实现反向代理和负载均衡,目前upstream支持5种方式的分配 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端 ...

  6. 微服务部署HTTP反向代理、负载均衡工具Træfɪk

    from: https://docs.traefik.cn/ Træfɪk 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理.负载均衡工具. 它支持多种后台 (Docker, Swarm, ...

  7. nginx的反向代理以及负载均衡模块的使用

    内容: 1.何为代理 2.nginx的反向代理模块以及使用 3.nginx的负载均衡模块以及使用 一.何为代理 代理,由字面意思可以理解为代为服务的是意思. 代理服务技术是一门很古老的技术,是在互联网 ...

  8. Nginx-从零开始使用nginx实现反向代理及负载均衡

    文章目录 环境说明 安装Nginx 安装必须的依赖库 3个 源码安装 yum安装 安装nginx 启动Nginx 常用操作命令 使用非root用户启动nginx 搭建应用 Nginx 做反向代理 + ...

  9. Nginx入门教程-简介、安装、反向代理、负载均衡、动静分离使用实例

    场景 Nginx入门简介和反向代理.负载均衡.动静分离理解 https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102790862 Ub ...

  10. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解(1)

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

最新文章

  1. Ubuntu 13.04 安装 OpenCV 及试用
  2. 性能SOTA、适用多种类型物体,国防科技大学单张RGB-D图像预测物体对称性
  3. Nature:Gordon组采用甘露糖苷选择性抑制尿路致病性大肠杆菌
  4. MySQL:创建、修改和删除表
  5. 结对编程前对队友程序的分析与对比总结
  6. android 紧急号码没记录,android – 当呼叫被隐瞒/未知时,来电号码是...
  7. 计算机应用能力power,全国专业技术人员计算机应用能力考试专用教材——PowerPoint 2003中文演示文稿5日通题库版(双色)(附光盘) - 中国考研网...
  8. 使用Nodejs 批量下载文件, 甘特图 gantt-schedule-timeline-calendar 免费
  9. LaTex使用的一些技巧记录
  10. 解决CSDN免登陆复制问题
  11. 计算机技术 安防 工程师考试,2020年上半年信息安全工程师考试报考指南
  12. CMMB手机电视到了芯片企业创新的时侯
  13. 华硕asus k013 me176cx rom固件刷机包
  14. facebook推广有哪些运营技巧?
  15. 植物大战僵尸android11,植物大战僵尸自创版APK
  16. 凤姐讲述为美国绿卡奋斗的十年
  17. 如何在不越狱的情况下,获取app中的所有常用文件和文件夹
  18. 3个窗口卖票java_三个窗口同时卖火车票,如何用代码将该场景实现?
  19. 关于南京市智慧教育基础平台市区协同推进项目申报工作的通知
  20. PDMS项目管理-创建项目-Admin模块

热门文章

  1. flash与CPU连接及flash属性描述文件
  2. PyQt5教程 - QtDesigner窗口设计工具的使用
  3. numpy教程:数组操作
  4. 记Ubuntu20.04搭建jekyll博客+github环境踩坑-终结版
  5. Futter基础第10篇: 实现替换路由、返回到根路由
  6. 7-11 求链式线性表的倒数第K项 (20 分)
  7. mysqld_multi单机启动多个mysql
  8. HDU 5980 位运算 进制转换函数 DEV C++调试失败的原因
  9. winfrom 窗口起始位置为屏幕中央
  10. Spring Boot的filter简单使用