Movatterモバイル変換
[0]ホーム
[RFC Home] [TEXT|PDF|HTML] [Tracker] [IPR] [Info page]
UNKNOWN
Request for Comments: 689 May 1975NIC #32656TENEX NCP Finite State Machine for connectionsTENEX Memo Number 155The attached figure describes the finite state machine used in TENEXversion 1.33 to implement the ARPANET Host to Host protocol. Thismemo updates that of 27 August 1971, TENEX memo number 113, withregard to the finite state machine. Other parts of that memo havebeen incorporated into the JSYS manual and other documents.
TENEX NCP Finite State Machine for Connections Page 2The components of a finite state machine (FSM) are States,Events, and Actions. These are listed below:States Events Actions01 CLZD 00 RRFC 00 ANOP02 PNDO 01 CLSR 01 AFNY03 LSNG 02 CLSS 02 ACLS04 RFCR 03 CLZR 03 ARFC05 CLW1 04 CLZS 04 AOPB06 RFCS 05 ACPT 05 AOPL07 OPND 06 CONN 06 ACLL10 CLSW 07 LISN 07 ACLO11 DATW 10 RRFN 10 AEOR12 RFN1 11 TIME 11 AEOS13 CLZW 12 RRFB 12 AES116 FREE 13 AABT14 ACKANote that there are two kinds of "close" events and actions: a closeat the JSYS level (CLOSF) and one at the host-to-host protocol level(CLS). The names in the above list contain "CLS" if they areconcerned with host-to-host CLS, and CLZ if the are concerned withCLOSF.Each state will be briefly described below, along with eventswhich may occur while a connection is in that state, and actions whichare taken as the state is advanced.A few overall notes: Actions are shown on the state diagramfollowing a "/''. Any transition without an action shown generates"ANOP", a null action. The action "AFNY" means a "funny" event (i.e.,one not expected in this state -- probably a bug) has occurred. Theresult of this action is an IMPBUG error printout. Any event NOTshown on the state diagram causes the state to loop back to itself andan AFNY to be generated. These are not shown explicitly on thediagram. Another "funny" event is the execution of an "accept" MTOPRby the user program when the state is not RFCR. However, an errantuser program can do this, and no IMPBUG should be generated as aresult, so most states show a loop to self with no action (i.e., an"ANOP") as a result of the ACPT event. The event "TIME" (also called"HUNG") simply means that the socket has not changed state for aspecified time interval and may need to be prodded along. This timeis currently two minutes, except for connections in error states wherethe FSM is stepped faster to clear the connection out.State 16 - FREE - Free connectionA connection in this state has never existed, or is almost completelydeleted. No events are expected in this state except a program CLOSF(events CLZR or CLZS), or an erroneous Accept. The Accept causes anerror status bit to be set (AABT - Action: abort). A connectionleaves the FREE state by the creation of a socket. This can be theresult of a user OPENF or an incoming RFC. This causes the connection
TENEX NCP Finite State Machine for Connections Page 3to move into the CLZD state.State 01 - CLZD - ClosedThis state is very transitory. Events which cause a socket to becreated also immediately cause a further state change to either PNDG(if the event was the receipt of an RFC), LSNG if the event was aListen JSYS - i.e., an OPENF with a null extension), or RFCS (if theevent was an OPENF with a foreign socket specified). In the lattercase, an RFC is sent to the foreign socket (ARFC).State 02 - PNDG - PendingIn this state, an RFC has been received, but no local program hasindicated any interest in it. Events which may occur here are:LISN - a program decides to listen on the socket. Since an RFC hasarrived, the FSM is stepped to the same place it would have been ifthe LISN and RRFC had occurred in the other order; namely RFCR.CONN - a program decides to connect to the foreign socket. This stepsthe FSM to OPND and causes the AOPB action (open the link and send thematching RFC).TIME - The RFC (which was unsolicited) has sat around for two minuteswithout any local program deigning to act upon it. Therefore, toclear out the tables, it is refused (ACLS - a close is sent) and thenext state is CLSW to await the matching CLS.CLSR or CLSS - The site who sent the RFC has changed its mind and senta CLS, so we send the matching CLS and return the socket to the FREEstate.State 10 - CLSW - Wait for CLSThis state is entered when no further activity is required on aconnection except the receipt of a CLS from the far end. The CLS hasalready been sent to the far end. In some cases, the file systemCLOSF has not been done, so events CLZR and CLZS cause loops intoCLSW. The expected events are CLSR or CLSS, the receipt of the CLSfrom the far end of the connection, and these step the connection tostate FREE. Also, if two minutes go by without the CLS, it is assumedthat the required CLS response was lost by the foreign site so TIMEcauses the same action.State 03 - LSNG - Listening for RFCIn this state, no network activity has occurred. The local programis, however, waiting for some attempt at connection. This state doesnot time out (event TIME loops into LSNG). The program may decide tostop listening (e.g., it may simply log out of TENEX) so events CLZRand CLZS move the connection to state FREE. The desired event is thereceipt of an RFC for this socket. When an RFC arrives for a socketin a state other than CLZD, it is checked to see that the byte sizematches that declared by the user program. It then becomes event RRFCif the byte size matches, or RRFB if it does not match. RRFB causes aLSNG socket to go to state CLSW and a CLS to be sent, refusing theconnection. In the normal case, event RRFC steps the connection tostate RFCR.
TENEX NCP Finite State Machine for Connections Page 4State 06 - RFCS - An RFC has been sent.This state is entered when a program does a Connect (an OPENF with aspecific foreign socket). The RFC has been sent, and the matching RFCis awaited. If the foreign site refuses the request for connection,sending a CLS, events CLSR and CLSS cause the matching CLS to be sent(ACLS) and the socket is stepped to FREE state. If the user programgives up waiting for the acceptance of the connection (events CLZS orCLZR), a timeout happens (TIME) or an RFC arrives but has the wrongbyte size (RRFB), the socket is stepped to CLSW and a CLS is sent(ACLS). In the case of a properly accepted connection (event RRFC),the link tables are opened (AOPL) and the connection state goes toOPND.State 04 - RFCR - An RFC has been received.This state is reached when a Listen has been done by the user, and anRFC (with matching byte size) has been received. This state and thePNDG state make up the queueing mechanism for received RFC's. QueuedRFC's in PNDG state are for sockets which are not listening (althoughanother connection with the same socket number may have been listening-- this is just not the first one), so they time out after twominutes. In RFCR, though, a program has done a listen. Therefore,timeouts are suppressed to allow the accept to be done (event TIMEloops to RFCR).If the foreign site tires of waiting for the accept, it may send a CLS(events CLSR or CLSS) in which case the matching CLS is sent (ACLS)and the socket moves to state FREE.Also, while in this state, the program may examine the foreign hostand socket and decide to refuse the connection by doing a CLOSF(events CLZR and CLZS). This causes a CLS to be sent (action ACLS)and the socket steps to CLSW to await the matching CLS.If the program likes the request for connection, it will accept itwith an MTOPR JSYS (event ACPT), causing action AOPB (sending thematching RFC and opening the link tables), and the socket steps tostate OPND.State 07 - OPND - opened.This is the state during which data may be transferred. Both RFC'shave been sent. Allocation and RFNM activity are not considered inthis state diagram, but until one end or the other tries to close theconnection that activity proceeds at another level of the code. Theexception is event TIME. After two minutes of inactivity on thesocket, action ACKA (Check allocation) occurs. This action causesallocate resynchronizing to occur if the foreign host is known tounderstand that extension to the host-host protocol.The remaining events and states are all associated with properlygetting a connection closed and free, from the OPND state. This getscomplicated. There are four initial events: closes done locally andcloses from the remote end of the connection, each of which may be fora sending or a receiving connection. These are CLZR, CLZS, CLSR andCLSS.CLZR - The local program closes a connection which has been receiving.A CLS is sent (ACLS) and the state is stepped to CLW1 which is similarto CLSW except that the link tables must be closed when a CLS comes
TENEX NCP Finite State Machine for Connections Page 5back.CLZS - The local program closes a connection which has been sending.The state is stepped to DATW and action AEOS is performed. AEOS(action end of send) sets a done flag which lower level routines useto signal the FSM when the last data has been sent and acknowledged byRFNM.CLSR - a CLS is received on a receive connection. This is the normal"end of file" case. Action AEOR (end of receive) occurs and the statemoves to CLZW. AEOR causes the same flags to be set as AEOS, and inaddition (if this connection is hooked to an NVT) causes an NVT DETACHto be performed.CLSS - a CLS is received on a send connection, before we (the sendingend) had closed it. Action AESl occurs, which is the same as AEOSexcept that messages queued to go out are discarded. The state movesto RFN2 to await the final RFNM.State 05 - CLW1 - Close wait sub 1.This state is the same as CLSW except that a link table entry remainsto be cleared out. A CLS has been sent and we await the matching CLS.When it arrives, or two minutes go by, the state is stepped to FREEand action ACLL (close link) is performed.State 11 - DATW - Final data wait.This state is NOT the normal waiting for data on an open connection.It is only during the sending of the last of the data on a sendconnection which has been locally closed but which has not yet had allthe data accepted by the far end.RRFN - Received final RFNM - event is the desired one. When thisoccurs, all the data has been sent so we send a CLS (ACLS) and go tostate CLW1 to await the matching CLS.TIME may also occur. If it does, we pretend we had seen the finalRFNM and act as for RRFN. This timeout may occur either because anRFNM has been lost by the IMP or the subnet, or because ofunresposiveness on the part of the foreign host. The latter couldoccur if the amount of data to be sent when the CLOSF is done exceedsthe available allocation at that time. If the foreign host does notsend allocation, or disagrees with us and thinks allocation isoutstanding, the timeout will free the socket.CLSS may occur. If so, the far end has not accepted all the data, butwants to abort the connection. This is treated about as it was whenit occurred from the OPND state, namely AES1 action, but must go to adifferent next state, RFN1, to distinguish the fact that a local CLOSFhas already occurred.State 14 - RFN2 - Final RFNM wait sub 2.This state means that an unexpected close arrived when we were happilysending data. We now await the final RFNM for any outstanding datamessages. When this occurs, or if there were no outstanding messages,the state moves to CLZW. ACLO is performed, sending a CLS (matchingthe unexpected CLS which arrived during OPND) and closing the link.If two minutes go by and no final RFNM arrives, we also just go toCLZW to prevent being hung by an unresponsive foreign host or anIMP/subnet failure, also performing ACLO. This is analogous to the
TENEX NCP Finite State Machine for Connections Page 6timeout from state DATW above.While waiting for the RFNM, the local program may try to CLOSF theconnection (CLZR, CLZS). If so, we go to state RFN1 and continue toawait the final RFNM.State 12 - RFN1 - Final RFNM wait sub 1. In this state, it's allover but the final RFNM. When it arrives (RRFN) or two minutes go by(TIME), we close the link tables and send a CLS to the foreign site(ACLO). Since the CLS has already been received, the connection isnow gone and we step it to FREE.State 13 - CLZW - Wait for program to close file.This is the normal state after an end of file when receiving, beforethe CLOSF (CLZR) has occurred. It is also the state of a sendconnection which was aborted (CLS) by the receiver (foreign host) whenall sent messages have been RFNM'ed but the local CLOSF (CLZS) has notbeen done. We wait for the local program to do the CLOSF. When itdoes, we close the link table if this is a receive connection, and ineither case step the connection to the FREE state.
[8]ページ先頭