RFC 2390

Inverse Address Resolution Protocol

๐Ÿ“… published September 1998, from ietf

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 (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

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