⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc983.txt

📁 RFC 的详细文档!
💻 TXT
📖 第 1 页 / 共 4 页
字号:












Cass & Rose                                                     [Page 7]



RFC 983                                                       April 1986
ISO Transport Services on Top of the TCP


5.  The Protocol

   It is the goal of this memo to offer a TP interface on top of the
   TCP.  Fortunately, the TCP does just about everything that
   TS-provider offers to the TS-user, so the hard parts of the transport
   layer (e.g., three-way handshakes, choice of ISS, windowing,
   multiplexing, ad infinitum) are all taken care of by the TCP.

   Despite the symmetry of TP, it is useful to consider the protocol
   with the perspective of a client/server model.

   The information exchanged between TSAP-peers is in the form of
   packets termed "TPKT"s.  The format of these packets is described in
   the next section.  For the purposes of the description below, a TPKT
   has a code which is one of:

      CR - request connection
      CC - confirm connection
      DR - request disconnection
      DT - data
      ED - expedited data

   A TSAP server begins by LISTENing on TCP port 102.  When a TSAP
   client successfully connects to this port, the protocol begins.

   A client decides to connect to the port when a TS-user issues a
   T-CONNECT.REQUEST action.  This action specifies the TSAP ID of the
   remote TS-user, whether expedited data is to be supported, and
   (optionally) some initial TS-user data.  The client consults the TSAP
   ID given to ascertain the IP address of the server.  If the expedited
   data option was requested, the client opens a passive TCP port, in
   non-blocking mode, noting the port number.  This TCP port is termed
   the "expedited port".  The client then tries to open a TCP connection
   to the server on port 102.  If not successful, the client fires
   T-DISCONNECT.INDICATION for the TS-user specifying the reason for
   failure (and, closes the expedited port, if any).  If successful, the
   client sends a TPKT with code CR containing:

      - the TSAP ID of the TS-user on the client's host (the "caller")
      - the TSAP ID of the TS-user that the client wants to talk to
        (the "called")
      - if the expedited data option was requested, the TSAP ID of the
        expedited port for the client's host
      - any TS-user data from the T-CONNECT.REQUEST

   The client now awaits a response.



Cass & Rose                                                     [Page 8]



RFC 983                                                       April 1986
ISO Transport Services on Top of the TCP


   The server, upon receipt of the TPKT, validates the contents of the
   TPKT (checking the version number, verifying that the code is CR, and
   so forth).  If the packet is invalid, the server sends a TPKT with
   code DR specifying "PROTOCOL ERROR", closes the TCP connection, and
   goes back to the LISTEN state.

   If the packet is valid, the server examines the TSAP ID that the
   remote TS-user wants to communicate with.  If the TS-user specified
   can be located and started (e.g., the appropriate program which
   implements the indicated protocol is present), then the server starts
   this TS-user by firing T-CONNECT.INDICATION.  Otherwise, the server
   sends a TPKT with code DR specifying "SESSION ENTITY NOT ATTACHED TO
   TSAP" or "REMOTE TRANSPORT ENTITY CONGESTED AT CONNECT REQUEST TIME"
   as appropriate, closes the TCP connection, and goes back to the
   LISTEN state.

   The server now waits for a T-CONNECT.RESPONSE or T-DISCONNECT.REQUEST
   from the TS-user it started.  if the latter is given, the server
   sends a TPKT with code DR containing the reason for the disconnect as
   supplied by the TS-user.

   The server then closes the TCP connection and goes back to the LISTEN
   state.

   Instead, if T-CONNECT.RESPONSE is given, the server sees if an
   expedited port was specified in the connection request.  If so, the
   server opens a second TCP connection and connects to the specified
   port.  If the connection fails, the server sends a TPKT with code DR
   specifying "CONNECTION NEGOTIATION FAILED", closes the TCP
   connection, and goes back to the LISTEN state.  If the connection
   succeeded, the server notes the local port number used to connect to
   the expedited port.

   If an expedited port was not specified in the TPKT with code CR, and
   the server's TS-user indicates that it wants to use expedited data,
   then the server sends a TPKT with code DR specifying "CONNECTION
   NEGOTIATION FAILED", fires T-DISCONNECT.INDICATION with this error to
   the TS-user, closes the TCP connection, and goes back to the LISTEN
   state.

   The server now sends a TPKT with code CC containing:

      - the TSAP ID of the TS-user responding to the connection
        (usually the "called")
      - if an expedited port was specified in the TPKT with code CR,




Cass & Rose                                                     [Page 9]



RFC 983                                                       April 1986
ISO Transport Services on Top of the TCP


        the TSAP ID of the port number on the server's host that was
        used to connect to the expedited port
      - any TS-user data from the T-CONNECT.RESPONSE

   After sending the TPKT, the server enters the SYMMETRIC PEER state.

   The client, upon receipt of the TPKT, validates the contents of the
   TPKT (checking the version number, verifying that the code is CC or
   DR, and so forth).  If the packet is invalid, the client sends a TPKT
   with code DR specifying "PROTOCOL ERROR", fires
   T-DISCONNECT.INDICATION with this error to the TS-user, and closes
   the TCP connection (and the expedited port, if any).

   If the packet's code is DR, the client fires T-DISCONNECT.INDICATION
   with the reason given in the TPKT to the TS-user, and closes the TCP
   connection (and the expedited port, if any).

   If the packet's code is CC, the client checks if an expedited port
   was specified and that a connection is waiting on the expedited port.
   If not, a protocol error has occurred, a TPKT with code DR is
   returned, T-DISCONNECT.INDICATION is fired, and so on.  Otherwise,
   the client checks the remote address that connected to the expedited
   port.  If it differs from the port listed in the TPKT with code CC, a
   protocol error has occurred.  Otherwise, all is well, two TCP
   connections have been established, one for all TPKTs except expedited
   data, and the second for the exclusive use of expedited data.

   The client now fires T-CONNECT.CONFIRMATION, and enters the SYMMETRIC
   PEER state.

   Once both sides have reached the SYMMETRIC PEER state, the protocol
   is completely symmetric, the notion of client/server is lost.  Both
   TS-peers act in the following fashion:

   If the TCP indicates that data can be read, the TS-peer, upon receipt
   of the TPKT, validates the contents.  If the packet is invalid, the
   TS-peer sends a TPKT with code DR specifying "PROTOCOL ERROR", fires
   T-DISCONNECT.INDICATION with this error to the TS-user, and closes
   the TCP connection (and expedited data connection, if any).  If the
   TS-peer was the server, it goes back to the LISTEN state.

      NOTE:  If the expedited data option was requested, then there are
      two TCP connections that can supply data for reading.  The
      dialogue below assumes that only ED TPKTs are read from the
      expedited data connection. For simplicity's sake, when reading
      from TCP the relation between connections and TPKTs is unimportant
      and this memo URGES all implementations to be very lenient in this


Cass & Rose                                                    [Page 10]



RFC 983                                                       April 1986
ISO Transport Services on Top of the TCP


      regard.  When writing to TCP, implementations should use the
      expedited data connection only to send TPKTs with code ED.
      Section 7 of this memo discusses the handling of expedited data in
      greater detail.

   If the packet's code is DR, the TS-peer fires T-DISCONNECT.INDICATION
   with the reason given in the TPKT to the TS-user, and closes the TCP
   connection (and expedited data connection, if any).  If the TS-peer
   was the server, it goes back to the LISTEN state.

   If the packet's code is ED or DT, the TS-peer fires T-DATA.INDICATION
   or T-EXPEDITED DATA.INDICATION as appropriate with the enclosed user
   data for the TS-user.  It then goes back to the SYMMETRIC PEER state.

   If the packet is invalid, the TS-peer sends a TPKT with code DR
   specifying "PROTOCOL ERROR", fires T-DISCONNECT.INDICATION with this
   error to the TS-user, and closes the TCP connection (and expedited
   data connection, if any).  If the TS-peer was the server, it goes
   back to the LISTEN state.

   If the TCP indicates that an error has occurred and the connection
   has closed, then the TS-peer fires T-DISCONNECT.INDICATION to the
   TS-user specifying the reason for the failure.  If the expedited data
   connection, if any, is still open, it is closed.  If the TS-peer was
   the server, it goes back to the LISTEN state.

   If the TS-user issues a T-DATA.REQUEST or T-EXPEDITED DATA.REQUEST
   action, the TS-peer sends a TPKT with code DT or ED containing the
   TS-user data.  It then goes back to the SYMMETRIC PEER state.

   If the TS-user issues a T-DISCONNECT.REQUEST action, the TS-peer
   sends a TPKT with code DR containing the reason for the disconnect as
   supplied by the TS-user.  The TS-peer then closes the TCP connection,
   (and expedited data connection, if any).  If the TS-peer was the
   server, it goes back to the LISTEN state.

   In terms of (augmented) state tables, the protocol can be explained
   as follows.  The server starts in state S0, the client starts in
   state C0.  "TCP:"  refers to an event or action from the TCP service,
   "SS:"  refers to an event or action from the TS-user (e.g., the ISO
   session service [ISO-8327]).








Cass & Rose                                                    [Page 11]



RFC 983                                                       April 1986
ISO Transport Services on Top of the TCP


                        S E R V E R   S T A T E S

   state        event                   action                      goto
   -----        -----                   ------                      ----
   S0                                   TCP: listen on port 102     S1

   S1           TCP: connected          TCP: read TPKT
                                        parse, on error
                                          TCP: send DR, close       S0
                                        code is CR
                                          start session server
                                          SS: T-CONNECT             S2
                                                .INDICATION
                                        otherwise,
                                          TCP: send DR, close       S0

   S2           SS: T-CONNECT.RESPONSE  if expedited option,
                                          TCP: open port EXPD
                                        TCP: send CC                P0

   S2           SS: T-DISCONNECT        TCP: send DR, close         S0
                        .REQUEST

   Any event occuring for a state not listed above is considered an
   error, and handled thusly:

   state        event                   action                      goto
   -----        -----                   ------                      ----
   S*           TCP: other              if TCP is open, TCP: close  S0
                                        otherwise ignore            S0
   S*           SS: other               SS: T-DISCONNECT
                                              .INDICATION
                                        if TCP is open, close       S0
















Cass & Rose                                                    [Page 12]



RFC 983                                                       April 1986
ISO Transport Services on Top of the TCP


                        C L I E N T   S T A T E S

   state        event                   action                      goto
   -----        -----                   ------                      ----
   C0           SS: T-CONNECT.REQUEST   if expedited option,
                                          TCP: non-blocking
                                               listen on port EXPD
                                        TCP: open port 102          C1

   C1           TCP: connected          TCP: send CR                C2

   C1           TCP: connect fails      TCP: close
                                        SS: T-DISCONNECT            C0
                                                 .INDICATION
   

   C2           TCP: data ready         TCP: read TPKT
                                        parse, on error
                                          TCP: send DR, close
                                          SS: T-DISCONNECT          C0
                                                .INDICATION
                                        code is CC
                                          if expedited option,
                                             verify port EXPD
                                             connected correctly,
                                             if not, treat as error
                                          SS: T-CONNECT             P0
                                                .CONFIRMATION
                                        code is DR
                                          TCP: close
                                          SS: T-DISCONNECT          C0
                                                .INDICATION
                                        otherwise
                                          TCP: send DR, close
                                          SS: T-DISCONNECT          C0
                                                .INDICATION













Cass & Rose                                                    [Page 13]



RFC 983                                                       April 1986
ISO Transport Services on Top of the TCP


   Any event occuring for a state not listed above is considered an
   error, and handled thusly:

   state        event                   action                      goto
   -----        -----                   ------                      ----
   C*           TCP: other              if TCP is open, close       C0
                                        otherwise ignore            C0

   C*           SS: other               SS: T-DISCONNECT
                                              .INDICATION
                                        if TCP is open, close       C0












⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -