【F5 UDP负载均衡】抓包实践,说说F5 UDP硬负载均衡探测后端服务器的原理

项目背景

两台UDP SERVER,通过F5实现硬件的UDP负载均衡,发现UDP SERVER上会定期收到F5的UDP探测包,但是UDP SERVER并没有对这些探测包做过任何响应,所以不明白F5是如何知道UDP SERVER是活的还是死的?

 

两台UDP SERVER

172.28.17.52

172.28.17.54

VIP

172.28.26.13

主备F5

172.28.26.251

172.28.26.252  

 

当把两台UDP SERVER都停掉之后,F5显示如下:

红色代表不可达

当单独启动52的UDP SERVER后,F5显示如下:

 

52的服务器上日志显示一直在收包,ip是F5的

但是就程序而言,本身是并没有对探测包做出任何响应的,所以抓包看看

52的机器上只发现有F5来的探测包,并没有发现有52回过去的响应包

 

54上再抓包,54进程停掉了

54进程不在,F5依然是在持续的发探测包的,UDP,同时可以看出54给F5回了ICMP的包,destination unreachable,搞之F5设备,当前机器不可达,此时F5就知道了54不可达,随即更自己维护的节点状态信息

那么ICMP报文的作用是什么呢?

ICMP协议主要用来检测网络通信故障和实现链路追踪,最典型的应用就是PING和tracerooute。

PING:

    通过发送回送请求报文和回送回答报文来检测源主机到目的主机的链路是否有问题,目的地是否可达,以及通信的延迟情况。

traceroute:

    通过发送探测报文来获取链路地址信息。第一个探测报文TTL为1,到达第一个路由器时,TTL减1为0所以丢掉这个探测包,同时向源主机发回ICMP时间超过报文,这时源主机就获得了第一个路由器的IP地址;接着源主机发送第二个探测报文,TTL增1为2,到达第一个路由器TTL减1为1并转发探测包到第二个路由器,这时TTL减1为0,丢掉这个探测包并向源主机发回ICMP时间超过报文,源主机就获得了第二个路由器的IP地址;以此类推,直到探测报文到达traceroute的目的地,这时源主机就获得了到目的地的每一跳路由的IP地址。

由此不难看出为什么F5能知道后端real server的节点状态了