Winsock
You installed a stack, told it a phone number, and listened to two modems find each other. Then the screeching stopped, and for about two seconds nothing happened. What was happening was this: the two ends of the line were running an automaton at each other, deciding whether there was a link at all. Only when it reached one particular state could anything above it — a browser, a mail reader, anything — do a single useful thing.
The negotiation
Three things that could happen when you dialled. Step through them and watch the automaton move. Every transition below is a lookup in the table further down, which is the table printed in RFC 1661; nothing on this page decides anything for itself.
| event | from | to | actions |
|---|
Opened. The layer above has been told the link is up, and a browser can finally do something.
The table it is reading
Ten states across, sixteen events down, a hundred and sixty cells. This is section 4.1 of RFC 1661, transcribed and checked cell by cell against the document. The cell being used right now is marked.
In the RFC's own words: State transitions and actions are represented in the form action/new-state.
And The dash ('-') indicates an illegal transition.
Why there are two Ack states
A link is not one agreement, it is two. You send a Configure-Request saying what you want; the other end sends one saying what it wants. You are Opened only when both have been answered, and the automaton needs to remember which half has already happened. Ack-Rcvd means your request was granted and theirs is still outstanding. Ack-Sent means you granted theirs and yours is still outstanding. Either one, plus the missing half, gets you to Opened, which is why both of them and only both of them lead there.
That is the sort of thing a state table makes obvious and prose makes hard. Look down the Opened column of the matrix: everything that can arrive on a working link has an answer, and the only illegal events are coming Up when you are already up, and a timer expiring when no timer is running.
What made it a machine you could install
None of this was new in 1994. What was new was that an ordinary person could buy a modem, install one piece of software, and end up with a computer that was on the internet rather than a terminal talking to something that was. The stack did the negotiation above and then handed every application a socket, so the browser did not have to know about any of it. Install it once and everything worked, instead of every program shipping its own networking and none of them agreeing.
That is the change this domain is named for. The automaton is what the stack was doing in the two seconds before the first page loaded.
What is real here, and what is not
This is LCP, and LCP is not the whole connection
Reaching Opened means the link exists. It does not mean you have an address. After LCP came authentication, usually PAP or CHAP, and then IPCP, which is a second automaton with the same shape that negotiates the IP address itself, and only after that could anything be routed. This page models the first of those three and says so rather than implying the story ends at Opened.
The table is transcribed, and it was hard to transcribe
RFC 1661 prints the table as plain text in two blocks, and its columns stop lining up when a cell is wider than its column. Splitting a row on whitespace merges two cells of the RCR+ row, where "sta/2" and "irc,scr,sca/8" are separated by a single space. Slicing at the header positions cuts the Close row in the wrong places for the same reason. What this page does instead is take each cell as a token by its shape and require every row to produce exactly one cell per state, which is a check the other two methods fail loudly rather than quietly getting wrong. The test parses the archived RFC and compares all hundred and sixty cells.
The restart counter moves, and the timers do not
There is no clock here. The Timeout events are things you press, not things that happen after a Restart timer expires, because a page that made you wait three seconds for each retransmission would be teaching patience rather than protocol. The counter that the actions Initialize-Restart-Count and Zero-Restart-Count move is real and is shown; the timer that would decrement it is not modelled.
Option negotiation is a name here, not a mechanism
The difference between RCR+ and RCR- is whether the options the other end asked for were acceptable, and deciding that is a real piece of work: maximum receive unit, authentication protocol, magic number, and the rest of section 6. This page lets you pick which of the two events arrived and does not model the decision behind it. What it models faithfully is what the automaton does once that decision has been made.
Nothing here is Winsock's own specification
Winsock is the API a Windows application called to use a socket, and its specification is a separate document from this one. It was not reachable when this page was built: it is not on bitsavers, the current vendor documentation is modern developer material rather than the 1993 specification, and the archive that most likely holds it was refusing automated requests. So this page is named for the thing people installed and models what that thing was doing, rather than pretending to document an interface nobody here has read. If the specification turns up, the honest move is a second machine and not a quiet expansion of this one.
Sources
- W. Simpson, editor, The Point-to-Point Protocol (PPP), RFC 1661, STD 51, July 1994. The primary document and the only one this page needs: section 4.1 is the state transition table, 4.3 the events, 4.4 the actions. Every transition, action name and state name here is transcribed from it and checked against it by the test suite.
- Logical Art, the studio this belongs to.