Solution to the race condition in the ICP
How to avoid conflicting connection requests without changing the Host-Host protocol.
Shoshani, A., "Solution to the race condition in the ICP", RFC 161, DOI 10.17487/RFC0161, May 1971, <https://www.rfc-editor.org/info/rfc161>.
@misc{rfc161,
series = {Request for Comments},
number = 161,
howpublished = {RFC 161},
publisher = {RFC Editor},
doi = {10.17487/RFC0161},
url = {https://www.rfc-editor.org/info/rfc161},
author = {A. Shoshani},
title = {{Solution to the race condition in the ICP}},
pagetotal = 1,
year = 1971,
month = may,
} RFC text
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
§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.