ICMP处理

负载调度器需要实现虚拟服务的ICMP处理,这样进来的虚拟服务ICMP报文会被改写或者转发给正确的后端服务器,出去的ICMP报文也会被正确地改写和发送给客户。ICMP处理对于客户和服务器间的错误和控制通知是非常重要的。

ICMP消息可以发现在客户和服务器间的MTU(Maximum Transfer Unit)值。在客户的请求被VS/DR调度到一台服务器执行,服务器将执行结果直接返回给客户。例如响应报文的MTU为1500个字节,在服务器到客户的路径中有一段线路的MTU值为512个字节,这时路由器会向报文的源地址(即虚拟服务的地址)发送一个需要分段为512个字节的ICMP消息。该ICMP消息会到达调度器,调度器需要将ICMP消息中原报文的头取出,再在Hash表中找到相应的连接,然后将该ICMP消息转发给对应的服务器。这样,服务器就会将原有的报文分段成512个字节进行发送,客户得到服务的响应。