解决方案 »

  1.   

    Http协议中服务器和客户端是通过cookie或者URL rewrite保持session会话的,如果客户端发送请求,服务端应该会发送一个cookie的指令,客户端收取到该http报文查看之中的cookie值就可以确定是哪个服务器哪次会话,因此就可以得知是上一次IP切换前发出的请求不知道这样解释得对不,总之http是在TCP/IP层上的,不会关心网卡Mac一层的协议通信,IP地址变换这种情况下还是应该考虑http协议本身的通信容错机制
      

  2.   

    @qingyuan18
    可能我说的不太明白,我的意思是HTTP客户端在发出请求之后,收到响应之前,切换了IP,这种情况下能不能保证客户端依旧能收到响应信息
      

  3.   

    这能收到么,A网断了那socket都没有了,服务器还能发送数据么
      

  4.   


    原来的默认的肯定网络断了,浏览器会重新建立连接,但原来的 response 是不会被使用的,它的 UDP 包从路由器上回来之后没有人收啊。因此这个问题可以在局域网的网关路由器上解决或者说类似混杂模式(在监听到网上切换的事件后)把给原来的IP 地址的 UDP 数据包复制一份发送到新的网卡IP上?不过我不清楚原来的 TCP 窗口中的计数器啥的都对应得上么?
      

  5.   

    http不是用的tcp/ip传输的么,这能复制一份到另一个网卡不
      

  6.   


    这个取决于网络到底是怎么连的。如果这两个网卡根本就不在一个网段里,上连的交换机也不一样,也就是说这两个网卡是在完全不同的网络里,那是不可能收到的。如果是这两个网卡是工作在HA的状态,即binding的状态,那上层应用是不需要知道网络怎么走,直接没有影响 。
      

  7.   

    这应该是一个  TCP 这种协议设计与网络层工具应用程序做的事情,肯定不是简单地就能做到,像 Linux 上那个新的协议就能同时使用多条线路它的设计目的中应该就包括了解决这个问题。因为我们现在的局域网络都是以太网数据包可以发给路由器同一侧的所有主机,像交换机和路由器则是更智能了,这应该是需要工作在网络层的协议机制来协调的,如果操作系统本身提供那当然好,要是说自己写一个程序来做到我想这是非常复杂的同时也可能要求路由器的协调。
      

  8.   

    如果你用Linux的话,应该可以用iptables做一个端口重定向来解决。
    Windows上应该也有类似的工具,比如tcpmon之类的,虽然它不是用来解决这个问题,但它能实现这个效果。
      

  9.   


    最终它都是 IP 数据包,TCP 是基于 UDP 协议的,还有,到了局域网后就成了以太网,也就需要 MAC 地址翻译过程。在以太网中数据包是发给所有机器的,只是默认的操作系统的机器驱动程序设定为不是自己的 MAC 的邮包就丢弃(因此才有一些sniffer 工具混杂模式抓包分析的),我们可以在以太网中的控制台把收到的这样的数据包复制一份再发给新的网卡MAC包,只是TCP/IP 是基于UDP 有一个窗口计数器的,这个数据包本身不是新的网上的,这些计数器怎么能在两个网上间共享呢?总觉得当前这两个网上就不能彼此不相关地单独与服务器通信,而是需要有一个桥接层把两个网卡的关系隐藏在背后,以一个虚拟的 IP 和 MAC 地址与外界通信才可能。