[Distributed TCP/IP Stack for Fault Tolerant Applications] 


Automatic Connection Migration > Passive Synchronization
 

In passive replication most of the state is inferred by the backup server in case of failure, thus reducing the number of synchronizations and the cost of keeping backup connections. In a typical server behaviour where almost all of the traffic is from the server to the client the synchronizarion can be almost free.

In case of failure the backup server send a packet which is out of the send window of the client. According to the TCP standard, the client must answer with an ack, which has most of the necessary data to recover the connection, that is, the correct sequence numbers and the window size. All the other data (congestion window, round trip time,...) can be recomputed over time. By not needing to keep the backup server updated every time a packet is sent, the synchronization costs are much lower.

As it can be seen in the next figure, only one synchronization is done at the begining of the connection. After that, the backup server would use the information from the client to recover the connection state.



TCP Sending with Active Synchronization


This is not so easy when receiving, as the data received cannot be lost in case of server failure. The only optimization possible is to defer sending acks as much as possible. By not sending acks the client will keep the data in its buffers in case a retransmission is needed. However, the overall effect is much smaller than in the previous case.



TCP Receiving with Active Synchronization