题 负载均衡器如何管理TCP连接


我有关于负载均衡器处理TCP连接的问题。

我的负载均衡器后面有三个服务器,有时由于某些处理任务,在服务器和客户端之间没有数据发送,5分钟后空闲连接将被丢弃,因为服务器已发送RST标志(连接由同行重置) )。我想知道负载平衡器可能会对此负责,因此我使用WireShark捕获具有RST FLAG的TCP数据包,并捕获此类数据包。

我的问题是,如果负载均衡器负责重置连接,我是否会在服务器端看到RST数据包,因为LB已经更改了源IP?或许我错了,即使LB正在发送RST数据包,它仍然可以在服务器端捕获它吗?

编辑1

我想缩小(或者可能增强)我的问题。如果客户端和服务器之间的任何内容都使用RST发送数据包,它是否应该在客户端和服务器上都可见,或者仅在其中一个上显示(例如客户端)?

编辑2

我在客户端和服务器端捕获了带有RST标志的数据包,奇怪的是在客户端它看起来像LB服务器已发送它,而在服务器端它看起来像客户端发送它(通过源/目标IP) )


5
2018-02-17 08:08




您错过了负载均衡器技术。 Microsoft Clustering,netscaler,路由器上的负载均衡器等......您的答案将是通用的,没有更多信息 - yagmoth555♦


答案:


据我所知,这是你对网络主题的误解,包括OSI图层和通信方法。

为了简要回答您的主要问题,我应该说您的LoadBalancer完全处理的方式取决于您的配置以及您如何定义/希望它处理。但为了向您展示LoadBalancing如何在OSI模型的第4层和第7层中真正起作用,请阅读以下信息:

首先,关于RST数据包,你应该注意你提到的内容是完全常见的,因为RST用于重置连接,并且可以在双方发生,具体取决于无法完成的内容以及服务器和客户端之间不再发生对话的情况虽然连接尚未结束。摘自答案 Quora的,当服务器拒绝连接或者不可用时,或者在数据传输过程中,当服务器或客户端变为不可用时拒绝进行进一步通信,或者在没有正式4路的情况下拒绝进一步通信时,在3次握手过程中发送RST数据包TCP连接终止过程。

传输控制协议(TCP) 在...运作 运输 层(OSI模型中的第4层)。 TCP提供八位字节流的可靠,有序和错误检查传送,并在由IP网络通信的主机上运行的应用程序之间创建虚拟连接。换句话说,它在应用程序和互联网协议之间的中间级别提供通信服务,并且由于IP数据包可能 - 可能 - 丢失,损坏或无序到达,TCP具有纠正这些错误的机制,转换IP数据包流进入可靠的通信通道。为每个应用程序分配一个唯一的TCP端口号,以便在运行许多应用程序的主机上传送到正确的应用程序。例如,已分配标准TCP端口22用于联系SSH服务器 - 如果需要,可以在配置文件中更改默认端口。

第4层负载平衡 负载均衡器的IP地址将通告给客户的网站或服务。因此可能已经猜到,客户端请求中记录的目标地址将是LoadBalancer的地址。当。。。的时候 第4层负载均衡器 接收请求并做出负载平衡决定,它还对请求数据包执行网络地址转换(NAT),将记录的目标IP地址从它自己的IP地址更改为它在内部网络上选择的内容服务器的IP地址。例如,在您的场景中,您的LoadBalancer会将自己的地址更改为将请求的服务提供给客户端所需的地址,为了更明确,我们可以考虑将LoadBalancer后面的三台服务器中的一台用作存储服务器,并且客户愿意阅读您网站上的PDF或任何内容。客户端的目标地址设置为分配给LoadBalancer的公共IP地址,当您的LoadBalancer收到请求时,它将决定哪个服务器 - 在内部网络中使用它自己 - 它应该根据您拥有的规则映射请求在LoadBalancer中设置和配置。同样,在将服务器响应转发给客户端之前,负载均衡器会将数据包标头中记录的源地址从内部服务器的IP地址(例如您的存储)更改为自己的IP地址。 (记录在数据包中的目标和源TCP端口号有时也会以类似的方式更改。)然后,它根据从TCP流中的前几个数据包中提取的地址信息做出路由决策,而不检查数据包内容。

并回答“如果负载均衡器负责重置连接,我会不会看到服务器端的RST数据包,因为它是由更改源IP的LB发送的?”,我应该说你只会看到其他服务器上的RST数据包需要使用LoadBalancer重置连接,而不是客户端与LoadBalancer的连接。

顺便说一句,我强烈建议你在内部服务器上使用tcpdump来查看你是否可以接收来自LoadBalancer的请求,这样你就可以看到出了什么问题,你会发现如何解决你的问题。难道你不是因为使用WireShark而感到困惑,它是一个很棒的工具,但你应该足够熟悉,以了解它向你展示的内容。


11
2018-02-20 06:43