On the (Un)Reliability of TCP Connections: The Return of the End-to-End Argument
Vadim Drabkin, Roy Friedman, Gabriel Kliot · IEEE Distributed Systems Online · 2008
Developers often use TCP connections to realize reliable point-to-point communication in distributed systems. A common issue in such systems' design is whether a middleware or an application can rely solely on TCP or if a higher-level reliable mechanism should be implemented above it. A related question is whether developers can use the breakage of TCP for failure detection. The famous end-to-end argument answers the first question. Yet common wisdom suggests that TCP breakage always results from the failure of a process or machine on either end of the connection or from a severe networking problem. Consequently, some designers might be tempted to avoid implementing a higher-level reliable delivery mechanism when designing systems for LAN environments. Others might rely on TCP breakage as a definite indication of a failure or a network partition. Here, we highlight the dangers of relying solely on TCP for reliability without any additional message- recovery mechanism at the application level (or at least inside a middleware in the same address space as the application). Also, TCP breakage can occur in a perfectly functioning LAN, so it can't be relied on for failure detection either.