|
|
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.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.