RFC 161 UNKNOWN TRANSPORT · PROTOCOLS

Solution to the race condition in the ICP

How to avoid conflicting connection requests without changing the Host-Host protocol.

On rfc-editor.org ↗
PUBLISHED
May 1971
AUTHORS
A. Shoshani
STREAM
Legacy
AFFECTED PROTOCOL
Initial Connection Protocol (ICP)
SOCKETS USED FOR INIT
U+2 and U+3
DOI
10.17487/RFC0161

RFC text

Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                                        A. Shoshani
Request for Comments: 161                                            SDC
NIC #6772                                                    19 May 1971


              A SOLUTION TO THE RACE CONDITION IN THE ICP

   In NWG/RFC #143 a race condition in the ICP was described and a
   solution was suggested.  The problem arises because the Host-Host
   protocol does not specify what the NCP should do when it gets more
   than one request of STR (or RTS) to the same socket.  As a result
   this decision depends on the particular implementation: some may
   queue these requests (SDC for example), some will refuse a request if
   the socket is already connected (UCLA for example), etc.

   The solution is not to change the Host-Host protocol, but find a
   third level ICP which does not depend on this issue.  Such a solution
   is the following: the INITs from server to user and user to server
   ((S5), (S6), (U5), (U6) on page 3 in RFC #143) should use another
   socket -- say U+2 and U+3.  The sequences in RFC #143 would be:

      Server                             User
      ------                             ----
      (S1) LISTEN(L,32)                  (U1) INIT(U,L,32)
      (S2) [wait for match]              (U2)
      (S3) SEND(L,S)                     (U3) RECEIVE(U,S)
      (S4) CLOSE(L)                      (U4) CLOSE(U)
      (S5) INIT(S,U+3,Bu)                (U5) INIT(U+3,S,Bu)
      (S6) INIT(S+1,U+2,Bs)              (U6) INIT(U+2,S+1,Bs)


This solution will solve the problems pointed out in RFC #143 without
any assumptions made about the NCP implementation.  The solution in RFC
#143 assumes that the NCP can notify a process when a command (e.g.,
close) comes in, which is implementation dependent.




       [ This RFC was put into machine readable form for entry ]
          [ into the online RFC archives by Alan Ford 08/99]

AI ELI5

On this page
PROBLEMThe Initial Connection Protocol (ICP) did not specify what to do when multiple connection requests arrived at the same socket simultaneously, causing different host implementations to behave differently.
MECHANISMInstead of modifying the Host-Host protocol, use separate sockets for the connection initialization messages, so each request gets its own path.
PRACTICAL WORKAROUNDThis allows ICP to work correctly across implementations without requiring protocol changes, solving the race condition at a higher protocol layer.

§1The Race Condition Problem

RFC 161 describes a problem in the Initial Connection Protocol (ICP) for establishing connections between network hosts. When the Host-Host protocol received more than one request to the same socket, there was no rule saying what should happen. Some implementations (like SDC's) would queue the requests, while others (like UCLA's) would refuse the new request.

This led to incompatible behavior across the network. Since implementations differed fundamentally on how to handle this conflict, every pair of hosts had to negotiate their behavior.

When two computers both tried to start a connection to the same place at the same time, some computers would wait in line and some would say 'no.' This made it hard for computers to talk to each other.

§2The Solution: Separate Sockets

Rather than change the Host-Host protocol itself, Ari Shoshani proposed using a different socket for each direction of the connection initialization. When the server and user exchange their INIT messages, they would use sockets U+2 and U+3 instead of reusing the main connection socket.

This ensures that no two INIT messages target the same socket, so the race condition cannot occur. The solution is transparent to the Host-Host protocol and does not depend on any particular implementation's handling of simultaneous requests.

Use different mailboxes for the start-of-call messages. If the server uses mailbox U+3 and the user uses mailbox U+2, they cannot collide.

§3Why This Works

The solution proposed in RFC 143 to this same problem required that the NCP (network control program) could notify a process when a command arrived. This was implementation-dependent and not guaranteed.

Shoshani's approach avoids any assumptions about NCP notification. By using separate sockets from the start, the handshake completes without ever triggering the race condition, making it portable across any Host-Host implementation.

This fix does not need the network to tell anyone anything special. It just uses different paths so there is no race at all.

§4References