Subject: Re: fault tolerant TCP implementation

From: Eric Gray <[email-masked]>
Date: Wed, 18 Jul 2001 11:29:12 -0400

Aditya,

    A big part of the difficulty may not be superficially obvious.  TCP
has to maintain synchronization state on all unacknowledged packets
as well as which packets it has already acknowledged for each entity
with which it has established sockets.  Keeping synchroniztion across
multiple redundant TCP implementations can keep a set of CPUs fairly
busy.

    What Danny is alluding to in his somewhat unsubtle plug is that you
can come up with several architectural approaches to make it a little
easier to do this.  However, the extent of dynamism involved in keeping
even two redundant local TCP instances in synch (without involving any
remote TCP instances) can make it difficult to architect a system that
does this without coupling the two instances to such a high degree that
many (if not most) of the things that would make one fail would have the
same effect on the other.

--
Eric Gray

Danny McPherson wrote:

> > Dear MPLS Gurus,
> > In the draft on ldp-FT (draft-ietf-mpls-ldp-ft-02.txt ) the authors
> > write on Page 4, in section 2.2 that it  "Notoriously Hard
> >
> > to provide a fault tolerant implementation of TCP"...My question is WHY
> > ? .Why is it so difficult to recreate a TCP connection ( across a
> > switchover
> >
> > from Active Board to Standby Board ) if the connection is in ESTABLISHED
> > state ?
> > Later they go on to say that  "This is an issue familiar to implementers
> > of other TCP applications such as BGP".
> > If anyone could point me to any such related work,I would highly
> > appreciate their help.
>
> I know of at least one vendor (deployed in production networks) that
> provides this (i.e., stateful TCP failover for BGP, LDP, etc..).  It's
> not impossible, it's just not "easy", especially when the system isn't
> designed from the start to support it.
>
> -danny

---

From: "Adrian Farrel" <[email-masked]>
Date: Wed, 18 Jul 2001 11:35:44 -0400

In deed!

For example, a naïf implementer would look at the problem and decide that the
way to achieve TCP FT is to replicate the data in each packet between the two
TCP stacks.  Now depending on the hardware architecture, this may require a
significant amount of data shuffling across the backplane.  This is likely to
have some impact on performance.

Adrian
--
Adrian Farrel
Movaz Networks Inc.
[email-masked]
----- Original Message -----
From: "Eric Gray" <[email-masked]>
To: <[email-masked]>
Cc: <[email-masked]>; <[email-masked]>; <[email-masked]>;
<[email-masked]>; <[email-masked]>; <[email-masked]>
Sent: Wednesday, July 18, 2001 11:29 AM
Subject: Re: fault tolerant TCP implementation

---

From: Danny McPherson <[email-masked]>
Date: Wed, 18 Jul 2001 08:52:43 -0600

-danny

---

From: "Dennis Hartmann" <[email-masked]>
Date: Fri, 20 Jul 2001 14:12:32 -0400

How do they achieve this w/o going through the TCP connection process again
(SYN-SYN-ACK)?  Are they maintaining dual connections (somewhat similar to
Cisco Call manager or MGCP)?  I would think that there has to be some type
of state in memory on the 2nd device to achieve this with a stateful
protocol.  Even on a device like Cisco Local Director, the local director
has to set the sticky bit for stateful applications or reserve memory within
itself.  What product are you talking of?  I would like to research this.

Sincerely,

Dennis J. Hartmann
White Pine Consulting
Global Knowledge-MPLS Course Director
http://www.globalknowledge.com/training/course.asp?PageID=9&courseid=1571
[email-masked]
AOL IM: dennisjhartmann

-----Original Message-----
From: [email-masked] [mailto:[email-masked]]On Behalf Of Danny
McPherson
Sent: Wednesday, July 18, 2001 10:53 AM
To: [email-masked]
Cc: [email-masked]; [email-masked]; [email-masked];
[email-masked]; [email-masked]; [email-masked]
Subject: Re: fault tolerant TCP implementation

-danny

-------
The MPLS-OPS Mailing List
Subscribe/Unsubscribe:  http://www.mplsrc.com/mplsops.shtml
Archive: http://www.mplsrc.com/mpls-ops_archive.shtml

---

From: Eric Gray <[email-masked]>
Date: Fri, 20 Jul 2001 15:59:34 -0400

Dennis,

    If an implementation has to use the TCP connection process to re-establish
a TCP connection, then it is not particularly fault tolerant.  The damage is done
already if the TCP connection is detected to be down by both ends.

    Many examples of approaches that could be used would include some mix of
relatively high band-width connectivity between controllers and sharing of state
information (either as a result of sharing the state explicitly, or by 'reliable'
state
information exchanges) between redundant TCP entities.  AFAIK, any other
approach would have to be visible at the other end of the connection.

--
Eric Gray

You wrote:

> ---