RFC 1490
Multiprotocol Interconnect over Frame Relay
RFC 1490: Multiprotocol Interconnect over Frame Relay ๐ฆ
Part 1 of 8 ๐
Okay bestie, let's do the ID card first ๐ชช This is RFC 1490, titled Multiprotocol Interconnect over Frame Relay, from the Network Working Group (the IETF crew ๐ธ).
- Authors: T. Bradley and C. Brown, both from Wellfleet Communications, Inc., plus A. Malis from Ascom Timeplex, Inc. ๐ฏโโ๏ธ
- Date: July 1993 ๐
- Category: an IAB standards track protocol โจ
- Obsoletes: RFC 1294, so this one replaces it ๐ซถ
- Updates: the header doesn't list anything this one updates ๐คทโโ๏ธ
Status of this Memo โจ
This RFC specifies an IAB standards track protocol for the Internet community, and it asks for discussion and suggestions for improvements ๐ฌ. For the standardization state and status of this protocol, check the current edition of the "IAB Official Protocol Standards" ๐. Distribution of this memo is unlimited ๐.
Abstract ๐ซง
This memo describes an encapsulation method for carrying network interconnect traffic over a Frame Relay backbone ๐ฃ๏ธ. It covers both Bridging and Routing, so it's giving full coverage ๐ . It also describes a simple fragmentation procedure for carrying large frames over a frame relay network with a smaller MTU ๐ฆ.
๐จ Bestie, this next part is serious. Systems that can transfer both the encapsulation method in this document and others MUST have a priori knowledge of which virtual circuits will carry which encapsulation method. This encapsulation MUST only be used over virtual circuits that have been explicitly configured for its use ๐.
Acknowledgements ๐
Comments and contributions from so many people made this doc happen ๐ฅน. Huge shoutouts to Ray Samora of Proteon, Ken Rehbehn of Netrix Corporation, Fred Baker and Charles Carvalho of Advanced Computer Communications, and Mostafa Sherif of AT&T ๐. Special thanks to Dory Leifer of University of Michigan for helping resolve the fragmentation issues, and to Floyd Backes from DEC and Laura Bridge from Timeplex for the bridging descriptions ๐ง. This document could not have been completed without the expertise of the IP over Large Public Data Networks working group of the IETF ๐.
1. Conventions and Acronyms ๐
Before we get into the good stuff, here's the key-word lowdown ๐. Each one tells you how strict a rule is:
- MUST, SHALL or Mandatory: the item is an absolute requirement of the specification. No cap ๐ซ
- SHOULD or RECOMMENDED: the item SHOULD generally be followed for all but exceptional circumstances.
- MAY or OPTIONAL: the item is truly optional and MAY be followed or ignored according to the needs of the implementor.
All the drawings here have the left-most bit as the high order bit for transmission ๐ง . For example, the drawings might be labeled like this:
0 1 2 3 4 5 6 7 bits
+---+---+---+---+---+---+---+
+---------------------------+
| flag (7E hexadecimal) |
+---------------------------+
| Q.922 Address* |
+-- --+
| |
+---------------------------+
: :
: :
+---------------------------+
Drawings that would be too big to fit on one page if each octet had its own line get drawn with two octets per line ๐. They also use the left-most bit as the high order bit for transmission. There will be a "+" to tell the octets apart, like so:
|--- octet one ---|--- octet two ---|
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+--------------------------------------------+
| Organizationally Unique |
+-- +--------------------+
| Identifier | Protocol |
+-----------------------+--------------------+
| Identifier |
+-----------------------+
Here are the common acronyms used throughout this document ๐:
BECN - Backward Explicit Congestion Notification
BPDU - Bridge Protocol Data Unit
C/R - Command/Response bit
DCE - Data Communication Equipment
DE - Discard Eligibility bit
DTE - Data Terminal Equipment
FECN - Forward Explicit Congestion Notification
PDU - Protocol Data Unit
PTT - Postal Telephone & Telegraph
SNAP - Subnetwork Access Protocol
2. Introduction ๐ท
This part is for devices that act as end stations (DTEs) on a public or private Frame Relay network (for example, one provided by a common carrier or PTT) ๐ก. It won't go into how the stations that are part of the Frame Relay network (DCEs) behave, except where the DTE has to react to them ๐.
The Frame Relay network gives you a bunch of virtual circuits that form the basis for connections between stations attached to the same network ๐. The connected devices make up a private Frame Relay group, which can be fully interconnected with a complete "mesh" of virtual circuits, or only partially interconnected ๐ธ๏ธ. Either way, each virtual circuit is uniquely identified at each Frame Relay interface by a Data Link Connection Identifier (DLCI) ๐. In most circumstances, DLCIs have strictly local significance at each Frame Relay interface, so they only matter locally, iykyk ๐.
The specifications here are meant to apply to both switched and permanent virtual circuits โจ.
3. Frame Format ๐
All protocols MUST encapsulate their packets within a Q.922 Annex A frame [1,2] ๐ฆ. On top of that, frames SHALL contain the information needed to identify the protocol carried within the protocol data unit (PDU), so the receiver can process the incoming packet properly ๐. The format SHALL look like this:
+---------------------------+
| flag (7E hexadecimal) |
+---------------------------+
| Q.922 Address* |
+-- --+
| |
+---------------------------+
| Control (UI = 0x03) |
+---------------------------+
| Optional Pad (0x00) |
+---------------------------+
| NLPID |
+---------------------------+
| . |
| . |
| . |
| Data |
| . |
| . |
+---------------------------+
| Frame Check Sequence |
+-- . --+
| (two octets) |
+---------------------------+
| flag (7E hexadecimal) |
+---------------------------+
The * next to Q.922 Address is a footnote ๐๏ธ: Q.922 addresses, as presently defined, are two octets and contain a 10-bit DLCI. In some networks, Q.922 addresses MAY optionally be increased to three or four octets.
The control field is the Q.922 control field ๐๏ธ. The UI (0x03) value is used unless it is negotiated otherwise. The use of XID (0xAF or 0xBF) is permitted, and we'll get to that later ๐.
The pad field is there to align the rest of the frame to a two octet boundary ๐. There MAY be zero or one pad octet within the pad field and, if present, it MUST have a value of zero 0๏ธโฃ.
The Network Level Protocol ID (NLPID) field is administered by ISO and CCITT ๐๏ธ. It holds values for many different protocols, including IP, CLNP and IEEE Subnetwork Access Protocol (SNAP)[10] ๐งฉ. This field tells the receiver what encapsulation, or what protocol, follows. Values for this field are defined in ISO/IEC TR 9577 [3]. A NLPID value of 0x00 is defined within ISO/IEC TR 9577 as the Null Network Layer or Inactive Set. Since it cannot be distinguished from a pad field, and because it has no significance within this encapsulation scheme, a NLPID value of 0x00 is invalid under the Frame Relay encapsulation ๐ซ. The Appendix has a list of some of the more commonly used NLPID values ๐.
There's no commonly implemented minimum maximum frame size for Frame Relay ๐ญ. A network MUST, however, support at least a 262 octet maximum. Generally, the maximum will be greater than or equal to 1600 octets, but each Frame Relay provider will specify an appropriate value for its network ๐. A Frame Relay DTE, therefore, MUST allow the maximum acceptable frame size to be configurable โ๏ธ.
The minimum frame size for Frame Relay is five octets between the opening and closing flags, assuming a two octet Q.922 address field ๐งฎ. That minimum goes up to six octets for the three octet Q.922 address format, and seven octets for the four octet Q.922 address format. Main character energy ๐ซ.
4. Interconnect Issues ๐
There are two basic types of data packets traveling around the Frame Relay network: routed packets and bridged packets ๐. These have distinct formats, and therefore MUST contain an indicator that the destination may use to correctly interpret the contents of the frame ๐. That indicator is embedded within the NLPID and SNAP header information.
For protocols that don't already have a NLPID assigned, you need an easy way to identify them ๐ต๏ธ. So there's a NLPID value defined that indicates a SNAP header is present ๐ฃ.
A SNAP header looks like this:
+--------------------------------------------+
| Organizationally Unique |
+-- +--------------------+
| Identifier | Protocol |
+-----------------------+--------------------+
| Identifier |
+-----------------------+
All stations MUST be able to accept and properly interpret both the NLPID encapsulation and the SNAP header encapsulation for a routed packet ๐.
The three-octet Organizationally Unique Identifier (OUI) identifies an organization that administers the meaning of the Protocol Identifier (PID) that follows ๐ข. Together they identify a distinct protocol ๐งฌ. Note that OUI 0x00-00-00 specifies that the following PID is an Ethertype โจ.
4.1. Routed Frames โจ
okay so some protocols have an assigned NLPID, but the NLPID numbering space is SO small ๐ญ that not every protocol gets one. ๐ฅบ When packets from those protocols get routed over Frame Relay networks, they get sent with NLPID 0x80 (which says a SNAP follows ๐), and then the SNAP. If the protocol has an Ethertype assigned, the OUI is 0x00-00-00 (which means an Ethertype follows ๐), and the PID is that Ethertype. There's also one pad octet to line up the protocol data on a two octet boundary, like a perfectly straight row of tiny lockers ๐ง
Format of Routed Frames
with Ethertypes
+-------------------------------+
| Q.922 Address |
+---------------+---------------+
|Control 0x03 | pad 0x00 |
+---------------+---------------+
| NLPID 0x80 | OUI 0x00 |
+---------------+ --+
| OUI 0x00-00 |
+-------------------------------+
| Ethertype |
+-------------------------------+
| Protocol Data |
+-------------------------------+
| FCS |
+-------------------------------+
In the few cases when a protocol does have an assigned NLPID (see appendix) ๐ธ, you can save 48 bits with the format below. ๐ฆ Main character energy for your bits ๐
Format of Routed NLPID Protocol
+-------------------------------+
| Q.922 Address |
+---------------+---------------+
|Control 0x03 | NLPID |
+---------------+---------------+
| Protocol Data |
+-------------------------------+
| FCS |
+-------------------------------+
The NLPID encapsulation does not need a pad octet for alignment, so none is permitted. ๐ No padding for you, babe ๐
In the case of ISO protocols, the NLPID is treated as the first octet of the protocol data. ๐ง It's unnecessary to repeat the NLPID here, because that single octet does double duty as both the demultiplexing value and part of the protocol data ๐คฏ (refer to "Other Protocols over Frame Relay for more details). Other protocols, like IP, do have an NLPID defined (0xCC), but it isn't part of the protocol itself โจ Iconic separation of concerns ๐
Format of Routed IP Datagram
+-------------------------------+
| Q.922 Address |
+---------------+---------------+
|Control 0x03 | NLPID 0xCC |
+---------------+---------------+
| IP Datagram |
+-------------------------------+
| FCS |
+-------------------------------+
4.2. Bridged Frames ๐
The second type of Frame Relay traffic is bridged packets, and ngl they have their own whole vibe ๐ฆ These packets get encapsulated using the NLPID value of 0x80, which indicates SNAP. Just like every other SNAP encapsulated protocol, there's one pad octet to line up the data portion of the encapsulated frame ๐ The SNAP header that follows the NLPID tells you the format of the bridged packet ๐ฅ The OUI used for this encapsulation is the 802.1 organization code 0x00-80-C2 ๐ The PID portion of the SNAP header (the two bytes right after the OUI) specifies the form of the MAC header, which comes immediately after the SNAP header ๐ง And on top of that, the PID tells you whether the original FCS is preserved inside the bridged frame. ๐ Literally so much info packed into one field, I'm obsessed ๐ญ
The 802.1 organization has reserved the following values to be used
Okay bestie, the 802.1 crew reserved a whole set of PID values for OUI 0x00-80-C2, and they come in two flavors: one for when the original FCS is preserved and one for when it isn't ๐ Here's the lineup for Frame Relay:
with preserved FCS w/o preserved FCS Media
------------------ ----------------- ----------------
0x00-01 0x00-07 802.3/Ethernet
0x00-02 0x00-08 802.4
0x00-03 0x00-09 802.5
0x00-04 0x00-0A FDDI
0x00-0B 802.6
Also, 0x00-0E with OUI 0x00-80-C2 is its own special thing ๐ง It's how you spot bridged protocol data units (BPDUs), the ones defined by 802.1(d) or 802.1(g) [12]. Iconic, honestly.
So a packet bridged over Frame Relay ends up looking like one of these formats, depending on which media it came from โจ Starting with Ethernet/802.3:
Format of Bridged Ethernet/802.3 Frame
+-------------------------------+
| Q.922 Address |
+---------------+---------------+
|Control 0x03 | pad 0x00 |
+---------------+---------------+
| NLPID 0x80 | OUI 0x00 |
+---------------+ --+
| OUI 0x80-C2 |
+-------------------------------+
| PID 0x00-01 or 0x00-07 |
+-------------------------------+
| MAC destination address |
: :
| |
+-------------------------------+
| (remainder of MAC frame) |
+-------------------------------+
| LAN FCS (if PID is 0x00-01) |
+-------------------------------+
| FCS |
+-------------------------------+
Format of Bridged 802.4 Frame
+-------------------------------+
| Q.922 Address |
+---------------+---------------+
|Control 0x03 | pad 0x00 |
+---------------+---------------+
| NLPID 0x80 | OUI 0x00 |
+---------------+ --+
| OUI 0x80-C2 |
+-------------------------------+
| PID 0x00-02 or 0x00-08 |
+---------------+---------------+
| pad 0x00 | Frame Control |
+---------------+---------------+
| MAC destination address |
: :
| |
+-------------------------------+
| (remainder of MAC frame) |
+-------------------------------+
| LAN FCS (if PID is 0x00-02) |
+-------------------------------+
| FCS |
+-------------------------------+
Format of Bridged 802.5 Frame
+-------------------------------+
| Q.922 Address |
+---------------+---------------+
|Control 0x03 | pad 0x00 |
+---------------+---------------+
| NLPID 0x80 | OUI 0x00 |
+---------------+ --+
| OUI 0x80-C2 |
+-------------------------------+
| PID 0x00-03 or 0x00-09 |
+---------------+---------------+
| pad 0x00 | Frame Control |
+---------------+---------------+
| MAC destination address |
: :
| |
+-------------------------------+
| (remainder of MAC frame) |
+-------------------------------+
| LAN FCS (if PID is 0x00-03) |
| |
+-------------------------------+
| FCS |
+-------------------------------+
Format of Bridged FDDI Frame
+-------------------------------+
| Q.922 Address |
+---------------+---------------+
|Control 0x03 | pad 0x00 |
+---------------+---------------+
| NLPID 0x80 | OUI 0x00 |
+---------------+ --+
| OUI 0x80-C2 |
+-------------------------------+
| PID 0x00-04 or 0x00-0A |
+---------------+---------------+
| pad 0x00 | Frame Control |
+---------------+---------------+
| MAC destination address |
: :
| |
+-------------------------------+
| (remainder of MAC frame) |
+-------------------------------+
| LAN FCS (if PID is 0x00-04) |
| |
+-------------------------------+
| FCS |
+-------------------------------+
Format of Bridged 802.6 Frame
+-------------------------------+
| Q.922 Address |
+---------------+---------------+
| Control 0x03 | pad 0x00 |
+---------------+---------------+
| NLPID 0x80 | OUI 0x00 |
+---------------+ --+
| OUI 0x80-C2 |
+-------------------------------+
| PID 0x00-0B |
+---------------+---------------+ -------
| Reserved | BEtag | Common
+---------------+---------------+ PDU
| BAsize | Header
+-------------------------------+ -------
| MAC destination address |
: :
| |
+-------------------------------+
| (remainder of MAC frame) |
+-------------------------------+
| |
+- Common PDU Trailer -+
| |
+-------------------------------+
| FCS |
+-------------------------------+
Quick 802.6 note ๐ There's only one PID choice for bridged 802.6 PDUs, because whether a CRC-32 is present gets signalled by the CIB bit in the header of the MAC frame. Efficient, no notes.
Now the Common Protocol Data Unit (CPDU) Header and Trailer are there so the egress bridge to an 802.6 subnetwork can do pipelining ๐ฆ The CPDU Header has the BAsize field, which holds the length of the PDU. If the egress 802.6 bridge can't see that field, it has to wait for the whole PDU, work out the length, and stuff it into BAsize before it can start sending the segmented PDU. But if the field is there, the bridge can grab the length from the CPDU Header, pop it into the matching field of the first segment, and send that segment out right away. So it can start transmitting the 802.6 PDU before the complete PDU has even arrived. Main character energy for sure ๐
One thing to keep in mind: the Common PDU Header and Trailer of the encapsulated frame should not just get copied over to the outgoing 802.6 subnetwork ๐ The reason is the encapsulated BEtag value might clash with the previous BEtag value that bridge already sent. Yikes, right?
Last but not least, the BPDU frame format ๐ธ
Format of BPDU Frame
+-------------------------------+
| Q.922 Address |
+-------------------------------+
| Control 0x03 |
+-------------------------------+
| PAD 0x00 |
+-------------------------------+
| NLPID 0x80 |
+-------------------------------+
| OUI 0x00-80-C2 |
+-------------------------------+
| PID 0x00-0E |
+-------------------------------+
| |
| BPDU as defined by |
| 802.1(d) or 802.1(g)[12] |
| |
+-------------------------------+
4. Data Link Layer Parameter Negotiation โจ
Okay bestie, so Frame Relay stations MAY choose to support the Exchange Identification (XID) from Appendix III of Q.922 [1] ๐ฆ. This XID exchange lets you negotiate three parameters when a Frame Relay circuit gets set up: the maximum frame size N201, the retransmission timer T200, and the maximum number of outstanding Information (I) frames K. Main character energy ๐
A station can say "nah, I'm not doing acknowledged mode multiple frame operation" by setting its maximum window size K to zero ๐
If you skip this exchange, these values MUST be statically configured by mutual agreement of the Data Link Connection (DLC) endpoints, or MUST be defaulted to the values in Section 5.9 of Q.922 ๐
N201: 260 octets
K: 3 for a 16 Kbps link,
7 for a 64 Kbps link,
32 for a 384 Kbps link,
40 for a 1.536 Mbps or above link
T200: 1.5 seconds [see Q.922 for further details]
Now the XID bit. If a station that supports XID receives an XID frame, it SHALL respond with an XID response ๐ When you're processing an XID and the remote maximum frame size is smaller than your local maximum, the local system SHALL reduce the maximum size it uses over this DLC down to the remotely specified value. And this SHALL be done before you generate that response XID. Order matters, periodt โญ
Here's how XID gets used to turn off acknowledged mode multiple frame operation ๐ธ
Non-use of Acknowledged Mode Multiple Frame Operation
+---------------+
| Address | (2,3 or 4 octets)
| |
+---------------+
| Control 0xAF |
+---------------+
| format 0x82 |
+---------------+
| Group ID 0x80 |
+---------------+
| Group Length | (2 octets)
| 0x00-0E |
+---------------+
| 0x05 | PI = Frame Size (transmit)
+---------------+
| 0x02 | PL = 2
+---------------+
| Maximum | (2 octets)
| Frame Size |
+---------------+
| 0x06 | PI = Frame Size (receive)
+---------------+
| 0x02 | PL = 2
+---------------+
| Maximum | (2 octets)
| Frame Size |
+---------------+
| 0x07 | PI = Window Size
+---------------+
| 0x01 | PL = 1
+---------------+
| 0x00 |
+---------------+
| 0x09 | PI = Retransmission Timer
+---------------+
| 0x01 | PL = 1
+---------------+
| 0x00 |
+---------------+
| FCS | (2 octets)
| |
+---------------+
6. Fragmentation Issues ๐ง
Fragmentation lets you exchange packets that are bigger than the maximum frame size the underlying network supports. For Frame Relay, the network may support a maximum frame size as small as 262 octets ๐ญ Because it can be that small, fragmentation and reassembly is RECOMMENDED, but not REQUIRED ๐
Fragmentation over Frame Relay is different from IP fragmentation, though. The scope of the Frame Relay fragmentation procedure is limited to the boundary (or DTEs) of the Frame Relay network ๐ฆ
Fragmented packets look a lot like any other encapsulated protocol. The biggest difference is that the fragmented packet still contains the encapsulation header. So first, a packet gets encapsulated (except for the address and control fields) as defined above. Then the large packets get broken up into frames that fit the given Frame Relay network, and those get encapsulated using the Frame Relay fragmentation format. This way, a station receiving fragments can reassemble them and then send the reassembled packet through the same processing path as a packet that never got fragmented. It's giving tidy ๐
Within Frame Relay, fragments are encapsulated using the SNAP format with an OUI of 0x00-80-C2 and a PID of 0x00-0D. So individual fragments look like this:
+---------------+---------------+
| Q.922 Address |
+---------------+---------------+
| Control 0x03 | pad 0x00 |
+---------------+---------------+
| NLPID 0x80 | OUI 0x00 |
+---------------+---------------+
| OUI 0x80-C2 |
+---------------+---------------+
| PID 0x00-0D |
+---------------+---------------+
| sequence number |
+-+-------+-----+---------------+
|F| RSVD |offset |
+-+-------+-----+---------------+
| fragment data |
| . |
| . |
| . |
+---------------+---------------+
| FCS |
+---------------+---------------+
Let's break down the fields ๐
- Sequence: This is a two octet identifier that gets incremented every time a new complete message is fragmented. It lets you detect lost frames, and it gets set to a random value at initialization.
- Reserved: This field is 4 bits long and isn't currently defined. It MUST be set to 0.
- Final bit (F): This is a one bit field. It's set to 1 on the last fragment and set to 0 for all other fragments.
- Offset: This is an 11 bit value representing the logical offset of this fragment in bytes divided by 32. The first fragment MUST have an offset of zero.
Here's how a large IP datagram gets fragmented over Frame Relay. In this example, the complete datagram gets split into two Frame Relay frames ๐
Frame Relay Fragmentation Example
+-----------+-----------+
| Q.922 Address |
+-----------+-----------+
| Ctrl 0x03 | pad 0x00 |
+-----------+-----------+
|NLPID 0x80 | OUI 0x00 |
+-----------+-----------+
| OUI 0x80-C2 |
+-----------+-----------+ +-----------+-----------+
|ctrl 0x03 |NLPID 0xCC | | PID 0x00-0D |
+-----------+-----------+ +-----------+-----------+
| | | sequence number n |
| | +-+------+--+-----------+
| | |0| RSVD |offset (0) |
| | +-+------+--+-----------+
| | | ctrl 0x03 |NLPID 0xCC |
| | +-----------+-----------+
| | | first m bytes of |
| large IP datagram | ... | IP datagram |
| | | |
| | +-----------+-----------+
| | | FCS |
| | +-----------+-----------+
| |
| | +-----------+-----------+
| | | Q.922 Address |
| | +-----------+-----------+
| | | Ctrl 0x03 | pad 0x00 |
+-----------+-----------+ +-----------+-----------+
|NLPID 0x80 | OUI 0x00 |
+-----------+-----------+
| OUI 0x80-C2 |
+-----------+-----------+
| PID 0x00-0D |
+-----------+-----------+
| sequence number n |
+-+------+--+-----------+
|1| RSVD |offset (m/32) |
+-+------+--+-----------+
| remainder of IP |
| datagram |
+-----------+-----------+
| FCS |
+-----------+-----------+
Now for the rules of the road ๐ฆ Fragments MUST be sent in order, starting with a zero offset and ending with the final fragment. These fragments MUST NOT be interrupted with other packets or information intended for the same DLC. An end station MUST be able to re-assemble up to 2K octets, and it's suggested to support up to 8K octet re-assembly ๐
If anything goes wrong during reassembly, like a fragment getting corrupted or going missing, the entire message is dropped. In that case, the upper layer protocol is responsible for any retransmission ๐ญ And there's no reassembly timer, nor is one needed, because the Frame Relay service is REQUIRED to deliver frames in order. No timer drama, bestie ๐
This fragmentation algorithm is not intended to reliably handle all possible failure conditions. Just like with IP fragmentation, there's a small possibility of reassembly error and delivery of an erroneous packet. Including a higher layer checksum greatly reduces this risk ๐ก๏ธ
7. Address Resolution ๐
okay so sometimes a Frame Relay station needs to figure out a protocol address on the fly ๐ and it can do that with the standard Address Resolution Protocol (ARP) [6], wrapped inside a SNAP encoded Frame Relay packet like this: ๐
+-----------------------+-----------------------+
| Q.922 Address |
+-----------------------+-----------------------+
| Control (UI) 0x03 | pad 0x00 |
+-----------------------+-----------------------+
| NLPID = 0x80 | | SNAP Header
+-----------------------+ OUI = 0x00-00-00 + Indicating
| | ARP
+-----------------------+-----------------------+
| PID = 0x0806 |
+-----------------------+-----------------------+
| ARP packet |
| . |
| . |
| . |
+-----------------------+-----------------------+
So the ARP packet looks like this, with these values ๐ฆ
Data:
ar$hrd 16 bits Hardware type
ar$pro 16 bits Protocol type
ar$hln 8 bits Octet length of hardware address (n)
ar$pln 8 bits Octet length of protocol address (m)
ar$op 16 bits Operation code (request or reply)
ar$sha noctets source hardware address
ar$spa moctets source protocol address
ar$tha noctets target hardware address
ar$tpa moctets target protocol address
ar$hrd - assigned to Frame Relay is 15 decimal
(0x000F) [7].
ar$pro - see assigned numbers for protocol ID number for
the protocol using ARP. (IP is 0x0800).
ar$hln - length in bytes of the address field (2, 3, or 4)
ar$pln - protocol address length is dependent on the
protocol (ar$pro) (for IP ar$pln is 4).
ar$op - 1 for request and 2 for reply.
ar$sha - Q.922 source hardware address, with C/R, FECN,
BECN, and DE set to zero.
ar$tha - Q.922 target hardware address, with C/R, FECN,
BECN, and DE set to zero.
okay so here's the tea โ because DLCIs in most Frame Relay networks only have local significance, an end station doesn't get a specific DLCI assigned to itself. ๐ which means the station has no address to stick into the ARP request or reply. but lowkey the Frame Relay network has a trick for getting the right DLCIs, and the solution below for locally addressed networks works just as well when DLCIs have global significance ๐
the DLCI in the Frame Relay header gets modified as the packet travels through the network. by the time it reaches its destination, the DLCI has been set to whatever value corresponds to the sender from the receiver's point of view. for example, in Figure 1, if station A sends a message to station B, it puts DLCI 50 in the Frame Relay header. but when B gets it, the network has changed that DLCI, and it shows up to B as DLCI 70 โจ
~~~~~~~~~~~~~~~
( )
+-----+ ( ) +-----+
| |-50------(--------------------)---------70-| |
| A | ( ) | B |
| |-60-----(---------+ ) | |
+-----+ ( | ) +-----+
( | )
( | ) <---Frame Relay
~~~~~~~~~~~~~~~~ network
80
|
+-----+
| |
| C |
| |
+-----+
Figure 1
the lines between the stations are data link connections (DLCs), and the numbers are the local DLCI for each connection. ๐ฆ
here's the DLCI to Q.922 address table for Figure 1 ๐ธ
DLCI to Q.922 Address Table for Figure 1
DLCI (decimal) Q.922 address (hex)
50 0x0C21
60 0x0CC1
70 0x1061
80 0x1401
if you already know frame relay, you'll see the link between DLCI and Q.922 address right away ๐ for everyone else, the translation is based on a two byte address length using the Q.922 encoding format, which looks like this:
8 7 6 5 4 3 2 1
+------------------------+---+--+
| DLCI (high order) |c/r|ea|
+--------------+----+----+---+--+
| DLCI (lower) |FECN|BECN|DE |EA|
+--------------+----+----+---+--+
for ARP and its variants, the FECN, BECN, C/R and DE bits are assumed to be 0. ๐
now, when an ARP message reaches its destination, all the hardware addresses are invalid ๐ญ the address in the frame header is still correct though. even though it kinda breaks the purity of layering, Frame Relay may use the header address as the sender hardware address. also, the target hardware address in both the ARP request and reply will be invalid too. this shouldn't cause problems, since ARP doesn't rely on those fields, and an implementation may zero fill or ignore the target hardware address field entirely. ๐ง
let's walk through how the address swap works with Figure 1. if station A (protocol address pA) wants to resolve station B's address (protocol address pB), it builds an ARP request like this:
ARP request from A
ar$op 1 (request)
ar$sha unknown
ar$spa pA
ar$tha undefined
ar$tpa pB
station A doesn't have a source address associated with it, so the source hardware address field isn't valid. so when the ARP packet is received, it must extract the correct address from the Frame Relay header and put it in the source hardware address field. that turns the ARP request from A into this:
ARP request from A as modified by B
ar$op 1 (request)
ar$sha 0x1061 (DLCI 70) from Frame Relay header
ar$spa pA
ar$tha undefined
ar$tpa pB
now station B's ARP can store the association between station A's protocol address and its Q.922 address correctly ๐ next, station B forms a reply. lots of implementations just copy the source addresses from the ARP request into the target addresses, then fill in their own addresses as the source. so the ARP response looks like this:
ARP response from B
ar$op 2 (response)
ar$sha unknown
ar$spa pB
ar$tha 0x1061 (DLCI 70)
ar$tpa pA
again, the source hardware address is unknown, so when station A receives the response, it pulls the address out of the Frame Relay header and puts it in the source hardware address field. the response becomes:
ARP response from B as modified by A
ar$op 2 (response)
ar$sha 0x0C21 (DLCI 50)
ar$spa pB
ar$tha 0x1061 (DLCI 70)
ar$tpa pA
and station A now correctly knows that station B, with protocol address pB, is associated with Q.922 address 0x0C21 (DLCI 50) ๐ฅฐ
Reverse ARP (RARP) [8] works in exactly the same way ๐ still using Figure 1, if we say station C is an address server, these RARP exchanges happen:
RARP request from A RARP request as modified by C
ar$op 3 (RARP request) ar$op 3 (RARP request)
ar$sha unknown ar$sha 0x1401 (DLCI 80)
ar$spa undefined ar$spa undefined
ar$tha 0x0CC1 (DLCI 60) ar$tha 0x0CC1 (DLCI 60)
ar$tpa pC ar$tpa pC
station C then looks up the protocol address for Q.922 address 0x1401 (DLCI 80) and sends back the RARP response ๐งโโ๏ธ
RARP response from C RARP response as modified by A
ar$op 4 (RARP response) ar$op 4 (RARP response)
ar$sha unknown ar$sha 0x0CC1 (DLCI 60)
ar$spa pC ar$spa pC
ar$tha 0x1401 (DLCI 80) ar$tha 0x1401 (DLCI 80)
ar$tpa pA ar$tpa pA
what this means is that the Frame Relay interface must only intervene in the processing of incoming packets. ๐
if there's no suitable multicast, ARP can still work ๐ซ the end station just sends a copy of the ARP request through each relevant DLC, which simulates a broadcast.
Frame Relay providers are currently studying how to use multicast addresses in a Frame Relay environment ๐ฌ once the multicast issues are sorted out, multicast addressing may become useful for sending ARP requests and other "broadcast" messages.
because broadcasting is so inefficient in Frame Relay, a new address resolution variation was developed ๐ it's called Inverse ARP [11], and it resolves a protocol address when the hardware address is already known. in Frame Relay's case, the known hardware address is the DLCI. Inverse ARP follows the same pattern as ARP and RARP, meaning the source hardware address gets inserted at the receiving station.
in our example, station A can use Inverse ARP to find the protocol address of the station on its DLCI 50. the Inverse ARP request looks like this:
InARP Request from A (DLCI 50)
ar$op 8 (InARP request)
ar$sha unknown
ar$spa pA
ar$tha 0x0C21 (DLCI 50)
ar$tpa unknown
when Station B receives this packet, it swaps the source hardware address for the Q.922 address from the Frame Relay header. so the InARP request from A becomes:
ar$op 8 (InARP request)
ar$sha 0x1061
ar$spa pA
ar$tha 0x0C21
ar$tpa unknown.
station B formats an Inverse ARP response and sends it to station A, the same way it would for any ARP message ๐
8. IP over Frame Relay ๐
Internet Protocol [9] (IP) datagrams sent over a Frame Relay network follow the encapsulation we talked about earlier ๐ and within this context, IP can be encapsulated in two different ways. โจ
1. NLPID value indicating IP ๐
+-----------------------+-----------------------+
| Q.922 Address |
+-----------------------+-----------------------+
| Control (UI) 0x03 | NLPID = 0xCC |
+-----------------------+-----------------------+
| IP Packet . |
| . |
| . |
+-----------------------+-----------------------+
2. NLPID value indicating SNAP ๐
+-----------------------+-----------------------+
| Q.922 Address |
+-----------------------+-----------------------+
| Control (UI) 0x03 | pad 0x00 |
+-----------------------+-----------------------+
| NLPID = 0x80 | | SNAP Header
+-----------------------+ OUI = 0x00-00-00 + Indicating
| | IP
+-----------------------+-----------------------+
| PID = 0x0800 |
+-----------------------+-----------------------+
| IP packet |
| . |
| . |
| . |
+-----------------------+-----------------------+
Okay so both of these encapsulations are supported under the definitions, but it is way more efficient to pick just one as the go-to method for encapsulating IP data ๐
. So IP data shall be encapsulated using the NLPID value of 0xCC indicating IP, as shown in option 1 above. Option 1 is more efficient in transmission (48 fewer bits) and matches how IP gets encapsulated in X.25. Literally the same energy โจ
9. Other Protocols over Frame Relay ๐ฆ
Other protocols can be sent in different ways too, so to avoid conflicts, SNAP is only used if no NLPID value is defined for the given protocol ๐
As an example, ISO CLNP has an NLPID defined (0x81). So the NLPID field says the data packet is CLNP, and the data packet follows right after it. The frame looks like this:
+---------------------------------------------+
| Q.922 Address |
+----------------------+----------------------+
| Control (0x03) | NLPID - 0x81 (CLNP) |
+----------------------+----------------------+
| remainder of CLNP packet |
| . |
| . |
+---------------------------------------------+
Here the NLPID is what tells you it's CLNP ๐ง. It's also considered part of the CLNP packet, so the NLPID should not be removed before it goes up to the upper layers for processing. The NLPID is not duplicated. Iconic ๐
Other protocols, like IPX, don't have an NLPID value defined. As mentioned above, IPX gets encapsulated using the SNAP header ๐. In this case, the frame looks like this:
+---------------------------------------------+
| Q.922 Address |
+----------------------+----------------------+
| Control 0x03 | pad 0x00 |
+----------------------+----------------------+
| NLPID - 0x80 (SNAP) | OUI - 0x00 00 00 |
+----------------------+ |
| |
+---------------------------------------------+
| PID = 0x8137 |
+---------------------------------------------+
| IPX packet |
| . |
| . |
+---------------------------------------------+
10. Bridging Model for Frame Relay โจ
okay so the bridging model for Frame Relay is basically the SAME as remote bridging from IEEE P802.1g "Remote MAC Bridging" [13] ๐ , and it's built around "Virtual Ports" ๐ฆ. Remote bridges have LAN ports where they send and receive MAC frames to and from the LANs they're attached to. They can ALSO send and receive MAC frames through virtual ports to and from other remote bridges. A virtual port MAY represent a remote bridge's point of access to one, two, or more other remote bridges ๐ธ.
Remote bridges get set up as members of a remote bridge group by management, so it's all statically configured ๐ ๏ธ. Every member of a remote bridge group is connected by one or more virtual ports. Together, the remote MAC bridges in a group give you actual or potential MAC layer interconnection between a set of LANs and any other remote bridge groups the bridges attach to ๐ง.
In a Frame Relay network there MUST be a full mesh of Frame Relay VCs between the bridges of a remote bridge group. If the frame relay network is not a full mesh, then the bridge network MUST be divided into multiple remote bridge groups ๐ซถ.
The frame relay VCs that interconnect the bridges of a remote bridge group MAY be combined or used individually to form one or more virtual bridge ports. This is so good because you get flexibility ๐. You can treat the Frame Relay interface as a single virtual bridge port (all VCs in one group), or as a collection of bridge ports (individual or grouped VCs) โจ.
When one virtual bridge port handles the interconnectivity for ALL the bridges in a remote bridge group (aka all VCs combined into one virtual port), the standard Spanning Tree Algorithm MAY be used to figure out the state of that virtual port. But if you have more than one virtual port in a remote bridge group, then an "extended" Spanning Tree Algorithm is REQUIRED ๐ฅ. That extended algorithm is defined in IEEE 802.1g [13]. The cool part: a virtual port only gets put into backup if there's a loop in the network outside the remote bridge group ๐.
The simplest setup is the LAN view, where all VCs are combined into a single virtual port. Frames that would be broadcast on a LAN, such as BPDUs, MUST be flooded to each VC (or multicast, if the service is developed for Frame Relay services) ๐ฃ. Flooding happens by sending the packet to each relevant DLC attached to the Frame Relay interface. The VCs are generally invisible to the bridge ๐. The bridge sends a flooded frame to the frame relay interface and doesn't "see" that it's being forwarded to each VC individually. If all the participating bridges are fully connected (full mesh), the standard Spanning Tree Algorithm will suffice here ๐ .
Okay, the learning part is kinda the main plot ๐. Normally LAN bridges learn which interface a particular end station may be reached on by associating a MAC address with a bridge port. In a Frame Relay network set up for the LAN-like single bridge port (or any set of VCs grouped together into one bridge port), the bridge MUST associate a MAC address with a bridge port, and it MUST also associate it with a connection identifier. For Frame Relay, that connection identifier is a DLCI ๐ฆ. It's unreasonable and maybe even impossible to make bridges statically configure an association between every possible destination MAC address and a DLC ๐ญ. So Frame Relay LAN-modeled bridges MUST provide a mechanism that lets the Frame Relay bridge port dynamically learn these associations. To make that dynamic learning work, a bridged packet SHALL conform to the encapsulation described within section 7. That way, the receiving Frame Relay interface knows to look inside the bridged packet to grab the info it needs ๐ง .
A second approach, the point-to-point view, treats each Frame Relay VC as its own separate bridge port ๐. Flooding and forwarding are way less complicated this way, because each bridge port has only one destination. No artificial flooding needed, and no need to tie DLCIs to destination MAC addresses ๐. Depending on how the VCs are interconnected, an extended Spanning Tree algorithm MAY be required so that all virtual ports can stay active, as long as there are no true loops in the topology outside the remote bridge group.
You can also mix the LAN view and the point-to-point view on a single Frame Relay interface. Some VCs get combined into a single virtual bridge port, while other VCs are independent bridge ports. Mixing is so iconic ๐.
The drawing below shows the different possible bridging configurations. The dashed lines between boxes represent virtual circuits ๐ธ.
+-------+
-------------------| B |
/ -------| |
/ / +-------+
/ |
+-------+/ \ +-------+
| A | -------| C |
| |-----------------------| |
+-------+\ +-------+
\
\ +-------+
\ | D |
-------------------| |
+-------+
Since there's less than a full mesh of VCs between the bridges in this example, the network MUST be divided into more than one remote bridge group ๐จ. A reasonable setup is to have bridges A, B, and C in one group, and bridges A and D in a second group โจ.
The first bridge group combines the VCs interconnecting bridges A, B, and C into a single virtual port. That's the LAN view configuration ๐. The second group is also a single virtual port, which simply connects bridges A and D. In this setup the standard Spanning Tree Algorithm is enough to detect loops ๐.
There's also an alternative setup with three individual virtual ports in the first group, one for each VC interconnecting bridges A, B, and C. Here's the drama: the standard Spanning Tree Algorithm would detect a loop in this topology, so an extended Spanning Tree Algorithm would have to be used to keep all virtual ports active ๐ญ. The second group would still be one single virtual port, though, so the standard Spanning Tree Algorithm could be used in that group ๐ .
Using the same drawing, you could build a remote bridge scenario with three bridge groups. This is an example of the point-to-point case ๐ฆ. The VC connecting A and B, the VC connecting A and C, and the VC connecting A and D are each their own bridge group with a single virtual port ๐.
11. Appendix A โจ
List of Commonly Used NLPIDs
0x00 Null Network Layer or Inactive Set
(not used with Frame Relay)
0x80 SNAP
0x81 ISO CLNP
0x82 ISO ESIS
0x83 ISO ISIS
0xCC Internet IP
List of PIDs of OUI 00-80-C2
with preserved FCS w/o preserved FCS Media
------------------ ----------------- --------------
0x00-01 0x00-07 802.3/Ethernet
0x00-02 0x00-08 802.4
0x00-03 0x00-09 802.5
0x00-04 0x00-0A FDDI
0x00-0B 802.6
0x00-0D Fragments
0x00-0E BPDUs as defined by
802.1(d) or
802.1(g)[12].
12. Appendix B - Connection Oriented procedures โจ
okay bestie, this is the appendix where we get into the connection oriented stuff ๐ซถ The info here is basically the same as (and sometimes exactly the same as) Annex F of ANSI T1.617, which Rao Cherukuri of IBM wrote ๐ Annex F is the authoritative source, though! This appendix just repeats it here for convenience, so if they ever disagree, Annex F wins ๐
The Network Level Protocol ID (NLPID) field is administered by ISO and CCITT ๐ธ It holds values for loads of protocols, including IP, CLNP (ISO 8473), CCITT Q.933, and ISO 8208. Here's a picture of a generic encapsulation technique over frame relay networks ๐ฆ The whole point is flexibility: you can identify multiple alternative protocols, used by:
- end-to-end systems or
- LAN to LAN bridges and routers or
- a combination of the above
all running over frame relay networks ๐ง
Q.922 control
|
|
--------------------------------------------
| |
UI I Frame
| |
--------------------------------- --------------
| 0x08 | 0x81 |0xCC | 0x80 |..01.... |..10....
| | | | | |
Q.933 CLNP IP SNAP ISO 8208 ISO 8208
| | Modulo 8 Modulo 128
| |
-------------------- OUI
| | |
L2 ID L3 ID -------
| User | |
| specified | |
| 0x70 802.3 802.6
|
-------------------
|0x51 |0x4E | |0x4C
| | | |
7776 Q.922 Others 802.2
For protocols that don't have an NLPID assigned or don't have a SNAP encapsulation, the NLPID value 0x08, indicating CCITT Recommendation Q.933, should be used ๐ The four octets following the NLPID cover both layer 2 and layer 3 protocol identification. Most protocol code points are currently defined in the ANSI T1.617 low layer compatibility information element, and there's also an escape hatch for defining non-standard protocols ๐
Format of Other Protocols using Q.933 NLPID
Format of Other Protocols
using Q.933 NLPID
+-------------------------------+
| Q.922 Address |
+---------------+---------------+
|Control 0x03 | NLPID 0x08 |
+---------------+---------------+
| L2 Protocol ID |
| octet 1 | octet 2 |
+-------------------------------+
| L3 Protocol ID |
| octet 2 | octet 2 |
+-------------------------------+
| Protocol Data |
+-------------------------------+
| FCS |
+-------------------------------+
ISO 8802/2 with user specified layer 3
ISO 8802/2 with user specified
layer 3
+-------------------------------+
| Q.922 Address |
+---------------+---------------+
|Control 0x03 | NLPID 0x08 |
+---------------+---------------+
| 802/2 0x4C | 0x80 |
+-------------------------------+
|User Spec. 0x70| Note 1 |
+-------------------------------+
| DSAP | SSAP |
+-------------------------------+
| Control (Note 2) |
+-------------------------------+
| Remainder of PDU |
+-------------------------------+
| FCS |
+-------------------------------+
Note 1: Indicates the code point for user specified
layer 3 protocol.
Note 2: Control field is two octets for I-format and
S-format frames (see 88002/2)
Encapsulations using I frame (layer 2)
The Q.922 I frame is for supporting layer 3 protocols that need an acknowledged data link layer, for example ISO 8208 ๐ฅ The C/R bit (T1.618 address) will be used for command and response indications.
Format of ISO 8208 frame
Modulo 8
+-------------------------------+
| Q.922 Address |
+---------------+---------------+
| ....Control I frame |
+---------------+---------------+
| 8208 packet (modulo 8) Note 3 |
| |
+-------------------------------+
| FCS |
+-------------------------------+
Note 3: First octet of 8208 packet also identifies the
NLPID which is "..01....".
Format of ISO 8208 frame
Modulo 128
+-------------------------------+
| Q.922 Address |
+---------------+---------------+
| ....Control I frame |
+---------------+---------------+
| 8208 packet (modulo 128) |
| Note 4 |
+-------------------------------+
| FCS |
+-------------------------------+
Note 4: First octet of 8208 packet also identifies the
NLPID which is "..10....".
13. References ๐
[1] International Telegraph and Telephone Consultative Committee, "ISDN Data Link Layer Specification for Frame Mode Bearer Services", CCITT Recommendation Q.922, 19 April 1991.
[2] American National Standard For Telecommunications - Integrated Services Digital Network - Core Aspects of Frame Protocol for Use with Frame Relay Bearer Service, ANSI T1.618-1991, 18 June 1991.
[3] Information technology - Telecommunications and Information Exchange between systems - Protocol Identification in the Network Layer, ISO/IEC TR 9577: 1990 (E) 1990-10-15.
[4] Baker, F., Editor, "Point to Point Protocol Extensions for Bridging", RFC 1220, ACC, April 1991.
[5] International Standard, Information Processing Systems - Local Area Networks - Logical Link Control, ISO 8802-2: 1989 (E), IEEE Std 802.2-1989, 1989-12-31.
[6] Plummer, D., "An Ethernet Address Resolution Protocol - or - Converting Network Protocol Addresses to 48.bit Ethernet Address for Transmission on Ethernet Hardware", STD 37, RFC 826, MIT, November 1982.
[7] Reynolds, J. and J. Postel, "Assigned Numbers", STD 2, RFC 1340, USC/Information Sciences Institute, July 1992.
[8] Finlayson, R., Mann, R., Mogul, J., and M. Theimer, "A Reverse Address Resolution Protocol", STD 38, RFC 903, Stanford University, June 1984.
[9] Postel, J. and Reynolds, J., "A Standard for the Transmission of IP Datagrams over IEEE 802 Networks", RFC 1042, USC/Information Sciences Institute, February 1988.
[10] IEEE, "IEEE Standard for Local and Metropolitan Area Networks: Overview and architecture", IEEE Standards 802-1990.
[11] Bradley, T., and C. Brown, "Inverse Address Resolution Protocol", RFC 1293, Wellfleet Communications, Inc., January 1992.
[12] IEEE, "IEEE Standard for Local and Metropolitan Networks: Media Access Control (MAC) Bridges", IEEE Standard 802.1D-1990.
[13] PROJECT 802 - LOCAL AND METROPOLITAN AREA NETWORKS, Draft Standard 802.1G: Remote MAC Bridging, Draft 6, October 12, 1992.
14. Security Considerations ๐
Security issues are not discussed in this memo.
15. Authors' Addresses โจ
Terry Bradley
Terry Bradley
Wellfleet Communications, Inc.
15 Crosby Drive
Bedford, MA 01730
Phone: (617) 280-2401
Email: tbradley@wellfleet.com
Caralyn Brown
Caralyn Brown
Wellfleet Communications, Inc.
15 Crosby Drive
Bedford, MA 01730
Phone: (617) 280-2335
Email: cbrown@wellfleet.com
Andrew G. Malis
Andrew G. Malis
Ascom Timeplex, Inc.
Advanced Products Business Unit
289 Great Road Suite 205
Acton, MA 01720
Phone: (508) 266-4500
Email: malis_a@timeplex.com
That's the whole spec, bestie! ๐๐
๐ฆ where this page comes from
- ietf: rfc1490 1993-07
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms