目前随着L4-7层国产硬件负载均衡设备涌入市场,硬件负载均衡产品的各项功能的介绍也是很多,本文对目前主流的硬件负载均衡产品在负载过程记录上一跳的功能原理进行大致的分析。
硬件负载均衡产品大家估计想到的有很多;有主机类型的也有交换类型的硬件负载均衡产品,例如:F5(云科)、深信服(SANGFOR AD)、迪普(DPtech)、弘积(horizon-adn)信安世纪(NSAE)等等是基于交换类型的的负载均衡产品,在负载的过程中实现转发的功能,从TCP/IP数据包的结构分析,源IP不一定会替换(主机服务器类型的产品,数据包的源IP在没有特殊开发过程中一般情况下是都会被替换,例如,在服务器中搭建的LVS)。
简单列举一下,笔者接触到的产品对于这一项功能的命名:
BIG-IP F5(云科):Auto-last hop 记录上一条的MAC地址
深信服(SANGFOR AD):对称路由 (字面意思请大家理解即可)
信安世纪(NSAE)RTS (Return to Source)路由返回 ,当从多条具有相同优先级的路由中选择一条转发报文时,系系统将通过反查路由来找到客户端请求到达设备的原链路并自动为该链路创建一条RTS路由,确保响应通过该链路返回;
PS:信安世纪对于每个功能介绍还是很详细的,其他的产品功能笔者只是通过自己的理解分析,迪普(DPtech)、弘积(horizon-adn)的产品笔者接触的不多也存在相同的功能,就不一一列举出来了。
抛开以上产品的功能命名不说,引用上一篇的负载均衡内部简单的结构图结合数据包报文结构,简单的刨析记录上一跳的原理。
负载均衡策略内部结构图如下:
TCP/IP数据包报文的大致结构如下:
IP首部和TCP首部报文的结构如下图所示,TCP和IP首部涉及的检验值、序号、确认号等因为本文暂时用不到不详细列举。TCP/IP首部报文为:源IP、目的IP、源端口、目的端口...
负载均衡设备再处理负载流程过程中笔者将其分为4部分,如下图所示:
下面我们结合TCP/IP首部报文在负载均衡过程中的变化进行刨析;
访问序号 | 源IP | 目的IP | 源端口号 | 目的端口号 | 行为 |
1 | Client IP | 虚拟服务IP | Client随机端口(如无特殊设置,Client的端口为随机产生的大端口大于20000) | 虚拟服务的port | 客户端访问虚拟服务 |
2 | Client IP | 虚拟服务IP | Client随机端口(如无特殊设置,Client的端口为随机产生的大端口大于20000) | 虚拟服务的port | 负载均衡虚拟服务根据设定的策略处理数据包报文 |
3 | Client IP | 服务器IP | Client随机端口(如无特殊设置,Client的端口为随机产生的大端口大于20000) | 服务器port | 负载均衡设备做目的地址转换进行负载 |
4 | 根据组网结构如无需改变源IP,默认源地址为Client IP,如果需要做源地址转化,则源IP变化为设定snat ip | 服务器IP | 源端口号根据负载均衡设定的策略进行变化,一般情况下源端口号进行保留,有特殊设置策略的情况下可能产生变化 | 服务器port | 数据包报文出负载均衡设备被分配至其中一台服务器 |
通过以上的对比简单理解负载的过程其实是数据包报文做目的转化的过程,待对应的服务器端的程序应答报文后,数据包报文又会按照流程4、3、2、1进行返回;
PS:服务器将数据包报文封装后返回给谁,根据服务器设定的gateway网关实现;在这里大家理解一个问题,相同网段的IP和不同的网段的IP通信方式的不同(属于网络交换范畴,这里不做过多解释),在数据包报文返回至负载均衡设备后,负载均衡设备需要将数据包报文封装进行返回,画重点;
负载均衡设备在封装数据包返回报文的给Client的过程中,目的IP封装Client IP,那么对应的mac地址应该封装谁或者说返回的数据包又是怎么封装?这里就引申出标题负载均衡设备记录上一条的功能,如果不存在这个功能,我们可以将负载均衡设备看作一台服务器,那么负载均衡设备按照设定的gateway网关或者路由封装网关的MAC地址(此处涉及client ip是否为虚拟服务IP的相同的二层网段,如果不是则封装网关MAC,如果是则进行二层广播),此处的问题是负载均衡设备在为服务器负载时候设置网关,网关指向谁?
通过以上的说明就引申出负载均衡记录上一跳的功能,简单的理解为,记录访问到负载均衡虚拟服务最后一跳的数据包报文信息(包括:MAC信息、路由等等)这样方便负载均衡返回数据包报文时候快速封装,节省负载均衡设备设置网关路由等繁琐问题。
那么记录最后一跳具体记录的哪一跳?如图所示:
最后一跳,记录的访问负载均衡虚拟服务最后一跳的设备信息,图中Network位置,如果连接负载均衡设备的是交换机,那就是交换机的MAC,如果是防火墙那就是防火墙的MAC,总之最后一跳的数据包报文在到达负载均衡设备的虚拟服务时候,数据包报文的源MAC地址是谁,就会记录谁。
总结,不管各类L4-7应用交付负载均衡厂家对于记录上一跳的功能如何命名,每个厂家的展现形式又不同,诸如,F5设备(Auto-last hop)上一跳的功能记录在TCP连接表中,SANGFOR AD(对称路由)记录在单独的路由表中,信安世纪NSAE(RTS)好像也记录在路由表中。
原理大致一样,都是为了方便访问减少负载均衡设备上对于路由、网关等信息的设定。
希望通过笔者简单的分析,大家可以对记录上一跳的功能有个了解。