RFC 202 UNKNOWN ICP · CONNECTION SETUP

Possible Deadlock in ICP

A warning about a possible deadlock during Initial Connection Protocol setup.

On rfc-editor.org ↗
PUBLISHED
July 1971
AUTHORS
S.M. Wolfe, J. Postel
STREAM
Legacy
DOI
10.17487/RFC0202

RFC text

Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                                        Steve Wolfe
Request for Comments:  #202                                     UCLA-CCN
NIC #7155                                                     Jon Postel
Categories:  D                                                  UCLA-NMC
References:  Document #2                                    26 July 1971
Obsoletes:  None

We have noticed a possible deadlock situation which may arise using the
Initial Connection Protocol (ICP) specified in Document #2 (NIC #7101 in
the Current Network Protocols Notebook NIC #7104).

If on both sides one RFC is issued and a "wait for match" is required
before the second RFC is issued, it is possible that the first RFC's
will not match.  In particular a deadlock will occur if both sides open
their send or both sides open their receive sockets first.

Briefly the ICP is:
<where the original uses a script lowercase letter with a single digit
subscript we use the lower case letter followed by {digit} so that
script-m-subscript-2 is printed m{2}>

Server                                User
------                                ----

S1:  Listen on socket L.              U1:  RTS(U, L, l{1})

S2:  Wait for a match.                U2:  Wait for match.

S3:  STR(L, U, s{1})

S4:  Wait for allocation.             U3:  All(l{1}, m{1}, b{1})

S5:  Send data S in s{1} bit          U4:  Receive data S in s{1}
     bytes as allowed by                   bit bytes.
     allocation m{1}, b{1}.

S6:  CLS(L, U)                        U5:  CLS(U, L)

S7:  RTS(S, U+3, l{2})                U6:  STR(U+3, S, s{2})

S8:  STR(S+1, U+2, s{3})              U7:  RTS(U+2, S+1, l{3})

"The labels here imply no ordering except that ordering required by the
Host-Host Protocol.  Note that steps S7 and S8 can be reversed as can U6
and U7.  Also, notice that at any time after S2 the server could
initiate steps S7 and S8 in parallel with steps S3 through S6, and that
at any time after U4 the user could initiate steps U6 and U7 in parallel
with step U5."

We recommend that the server perform steps 7 and 8 before waiting for
the user to perform step 6 or 7.  It is also suggested that the user
issue the RFC's in steps 6 and 7 without waiting for the server.  (If
the user is only Listening then both Listens should be issued without
waiting for the server.)  If for some reason a host must delay between
issuing RFC's it must issue the RFC's involving sockets S and U+3 first.

       [ This RFC was put into machine readable form for entry ]
         [ into the online RFC archives by Robert Barnes 6/97 ]

ISO Plain Language

On this page
PROBLEMThe Initial Connection Protocol can deadlock if both sides issue one request and wait for a match before issuing another.
MECHANISMThe note recommends that the server make its socket requests before waiting and that the user issue its requests without waiting for the server between them.
AVOIDING DEADLOCKIt also prioritizes requests involving sockets S and U+3 if a host must pause between requests.

§1How the Deadlock Can Happen

The RFC describes a possible deadlock in the Initial Connection Protocol (ICP). If both sides issue one request for connection and wait for a match before sending a second request, their first requests may not match.

A deadlock occurs in particular if both sides open their send sockets first or both open their receive sockets first.

Each host can be waiting for a request that the other host has not sent. If both follow the same mismatched order, neither can continue.

§2Recommended Request Order

The RFC recommends that the server perform steps 7 and 8 before waiting for the user to perform step 6 or 7. It also suggests that the user issue the requests in steps 6 and 7 without waiting for the server.

If the user is only listening, both listens should be issued without waiting for the server. If a host must pause between requests, it should issue the requests involving sockets S and U+3 first.

The server should send its later requests before it waits. The user should also send its requests without waiting after each one.

§3Scope of the Note

This short note identifies an ordering hazard in the ICP described in the cited Current Network Protocols document and recommends how hosts should order requests. It does not replace the complete ICP description.

This RFC focuses on one setup hazard and how to avoid it. It refers readers to the separate ICP specification for the complete procedure.