您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
四层负载均衡的NAT模型与DR模型推导
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
四层负载均衡的NAT模型与DR模型推导
自猿其说Tech
2021-07-20
IP归属:未知
97240浏览
敏捷架构
计算机编程
本文首先讲述四层负载均衡技术的特点,然后通过提问的方式推导出目前流行的DR模型的工作原理。为了叙述方便,文中将“四层负载均衡器” 简称为“FLB” (Four-tier Load Balancer)。 ------------ ### 1.FLB在网络中的基本拓扑 FLB工作在OSI七层网络参考模型的第四层(传输控制层),FLB上必须具备两个IP地址,VIP和DIP。VIP是暴露给客户端的访问地址;DIP是FLB的分发IP,将数据包通过DIP所在的网卡发送给后端的真实提供服务的服务器(后面简称“RS”(Real Server))。如下图: ![](//img1.jcloudcs.com/developer.jdcloud.com/063df6c2-2620-4435-a2c9-e95b7478940f20210720140004.png) <center>图 1 FLB的基本网络拓扑图</center> <center>其中CIP为客户端的ip,RIP为RS的ip</center> ### 2.四层负载均衡技术的特点 (1)由于FLB工作在传输控制层,因此它对数据包的处理(转发)总是运行在内核态,不会产生内核态和用户态的切换。 (2)虽然FLB工作在传输控制层,但是它并不会和client进行三次握手,它只是“偷窥”数据包中的ip地址和端口号,然后根据配置的规则进行数据包的转发,速度极快。 ### 3.提出问题 在图1中,如果client发送数据包最终到达server1,由于client数据包的目的ip为VIP,当server1收到数据包时,发现数据包的目的ip竟然不是自己的ip,那岂不会丢弃数据包? ### 4.NAT(Network Address Translation)模型 针对3中的问题,可以在FLB中增加对客户端的目的地址vip的地址转换,将vip转换成后端某一RS的ip,然后再将数据包发送出去。详细的网络拓扑如图2 ![](//img1.jcloudcs.com/developer.jdcloud.com/14ee4001-a761-441f-9b6f-1aafacfb1d4d20210720140116.png) <center>图 2 FLB的NAT 模型的基本网络拓扑图 </center> 需要注意的是,上面的后端的server的默认网关需要配置成负载均衡服务器的地址。这样server响应的数据包才能回到负载均衡服务器上。 #### 4.1NAT模型的弊端 (1)很明显的一点是,在做NAT地址转换时,会消耗负载均衡服务器cpu的算力。 (2)大多数情况下,client向server请求的数据报文很小,而server向client响应的数据报文很大,这就是“非对称”的。在通过NAT的方式实现负载均衡时,client请求报文和server返回的数据报文都要经过负载均衡服务器进行网络地址转换,如果请求的并发流量很大,那么大量并发的响应报文返回到FLB时,负载均衡服务器的网络带宽就会成为瓶颈。 ### 5.DR(Direct Route)模型 直接路由模式可以解决NAT模型的两个弊端。DR模式不经过NAT地址转换,而是将server端返回的数据包的源ip直接写成VIP发送出去。这其中涉及到几个要点: (1)由于server返回的数据包的源ip要写成vip,而不是rip,那么在server本地需要配置vip。并且这个vip必须是对外隐藏的,也就是说外界(客户端、负载均衡器)不能直接访问到server中的vip,而是必须访问负载均衡器暴露的vip。 (2)在负载均衡器中,接收到client的数据包的源ip是cip,目的ip是负载均衡器暴露的vip,那么负载均衡器如何才能将该数据包发送给server呢?(由于server的vip是隐藏的,负载均衡服务器只能看到rip)。 在DR模式中,是通过MAC地址欺骗的方式来实现。负载均衡服务器接收到client的请求数据包之后,将目的MAC地址替换为后端某一台server1的MAC地址(替换之前,目的MAC地址为负载均衡器的MAC地址),然后将数据包发送出去,进行点到点通信,这样server1就收到了client的数据包。 点对点通信依赖的是MAC地址(数据链路层) (3)基于(2)中所述内容:要实现负载均衡器和后端server点对点通信,因此约束了:负载均衡服务器的DIP和后端的server必须在同一个机房(局域网)。 根据上面的推导,DR模型的基本网络拓扑如图3所示。 ![](//img1.jcloudcs.com/developer.jdcloud.com/76a73c37-ad54-468d-8e43-cab45cb6ce7b20210720140201.png) <center>图 3 FLB的DR 模型的基本网络拓扑图 </center> 在RS中如何配置VIP,如何实现VIP隐藏?且听下回分解:LVS DR模型实验搭建与验证。 ------------ 自猿其说Tech-JDL京东物流技术发展部 作者:网规技术部 伍泓全
原创文章,需联系作者,授权转载
上一篇:有效进行稳定性测试的Accu框架
下一篇:redis 实现一把分布式锁
相关文章
京麦客户端组件化设计与实践
Docker与虚拟化技术浅析第一弹之docker与Kubernetes
架构研究:研发敏捷与中台架构(论前台bp研发敏捷)
自猿其说Tech
文章数
426
阅读量
2149963
作者其他文章
01
深入JDK中的Optional
本文将从Optional所解决的问题开始,逐层解剖,由浅入深,文中会出现Optioanl方法之间的对比,实践,误用情况分析,优缺点等。与大家一起,对这项Java8中的新特性,进行理解和深入。
01
Taro小程序跨端开发入门实战
为了让小程序开发更简单,更高效,我们采用 Taro 作为首选框架,我们将使用 Taro 的实践经验整理了出来,主要内容围绕着什么是 Taro,为什么用 Taro,以及 Taro 如何使用(正确使用的姿势),还有 Taro 背后的一些设计思想来进行展开,让大家能够对 Taro 有个完整的认识。
01
Flutter For Web实践
Flutter For Web 已经发布一年多时间,它的发布意味着我们可以真正地使用一套代码、一套资源部署整个大前端系统(包括:iOS、Android、Web)。渠道研发组经过一段时间的探索,使用Flutter For Web技术开发了移动端可视化编程平台—Flutter乐高,在这里希望和大家分享下使用Flutter For Web实践过程和踩坑实践
01
配运基础数据缓存瘦身实践
在基础数据的常规能力当中,数据的存取是最基础也是最重要的能力,为了整体提高数据的读取能力,缓存技术在基础数据的场景中得到了广泛的使用,下面会重点展示一下配运组近期针对数据缓存做的瘦身实践。
自猿其说Tech
文章数
426
阅读量
2149963
作者其他文章
01
深入JDK中的Optional
01
Taro小程序跨端开发入门实战
01
Flutter For Web实践
01
配运基础数据缓存瘦身实践
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号