RFC 1086

ISO-TP0 bridge between TCP and X.25

πŸ“… published December 1988, from ietf

RFC 1086: ISO-TP0 bridge between TCP and X.25 🌸

okay so this one is from December 1988 and it's from the Network Working Group πŸ’– the authors are J. Onions (Nottingham) and M. Rose (TWG). it's a standards proposal for the Internet community, and the header doesn't list anything it obsoletes or updates, so it's standing on its own πŸ’…

Status of This Memo ✨

this memo proposes a standard for the Internet community. hosts on the Internet that choose to implement ISO TP0 transport connectivity between TCP and X.25 based hosts are expected to experiment with this proposal πŸ§ͺ TCP port 146 is reserved for this proposal. distribution is unlimited and comments are highly encouraged 🫢

Introduction πŸŽ€

this memo specifies a protocol that bridges ISO TP0 packets between X.25 and TCP networks πŸ¦‹ it's super useful when you want to hook a DDN IP internet up to an X.25 subnetwork. ngl it's not a "magic bullet" for the DDN/ISO interoperability problem πŸ™ˆ instead, if you're running higher-layer ISO protocols on both networks (namely ISO TP0), then a TP0 bridge can get you connected πŸ”—

the protocol itself is pretty simple, because the methods for running TP0 over TCP and over X.25 were already defined. a bridge offering ISO-TP0 gateway services just applies both methods as needed 🧚 here's how it goes: TP0/TCP hosts "register" an X.25 subaddress (plus the matching TCP port and IP address) with the bridge. TP0/X.25 hosts use the standard method for establishing, maintaining, and releasing connections. once a connection is up, the bridge sets up the matching TCP connection and just shuffles TP0 packets between the two πŸ’… and when a TP0/TCP host starts a connection, it opens a TCP connection to the bridge on port 146 and tells it the X.25 address it wants. the bridge then connects to the native X.25 host and shuffles TP0 packets between them too ✨

1. Introduction and Motivation πŸ’œ

the migratory protocol described in [RFC1006] makes it possible to send TP0 packets between hosts on TCP/IP internets 🌈 add a small protocol converter and a TCP/IP host can show up in the X.25 addressing space and accept and make connections using TP0. main character energy πŸ‘‘

this is especially useful in the following cases:

  1. a host on an IP based internet can talk to hosts on X.25 based networks, as long as those hosts are running ISO protocols. this also assumes a friendly gateway that's willing to run the actual TP0 bridge and make part of its X.25 address space available to the IP host 🫢
  2. a site with sparse connections to an X.25 network that uses a TCP/IP based local area network for local communications. in this case every host on the LAN can reach hosts on the X.25 network that run ISO TP0 πŸ“

here's the setup this memo describes, pictorially 🎨

        +---------------------------------+
        |                                 |
        |                   +-----------------------------------+
        |  +----+           |     +----+  |           +----+    |
        |  |    |           |     |    |  |           |    |    |
        |  |    +-----------|-----+    +--------------+    |    |
        |  |    |     TP0   |     |    |  |  TP0      |    |    |
        |  +----+           |     +----+  |           +----+    |
        | TCP Host          |  Bridge Host|         X.25 Host   |
        |                   |             |                     |
        |                   |             |                     |
        |                   |             |                     |
        +-------------------|-------------+                     |
          TCP/IP Network    |                                   |
                            |                                   |
                            +-----------------------------------+
                                         X.25 Network

2. Definitions and Philosophy 🧠

a little bit of terminology and philosophy, just to make things easier to read and to get you interested πŸ€“

the ISO Transport Service (TS) gives you a reliable, packet-stream to its users [ISO8072] 🫧 the ISO Transport Protocol (TP) is what actually implements this service [ISO8073]. there are five classes of this protocol, and the class gets picked based on the services the underlying network service offers. transport class 0 (TP0) is used when the network service is connection-oriented and error-detecting πŸ’–

honestly TP0 is a pretty simple protocol, and that makes sense, because the underlying network service already provides most of the qualities the transport service offers 😌

CCITT Recommendation X.25 [ISO8208,X.25] is a network service that does exactly that ✨ it's beyond the scope of this memo to go into X.25 in any detail, but two things are relevant here. first, lots of commercial and (non-U.S.) government carriers offer X.25 as a wide-area network service 🌍 second, the TP0/X.25 combo is super popular in Europe and other communities with a strong PTT-oriented market πŸ‡ͺπŸ‡Ί

it's been argued that the DoD Transmission Control Protocol (TCP) [MIL1778, RFC793] can also be seen as giving a connection-oriented and error-detecting network service πŸ€” this is kinda controversial, because TCP is actually an end-to-end transport protocol and not a network protocol. the network protocol in the DoD Protocol Suite is the DoD Internet Protocol (IP) [MIL1777, RFC791] πŸ™ƒ still, one of the perks of layering is that when it's architected properly, it makes things more flexible πŸ¦‹ that idea led to [RFC983] and its successor [RFC1006], which describe how to provide the ISO transport service on top of TCP/IP internetworks πŸ’…

3. The Model 🌷

the model is simple πŸ’– the method for sending TP0 packets over TCP is defined in [RFC1006]. the method for sending TP0 packets over X.25 is defined in [ISO8878]. the TP0 bridge just has to convert between the two forms πŸ” like most protocols, there are three well-defined phases of interaction: connection establishment, data transfer, and connection release. the data transfer and connection release phases work pretty much the same way over either network service, so the resulting protocol mapping functions are quite simple 🧚

the difficult part is managing connection establishment 😭 a small "registration" protocol helps the protocol mapping function handle the connection establishment phase. this protocol does one of two things: either an X.25 address is specified for an outgoing call, or an X.25 address is specified to accept incoming calls πŸ“ž

this memo ignores the problems of authentication and authorization πŸ™ˆ those are presumed to be a local matter. it's worth pointing out that running a TP0 bridge with unrestricted access lets any TCP/IP host claim part of the TP0 bridge host's X.25 address space 😬 that address space is limited, so it won't support many foreign hosts registering listening addresses.

the protocol makes no attempt to report errors other than the ones transmitted by the TP0 protocol 🚫 adding that would take another mechanism, like a new protocol layer or something equivalent. the chosen model stays as simple as possible: network errors are ignored if they're recoverable, and otherwise they result in disconnection 🧼 this actually makes the gateway more transparent, because the only gateway-specific functions are gathered together in the connection phase. once the circuit is established, it's indistinguishable from a [RFC1006] implementation 🫢

4. The Protocol πŸŽ€

the protocol is quite simple ✨ a successful connection establishment phase results in two network connections being set up. TP0 runs over each network connection, though one of them is provided by X.25 and the other by TCP.

during the data transfer phase, the TP0 bridge reads TPDUs (transport protocol data units) from one network connection and writes them to the other one πŸ¦‹ during the connection release phase, when one network indicates a disconnect, the bridge disconnects the other network connection. or, if both networks disconnect at the same time, the bridge takes no action πŸ™ƒ

as you'd expect, the connection establishment phase is more complicated 😀 it's driven by a registration procedure that starts when a TCP/IP host opens a connection with the TP0 bridge. this procedure takes one of two "flavors," depending on whether the initiating host wants to connect to a particular X.25 address or listen for connections on a particular X.25 address πŸ’œ

the initiating host starts the registration procedure by opening a connection to TCP port 146 on the TP0 bridge πŸšͺ then it sends one octet that tells the bridge which flavor the procedure will take 🧚

        0 1 2 3 4 5 6 7
       +-+-+-+-+-+-+-+-+
       |   function    |
       +-+-+-+-+-+-+-+-+

the value of this octet is a binary-encoded value:

         value   meaning
         -----   -------
           0     illegal
           1     connect to a particular X.25 host
           2     listen for incoming X.25 connections
         3-255   reserved

the registration procedure now splits off, depending on the function that was chosen 🌈

FUNCTION 1: CONNECTION THROUGH THE TP0 BRIDGE πŸ“€

the initiating host now sends the X.25 address it wants to call to the TP0 bridge. the format of an X.25 address is described in Section 5 of this memo πŸ“–

the TP0 bridge now tries to call the specified address. if that works, the connection establishment phase has succeeded and the data transfer phase begins πŸŽ‰ if the call fails, the TP0 bridge closes the TCP connection πŸ’€

FUNCTION 2: ESTABLISHING A LISTENING ADDRESS πŸ“₯

the initiating host now sends the X.25 address it wants to listen on to the TP0 bridge. this should be a subaddress of the TP0 bridge's X.25 address, and it's the address where incoming X.25 connections will be accepted πŸ¦‹

next, the initiating host sends an IP address and a TCP port number that will service incoming calls for the indicated X.25 address. the format of a TCP/IP address is described in Section 6 of this memo 🌸

the TP0 bridge now listens on behalf of the initiating host, on the indicated X.25 address πŸ‘‚

if an incoming call comes in, a TCP connection is set up to the matching TCP/IP address. if that connection works, the connection establishment phase has succeeded and the data transfer phase begins πŸ₯³ if the connection fails, the incoming call is refused πŸ™…β€β™€οΈ

the TCP/IP connection between the initiating host and the TP0 bridge is a "heartbeat" connection for the registration function πŸ’“ if that connection closes, the TP0 bridge assumes that the listening function has been terminated by the initiating host. so the TP0 bridge stops listening for incoming calls on the indicated X.25 address. without this safety net, the indicated X.25 address could never be recovered for reuse 😭

5. Format of X.25 Addresses ✨

okay bestie, this section is where the spec gets very precise about how an X.25 address gets packed into bytes πŸ’… the encoding is a fixed-length 68 octets and it has 10 fields, no cap πŸŽ€

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        address  type          | X.121 address        ...      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      ...      |      ...      |      ...      |      ...      |
   |      ...      |      ...      |      ...      |      ...      |
   |      ...      |      ...      |      ...      |      ...      |
   |      ...      |      ...      | X.121 length  | Protocol ID   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      ...      |      ...      |      ...      | PID length    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Call User Data field          |      ...      |      ...      |
   |      ...      |      ...      |      ...      |      ...      |
   |      ...      |      ...      |      ...      |      ...      |
   |      ...      |      ...      |      ...      |      ...      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | CUDF length   |  X.25 Facilities     ...      |      ...      |
   |      ...      |      ...      |      ...      |Facility Length|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

the fields, bestie πŸ¦‹

  • address type (2 octets) - a binary-encoded value in network order indicating the address type. The value 3 is used for X.25 addressing of this format. 🌸
  • X.121 address (16 octets) - the ASCII-encoded value of the X.121 address. πŸ’–
  • address length (1 octet) - a binary-encoded value in network order indicating how many octets of the X.121 address are meaningful. ✨
  • Protocol ID (4 octets) - meaningful at the remote system. 🧚
  • Protocol ID length (1 octet) - a binary-encoded value indicating the number of protocol ID octets are meaningful. πŸŽ€
  • User Data (16 octets) - meaningful at the remote system. πŸ’œ
  • User Data Length (1 octet) - a binary-encoded value indicating the number of User Data octets are meaningful. 🫢
  • X.25 Facilities (6 octets) - meaningful at the remote system. 🌈
  • X.25 Facilities length (1 octet) - a binary-encoded value indicating the number of Facility octets are meaningful. πŸ‘‘

6. Format of TCP/IP Addresses πŸ¦‹

so the TCP/IP side is the same vibe but smaller 🧚 it's a fixed-length 16 octets with 4 fields, iykyk 🌸

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         address  type         |           TCP  port           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           IP address                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    reserved   |      ...      |      ...      |      ...      |
   |      ...      |      ...      |      ...      |      ...      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

the fields, bestie πŸ’–

  • address type (2 octets) - a binary-encoded value in network order. The value 2 is used. ✨
  • TCP port (2 octets) - a binary-encoded value in network order. πŸŽ€
  • IP address (4 octets) - a binary-encoded value in network order. πŸ’…
  • reserved (16 octets) - null-value padding. 🫢

Comments πŸ’­

okay so this part is kinda honest about itself πŸ™ˆ at present, the structure of the X.25 address and the internet address are rather ad-hoc and specific to the UNIX operating system. these structures may change in the future as experience is gained in the use of the TP0 bridge. 😭


References πŸ“š

[ISO8072]  Information processing systems -- Open systems
           interconnection, "Transport Service Definition",
           International Standard, June, 1985.

[ISO8073]  Information processing systems -- Open systems
           interconnection, "Transport Protocol Specification",
           International Standard, July, 1986.

[ISO8208]  Information processing systems, "X.25 package level
           protocol for data terminal equipment", Draft
           International Standard, July, 1985.

[ISO8878]  Information processing systems -- Data communications,
           Use of X.25 to provide the OSI connection-mode network
           service", Draft International Standard, January, 1987.

[MIL1777]  Military Standard 1777, "Internet Protocol".

[MIL1778]  Military Standard 1778, "Transmission Control Protocol".

[RFC791]  Postel, J., "Internet Protocol - DARPA Internet Program
          Protocol Specification", RFC 791, USC/ISI,
          September 1981.

[RFC793]  Postel, J., "Transmission Control Protocol - DARPA
          Internet Program Protocol Specification", RFC 793,
          USC/ISI, September 1981.

[RFC983]  Cass, D., and M. Rose, "ISO Transport Services on Top
          of the TCP", RFC 983, NTRC, April 1986.

[RFC1006]  Rose, M., and D. Cass, "ISO Transport Service on Top
           of the TCP Version: 3", NTRC, May 1987.

[X.25]  CCITT Recommendation X.25, "Interface Between Data
        Terminal Equipment (DTE) and Data Circuit Terminating
        Equipment (DCE) for Terminals Operating in the Packet
        Mode on Public Data Networks," International Telegraph
        and Telephone Consultative Committee Yellow book, Vol.
        VIII.2, Geneva, 1981.

Authors' Addresses πŸŽ€

Julian P. Onions
Computer Science Department
Nottingham University
University Park
Nottingham, NG7 2RD
United Kingdom

EMail: JPO@CS.NOTT.AC.UK

Marshall Rose
The Wollongong Group
1129 San Antonio Road
Palo Alto, CA 94303

Phone: (415) 962-7100

EMail: mrose@TWG.COM

that's the whole spec, bestie πŸŒˆπŸ‘‘ literally iconic πŸ’…βœ¨

πŸ“¦ where this page comes from