rfc1433.txt
来自「RFC 的详细文档!」· 文本 代码 · 共 1,011 行 · 第 1/3 页
TXT
1,011 行
Garrett, Hagan & Wong [Page 6]
RFC 1433 Directed ARP March 1993
the ARP Request. But if the Target IP address is not the router's
address, the router may forward the ARP Request back through the same
interface it was received from, addressed to a Link Level Address
that corresponds to an ARP Helper Address in the router's routing
table. The procedures used to process an ARP Request are described
via C pseudo-code below. The function Receive() describes procedures
followed by hosts and routers, and the function Direct() describes
additional procedures followed by routers. In addition, the
following low level functions are also used:
Is_Local_IP_Add(IP_Add,Phys_Int) returns TRUE if Phys_Int has been
assigned IP address, IP_Add. Otherwise, returns FALSE.
Do_ARP_Processing(ARP_Request,Interface) processes ARP_Request
using ARP procedures described in [2].
I_Am_Router returns TRUE if device is a router and False if device
is a host.
Target_IP(ARP_Request) returns the Target IP address from
ARP_Request.
Filter(ARP_Request,Phys_Int) returns TRUE if ARP_Request passes
filtering constraints, and FALSE if filtering constraints are not
passed. See section 3.4.
Forward(Packet,Link_Level_Add,Phys_Int) fragments Packet (if
needed), and encapsulates Packet in one or more Link Level Frames
addressed to Link_Level_Add, and forwards the frame(s) through
interface, Phys_Int.
Look_Up_Next_Hop_Route_Table(IP_Add) returns a pointer to the
routing table entry with the next-hop field that matches IP_Add.
If no matching entry is found, NULL is returned.
Look_Up_Dest_Route_Table(IP_Add) returns a pointer to the routing
table entry with the destination field that best matches IP_Add.
If no matching entry is found, NULL is returned.
Link_Level_ARP_Req_Add(IP_Add,Phys_Int) returns the link level
address to which an ARP Request to resolve IP_Add should be
forwarded. If ARP is not used to perform local address resolution
of IP_Add, NULL is returned.
Local_Add_Res(IP_Add,Phys_Int) returns a pointer to the Link Level
address associated with IP_Add, using address resolution
procedures associated with address, IP_Add, and interface,
Phys_Int. If address resolution is unsuccessful, NULL is
Garrett, Hagan & Wong [Page 7]
RFC 1433 Directed ARP March 1993
returned. Note that different address resolution procedures may
be used for different IP networks.
Next_Hop(Entry) returns the IP address in the next-hop field of
(routing table) Entry.
Interface(Entry) returns the physical interface field of (routing
table) Entry.
ARP_Helper_Add(Entry) returns the IP address in the ARP Helper
Address field of (routing table) Entry.
Source_Link_Level(ARP_Request) returns the link level address of
the sender of ARP_Request.
Receive(ARP_Request,Interface)
{
If (Is_Local_IP_Add(Target_IP(ARP_Request),Interface))
Do_ARP_Processing(ARP_Request,Interface);
else /* Not my IP Address */
If (I_Am_Router) /* Hosts don't Direct ARP Requests */
If (Filter(ARP_Request,Interface)) /* Passes Filter Test */
/* See Section 3.4 */
Direct(ARP_Request,Interface); /* Directed ARP Procedures */
Return;
}
Figure 3: C Pseudo-Code for Receiving ARP Requests.
Garrett, Hagan & Wong [Page 8]
RFC 1433 Directed ARP March 1993
Direct(ARP_Request,Phys_Int)
{
Entry = Look_Up_Next_Hop_Route_Table(Target_IP(ARP_Request));
If (Entry == NULL) /* Target_IP Address is not a next-hop */
{ /* in Routing Table */
Entry = Look_Up_Dest_Route_Table(Target_IP(ARP_Request));
If (Entry == NULL) /* Not a destination either */
Return; /* Discard ARP Request */
else
If (Next_Hop(Entry) != NULL) /* Not a next-hop and Not local */
Return; /* Discard ARP Request */
}
If (Interface(Entry) != Phys_Int)
/* Must be same physical interface */
Return; /* Discard ARP Request */
If (ARP_Helper_Add(Entry) != NULL)
{
L_L_ARP_Helper_Add = Resolve(ARP_Helper_Add(Entry),Phys_Int,NULL);
If (L_L_ARP_Helper_Add != NULL)
Forward(ARP_Request,L_L_ARP_Helper_Add,Phys_Int);
/* Forward ARP_Request to ARP Helper Address */
Return;
}
else /* Do local address resolution. */
{
L_L_ARP_Req_Add =
Link_Level_ARP_Req_Add(Target_IP(ARP_Request),Phys_Int);
If (L_L_ARP_Req_Add != NULL)
{ /* Local address resolution procedure is ARP. */
/* Forward ARP_Request. */
Forward(ARP_Request,L_L_ARP_Req_Add,Phys_Int);
Return;
}
else
{ /* Local address resolution procedure is not ARP. */
/* Do "published ARP" on behalf of Target IP Address */
Target_Link_Level =
Local_Add_Res(Target_IP(ARP_Request),Phys_Int);
If (Target_Link_Level != NULL) /* Resolved Address */
{
Forward(ARP_Response,Source_Link_Level(ARP_Request),Phys_Int);
}
Return;
}
}
}
Figure 4: C Pseudo_Code for Directing ARP Requests.
Garrett, Hagan & Wong [Page 9]
RFC 1433 Directed ARP March 1993
3.4 Filtering Procedures
A router performing Directed ARP procedures must filter the
propagation of ARP Request packets to constrain the scope of
potential "ARP floods" caused by misbehaving routers or hosts, and to
terminate potential ARP loops that may occur during periods of
routing protocol instability or as a result of inappropriate manual
configurations. Specific procedures to filter the propagation of ARP
Request packets are beyond the scope of this document. The following
procedures are suggested as potential implementations that should be
sufficient. Other procedures may be better suited to a particular
implementation.
To control the propagation of an "ARP flood", a router performing
Directed ARP procedures could limit the number of identical ARP
Requests (i.e., same Source IP address and same Target IP address)
that it would forward per small time interval (e.g., no more than one
ARP Request per second). This is consistent with the procedure
suggested in [5] to prevent ARP flooding.
Forwarding of ARP Request packets introduces the possibility of ARP
loops. The procedures used to control the scope of potential ARP
floods may terminate some ARP loops, but additional procedures are
needed if the time required to traverse a loop is longer than the
timer used to control ARP floods. A router could refuse to forward
more than N identical ARP Requests per T minutes, where N and T are
administered numbers. If T and N are chosen so that T/N minutes is
greater than the maximum time required to traverse a loop, such a
filter would terminate the loop. In some cases a host may send more
than one ARP Request with the same Source IP address,Target IP
address pair (i.e., N should be greater than 1). For example, the
first ARP Request might be lost. However, once an ARP Response is
received, a host would normally save the associated information, and
therefore would not generate an identical ARP Request for a period of
time on the order of minutes. Therefore, T may be large enough to
ensure that T/N is much larger than the time to traverse any loop.
In some implementations the link level destination address of a frame
used to transport an ARP Request to a router may be available to the
router's Directed ARP filtering process. An important class of
simple ARP loops will be prevented from starting if a router never
forwards an ARP Request to the same link level address to which the
received ARP Request was addressed. Of course, other procedures such
as the one described in the paragraph above will stop all loops, and
are needed, even if filters are implemented that prevent some loops
from starting.
Garrett, Hagan & Wong [Page 10]
RFC 1433 Directed ARP March 1993
Host requirements [5] specify that "the packet receive interface
between the IP layer and the link layer MUST include a flag to
indicate whether the incoming packet was addressed to a link-level
broadcast address." An important class of simple ARP floods can be
eliminated if routers never forward ARP Requests that were addressed
to a link-level broadcast address.
4. Use of Directed ARP by Routing
The exchange and use of routing information is constrained by
available address resolution procedures. A host or router can not
use a next-hop IP address learned via dynamic routing procedures if
it is unable to resolve the next-hop IP address to the associated
link level address. Without compatible dynamic address resolution
procedures, a router may not advertise a next-hop address that is not
on the same IP network as the host or router receiving the
advertisement. Directed ARP is a procedure that enables a router
that advertises routing information to make the routing information
useful by also providing assistance in resolving the associated
next-hop IP addresses.
The following subsections describe the use of Directed ARP to expand
the scope of ICMP Redirects [6], distance-vector routing protocols
(e.g., BGP [3]), and link-state routing protocols (e.g., OSPF [4]).
4.1 ICMP Redirect
If a router forwards a packet to a next-hop address that is on the
same link level network as the host that originated the packet, the
router may send an ICMP Redirect to the host. But a host can not use
a next-hop address advertised via an ICMP Redirect unless the host
has a procedure to resolve the advertised next-hop address to its
associated link level address. Directed ARP is a procedure that a
host could use to resolve an advertised next-hop address, even if the
host does not have an address on the same IP network as the
advertised next-hop address.
A host that implements Directed ARP procedures includes an ARP Helper
Address with each routing table entry. The ARP Helper Address
associated with an entry learned via an ICMP Redirect is NULL if the
associated next-hop address matches a routing table entry with a NULL
next-hop and a NULL ARP Helper Address (i.e., the host already knows
how to resolve the next-hop address). Otherwise, the ARP Helper
Address is the IP address of the router that sent the ICMP Redirect.
Note that the router that sent the ICMP Redirect is the current
next-hop to the advertised destination [5]. Therefore, the host
should have an entry in its address resolution table for the new ARP
Helper Address. If the host is unable to resolve the next-hop IP
Garrett, Hagan & Wong [Page 11]
RFC 1433 Directed ARP March 1993
address advertised in the ICMP Redirect (e.g., because the associated
ARP Helper Address is on a foreign IP network; i.e., was learned via
an old ICMP Redirect, and the address resolution table entry for that
ARP Helper Address timed out), the host must flush the associated
routing table entry. Directed ARP procedures do not recursively use
Directed ARP to resolve an ARP Helper Address.
A router that performs Directed ARP procedures might advertise a
foreign next-hop to a host that does not perform Directed ARP.
Following existing procedures, the host would silently discard the
ICMP Redirect. A router that does not implement Directed ARP should
not advertise a next-hop on a foreign IP network, as specified by
existing procedures. If it did, and the ICMP Redirect was received
by a host that implemented Directed ARP procedures, the host would
send an ARP Request for the foreign IP address to the advertising
router, which would silently discard the ARP Request. When address
resolution fails, the host should flush the associated entry from its
routing table.
For various reasons a host may ignore an ICMP Redirect and may
continue to forward packets to the same router that sent the ICMP
Redirect. For example, a host that does not implement Directed ARP
procedures would silently discard an ICMP Redirect advertising a
next-hop address on a foreign IP network. Routers should implement
constraints to control the number of ICMP Redirects sent to hosts.
For example, a router might limit the number of repeated ICMP
Redirects sent to a host to no more than N ICMP Redirects per T
minutes, where N and T are administered values.
4.2 Distance Vector Routing Protocol
A distance-vector routing protocol provides procedures for a router
to advertise a destination address (e.g., an IP network), an
associated next-hop address, and other information (e.g., associated
metric). But a router can not use an advertised route unless the
router has a procedure to resolve the advertised next-hop address to
its associated link level address. Directed ARP is a procedure that
a router could use to resolve an advertised next-hop address, even if
the router does not have an address on the same IP network as the
advertised next-hop address.
The following procedures assume a router only accepts routing updates
if it knows the IP address of the sender of the update, can resolve
the IP address of the sender to its associated link level address,
and has an interface on the same link level network as the sender.
A router that implements Directed ARP procedures includes an ARP
Helper Address with each routing table entry. The ARP Helper Address
Garrett, Hagan & Wong [Page 12]
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?