whd*_*whd 7 networking load-balancing tcp
我对负载均衡器处理 TCP 连接有疑问。
我的负载均衡器后面有三台服务器,有时由于某些处理任务,服务器和客户端之间没有发送数据,闲置 5 分钟后连接将被丢弃,因为服务器已发送 RST 标志(连接重置由对等方)。我想知道负载均衡器可能对此负责,所以我使用 WireShark 捕获带有 RST 标志的 TCP 数据包,它捕获了这些数据包。
我的问题是,如果负载均衡器负责重置连接,我会不会在服务器端看到 RST 数据包,因为它是由更改了源 IP 的 LB 发送的?或者我错了,即使 LB 正在发送 RST 数据包,是否仍然可以在服务器端捕获它?
我想缩小(或可能增强)我的问题。如果客户端和服务器之间的任何内容发送带有 RST 的数据包,它应该在客户端和服务器上都可见还是仅在其中一个(例如客户端)上可见?
我在客户端和服务器端捕获了带有 RST 标志的数据包,奇怪的是在客户端看起来像是 LB 服务器已经发送了它,而在服务器端看起来像是客户端已经发送了它(通过源/目标 IP )
小智 15
据我所知,这是您对包括 OSI 层和通信方法在内的网络主题的误解。
为了简要回答您的主要问题,我应该说您的 LoadBalancer 处理的方式完全取决于您的配置以及您如何定义/希望它被处理。但是为了向您展示 LoadBalancing 在 OSI 模型的第 4 层和第 7 层中的真正工作原理,请阅读以下信息:
首先,关于 RST 数据包,您应该注意您提到的内容是完全常见的,因为 RST 用于重置连接,并且可以在双方发生,具体取决于无法完成的内容以及服务器和客户端之间不再发生对话的时间虽然连接尚未结束。摘自Quora 中的一个答案,当服务器拒绝连接或不可用时,在 3 次握手过程中或在服务器或客户端变得不可用或拒绝进一步通信时在数据传输过程中发送 RST 数据包没有正式的 4 路 TCP 连接终止过程。
传输控制协议 (TCP)在传输层运行层(OSI 模型中的第 4 层)。TCP 提供可靠、有序和错误检查的八位字节流传输,并在通过 IP 网络通信的主机上运行的应用程序之间创建虚拟连接。换句话说,它在应用程序和 Internet 协议之间提供中间级别的通信服务,并且由于 IP 数据包可能——可能——丢失、损坏或无序到达,TCP 具有纠正这些错误的机制,转换IP 数据包流进入可靠的通信通道。每个应用程序都分配了一个唯一的 TCP 端口号,以便能够传送到运行许多应用程序的主机上的正确应用程序。例如,标准 TCP 端口 22 已分配用于联系 SSH 服务器 - 如果需要,可以在配置文件中更改默认端口。
在第 4 层负载平衡中,负载平衡器的 IP 地址被通告给网站或服务的客户端。因此,正如可能已经猜到的那样,客户端请求中记录的目标地址将是 LoadBalancer 的地址。当。。。的时候第 4 层负载均衡器收到请求并做出负载均衡决策,它还对请求数据包执行网络地址转换 (NAT),将记录的目标 IP 地址从它自己更改为它在内部网络上选择的内容服务器的 IP 地址。例如,在您的场景中,您的 LoadBalancer 会将其自己的地址更改为将请求的服务提供给客户端所需的地址,更明确地说,让我们考虑一下 LoadBalancer 背后的三台服务器之一作为您的存储服务器和客户愿意阅读 PDF 或您网站上的任何内容。客户端的目标地址设置为分配给您的 LoadBalancer 的公共 IP 地址,并且当您的 LoadBalancer 收到请求时,它将决定到哪个服务器 - 在内部网络中使用它自己 - 它应该根据您在 LoadBalancer 中设置和配置的规则来映射请求。同样,在将服务器响应转发给客户端之前,负载均衡器会将数据包标头中记录的源地址从内部服务器的 IP 地址(例如您的存储)更改为它自己的 IP 地址。(数据包中记录的目标和源 TCP 端口号有时也会以类似的方式更改。)然后它根据从 TCP 流中的前几个数据包中提取的地址信息做出路由决策,而不检查数据包内容。负载均衡器将数据包标头中记录的源地址从内部服务器的 IP 地址(例如您的存储)更改为它自己的 IP 地址。(数据包中记录的目标和源 TCP 端口号有时也会以类似的方式更改。)然后它根据从 TCP 流中的前几个数据包中提取的地址信息做出路由决策,而不检查数据包内容。负载均衡器将数据包标头中记录的源地址从内部服务器的 IP 地址(例如您的存储)更改为它自己的 IP 地址。(数据包中记录的目标和源 TCP 端口号有时也会以类似的方式更改。)然后它根据从 TCP 流中的前几个数据包中提取的地址信息做出路由决策,而不检查数据包内容。
并回答“如果负载均衡器负责重置连接,我会不会在服务器端看到 RST 数据包,因为它是由 LB 发送的,源 ip 已更改?”,我应该说如果其他服务器上的 RST 数据包需要使用 LoadBalancer 重置连接,而不是客户端与 LoadBalancer 的连接。
顺便说一句,我强烈建议您在内部服务器上使用 tcpdump 来查看是否可以接收来自 LoadBalancer 的请求,这样您就可以查看出了什么问题,并找出解决问题的方法。使用 WireShark 不会让您感到困惑,它是一个出色的工具,但您应该足够熟悉以了解它向您展示的内容。
归档时间: |
|
查看次数: |
10105 次 |
最近记录: |