IP over X.25: Multiprotocol Interconnect on X.25 and ISDN in the Packet Mode
How IP and other network protocols are carried over X.25 and the packet mode of ISDN, and how the receiving end knows which is which.
Malis, A., Robinson, D., and R. Ullmann, "Multiprotocol Interconnect on X.25 and ISDN in the Packet Mode", RFC 1356, DOI 10.17487/RFC1356, August 1992, <https://www.rfc-editor.org/info/rfc1356>.
@misc{rfc1356,
series = {Request for Comments},
number = 1356,
howpublished = {RFC 1356},
publisher = {RFC Editor},
doi = {10.17487/RFC1356},
url = {https://www.rfc-editor.org/info/rfc1356},
author = {A. Malis and D. Robinson and R. Ullmann},
title = {{Multiprotocol Interconnect on X.25 and ISDN in the Packet Mode}},
pagetotal = 14,
year = 1992,
month = aug,
} RFC text
Contents
Network Working Group A. Malis Request for Comments: 1356 BBN Communications Obsoletes: RFC 877 D. Robinson Computervision Systems Integration R. Ullmann Process Software Corporation August 1992 Multiprotocol Interconnect on X.25 and ISDN in the Packet Mode Status of this Memo This RFC specifies an IAB standards track protocol for the Internet community, and requests discussion and suggestions for improvements. Please refer to the current edition of the "IAB Official Protocol Standards" for the standardization state and status of this protocol. Distribution of this memo is unlimited. Abstract This document specifies the encapsulation of IP and other network layer protocols over X.25 networks, in accordance and alignment with ISO/IEC and CCITT standards. It is a replacement for RFC 877, "A Standard for the Transmission of IP Datagrams Over Public Data Networks" [1]. It was written to correct several ambiguities in the Internet Standard for IP/X.25 (RFC 877), to align it with ISO/IEC standards that have been written following RFC 877, to allow interoperable multiprotocol operation between routers and bridges over X.25, and to add some additional remarks based upon practical experience with the specification over the 8 years since that RFC. The substantive change to the IP encapsulation is an increase in the allowed IP datagram Maximum Transmission Unit from 576 to 1600, to reflect existing practice. This document also specifies the Internet encapsulation for protocols, including IP, on the packet mode of the ISDN. It applies to the use of Internet protocols on the ISDN in the circuit mode only when the circuit is established as an end-to-end X.25 connection. Acknowledgements RFC 877 was written by J. T. Korb of Purdue University, and this document follows that RFC's format and builds upon its text as appropriate. This document was produced under the auspices of the IP over Large Public Data Networks Working Group of the IETF. 1. Conventions The following language conventions are used in the items of specification in this document: o MUST -- the item is an absolute requirement of the specification. MUST is only used where it is actually required for interoperation, not to try to impose a particular method on implementors where not required for interoperability. o SHOULD -- the item should be followed for all but exceptional circumstances. o MAY or optional -- the item is truly optional and may be followed or ignored according to the needs of the implementor. The words "should" and "may" are also used, in lower case, in their more ordinary senses. 2. Introduction RFC 877 was written to document the method CSNET and the VAN Gateway had adopted to transmit IP datagrams over X.25 networks. Its success is evident in its current wide use and the inclusion of its IP protocol identifier in ISO/IEC TR 9577, "Protocol Identification in the Network Layer" [2], which is administered by ISO/IEC and CCITT. However, due to changes in the scope of X.25 and the protocols that it can carry, several inadequacies have become evident in the RFC, especially in the areas of IP datagram Maximum Transmission Unit (MTU) size, X.25 maximum data packet size, virtual circuit management, and the interoperable encapsulation, over X.25, of protocols other than IP between multiprotocol routers and bridges. As with RFC 877, one or more X.25 virtual circuits are opened on demand when datagrams arrive at the network interface for transmission. A virtual circuit is closed after some period of inactivity (the length of the period depends on the cost associated with an open virtual circuit). A virtual circuit may also be closed if the interface runs out of virtual circuits. 3. Standards 3.1 Protocol Data Units (PDUs) are sent as X.25 "complete packet sequences". That is, PDUs begin on X.25 data packet boundaries and the M bit ("more data") is used to fragment PDUs that are larger than one X.25 data packet in length. In the IP encapsulation the PDU is the IP datagram. 3.2 The first octet in the Call User Data (CUD) Field (the first data octet in the Call Request packet) is used for protocol demultiplexing, in accordance with the Subsequent Protocol Identifier (SPI) in ISO/IEC TR 9577. This field contains a one- octet Network Layer Protocol Identifier (NLPID), which identifies the network layer protocol encapsulated over the X.25 virtual circuit. The CUD field MAY contain more than one octet of information, and receivers MUST ignore all extraneous octets in the field. In the following discussion, the most significant digit of the binary numbers is left-most. For the Internet community, the NLPID has four relevant values: The value hex CC (binary 11001100, decimal 204) is IP [6]. Conformance with this specification requires that IP be supported. See section 5.1 for a diagram of the packet formats. The value hex 81 (binary 10000001, decimal 129) identifies ISO/IEC 8473 (CLNP) [4]. ISO/IEC TR 9577 specifically allows other ISO/IEC connectionless-protocol packets, such as ES-IS and IS-IS, to also be carried on the same virtual circuit as CLNP. Conformance with this specification does not require that CLNP be supported. See section 5.2 for a diagram of the packet formats. The value hex 82 (binary 10000010, decimal 130) is used specifically for ISO/IEC 9542 (ES-IS) [5]. If there is already a circuit open to carry CLNP, then it is not necessary to open a second circuit to carry ES-IS. Conformance with this specification does not require that ES-IS be supported. The value hex 80 (binary 10000000, decimal 128) identifies the use of IEEE Subnetwork Access Protocol (SNAP) [3] to further encapsulate and identify a single network-layer protocol. The SNAP-encapsulated protocol is identified by including a five-octet SNAP header in the Call Request CUD field immediately following the hex 80 octet. SNAP headers are not included in the subsequent X.25 data packets. Only one SNAP-encapsulated protocol may be carried over a virtual circuit opened using this encoding. The receiver SHOULD accept the incoming call only if it can support the particular SNAP-identified protocol. Conformance with this specification does not require that this SNAP encoding be supported. See section 5.3 for a diagram of the packet formats. The value hex 00 (binary 00000000, decimal 0) identifies the Null encapsulation, used to multiplex multiple network layer protocols over the same circuit. This encoding is further discussed in section 3.3 below. The "Assigned Numbers" RFC [7] contains one other non-CCITT and non-ISO/IEC value that has been in active use for Internet X.25 encapsulation identification, namely hex C5 (binary 11000101, decimal 197) for Blacker X.25. This value MAY continue to be used, but only by prior preconfiguration of the sending and receiving X.25 interfaces to support this value. The value hex CD (binary 11001101, decimal 205), listed in "Assigned Numbers" for "ISO-IP", is also used by Blacker and also can only be used by prior preconfiguration of the sending and receiving X.25 interfaces. Each system MUST only accept calls for protocols it can process; every Internet system MUST be able to accept the CC encapsulation for IP datagrams. A system MUST NOT accept calls, and then immediately clear them. Accepting the call indicates to the calling system that the protocol encapsulation is supported; on some networks, a call accepted and cleared is charged, while a call cleared in the request state is not charged. Systems that support NLPIDs other than hex CC (for IP) SHOULD allow their use to be configured on a per-peer address basis. The use of hex CC (for IP) MUST always be allowed between peers and cannot be configured. 3.3 The NLPID encodings discussed in section 3.2 only allow a single network layer protocol to be sent over a circuit. The Null encapsulation, identified by a NLPID encoding of hex 00, is used in order to multiplex multiple network layer protocols over one circuit. When the Null encapsulation is used, each X.25 complete packet sequence sent on the circuit begins with a one-octet NLPID, which identifies the network layer protocol data unit contained only in that particular complete packet sequence. Further, if the SNAP NLPID (hex 80) is used, then the NLPID octet is immediately followed by the five-octet SNAP header, which is then immediately followed by the encapsulated PDU. The encapsulated network layer protocol MAY differ from one complete packet sequence to the next over the same circuit. When a receiver is presented with an Incoming Call identifying the Null encapsulation, the receiver MUST accept the call if it supports the Null encapsulation for any network layer protocol. The receiver MAY then silently discard a multiplexed PDU if it cannot support that particular encapsulated protocol. See section 5.4 for a diagram of the packet formats. Use of the single network layer protocol circuits described in section 3.2 is more efficient in terms of bandwidth if only a limited number of protocols are supported by a system. It also allows each system to determine exactly which protocols are supported by its communicating partner. Other advantages include being able to use X.25 accounting to detail each protocol and different quality of service or flow control windows for different protocols. The Null encapsulation, for multiplexing, is useful when a system, for any reason (such as implementation restrictions or network cost considerations), may only open a limited number of virtual circuits simultaneously. This is the method most likely to be used by a multiprotocol router, to avoid using an unreasonable number of virtual circuits. If performing IEEE 802.1d bridging across X.25 is desired, then the Null encapsulation MUST be used. See section 4.2 for a further discussion. Conformance with this specification does not require that the Null encapsulation be supported. Systems that support the Null encapsulation SHOULD allow its use to be configured on a per-peer address basis. 3.4 For compatibility with existing practice, and RFC 877 systems, IP datagrams MUST, by default, be encapsulated on a virtual circuit opened with the CC CUD. Implementations MAY also support up to three other possible encapsulations of IP: o IP may be contained in multiplexed data packets on a circuit using the Null (multiplexed) encapsulation. Such data packets are identified by a NLPID of hex CC. o IP may be encapsulated within the SNAP encapsulation on a circuit. This encapsulation is identified by containing, in the 5-octet SNAP header, an Organizationally Unique Identifier (OUI) of hex 00-00-00 and Protocol Identifier (PID) of hex 08-00. o On a circuit using the Null encapsulation, IP may be contained within the SNAP encapsulation of IP in multiplexed data packets. If an implementation supports the SNAP, multiplexed, and/or multiplexed SNAP encapsulations, then it MUST accept the encoding of IP within the supported encapsulation(s), MAY send IP using those encapsulation(s), and MUST allow the IP encapsulation to send to be configured on a per-peer address basis. 3.5 The negotiable facilities of X.25 MAY be used (e.g., packet and window size negotiation). Since PDUs are sent as complete packet sequences, any maximum X.25 data packet size MAY be configured or negotiated between systems and their network service providers. See section 4.5 for a discussion of maximum X.25 data packet size and network performance. There is no implied relationship between PDU size and X.25 packet size (i.e., the method of setting IP MTU based on X.25 packet size in RFC 877 is not used). 3.6 Every system MUST be able to receive and transmit PDUs up to at least 1600 octets in length. For compatibility with existing practice, as well as interoperability with RFC 877 systems, the default transmit MTU for IP datagrams SHOULD default to 1500, and MUST be configurable in at least the range 576 to 1600. This is done with a view toward a standard default IP MTU of 1500, used on both local and wide area networks with no fragmentation at routers. Actually redefining the IP default MTU is, of course, outside the scope of this specification. The PDU size (e.g., IP MTU) MUST be configurable, on at least a per-interface basis. The maximum transmitted PDU length SHOULD be configurable on a per-peer basis, and MAY be configurable on a per- encapsulation basis as well. Note that the ability to configure to send IP datagrams with an MTU of 576 octets and to receive IP datagrams of 1600 octets is essential to interoperate with existing implementations of RFC 877 and implementations of this specification. Note that on circuits using the Null (multiplexed) encapsulation, when IP packets are encapsulated using the NLPID of hex CC, then the default IP MTU of 1500 implies a PDU size of 1501; a PDU size of 1600 implies an IP MTU of 1599. When IP packets are encapsulated using the NLPID of hex 80 followed by the SNAP header for IP, then the default IP MTU of 1500 implies a PDU size of 1506; a PDU size of 1600 implies an IP MTU of 1594. Of course, an implementation MAY support a maximum PDU size larger than 1600 octets. In particular, there is no limit to the size that may be used when explicitly configured by communicating peers. 3.7 Each ISO/IEC TR 9577 encapsulation (e.g., IP, CLNP, and SNAP) requires a separate virtual circuit between systems. In addition, multiple virtual circuits for a single encapsulation MAY be used between systems, to, for example, increase throughput (see notes in section 4.5). Receivers SHOULD accept multiple incoming calls with the same encapsulation from a single system. Having done so, receivers MUST then accept incoming PDUs on the additional circuit(s), and SHOULD transmit on the additional circuits. Shedding load by refusing additional calls for the same encapsulation with a X.25 diagnostic of 0 (DTE clearing) is correct practice, as is shortening inactivity timers to try to clear circuits. Receivers MUST NOT accept the incoming call, only to close the circuit or ignore PDUs from the circuit. Because opening multiple virtual circuits specifying the same encapsulation is specifically allowed, algorithms to prevent virtual circuit call collision, such as the one found in section 8.4.3.5 of ISO/IEC 8473 [4], MUST NOT be implemented. While allowing multiple virtual circuits for a single protocol is specifically desired and allowed, implementations MAY choose (by configuration) to permit only a single circuit for some protocols to some destinations. Only in such a case, if a colliding incoming call is received while a call request is pending, the incoming call shall be rejected. Note that this may result in a failure to establish a connection. In such a case, each system shall wait at least a configurable collision retry time before retrying. Adding a random increment, with exponential backoff if necessary, is recommended. 3.8 Either system MAY close a virtual circuit. If the virtual circuit is closed or reset while a datagram is being transmitted, the datagram is lost. Systems SHOULD be able to configure a minimum holding time for circuits to remain open as long as the endpoints are up. (Note that holding time, the time the circuit has been open, differs from idle time.) 3.9 Each system MUST use an inactivity timer to clear virtual circuits that are idle for some period of time. Some X.25 networks, including the ISDN under present tariffs in most areas, charge for virtual circuit holding time. Even where they do not, the resource SHOULD be released when idle. The timer SHOULD be configurable; a timer value of "infinite" is acceptable when explicitly configured. The default SHOULD be a small number of minutes. For IP, a reasonable default is 90 seconds. 3.10 Systems SHOULD allow calls from unconfigured calling addresses (presumably not collect calls, however); this SHOULD be a configuration option. A system accepting such a call will, of course, not transmit on that virtual circuit if it cannot determine the protocol (e.g., IP) address of the caller. As an example, on the DDN this is not a restriction because IP addresses can be determined algorithmically based upon the caller's X.121 address [7,9]. Allowing such calls helps work around various "helpful" address translations done by the network(s), as well as allowing experimentation with various address resolution protocols. 3.11 Systems SHOULD use a configurable hold-down timer to prevent calls to failed destinations from being immediately retried. 3.12 X.25 implementations MUST minimally support the following features in order to conform with this specification: call setup and clearing and complete packet sequences. For better performance and/or interoperability, X.25 implementations SHOULD also support: extended frame and/or packet sequence numbering, flow control parameter negotiation, and reverse charging. 3.13 The following X.25 features MUST NOT be used: interrupt packets and the Q bit (indicating qualified data). Other X.25 features not explicitly discussed in this document, such as fast select and the D bit (indicating end-to-end significance) SHOULD NOT be used. Use of the D bit will interfere with use of the M bit (more data sequences) required for identification of PDUs. In particular, as subscription to the D bit modification facility (X.25-1988, section 3.3) will prevent proper operation, this user facility MUST NOT be subscribed. 3.14 ISO/IEC 8208 [11] defines the clearing diagnostic code 249 to signify that a requested protocol is not supported. Systems MAY use this diagnostic code when clearing an incoming call because the identified protocol is not supported. Non-8208 systems more typically use a diagnostic code of 0 for this function. Supplying a diagnostic code is not mandatory, but when it is supplied for this reason, it MUST be either of these two values. 4. General Remarks The following remarks are not specifications or requirements for implementations, but provide developers and users with guidelines and the results of operational experience with RFC 877. 4.1 Protocols above the network layer, such as TCP or TP4, do not affect this standard. In particular, no attempt is made to open X.25 virtual circuits corresponding to TCP or TP4 connections. 4.2 Both the circuit and multiplexed encapsulations of SNAP may be used to contain any SNAP encapsulated protocol. In particular, this includes using an OUI of 00-00-00 and the two octets of PID containing an Ethertype [7], or using IEEE 802.1's OUI of hex 00- 80-C2 with the bridging PIDs listed in RFC 1294, "Multiprotocol Interconnect over Frame Relay" [8]. Note that IEEE 802.1d bridging can only be performed over a circuit using the Null (multiplexed) encapsulation of SNAP, because of the necessity of preserving the order of PDUs (including 802.1d Bridged PDUs) using different SNAP headers. 4.3 Experience has shown that there are X.25 implementations that will assign calls with CC CUD to the X.29 PAD (remote login) facility when the IP layer is not installed, not configured properly, or not operating (indeed, they assume that ALL calls for unconfigured or unbound X.25 protocol IDs are for X.29 PAD sessions). Call originators can detect that this has occurred at the receiver if the originator receives any X.25 data packets with the Q bit set, especially if the first octet of these packets is hex 02, 04, or 06 (X.29 PAD parameter commands). In this case, the originator should clear the call, and log the occurrence so that the misconfigured X.25 address can be corrected. It may be useful to also use the hold-down timer (see section 3.11) to prevent further attempts for some period of time. 4.4 It is often assumed that a larger X.25 data packet size will result in increased performance. This is not necessarily true: in typical X.25 networks it will actually decrease performance. Many, if not most, X.25 networks completely store X.25 data packets in each switch before forwarding them. If the X.25 network requires a path through a number of switches, and low-speed trunks are used, then negotiating and using large X.25 data packets could result in large transit delays through the X.25 network as a result of the time required to clock the data packets over each low-speed trunk. If a small end-to-end window size is also used, this may also adversely affect the end-to-end throughput of the X.25 circuit. For this reason, segmenting large IP datagrams in the X.25 layer into complete packet sequences of smaller X.25 data packets allows a greater amount of pipelining through the X.25 switches, with subsequent improvements in end-to-end throughput. Large X.25 data packet size combined with slow (e.g., 9.6Kbps) physical circuits will also increase individual packet latency for other virtual circuits on the same path; this may cause unacceptable effects on, for example, X.29 connections. This discussion is further complicated by the fact that X.25 networks are free to internally combine or split X.25 data packets as long as the complete packet sequence is preserved. The optimum X.25 data packet size is, therefore, dependent on the network, and is not necessarily the largest size offered by that network. 4.5 Another method of increasing performance is to open multiple virtual circuits to the same destination, specifying the same CUD. Like packet size, this is not always the best method. When the throughput limitation is due to X.25 window size, opening multiple circuits effectively multiplies the window, and may increase performance. However, opening multiple circuits also competes more effectively for the physical path, by taking more shares of the available bandwidth. While this may be desirable to the user of the encapsulation, it may be somewhat less desirable to the other users of the path. Opening multiple circuits may also cause datagram sequencing and reordering problems in end systems with limited buffering (e.g., at the TCP level, receiving segments out of order, when a single circuit would have delivered them in order). This will only affect performance, not correctness of operation. Opening multiple circuits may also increase the cost of delivering datagrams across a public data network. 4.6 This document does not specify any method of dynamic IP to X.25 (or X.121) address resolution. The problem is left for further study. Typical present-day implementations use static tables of varying kinds, or an algorithmic transformation between IP and X.121 addresses [7,9]. There are proposals for other methods. In particular, RFC 1183 [10] describes Domain Name System (DNS) resource records that may be useful either for automatic resolution or for maintenance of static tables. Use of these method(s) is entirely experimental at this time. 5. Packet Formats For each protocol encoding, the diagrams outline the call request and the data packet format. The data packet shown is the first of a complete packet (M bit) sequence. 5.1 IP Encapsulation Call Request: +----------------+-----------+------------+----+ | GFI, LCN, type | addresses | facilities | CC | +----------------+-----------+------------+----+ X.25 data packets: +----------------+------------------------+ | GFI, LCN, I | IP datagram | +----------------+------------------------+ 5.2 CLNP, ES-IS, IS-IS Encapsulation Call Request: +----------------+-----------+------------+----+ | GFI, LCN, type | addresses | facilities | 81 | +----------------+-----------+------------+----+ X.25 data packets: +----------------+--------------------------------+ | GFI, LCN, I | CLNP, ES-IS, or IS-IS datagram | +----------------+--------------------------------+ (Note that these datagrams are self-identifying in their first octet). 5.3 SNAP Encapsulation Call Request: +----------------+-----------+------------+----+-----------------+ | GFI, LCN, type | addresses | facilities | 80 | SNAP (5 octets) | +----------------+-----------+------------+----+-----------------+ X.25 data packets: +----------------+-------------------------------------+ | GFI, LCN, I | Protocol Data Unit (no SNAP header) | +----------------+-------------------------------------+ 5.4 Null (Multiplexed) Encapsulation Call Request: +----------------+-----------+------------+----+ | GFI, LCN, type | addresses | facilities | 00 | +----------------+-----------+------------+----+ X.25 data packets: +----------------+-----------------+---------------------+ | GFI, LCN, I | NLPID (1 octet) | Protocol Data Unit | +----------------+-----------------+---------------------+ Examples of data packets: Multiplexed IP datagram: +----------------+----+-----------------------+ | GFI, LCN, I | CC | IP datagram | +----------------+----+-----------------------+ Multiplexed CLNP datagram: +----------------+----+-------------------------+ | GFI, LCN, I | 81 | CLNP datagram | +----------------+----+-------------------------+ Multiplexed SNAP PDU: +----------------+----+-----------------+--------------------+ | GFI, LCN, I | 80 | SNAP (5 octets) | Protocol Data Unit | +----------------+----+-----------------+--------------------+ 6. Security Considerations Security issues are not discussed in this memo. 7. References [1] Korb, J., "A Standard for the Transmission of IP Datagrams Over Public Data Networks", RFC 877, Purdue University, September 1983. [2] ISO/IEC TR 9577, Information technology - Telecommunications and Information exchange between systems - Protocol Identification in the network layer, 1990 (E) 1990-10-15. [3] IEEE, "IEEE Standard for Local and Metropolitan Area Networks: Overview and Architecture", IEEE Standards 802-1990. [4] ISO/IEC 8473, Information processing systems - Data communications - Protocol for providing the connectionless- mode network service, 1988. [5] ISO/IEC 9542, Information processing systems - Telecommunications and information exchange between systems - End system to intermediate system routeing protocol for use in conjunction with the protocol for providing the connectionless- mode network service (ISO/IEC 8473), 1988. [6] Postel, J., Editor., "Internet Protocol - DARPA Internet Program Protocol Specification", RFC 791, USC/Information Sciences Institute, September 1981. [7] Reynolds, J. and J. Postel, "Assigned Numbers", RFC 1340, USC/Information Sciences Institute, July 1992. [8] Bradley, T., Brown, C., and A. Malis, "Multiprotocol Interconnect over Frame Relay", RFC 1294, Wellfleet Communications and BBN Communications, January 1992. [9] "Defense Data Network X.25 Host Interface Specification", contained in "DDN Protocol Handbook", Volume 1, DDN Network Information Center 50004, December 1985. [10] Everhart, C., Mamakos, L., Ullmann, R, and P. Mockapetris, Editors, "New DNS RR Definitions", RFC 1183, Transarc, University of Maryland, Prime Computer, USC/Information Sciences Institute, October 1990. [11] ISO/IEC 8208, Information processing systems - Data communications - X.25 Packet Level Protocol for Data Terminal Equipment, 1987. 8. Authors' Addresses Andrew G. Malis BBN Communications 150 CambridgePark Drive Cambridge, MA 02140 USA Phone: +1 617 873 3419 Email: malis@bbn.com David Robinson Computervision Systems Integration 201 Burlington Road Bedford, MA 01730 USA Phone: +1 617 275 1800 x2774 Email: drb@relay.prime.com Robert L. Ullmann Process Software Corporation 959 Concord Street Framingham, MA 01701 USA Phone: +1 508 879 6994 Email: ariel@process.com
ISO Plain Language
On this page
§2What the Document Fixes
RFC 877 was written to document the method CSNET and the VAN Gateway had adopted to transmit IP datagrams over X.25 networks. Its success is evident in its wide use and in the inclusion of its IP protocol identifier in ISO/IEC TR 9577, Protocol Identification in the Network Layer, which is administered by ISO/IEC and CCITT.
However, changes in the scope of X.25 and of the protocols it can carry left several inadequacies in RFC 877, especially in the areas of IP datagram maximum transmission unit size, X.25 maximum data packet size, virtual circuit management, and the interoperable encapsulation over X.25 of protocols other than IP between multiprotocol routers and bridges.
This document was written to correct several ambiguacies in RFC 877, to align it with the ISO/IEC standards written after it, to allow interoperable multiprotocol operation between routers and bridges over X.25, and to add remarks based on practical experience with the specification over the eight years since RFC 877. The substantive change to the IP encapsulation is an increase in the allowed IP datagram maximum transmission unit from 576 to 1600, to reflect existing practice.
The document also specifies the Internet encapsulation for protocols, including IP, on the packet mode of ISDN. It applies to the use of Internet protocols on the ISDN in circuit mode only when the circuit is established as an end-to-end X.25 connection.
As with RFC 877, one or more X.25 virtual circuits are opened on demand when datagrams arrive at the network interface for transmission. A virtual circuit is closed after some period of inactivity, the length of which depends on the cost associated with an open virtual circuit, and it may also be closed if the interface runs out of virtual circuits.
The earlier standard was written for one protocol, IP, on one kind of network. Both grew, and the rules no longer matched. This document rewrites them for a world where several network protocols may share the same X.25 circuit, and it also covers the packet mode of ISDN.
§3.2Identifying the Protocol with an NLPID
Protocol data units are sent as X.25 complete packet sequences: they begin on X.25 data packet boundaries, and the M bit, meaning more data, is used to fragment a data unit that is larger than one X.25 data packet. In the IP encapsulation the data unit is the IP datagram.
The first octet in the Call User Data field, the first data octet in the Call Request packet, is used for protocol demultiplexing, in accordance with the Subsequent Protocol Identifier in ISO/IEC TR 9577. This field contains a one-octet Network Layer Protocol Identifier, which identifies the network layer protocol encapsulated over the virtual circuit. The field may contain more than one octet, and receivers must ignore all extraneous octets in it.
Four values matter to the Internet community. The value hex CC, binary 11001100, decimal 204, is IP, and conformance with this specification requires that IP be supported. The value hex 81, binary 10000001, decimal 129, identifies ISO/IEC 8473, CLNP; ISO/IEC TR 9577 specifically allows other ISO/IEC connectionless-protocol packets, such as ES-IS and IS-IS, to be carried on the same virtual circuit as CLNP, but conformance does not require CLNP support. The value hex 82, binary 10000010, decimal 130, is used specifically for ISO/IEC 9542, ES-IS, and if a circuit is already open to carry CLNP there is no need to open a second one for ES-IS. The value hex 80, binary 10000000, decimal 128, identifies the use of the IEEE Subnetwork Access Protocol to further encapsulate and identify a single network layer protocol: the SNAP-encapsulated protocol is identified by including a five-octet SNAP header in the Call Request Call User Data field immediately after the hex 80 octet, and SNAP headers are not included in the subsequent data packets. Only one SNAP-encapsulated protocol may be carried over a virtual circuit opened with this encoding, and the receiver should accept the incoming call only if it can support the particular SNAP-identified protocol.
The Assigned Numbers RFC contains one other non-CCITT and non-ISO/IEC value in active use for Internet X.25 encapsulation identification, hex C5, binary 11000101, decimal 197, for Blacker X.25, which may continue to be used but only by prior preconfiguration of the sending and receiving interfaces. The value hex CD, listed in Assigned Numbers for ISO-IP, is also used by Blacker and can likewise only be used by prior preconfiguration.
Each system must only accept calls for protocols it can process, and every Internet system must be able to accept the hex CC encapsulation for IP datagrams. A system must not accept calls and then immediately clear them, because accepting the call tells the calling system that the encapsulation is supported, and on some networks a call accepted and cleared is charged while a call cleared in the request state is not. Systems that support NLPIDs other than hex CC should allow their use to be configured on a per-peer address basis, and the use of hex CC for IP must always be allowed between peers and cannot be configured.
The receiving system learns which protocol a circuit carries from a single byte in the call request. The value for IP is fixed and must always work. Other values, for the ISO connectionless protocol and for SNAP, are optional and can be configured per peer. A system must not accept a call for a protocol it cannot handle, because accepting and then dropping it can still cost money.
- CCIP — Binary 11001100, decimal 204. Support is required for conformance.
- 81CLNP — Binary 10000001, decimal 129. ISO/IEC 8473. Support is not required.
- 82ES-IS — Binary 10000010, decimal 130. ISO/IEC 9542. Support is not required.
- 80SNAP — Binary 10000000, decimal 128. A five-octet SNAP header follows in the call request. Support is not required.
- 00Null encapsulation — Binary 00000000, decimal 0. Multiplexes several protocols over one circuit. Support is not required.
- C5Blacker X.25 — Binary 11000101, decimal 197. May continue to be used, but only by prior preconfiguration.
- CDISO-IP — Binary 11001101, decimal 205. Also used by Blacker, and only by prior preconfiguration.
Call Request:
+----------------+-----------+------------+----+
| GFI, LCN, type | addresses | facilities | CC |
+----------------+-----------+------------+----+
X.25 data packets:
+----------------+------------------------+
| GFI, LCN, I | IP datagram |
+----------------+------------------------+§3.3The Null Encapsulation for Multiplexing
The identifier values discussed above allow only a single network layer protocol per circuit. The Null encapsulation, identified by an NLPID of hex 00, is used to multiplex multiple network layer protocols over one circuit. When it is used, each X.25 complete packet sequence sent on the circuit begins with a one-octet NLPID identifying the network layer protocol data unit contained in that particular sequence. If the SNAP identifier, hex 80, is used, the identifier octet is immediately followed by the five-octet SNAP header, which is then immediately followed by the encapsulated data unit. The encapsulated protocol may differ from one complete packet sequence to the next over the same circuit.
When a receiver is presented with an incoming call identifying the Null encapsulation, it must accept the call if it supports the Null encapsulation for any network layer protocol. It may then silently discard a multiplexed data unit if it cannot support that particular protocol.
Circuits that carry a single protocol are more efficient in terms of bandwidth if only a limited number of protocols are supported. They also let each system determine exactly which protocols its partner supports, and they allow X.25 accounting to detail each protocol, with different quality of service or flow control windows for different protocols. The Null encapsulation is useful when a system, for reasons such as implementation restrictions or network cost, may only open a limited number of virtual circuits at once, and it is the method most likely to be used by a multiprotocol router to avoid using an unreasonable number of virtual circuits. If IEEE 802.1d bridging across X.25 is desired, the Null encapsulation must be used, because the order of data units has to be preserved even when they carry different SNAP headers.
Conformance with this specification does not require the Null encapsulation to be supported, and systems that do support it should allow its use to be configured on a per-peer address basis.
One circuit normally carries one protocol. The Null encapsulation is the alternative: every packet then starts with its own protocol identifier, so several protocols can share a single virtual circuit. That is what a router with few circuits to spare, or one bridging Ethernet frames, needs.
Call Request:
+----------------+-----------+------------+----+
| GFI, LCN, type | addresses | facilities | 00 |
+----------------+-----------+------------+----+
X.25 data packets:
+----------------+-----------------+---------------------+
| GFI, LCN, I | NLPID (1 octet) | Protocol Data Unit |
+----------------+-----------------+---------------------+
Multiplexed IP datagram:
+----------------+----+-----------------------+
| GFI, LCN, I | CC | IP datagram |
+----------------+----+-----------------------+§3.6Packet Size, MTU and Multiple Circuits
For compatibility with existing practice and with RFC 877 systems, IP datagrams must by default be encapsulated on a virtual circuit opened with the hex CC Call User Data. Implementations may also support up to three other encapsulations of IP: IP may be contained in multiplexed data packets on a circuit using the Null encapsulation, identified by an NLPID of hex CC; IP may be encapsulated within the SNAP encapsulation on a circuit, identified by containing in the five-octet SNAP header an Organizationally Unique Identifier of hex 00-00-00 and a Protocol Identifier of hex 08-00; and on a circuit using the Null encapsulation, IP may be contained within the SNAP encapsulation in multiplexed data packets. If an implementation supports those encapsulations, it must accept the encoding of IP within the supported ones, may send IP using them, and must allow the IP encapsulation to be configured on a per-peer address basis.
The negotiable facilities of X.25 may be used, such as packet and window size negotiation. Because data units are sent as complete packet sequences, any maximum X.25 data packet size may be configured or negotiated between systems and their network service providers. There is no implied relationship between data unit size and X.25 packet size, so the method of setting the IP MTU from the X.25 packet size used in RFC 877 is not used.
Every system must be able to receive and transmit data units of at least 1600 octets. For compatibility with existing practice and with RFC 877 systems, the default transmit MTU for IP datagrams should be 1500 and must be configurable in at least the range 576 to 1600, with a view toward a standard default IP MTU of 1500 used on both local and wide area networks with no fragmentation at routers, though redefining the IP default MTU is outside the scope of this specification.
The data unit size must be configurable on at least a per-interface basis, the maximum transmitted length should be configurable on a per-peer basis, and may be configurable on a per-encapsulation basis. The ability to send IP datagrams with an MTU of 576 octets and to receive IP datagrams of 1600 octets is essential to interoperate with existing RFC 877 implementations and with this specification. On circuits using the Null encapsulation, an IP packet with the NLPID of hex CC and a default IP MTU of 1500 implies a data unit size of 1501, and a data unit size of 1600 implies an IP MTU of 1599. When IP packets are encapsulated using the NLPID of hex 80 followed by the SNAP header for IP, the default IP MTU of 1500 implies a data unit size of 1506, and a data unit size of 1600 implies an IP MTU of 1594. An implementation may support a maximum data unit size larger than 1600 octets, and there is no limit to the size that may be used when explicitly configured by communicating peers.
Each ISO/IEC TR 9577 encapsulation requires a separate virtual circuit between systems, and multiple virtual circuits for a single encapsulation may be used between systems, for example to increase throughput. Receivers should accept multiple incoming calls with the same encapsulation from a single system, and having done so must accept incoming data units on the additional circuits and should transmit on them. Shedding load by refusing additional calls for the same encapsulation with an X.25 diagnostic of 0 is correct practice, as is shortening inactivity timers to try to clear circuits. Receivers must not accept an incoming call only to close the circuit or ignore data units from it. Because opening multiple virtual circuits with the same encapsulation is specifically allowed, algorithms to prevent virtual circuit call collision must not be implemented, although an implementation may by configuration permit only a single circuit for some protocols to some destinations, in which case a colliding incoming call is rejected and each system waits at least a configurable collision retry time before retrying, with a random increment and exponential backoff if necessary.
The document sets the size rules: every system must handle data units of 1600 octets, the default IP packet size for sending is 1500, and it can be set anywhere between 576 and 1600 so that old and new systems can still talk. The encapsulation headers change the exact size, so the numbers do not line up perfectly, and several circuits may be opened for the same protocol when more throughput is needed.
| Encapsulation | How it is identified |
|---|---|
| IP on its own circuit, the default | The Call User Data field holds hex CC. |
| IP in a multiplexed circuit | The circuit uses the Null encapsulation, and the packet carries the NLPID hex CC. |
| IP in SNAP on its own circuit | The Call User Data field holds hex 80 followed by a five-octet SNAP header with OUI 00-00-00 and PID 08-00. |
| IP in SNAP on a multiplexed circuit | The circuit uses the Null encapsulation, and the packet carries the NLPID hex 80 and the SNAP header. |
- Default transmit MTU1500 octets for IP, with a view toward a standard default IP MTU of 1500.
- Configurable rangeAt least 576 to 1600 octets, so that RFC 877 systems and this specification interoperate.
- Minimum capabilityEvery system must be able to receive and transmit data units of at least 1600 octets.
- Headers count towards the sizeOn a multiplexed circuit the default MTU of 1500 implies a data unit of 1501 octets, and with the SNAP header for IP a data unit of 1506 octets.
- No implied relationshipThe IP packet size is not derived from the X.25 packet size, unlike in RFC 877.
§3.9Virtual Circuit Management
Either system may close a virtual circuit, and if the circuit is closed or reset while a datagram is being transmitted, that datagram is lost. Systems should be able to configure a minimum holding time so that circuits remain open as long as the endpoints are up, noting that holding time, the time the circuit has been open, differs from idle time.
Each system must use an inactivity timer to clear virtual circuits that have been idle for some period. Some X.25 networks, including the ISDN under present tariffs in most areas, charge for virtual circuit holding time, and even where they do not the resource should be released when idle. The timer should be configurable, a value of infinite is acceptable when explicitly configured, and the default should be a small number of minutes; for IP a reasonable default is 90 seconds.
Systems should allow calls from unconfigured calling addresses, which is a configuration option and does not mean the system should collect calls. A system accepting such a call will not transmit on that virtual circuit if it cannot determine the protocol address of the caller, and on the DDN this is not a restriction because IP addresses can be determined algorithmically from the caller's X.121 address. Allowing such calls helps work around address translations done by the networks, and allows experimentation with various address resolution protocols.
Systems should also use a configurable hold-down timer to prevent calls to failed destinations from being immediately retried.
Circuits cost money and hold resources, so they are closed when they go unused. Each system keeps an inactivity timer, with 90 seconds as a reasonable default for IP, and a separate timer that stops a failing destination being retried immediately. A closed circuit loses whatever datagram was on it.
§3.12Required and Forbidden X.25 Features
X.25 implementations must minimally support call setup and clearing, and complete packet sequences, in order to conform with this specification. For better performance and interoperability they should also support extended frame and packet sequence numbering, flow control parameter negotiation, and reverse charging.
Two X.25 features must not be used: interrupt packets and the Q bit, which indicates qualified data. Other X.25 features not explicitly discussed, such as fast select and the D bit, which indicates end-to-end significance, should not be used. Use of the D bit would interfere with the M bit needed to identify the boundaries of data units, and in particular, as subscription to the D bit modification facility prevents proper operation, that user facility must not be subscribed.
ISO/IEC 8208 defines the clearing diagnostic code 249 to signify that a requested protocol is not supported. Systems may use this diagnostic code when clearing an incoming call because the identified protocol is not supported, and non-8208 systems more typically use a diagnostic code of 0 for this function. Supplying a diagnostic code is not mandatory, but when it is supplied for this reason it must be one of these two values.
Some X.25 features would break the encapsulation. The qualified-data bit and interrupt packets are forbidden, and the end-to-end significance bit must not be used because it gets in the way of finding where a data unit ends. When a call is refused because the protocol is not supported, the reason may be reported with one of two standard diagnostic codes.
§4What the Operational Experience Shows
The remarks in this section are guidelines and operational experience rather than requirements.
Protocols above the network layer, such as TCP or TP4, do not affect this standard, and no attempt is made to open X.25 virtual circuits corresponding to TCP or TP4 connections. Both the circuit and multiplexed encapsulations of SNAP may be used to contain any SNAP-encapsulated protocol, including using an OUI of 00-00-00 with the two octets of PID containing an Ethertype, or the IEEE 802.1 OUI of hex 00-80-C2 with the bridging PIDs listed in RFC 1294. IEEE 802.1d bridging can only be performed over a circuit using the Null encapsulation of SNAP, because the order of data units, including bridged data units using different SNAP headers, has to be preserved.
Experience has shown that some X.25 implementations assign calls with hex CC Call User Data to the X.29 PAD remote login facility when the IP layer is not installed, not configured properly, or not operating, because they assume all calls for unconfigured or unbound protocol identifiers are for X.29 PAD sessions. The originator can detect this if it receives any X.25 data packets with the Q bit set, especially if the first octet is hex 02, 04 or 06, which are X.29 PAD parameter commands. It should then clear the call and log the occurrence so that the misconfigured X.25 address can be corrected, and it may use the hold-down timer to prevent further attempts for a period.
It is often assumed that a larger X.25 data packet size will result in increased performance, but in typical X.25 networks it actually decreases performance. Many, if not most, X.25 networks completely store X.25 data packets in each switch before forwarding them, so if the path crosses a number of switches and low-speed trunks are used, negotiating and using large X.25 data packets can result in large transit delays as the data is clocked over each low-speed trunk. If a small end-to-end window size is also used, this may adversely affect end-to-end throughput. Segmenting large IP datagrams in the X.25 layer into complete packet sequences of smaller X.25 data packets allows a greater amount of pipelining through the switches. Large packets combined with slow circuits such as 9.6 kbps also increase the latency seen by other virtual circuits on the same path, which may have unacceptable effects on connections such as X.29. The optimum X.25 data packet size is therefore dependent on the network and is not necessarily the largest size that network offers.
Opening multiple virtual circuits to the same destination with the same Call User Data is another way of increasing performance, but it is not always the best. When the throughput limitation is due to the X.25 window size, opening multiple circuits multiplies the window and may increase performance, but it also competes more effectively for the physical path, which may be undesirable to other users of that path. It may also cause datagram sequencing and reordering problems in end systems with limited buffering, for instance receiving segments out of order at the TCP level when a single circuit would have delivered them in order, and it may increase the cost of delivering datagrams across a public data network.
The document does not specify any method of dynamic IP to X.25, or X.121, address resolution, leaving that for further study. Typical present-day implementations use static tables or an algorithmic transformation between IP and X.121 addresses. RFC 1183 describes DNS resource records that may be useful for automatic resolution or for maintaining static tables, and the use of such methods is entirely experimental at the time.
Eight years of use produced some surprises. A larger X.25 packet often makes things slower, because every switch stores the whole packet before forwarding it, so smaller packets let the switches pipeline. Several circuits to the same destination multiply the flow-control window but take a bigger share of the link and can deliver datagrams out of order. And the document leaves IP address resolution over X.25 unsolved.
- Big X.25 packets can be slowerMost X.25 networks store each packet whole in every switch, so large packets over slow trunks add delay. Smaller packets pipeline better.
- Several circuits have a priceOpening more circuits multiplies the flow-control window, but takes a larger share of the path, can reorder datagrams and may cost more.
- A wrong connection looks like a PAD sessionSome X.25 systems treat a call with the IP identifier as a remote login when IP is not configured, which the originator can detect from data packets with the qualified-data bit.
- Address resolution is unsolvedThe document specifies no dynamic mapping between IP and X.25 addresses, leaving static tables and algorithmic transformations in use.
§6Security Considerations
The memo states plainly that security issues are not discussed in it. Its subject is the encapsulation itself: how a network layer protocol is identified on a virtual circuit, how large the packets may be, and how circuits are opened and closed. The ISDN part of the document applies to the packet mode, and to circuit mode only where the circuit has been established as an end-to-end X.25 connection.
The document says nothing about security, because it only describes how the encapsulation works and leaves the wider questions to the specifications for the protocols it carries.