RFC 2390
Inverse Address Resolution Protocol
Inverse Address Resolution Protocol ๐
- RFC 2390 (Network Working Group), September 1998 ๐
- Authors: T. Bradley (Avici Systems, Inc.), C. Brown (Consultant), A. Malis (Ascend Communications, Inc.) ๐ซถ
- Category: Standards Track โจ
- Obsoletes: 1293 ๐
- Updates: none listed in the title block ๐ธ
Part 1 of 2! ๐ฆ
Status of this Memo
okay so this is a Standards Track protocol for the Internet community ๐ธ It's basically asking everyone to talk about it and send suggestions for improvements ๐ฌ If you want the current standardization state and status of this protocol, check the "Internet Official Protocol Standards" (STD 1) ๐ Distribution of this memo is unlimited ๐ซถ
Copyright Notice
Copyright (C) The Internet Society (1998). All Rights Reserved. ๐
2. Abstract โจ
so this memo adds stuff to ARP that lets a station ask for a protocol address that matches a given hardware address ๐ฆ It's specifically for Frame Relay stations ๐ These stations might have a Data Link Connection Identifier (DLCI), which is basically the Frame Relay version of a hardware address ๐ง That DLCI is tied to an established Permanent Virtual Circuit (PVC), but the station still doesn't know the protocol address of the station on the other end ๐ฅบ It also applies to other networks with similar problems ๐
This memo replaces RFC 1293 ๐ The changes from RFC 1293 are minor changes to formalize the language, the additions of a packet diagram and an example in section 7.2, and a new security section ๐ฅ
3. Conventions ๐
okay so the magic words are MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY, and OPTIONAL ๐ฎ When they show up in this document, they're to be interpreted as described in [5] โจ
4. Introduction ๐ธ
this doc leans heavily on Frame Relay as an example of how the Inverse Address Resolution Protocol (InARP) can be super useful ๐ฆ But InARP isn't meant to be used only with Frame Relay ๐ It can be used in any network that gives you destination hardware addresses without telling you the matching protocol addresses ๐ซถ
5. Motivation ๐
so the whole reason Inverse ARP exists is that we really wanted dynamic address resolution in Frame Relay to be possible AND efficient ๐ Permanent virtual circuits (PVCs) and eventually switched virtual circuits (SVCs) are identified by a Data Link Connection Identifier (DLCI) ๐ง These DLCIs define a single virtual connection through the wide area network (WAN), and you can think of them as the Frame Relay equivalent of a hardware address ๐ Every so often, a network can announce a new virtual circuit with its DLCI through signaling messages ๐ก The catch? Protocol addressing isn't included in that announcement ๐ญ So the station that gets the notice learns about the new connection but can't address the other side ๐ Without a new configuration or some way to discover the other side's protocol address, that new virtual circuit is basically unusable ๐ฅฒ
Other resolution methods got considered too, but they were rejected ๐ โโ๏ธ Reverse ARP [4], for example, looked like a good candidate, but its response is the protocol address of the requesting station, not the station that receives the request ๐ค IP-specific mechanisms were limiting because they couldn't resolve protocols other than IP ๐ธ So, the ARP protocol got expanded ๐
Inverse Address Resolution Protocol (InARP) lets a Frame Relay station discover the protocol address of a station associated with the virtual circuit โจ It's more efficient than sending ARP messages on every VC for every address the system wants to resolve, and it's more flexible than relying on static configuration ๐ฆ Iconic, honestly ๐
6. Packet Format ๐ง
Inverse ARP is an extension of the existing ARP ๐ So it has the same format as standard ARP ๐ซถ
ar$hrd 16 bits Hardware type
ar$pro 16 bits Protocol type
ar$hln 8 bits Byte length of each hardware address (n)
ar$pln 8 bits Byte length of each protocol address (m)
ar$op 16 bits Operation code
ar$sha nbytes source hardware address
ar$spa mbytes source protocol address
ar$tha nbytes target hardware address
ar$tpa mbytes target protocol address
The possible values for hardware and protocol types are the same as the ones for ARP, and you can find them in the current Assigned Numbers RFC [2] ๐
The lengths of the hardware and protocol addresses depend on the environment InARP is running in ๐ For example, if IP is running over Frame Relay, the hardware address length is either 2, 3, or 4, and the protocol address length is 4 ๐
The operation code tells you what kind of message it is, a request or a response ๐
InARP request = 8
InARP response = 9
These values were picked so they wouldn't clash with other ARP extensions ๐ฅ
7. Protocol Operation ๐
basic InARP works essentially the same as ARP, with one big difference: InARP does not broadcast requests ๐ That's because the hardware address of the destination station is already known ๐ซถ
When an interface that supports InARP becomes active, it should start the InARP protocol and format InARP requests for each active PVC where InARP is active ๐ฆ To do that, the requesting station formats a request by putting in its source hardware address, its source protocol address, and the known target hardware address ๐ Then it zero fills the target protocol address field โจ Last step: it encapsulates the packet for the specific network and sends it directly to the target station ๐
When a station gets an InARP request, it may add the requester's protocol address/hardware address mapping to its ARP cache, just like it would for any ARP request ๐ง Unlike other ARP requests, though, the receiving station may assume that any InARP request it gets is destined for it ๐ For every InARP request, the receiving station should format a proper response, using the source addresses from the request as the target addresses of the response ๐ธ If the station is unable or unwilling to reply, it ignores the request ๐ โโ๏ธ
When the requesting station gets the InARP response, it may complete the ARP table entry and use the address information it was given ๐ Note: as with ARP, information learned through InARP may be aged or invalidated under certain circumstances โณ
7.1. Operation with Multi-Addressed Hosts ๐
For this discussion, a multi-addressed host is a host that has multiple protocol addresses assigned to a single interface ๐ฎ If a station like that receives an InARP request, it must choose one address to respond with ๐ค To make that choice, the receiving station must first look at the protocol address of the requesting station, and then respond with the protocol address that matches the requester's network ๐ For example, if the requesting station is probing for an IP address, the responding multi-addressed station should respond with an IP address on the same subnet as the requesting station ๐ซถ If the station doesn't have an address that fits the request, it should not respond ๐ In the IP example, if the receiving station doesn't have an IP address assigned to the interface that's part of the requested subnet, the receiving station would not respond ๐
A multi-addressed host should send an InARP request for each of the addresses defined for the given interface ๐ฆ It's worth noting, though, that the receiving side may answer some or none of the requests, depending on its configuration ๐ง
7.2. Protocol Operation Within Frame Relay โจ
okay so this is where InARP gets to show off on Frame Relay ๐ฆ One case where Inverse ARP can be used is on a frame relay interface that supports signaling of DLCIs through a data link management interface. An InARP-equipped station on that kind of interface formats an InARP request and addresses it to the new virtual circuit. If the other side supports InARP, it may send back a response with the protocol address that was asked for ๐
On Frame Relay, InARP packets get wrapped using the NLPID/SNAP format defined in [3], which tells you the packet is ARP stuff ๐ The encapsulation looks like this:
+----------+----------+
| Q.922 address |
+----------+----------+
|ctrl 0x03 | pad 00 |
+----------+----------+
|nlpid 0x80| oui 0x00 |
+----------+ +
| oui (cont) 0x00 00 |
+----------+----------+
| pid 0x08 06 |
+----------+----------+
| . |
| . |
Now the InARP request itself. Every field has a job, so here's the breakdown ๐ง
ar$hrd - 0x000F the value assigned to Frame Relay
ar$pro - protocol type for which you are searching
(i.e. IP = 0x0800)
ar$hln - 2,3, or 4 byte addressing length
ar$pln - byte length of protocol address for which you
are searching (for IP = 4)
ar$op - 8; InARP request
ar$sha - Q.922 [6] address of requesting station
ar$spa - protocol address of requesting station
ar$tha - Q.922 address of newly announced virtual circuit
ar$tpa - 0; This is what is being requested
The InARP response gets built in a very similar way ๐
ar$hrd - 0x000F the value assigned to Frame Relay
ar$pro - protocol type for which you are searching
(i.e. IP = 0x0800)
ar$hln - 2,3, or 4 byte addressing length
ar$pln - byte length of protocol address for which you
are searching (for IP = 4)
ar$op - 9; InARP response
ar$sha - Q.922 address of responding station
ar$spa - protocol address requested
ar$tha - Q.922 address of requesting station
ar$tpa - protocol address of requesting station
Quick note: the Q.922 addresses in here have the C/R, FECN, BECN, and DE bits set to zero ๐
Now for how InARP actually works over a Frame Relay network. Most Frame Relay networks have DLCIs with only local significance, so an end station doesn't have a specific DLCI assigned to itself ๐ญ That means the station has no address to put into the InARP request or response. Thankfully, Frame Relay has a way to get the right DLCIs. The solution below is written for a locally addressed Frame Relay network, but it works just as well for a network where DLCIs have global significance โจ
The DLCI in the Frame Relay header gets changed as it moves through the network. By the time the packet reaches its destination, the DLCI has been set to whatever value, from the receiver's point of view, matches the sender. Look at figure 1 below. If station A sends a message to station B, it puts DLCI 50 in the Frame Relay header. When B gets it, the network has changed that DLCI, so B sees it as DLCI 70 ๐
~~~~~~~~~~~~~~~
( )
+-----+ ( ) +-----+
| |-50------(--------------------)---------70-| |
| A | ( ) | B |
| |-60-----(---------+ ) | |
+-----+ ( | ) +-----+
( | )
( | ) <---Frame Relay
~~~~~~~~~~~~~~~~ network
80
|
+-----+
| |
| C |
| |
+-----+
Figure 1
Lines between stations are data link connections (DLCs). The numbers show the local DLCI for each connection ๐ธ
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 want the official word on how DLCIs map to Q.922 addresses, check out the Q.922 [6] spec itself. I've included a summary here for convenience ๐ง 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 InARP, the FECN, BECN, C/R and DE bits are assumed to be 0 ๐ฆ
When an InARP message reaches its destination, all the hardware addresses are invalid. The address in the frame header, though, is correct. Yes, it's a bit messy for layering, but Frame Relay is allowed to use the header address as the sender hardware address ๐ Also, the target hardware address in both the InARP request and response is invalid too. That's fine, because InARP doesn't rely on those fields. An implementation can just zero fill that field or ignore it completely ๐ซถ
Using figure 1, station A can use Inverse ARP to find the protocol address of the station on its DLCI 50. The InARP 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 with the Q.922 address from the Frame Relay header. So A's request becomes:
ar$op 8 (InARP request)
ar$sha 0x1061 (DLCI 70)
ar$spa pA
ar$tha 0x0C21 (DLCI 50)
ar$tpa unknown.
Station B then formats an Inverse ARP response and sends it back to station A ๐
ar$op 9 (InARP response)
ar$sha unknown
ar$spa pB
ar$tha 0x1061 (DLCI 70)
ar$tpa pA
The source hardware address is unknown here. When A gets the response, it pulls the address out of the Frame Relay header and drops it into the source hardware address field. So the response ends up looking like this:
ar$op 9 (InARP response)
ar$sha 0x0C21 (DLCI 50)
ar$spa pB
ar$tha 0x1061 (DLCI 70)
ar$tpa pA
So the bottom line is that the Frame Relay interface only has to step in when it's processing incoming packets ๐
Also, see [3] for a description of similar procedures for using ARP [1] and RARP [4] with Frame Relay โจ
8. Security Considerations ๐ฅ
This document adds a functional enhancement to the ARP family of protocols, so it's bound by the same security constraints that affect ARP and similar address resolution protocols. Authentication isn't part of ARP, which means there are known security issues with it, such as host impersonation ๐ญ This document doesn't add any extra security mechanisms to the ARP family of protocols.
9. References ๐
[1] 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, November 1982.
[2] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1700, October 1994. See also: http://www.iana.org/numbers.html
[3] Bradley, T., Brown, C., and A. Malis, "Multiprotocol Interconnect over Frame Relay", RFC 1490, July 1993.
[4] Finlayson, R., Mann, R., Mogul, J., and M. Theimer, "A Reverse Address Resolution Protocol", STD 38, RFC 903, June 1984.
[5] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
[6] Information technology - Telecommunications and Information Exchange between systems - Protocol Identification in the Network Layer, ISO/IEC TR 9577: 1992.
10. Authors' Addresses ๐
Terry Bradley
Avici Systems, Inc.
12 Elizabeth Drive
Chelmsford, MA 01824
Phone: (978) 250-3344
EMail: tbradley@avici.com
Caralyn Brown
Consultant
EMail: cbrown@juno.com
Andrew Malis
Ascend Communications, Inc.
1 Robbins Road
Westford, MA 01886
Phone: (978) 952-7414
EMail: malis@ascend.com
11. Full Copyright Statement โญ
Copyright (C) The Internet Society (1998). All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph are
included on all such copies and derivative works. However, this
document itself may not be modified in any way, such as by removing
the copyright notice or references to the Internet Society or other
Internet organizations, except as needed for the purpose of
developing Internet standards in which case the procedures for
copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.
The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
๐ฆ where this page comes from
- ietf: rfc2390 1998-09
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms