Annotation of 43BSDReno/contrib/isode-beta/doc/cn-isdn/section3.tex, revision 1.1.1.1

1.1       root        1: % run this through LaTeX with the appropriate wrapper
                      2: 
                      3: \section      {The Approach}
                      4: From the viewpoint of OSI-applications development,
                      5: we should note that the best of all solutions to the problem sketched earlier
                      6: requires a complementary co-existence:
                      7: \begin{itemize}
                      8: \item  we want to utilize mature TCP/IP functionality and stability which is
                      9:        not currently present in the immature OSI protocol suite;
                     10: 
                     11: \item  we want to utilize new OSI functionality as it becomes available;
                     12:        and,
                     13: 
                     14: \item  we want to develop OSI-based applications now in an {\em evolutionary},
                     15:        not {\em revolutionary} fashion.
                     16: \end{itemize}
                     17: These criteria suggest motivations for a migration strategy.
                     18: In migrating from the DDN protocol suite to the OSI protocol suite,
                     19: there are several strategic choices to be made.
                     20: 
                     21: For the lack of a better term,
                     22: we will call the object which joins the two protocol suites a {\em magic box}.
                     23: We favor the use of this term instead of {\em gateway},
                     24: since the former term invokes less inference on the part of the reader.
                     25: To choose where the magic box should ``live'',
                     26: we make three observations:
                     27: \begin{enumerate}
                     28: \item  Joining at the session layer (or above) introduces too much
                     29: dependency on the ARPAnet client/server model, as discussed in the
                     30: introduction.
                     31: This argues for the magic box to live no higher than the transport
                     32: level.
                     33: 
                     34: \item  Joining at the network layer (or below) foregoes use of the TCP and
                     35: requires complete implementation of the TP on top of the \dod/ IP.
                     36: It also prevents the use of the efficient board-level products which
                     37: implement the TCP.
                     38: This argues for the magic box to live no lower than the service
                     39: access points at the top of the transport layer.
                     40: 
                     41: \item  In general,
                     42: the construction of magic boxes at any location other than the transport
                     43: layer is problematic at best;
                     44: this will be illustrated later on
                     45: (in Section~\ref{comparison} on page~\pageref{comparison}).
                     46: \end{enumerate}
                     47: Given these arguments,
                     48: the OSI Transport Service Access Point (TSAP) is the ideal place for the magic
                     49: box to be constructed:
                     50: it allows us to take advantages of the main strengths of the DDN protocol
                     51: suite while providing OSI defined services at the layers above.
                     52: Figure~\ref{tsap.model} outlines the relationships we propose.
                     53: \tagfigure{3-1}{OSI Transport Services on top of the TCP}{tsap.model}
                     54: 
                     55: Our approach is to utilize exactly one TCP port (number~102) with
                     56: TS-peers running on this port to interpret the protocol data units (PDUs)
                     57: on the connection and dispatch them accordingly.
                     58: This is not nearly as difficult as it sounds,
                     59: since the TCP performs all the multiplexing,
                     60: and provides each client/server pair with exactly one connection to manage.
                     61: As a result, the dispatch function is trivial (i.e., null).
                     62: Currently,
                     63: we use a very simple mapping between TSAP IDs and services
                     64: (a shortcoming described later).
                     65: 
                     66: \subsection    {Summary of the Protocol}\label{protocol}
                     67: The external behavior of our magic box is to use the services offered by the
                     68: TCP
                     69: and co-operate with other magic boxes,
                     70: to provide the services defined for the TP.
                     71: For our purposes,
                     72: we define the {\em services offered\/} by a protocol
                     73: as its service primitives.
                     74: The services offered by the TCP and the TP are summarized in
                     75: Tables~\ref{tcp.services} and~\ref{tp.services} respectively
                     76: (readers should consult the authoritative works \cite{TCP} and
                     77: \cite{ISO.TP.Service} for more detailed information).
                     78: For purposes of exposition,
                     79: we use the term {\em TS-user\/} to denote an entity utilizing the transport
                     80: services,
                     81: and {\em TS-provider\/} to denote an entity providing those services.
                     82: \tagtable{3-1}{TCP Service Primitives Offered}{tcp.services}
                     83: \tagtable{3-2}{TP Service Primitives Offered}{tp.services}
                     84: 
                     85: Since both the TCP and the TP primarily offer a virtual-circuit service,
                     86: it is not surprising that
                     87: all the ``hard parts'' of the TP are also done by the TCP
                     88: (e.g., three-way handshake, choice of initial sequence number, windowing,
                     89: multiplexing, and so on).
                     90: This leaves us with the task of devising a protocol,
                     91: running above the TCP,
                     92: which performs whatever tasks are necessary to map one flavor of service
                     93: primitives into the other.
                     94: 
                     95: Despite the symmetry of the TP,
                     96: it is useful to consider the magic-box protocol with the perspective of a
                     97: client/server model.
                     98: We view two entities, denoted {\em TS-peers}, as implementing this protocol.
                     99: One of these TS-peers,
                    100: the TSAP server, begins by LISTENing on TCP port~102.
                    101: When the other peer, the TSAP client, successfully connects to this port,
                    102: the protocol begins.
                    103: 
                    104: A client TS-peer decides to connect to the TCP port on the service host
                    105: when the client's TS-user issues the {\sf T-CONNECT.REQUEST\/} action.
                    106: One of the parameters to this action specifies the TSAP ID (identifier) of
                    107: the remote TS-user.
                    108: The client uses the TSAP ID to ascertain the IP address of the server,
                    109: and attempts to open a connection to TCP port~102 at that IP address.
                    110: If not successful,
                    111: the client fires the {\sf T-DISCONNECT.INDICATION\/} event for the TS-user.
                    112: 
                    113: Although the TCP offers a byte-stream,
                    114: the magic-box protocol packetizes the bytes into units which have the
                    115: identical syntax (format) as data units in the TP (TPDUs).
                    116: These packets are termed TPKTs to avoid any confusion with the term TPDU.
                    117: When the connection is opened,
                    118: the client fills in a request-connection TPKT, sends it to the server, and
                    119: awaits a response.
                    120: 
                    121: The server, upon receipt of the TPKT,
                    122: validates the contents of the TPKT
                    123: (checking the version number, verifying the type code, and so on).
                    124: If the packet is invalid,
                    125: the server sends a request-disconnection TPKT,
                    126: closes the connection, and goes back to the listen state.
                    127: Otherwise,
                    128: the server examines the TSAP ID of the TS-user with which the remote TS-user
                    129: wants to communicate.
                    130: If the specified TS-user can be located and started,
                    131: the server starts this TS-user by firing the {\sf T-CONNECT.INDICATION\/}
                    132: event.
                    133: Otherwise a request-disconnection TPKT is sent
                    134: (and the server closes the connection and goes back to the LISTEN state).
                    135: 
                    136: The TS-user receiving the event will now respond with one of two actions,
                    137: either {\sf T-CONNECT.RESPONSE\/} or {\sf T-DISCONNECT.REQUEST}.
                    138: Depending on the response,
                    139: the server sends either a request-disconnection or a confirm-connection
                    140: TPKT back to the client.
                    141: The server then enters the SYMMETRIC PEER state.
                    142: 
                    143: When the client receives the reply TPKT from the server,
                    144: it performs the usual validation.
                    145: If the packet received was a request-disconnection TPKT,
                    146: the client fires the {\sf T-DISCONNECT.INDICATION\/} event,
                    147: and closes the connection.
                    148: Otherwise,
                    149: it fires the {\sf T-CONNECT.CONFIRMATION\/} event
                    150: and enters the SYMMETRIC PEER state.
                    151: 
                    152: Once both sides have reached the SYMMETRIC PEER state,
                    153: the protocol is completely symmetric and the notion of whether the TS-peer
                    154: started as a client or server is lost.
                    155: Both TS-peers act in the following fashion:
                    156: if the TCP indicates that data can be read,
                    157: the TS-peer reads the TPKT, and validates the contents.
                    158: \begin{itemize}
                    159: \item  A request-disconnection TPKT results in the
                    160: {\sf T-DISCONNECT.INDICATION\/} event being fired, and the TCP connection
                    161: being closed.
                    162: 
                    163: \item  A data TPKT or expedited data TPKT results in {\sf T-DATA.INDICATION\/}
                    164: or {\sf T-EXPEDITED DATA.INDICATION\/} event (respectively) being fired.
                    165: 
                    166: \item  Invalid TPKTs result in the {\sf T-DISCONNECT.INDICATION\/} event
                    167: being fired for the TS-user,
                    168: a request-disconnection TPKT being sent,
                    169: and the connection being gracefully closed.
                    170: 
                    171: \item  An error on the TCP connection also results in the
                    172: {\sf T-DISCONNECT.INDICATION\/} event being fired.
                    173: \end{itemize}
                    174: As expected,
                    175: the {\sf T-DATA.REQUEST}, the {\sf T-EXPEDITED DATA.REQUEST},
                    176: and the {\sf T-DISCONNECT.REQUEST\/} actions on the part of the TS-user
                    177: result in the appropriate TPKT being sent to the remote TS-peer.
                    178: 
                    179: In the interests of brevity,
                    180: many parts of the protocol were simplified or omitted from the discussion
                    181: above.
                    182: For example,
                    183: when a request-disconnect TPKT is sent,
                    184: it contains a code indicating why the disconnect was initiated.
                    185: The precise protocol (including state machines) is presented in
                    186: \cite{TSAP.on.TCP.old}.
                    187: 
                    188: \subsection    {Design Decisions}
                    189: The previous section discussed the protocol in simplistic detail.
                    190: We should now consider certain nuances in the protocol's design and behavior.
                    191: 
                    192: \subsubsection {Packet Format}
                    193: The choice of packet format for the magic box protocol was made rather arbitrarily:
                    194: the TP format for TPDUs was chosen as it was suitable for our needs.
                    195: Although a few fields are ignored,
                    196: this introduces a very small amount of additional overhead.
                    197: For example,
                    198: on a request-connection TPKT (the worse case),
                    199: there are 6 octets of ``zero on output, ignore on input'' fields.
                    200: Considering that the packet overhead is fixed,
                    201: requiring that implementations allocate an additional 6 octets is not
                    202: unreasonable.
                    203: As experience is gained,
                    204: some of these fields (e.g., the class field) may be used in future versions
                    205: of the protocol.
                    206: 
                    207: \subsubsection {Quality of Service}
                    208: In our proposal, this is left ``for further study''.
                    209: We expect a future version of the protocol to attempt to map the TP QOS
                    210: parameters into the DDN IP precedence and security parameters.
                    211: 
                    212: \subsubsection {Administration of Address Space}
                    213: It is tempting to define a straight-forward mapping between the OSI and
                    214: TCP/IP addressing domains.
                    215: For example,
                    216: the OSI network service access point identifier (NSAP ID) could be mapped
                    217: into a DDN IP address,
                    218: and a combination of the service access point selectors of the higher layers
                    219: could be mapped into a TCP port number.
                    220: Unfortunately there is no straight-forward mapping for
                    221: the OSI session and presentation service access point selectors,
                    222: as each application in the DDN protocol suite has its own implicit session
                    223: and presentation mechanism.
                    224: One solution is to view the mappings as:
                    225: \[\begin{tabular}{rlc}
                    226:        $<$NSAP ID$>$&
                    227:                        $\longleftrightarrow$&  $<$IP address$>$\\
                    228:        $<$TSAP  selector, SSAP selector, PSAP selector$>$&
                    229:                        $\longleftrightarrow$&  $<$TCP port$>$
                    230: \end{tabular}\]
                    231: This approach is particularly interesting because it suggests that the
                    232: TP can be run directly above the DDN IP protocol.
                    233: However, this suggestion is not necessarily a benefit
                    234: (again see Section~\ref{comparison}).
                    235: 
                    236: However,
                    237: the TCP port space cannot accommodate the space of OSI higher layer selectors.
                    238: The TCP supports a port space denoted by small integers,
                    239: represented as unsigned 16--bit quantities.
                    240: Further, any port larger than~1023 is reserved for the use of clients,
                    241: and ports larger than ~511 are reserved for the use of local servers.
                    242: This leaves about 510~ports for well-known (pre-assigned) services,
                    243: most of which are already in use by existing services.
                    244: 
                    245: \subsubsection {Expedited Data}
                    246: The largest difference between the services offered by the TCP and the TP is
                    247: the expedited data service offered by the TP.
                    248: We initially experimented with three approaches which could be used in
                    249: implementing expedited data with the TCP:
                    250: \begin{itemize}
                    251: \item  Use a single connection without the TCP URGENT\\[0.1in]
                    252: All data TPKTs and expedited data TPKTs are placed on the same TCP connection.
                    253: As a result,
                    254: there is no actual ``priority'' associated with the
                    255: {\sf EXPEDITED DATA.REQUEST\/} action other than it
                    256: eventually resulting in the {\sf EXPEDITED DATA.INDICATION} event occuring in
                    257: the future.
                    258: Furthermore,
                    259: we are guaranteed that once any expedited data is sent,
                    260: it will arrive before any data sent in the future arrives.
                    261: This is true to the letter, though perhaps not to the spirit of the TP.
                    262: 
                    263: \item  Use a single connection with the TCP URGENT\\[0.1in]
                    264: All data TPKTs and expedited data TPKTs are placed on the same TCP connection.
                    265: However,
                    266: expedited data TPKTs are sent with the URGENT bit set.
                    267: The receiving TCP could signal the TS-provider that URGENT information was
                    268: available on the connection.
                    269: The TS-provider could then buffer all further TPKTs until the TPKT
                    270: containing the URGENT pointer was received.
                    271: After this TPKT had been handled,
                    272: the buffered (non-expedited) data could be acted upon.
                    273: Although this is more true to the spirit of the TP,
                    274: it requires some complex buffer management and may not be implementable on
                    275: single-thread implementations of the TCP
                    276: (e.g., some implementations for \msdos/ on the PC).
                    277: 
                    278: \item  Use two connections\\[0.1in]
                    279: A third approach is to open two connections.
                    280: During connection establishment,
                    281: after making a TCP connection to the server,
                    282: the client starts a PASSIVE, non-blocking TCP open.
                    283: The address of a TCP port associated with the open is then passed
                    284: in the TSAP ID of the request-connection TPKT.
                    285: Immediately before the server sends the confirm-connection TPKT,
                    286: it connects to the indicated port.
                    287: Upon success,
                    288: it passes in the confirm-connection TPKT the TCP port it used to make
                    289: the second connection (thus introducing a secondary correctness check).
                    290: This requires no buffer management on the part of the TS-provider,
                    291: and can be implemented even in single-thread implementations of the TCP.
                    292: The disadvantage of our approach is that it may violate the letter of the TP!
                    293: Since two connections are used,
                    294: the paths in the subnet taken by the packets may differ,
                    295: and it is possible that non-expedited data sent after expedited data may
                    296: actually arrive earlier.
                    297: \end{itemize}
                    298: Version~1 of the protocol used the third approach to implement the expedited
                    299: data service.
                    300: However, in order to guarantee the semantics of the service,
                    301: it became apparent that a complicated buffering scheme was required.
                    302: Rather than introduce additional complexity,
                    303: in version~2 of the protocol we opted for the first approach.
                    304: This requires no buffering and implements the semantics correctly,
                    305: albeit at the boundaries of the service specification.
                    306: 
                    307: \subsection    {Work To Date}
                    308: Work to date has reached two milestones:
                    309: 
                    310: \subsubsection {RFC983}
                    311: In April of {\oldstyle 1986},
                    312: the DDN Network Information Center issued RFC983,
                    313: entitled {\it ISO Transport Services on top of the TCP\/}\cite{TSAP.on.TCP.old}.%
                    314: \footnote{\cite{TSAP.on.TCP.old} specifies version~1 of the protocol.
                    315: Based on our experiences,
                    316: we are currently running version~2,
                    317: which consists of four minor changes to the original protocol.
                    318: A new RFC, describing these changes, is undergoing review.
                    319: Appendix~\ref{changes} summarizes these changes.}
                    320: This document presents our model of operation and gives a formal description
                    321: of the protocol described in the Section~\ref{protocol}.
                    322: 
                    323: It is important to understand exactly what RFC983 intends.
                    324: RFC983 does not specify how one constructs an interface to the OSI TSAP.
                    325: It indicates how one might build such an interface on top of the TCP.
                    326: That is,
                    327: given the abstract service definitions for the TP,
                    328: instructions are given as to how those can be mapped on to the services
                    329: provided by the TCP.
                    330: From our perspective, a proper implementation of RFC983 exhibits the
                    331: following properties:  
                    332: \begin{enumerate}
                    333: \item  it has the TSAP interface that you want on your host;
                    334:        and,
                    335: \item  it uses the protocol defined in RFC983.
                    336: \end{enumerate}
                    337: RFC983 has no intention of specifying an ``OSI protocol''.
                    338: Rather it specifies a DDN-style protocol which provides OSI services.
                    339: It is the intent of RFC983 to permit standard OSI protocols to run on top of
                    340: the TCP.
                    341: It is not the intent to build OSI-like protocols for the DDN.  
                    342: 
                    343: From our experience, we agree with John Leong of CMU that:
                    344: \begin{quote}\em
                    345: ``In general,
                    346: it is important for one to produce good generic protocol interface design so
                    347: that a particular protocol implementation or even the protocol itself can
                    348: easily be replaced without affecting the code in the upper or lower layer.''
                    349: \end{quote}
                    350: It is the intent of RFC983 to be true to this tenet.
                    351: 
                    352: \subsubsection {Prototype Implementation}
                    353: To test our ideas,
                    354: we constructed a prototype implementation of RFC983 under Berkeley \unix/.
                    355: The implementation supports both OSI-style asynchronous {\sf INDICATION}
                    356: events,
                    357: and also DDN-style synchronous events.
                    358: We intend this software to play a key role in the migration strategy which is
                    359: discussed in the next section.
                    360: 
                    361: \subsection    {Comparison to Other Approaches}\label{comparison}
                    362: \cite{Protocol.Conversion} makes a thorough investigation of the many
                    363: issues involved in protocol conversion and complementing,
                    364: and it is unnecessary for us to summarize those findings here.
                    365: Instead, let us concentrate on previous work devoted to implementing the magic
                    366: boxes between two different protocol suites,
                    367: and in particular between the DDN and OSI protocols.
                    368: Further,
                    369: it has been our claim throughout this paper that building a magic box at any
                    370: location other than the transport layer is not particularly useful.
                    371: In this section,
                    372: we will consider this argument.
                    373: 
                    374: In \cite{TCP.convert.ISO}
                    375: it is proposed that conversion between the DDN and OSI protocol suites
                    376: occur inside the transport layer instead of at the transport service access
                    377: point.
                    378: After an analysis of the state machines associated with the TCP and the TP,
                    379: and the identification of a common subset of services,
                    380: a state machine for a gateway between the two is derived.
                    381: The resulting gateway algorithm is no more complicated than the most
                    382: complicated of the two original machines.
                    383: It is then suggested that this approach is practical as a short-term solution
                    384: to the TCP/IP and OSI interoperability problem.
                    385: 
                    386: \subsubsection {Our Analysis of this Work}
                    387: Unfortunately,
                    388: in our opinion,
                    389: the existence of such a gateway is of limited {\em practical\/} value.
                    390: Although the gateway does achieve an end-to-end transport capability,
                    391: with one TS-user utilizing a TP interface and the other TS-user utilizing a
                    392: TCP interface,
                    393: there is no common session, presentation, and application layer.
                    394: That is,
                    395: although entities above the transport layer can have the potential to
                    396: communicate between the two suites,
                    397: no useful work can occur
                    398: until the DDN ``world'' implements the higher-layer OSI protocols,
                    399: or the OSI ``world'' implements the higher-layer DDN protocols,
                    400: or both.
                    401: \cite{TCP.convert.ISO} suggests that the DDN domain immediately implement
                    402: the FTAM on top of the TCP, and so on.
                    403: In the authors opinion,
                    404: this is not a practical short-term solution.
                    405: Furthermore,
                    406: it appears to violate the widely-held notion of separation of knowledge
                    407: between layers.
                    408: 
                    409: It does however illustrate a recurring theme in work wherein conversion
                    410: between different protocol suites is reported
                    411: (e.g., \cite{SNA.convert.XNS},
                    412: which discusses the interconnection of SNA and XNS networks).
                    413: The theme, of course, is that general utility requires that
                    414: protocol conversion occur at every layer in which the two suites can be
                    415: connected.
                    416: For example,
                    417: when considering the application of electronic mail,
                    418: building a TCP/TP gateway is not useful unless there is either:
                    419: \begin{itemize}
                    420: \item  an SMTP implementation running in both the TCP and TP domains;
                    421:        or,
                    422: \item  an X.400 implementation running in both the TCP and TP domains;
                    423:        or,
                    424: \item  an SMTP/X.400 (or more precisely SMTP/P1\cite{MHS.P1}) gateway
                    425:        running in the TCP/TP gateway.
                    426: \end{itemize}
                    427: Each of these three alternatives is expensive to implement,
                    428: and in addition, the first two are politically unacceptable to the parties doing
                    429: the implementing.
                    430: All three require that everything above the transport layer,
                    431: except for the application itself (i.e., session and presentation),
                    432: be implemented as well.
                    433: 
                    434: In comparing our approach with previous work,
                    435: we see that ultimately both approaches have the same end-result:
                    436: the same transport service is offered.
                    437: However,
                    438: our approach is significantly easier to implement.
                    439: Neither approach makes the problem of achieving interoperability between
                    440: applications in the two protocol suites any easier:
                    441: the only way to achieve interoperability is to implement special-purpose
                    442: gateways for each pair of related applications.
                    443: However,
                    444: the approach we suggest has two important advantages over the protocol
                    445: translation approach, once we are willing to acknowledge that we intend to
                    446: migrate to one of the protocol suites (i.e., from the DDN to the OSI protocol
                    447: suite):
                    448: first, we can develop and gain experience with OSI applications now;
                    449: and, second,
                    450: any new applications we develop can run in either environment.
                    451: This has the important implication that from this point on,
                    452: that any future applications we develop will be guaranteed to run in the
                    453: protocol suites available to us
                    454: (that is, no new work will have to be done when we migrate from one protocol
                    455: suite to the other).
                    456: 
                    457: In the next section,
                    458: we will consider the value of our approach in the medium-term,
                    459: when we want to transition from the DDN protocol suite to the OSI protocol
                    460: suite.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.