Anycast: Host Anycasting Service
The original definition of IP anycast: send a packet to an address and let the network deliver it to the nearest of many servers.
Partridge, C., Mendez, T., and W. Milliken, "Host Anycasting Service", RFC 1546, DOI 10.17487/RFC1546, November 1993, <https://www.rfc-editor.org/info/rfc1546>.
@misc{rfc1546,
series = {Request for Comments},
number = 1546,
howpublished = {RFC 1546},
publisher = {RFC Editor},
doi = {10.17487/RFC1546},
url = {https://www.rfc-editor.org/info/rfc1546},
author = {C. Partridge and T. Mendez and W. Milliken},
title = {{Host Anycasting Service}},
pagetotal = 9,
year = 1993,
month = nov,
} RFC text
Contents
Network Working Group C. Partridge
Request for Comments: 1546 T. Mendez
Category: Informational W. Milliken
BBN
November 1993
Host Anycasting Service
Status of this Memo
This memo provides information for the Internet community. This memo
does not specify an Internet standard of any kind. Distribution of
this memo is unlimited.
Abstract
This RFC describes an internet anycasting service for IP. The
primary purpose of this memo is to establish the semantics of an
anycasting service within an IP internet. Insofar as is possible,
this memo tries to be agnostic about how the service is actually
provided by the internetwork. This memo describes an experimental
service and does not propose a protocol. This memo is produced by
the Internet Research Task Force (IRTF).
Motivation
There are a number of situations in networking where a host,
application, or user wishes to locate a host which supports a
particular service but, if several servers support the service, does
not particularly care which server is used. Anycasting is a
internetwork service which meets this need. A host transmits a
datagram to an anycast address and the internetwork is responsible
for providing best effort delivery of the datagram to at least one,
and preferably only one, of the servers that accept datagrams for the
anycast address.
The motivation for anycasting is that it considerably simplifies the
task of finding an appropriate server. For example, users, instead
of consulting a list of archie servers and choosing the closest
server, could simply type:
telnet archie.net
and be connected to the nearest archie server. DNS resolvers would
no longer have to be configured with the IP addresses of their
servers, but rather could send a query to a well-known DNS anycast
address. Mirrored FTP sites could similarly share a single anycast
address, and users could simply FTP to the anycast address to reach
the nearest server.
Architectural Issues
Adding anycasting to the repertoire of IP services requires some
decisions to be made about how to balance the architectural
requirements of IP with those of anycasting. This section discusses
these architectural issues.
The first and most critical architectural issue is how to balance
IP's stateless service with the desire to have an anycast address
represent a single virtual host. The best way to illustrate this
problem is with a couple of examples. In both of these examples, two
hosts (X and Y) are serving an anycast address and another host (Z)
is using the anycast address to contact a service.
In the first example, suppose that Z sends a UDP datagram addressed
to the anycast address. Now, given that an anycast address is
logically considered the address of a single virtual host, should it
be possible for the datagram to be delivered to both X and Y? The
answer to this question clearly has to be yes, delivery to both X and
Y is permissible. IP is allowed to duplicate and misroute datagrams
so there clearly are scenarios in which a single datagram could be
delivered to both X and Y. The implication of this conclusion is
that the definition of anycasting in an IP environment is that IP
anycasting provides best effort delivery of an anycast datagram to
one, but possibly more than one, of the hosts that serve the
destination anycast address.
In the second example, suppose that Z sends two datagrams addressed
to the anycast address. The first datagram gets delivered to X. To
which host (X or Y) does the second datagram get delivered? It would
be convenient for stateful protocols like TCP if all of a
connection's datagrams were delivered to the same anycast address.
However, because IP is stateless (and thus cannot keep track of where
earlier datagrams were delivered) and because one of the goals of
anycasting is to support replicated services, it seems clear that the
second datagram can be delivered to either X or Y. Stateful
protocols will have to employ some additional mechanism to ensure
that later datagrams are sent to the same host. Suggestions for how
to accomplish this for TCP are discussed below.
After considering the two examples, it seems clear that the correct
definition of IP anycasting is a service which provides a stateless
best effort delivery of an anycast datagram to at least one host, and
preferably only one host, which serves the anycast address. This
definition makes clear that anycast datagrams receive the same basic
type of service as IP datagrams. And while the definition permits
delivery to multiple hosts, it makes clear that the goal is delivery
to just one host.
Anycast Addresses
There appear to be a number of ways to support anycast addresses,
some of which use small pieces of the existing address space, others
of which require that a special class of IP addresses be assigned.
The major advantage of using the existing address space is that it
may make routing easier. As an example, consider a situation where a
portion of each IP network number can be used for anycasting. I.e.,
a site, if it desires, could assign a set of its subnet addresses to
be anycast addresses. If, as some experts expect, anycast routes are
treated just like host routes by the routing protocols, the anycast
addresses would not require special advertisement outside the site --
the host routes could be folded in with the net route. (If the
anycast addresses is supported by hosts outside the network, then
those hosts would still have be advertised using host routes). The
major disadvantages of this approach are (1) that there is no easy
way for stateful protocols like TCP to discover that an address is an
anycast address, and (2) it is more difficult to support internet-
wide well-known anycast address. The reasons TCP needs to know that
an address is an anycast address is discussed in more detail below.
The concern about well-known anycast addresses requires a bit of
explanation. The idea is that the Internet might establish that a
particular anycast address is the logical address of the DNS server.
Then host software could be configured at the manufacturer to always
send DNS queries to the DNS anycast address. In other words,
anycasting could be used to support autoconfiguration of DNS
resolvers.
The major advantages of using a separate class of addresses are that
it is easy to determine if an address is an anycast address and
well-known anycast addresses are easier to support. The key
disadvantage is that routing may be more painful, because the routing
protocols may have to keep track of more anycast routes.
An intermediate approach is to take part of the current address space
(say 256 Class C addresses) and make the network addresses into
anycast addresses (and ignore the host part of the class C address).
The advantage of this approach is that it makes anycast routes look
like network routes (which are easier for some routing protocols to
handle). The disadvantages are that it uses the address space
inefficiently and so more severely limits the number of anycast
addresses that can be supported.
In the balance it seems wiser to use a separate class of addresses.
Carving anycast addresses from the existing address space seems more
likely to cause problems in situations in which either applications
mistakenly fail to recognize anycast addresses (if anycasts are part
of each site's address space) or use the address space inefficiently
(if network addresses are used as anycast addresses). And the
advantages of using anycast addresses for autoconfiguration seem
compelling. So this memo assumes that anycast addresses will be a
separate class of IP addresses (not yet assigned). Since each
anycast address is a virtual host address and the number of
anycasting hosts seems unlikely to be larger than the number of
services offered by protocols like TCP and UDP, the address space
could be quite small, perhaps supporting as little as 2**16 different
addresses.
Transmission and Reception of Anycast Datagrams
Historically, IP services have been designed to work even if routers
are not present (e.g., on LANs without routers). Furthermore, many
in the Internet community have historically felt that hosts should
not have to participate in routing protocols to operate. (See, for
instance, page 7 of STD 3, RFC 1122). To provide an anycasting
service that is consistent with these traditions, the handling of
anycast addresses varies slightly depending on the type of network on
which datagrams with anycast addresses are sent.
On a shared media network, such as an Ethernet and or Token Ring, it
must be possible to transmit an anycast datagram to a server also on
the same network without consulting a (possibly non-existent) router.
There are at least two ways this can be done.
One approach is to ARP for the anycast address. Servers which
support the anycast address can reply to the ARP request, and the
sending host can transmit to the first server that responds. This
approach is reminiscent of the ARP hack (RFC 1027) and like the ARP
hack, requires ARP cache timeouts for the anycast addresses be kept
small (around 1 minute), so that if an anycast server goes down,
hosts will promptly flush the ARP entry and query for other servers
supporting the anycast address.
Another approach is for hosts to transmit anycast datagrams on a
link-level multicast address. Hosts which serve an anycast address
would be expected to listen to the link-level multicast address for
datagrams destined for their anycast address. By multicasting on the
local network, there is no need for a router to route the anycast
datagrams. One merit of this approach is that if there are multiple
servers and one goes down, the others will still receive any
requests. Another possible advantage is that, because anycast ARP
entries must be quickly timed out, the multicasting approach may be
less traffic intensive than the ARP approach because in the ARP
approach, transmissions to an anycast address are likely to cause a
broadcast ARP, while in the multicast approach, transmissions are
only to a select multicast group. An obvious disadvantage is that if
there are multiple servers on a network, they will all receive the
anycast message, when delivery to only one server was desired.
On point-to-point links, anycast support is simpler. A single copy
of the anycast datagram is forwarded along the appropriate link
towards the anycast destination.
When a router receives an anycast datagram, the router must decide if
it should forward the datagram, and if so, transmits one copy of the
datagram to the next hop on the route. Note that while we may hope
that a router will always know the correct next hop for an anycast
datagram and will not have to multicast anycast datagrams on a local
network, there are probably situations in which there are multiple
servers on a local network, and to avoid sending to one that has
recently crashed, routers may wish to send anycast datagrams on a
link-level multicast address. Because hosts may multicast any
datagrams, routers should take care not to forward a datagram if they
believe that another router will also be forwarding it.
Hosts which wish to receive datagrams for a particular anycast
address will have to advertise to routers that they have joined the
anycast address. On shared media networks, the best mechanism is
probably for a host to periodically multicast information about the
anycast addresses it supports (possibly using an enhanced version of
IGMP). The multicast messages ensure that any routers on the network
hear that the anycast address is supported on the local subnet and
can advertise that fact (if appropriate) to neighboring routers.
Note that if there are no routers on the subnet, the multicast
messages would simply simply ignored. (The multicasting approach is
suggested because it seems likely to be simpler and more reliable
than developing a registration protocol, in which an anycast server
must register itself with each router on its local network).
On point-to-point links, a host can simply advertise its anycast
addresses to the router on the other end of the link.
Observe that the advertisement protocols are a form of routing
protocol and that it may make sense to simply require anycast servers
to participate (at least partly) in exchanges of regular routing
messages.
When a host receives an IP datagram destined for an anycast address
it supports, the host should treat the IP datagram just as if it was
destined for one of the host's non-anycast IP addresses. If the host
does not support the anycast address, it should silently discard the
datagram.
Hosts should accept datagrams with an anycast source address,
although some transport protocols (see below) may refuse to accept
them.
How UDP and TCP Use Anycasting
It is important to remember that anycasting is a stateless service.
An internetwork has no obligation to deliver two successive packets
sent to the same anycast address to the same host.
Because UDP is stateless and anycasting is a stateless service, UDP
can treat anycast addresses like regular IP addresses. A UDP
datagram sent to an anycast address is just like a unicast UDP
datagram from the perspective of UDP and its application. A UDP
datagram from an anycast address is like a datagram from a unicast
address. Furthermore, a datagram from an anycast address to an
anycast address can be treated by UDP as just like a unicast datagram
(although the application semantics of such a datagram are a bit
unclear).
TCP's use of anycasting is less straightforward because TCP is
stateful. It is hard to envision how one would maintain TCP state
with an anycast peer when two successive TCP segments sent to the
anycast peer might be delivered to completely different hosts.
The solution to this problem is to only permit anycast addresses as
the remote address of a TCP SYN segment (without the ACK bit set). A
TCP can then initiate a connection to an anycast address. When the
SYN-ACK is sent back by the host that received the anycast segment,
the initiating TCP should replace the anycast address of its peer,
with the address of the host returning the SYN-ACK. (The initiating
TCP can recognize the connection for which the SYN-ACK is destined by
treating the anycast address as a wildcard address, which matches any
incoming SYN-ACK segment with the correct destination port and
address and source port, provided the SYN-ACK's full address,
including source address, does not match another connection and the
sequence numbers in the SYN-ACK are correct.) This approach ensures
that a TCP, after receiving the SYN-ACK is always communicating with
only one host.
Applications and Anycasting
In general, applications use anycast addresses like any other IP
address. The only worrisome application use of anycasting is
applications which try to maintain stateful connections over UDP and
applications which try to maintain state across multiple TCP
connections. Because anycasting is stateless and does not guarantee
delivery of multiple anycast datagrams to the same system, an
application cannot be sure that it is communicating with the same
peer in two successive UDP transmissions or in two successive TCP
connections to the same anycast address.
The obvious solutions to these issues are to require applications
which wish to maintain state to learn the unicast address of their
peer on the first exchange of UDP datagrams or during the first TCP
connection and use the unicast address in future conversations.
Anycasting and Multicasting
It has often been suggested that IP multicasting can be used for
resource location, so it is useful to compare the services offered by
IP multicasting and IP anycasting.
Semantically, the difference between the two services is that an
anycast address is the address of a single (virtual) host and that
the internetwork will make an effort to deliver anycast datagrams to
a single host. There are two implications of this difference.
First, applications sending to anycast addresses need not worry about
managing the TTLs of their IP datagrams. Applications using
multicast to find a service must balance their TTLs to maximize the
chance of finding a server while minimizing the chance of sending
datagrams to a large number of servers it does not care about.
Second, making a TCP connection to an anycast address makes perfectly
good sense, while the meaning of making a TCP connection to a
multicast address are unclear. (A TCP connection to a multicast
address is presumably trying to establish a connection to multiple
peers simultaneously, which TCP is not designed to support).
From a practical perspective, the major difference between anycasting
and multicasting is that anycasting is a special use of unicast
addressing while multicasting requires more sophisticated routing
support. The important observation is that multiple routes to an
anycast address appear to a router as multiple routes to a unicast
destination, and the router can use standard algorithms to choose to
the best route.
Another difference between the two approaches is that resource
location using multicasting typically causes more datagrams to be
sent. To find a server using multicasting, an application is
expected to transmit and retransmit a multicast datagram with
successively larger IP TTLs. The TTL is initially kept small to try
to limit the number of servers contacted. However, if no servers
respond, the TTL must be increased on the assumption that the
available servers (if any) were farther away than was reachable with
the initial TTL. As a result, resource location using multicasting
causes one or more multicast datagrams to be sent towards multiple
servers, with some datagrams' TTLs expiring before reaching a server.
With anycasting, managing the TTL is not required and so (ignoring
the case of loss) only one datagram need be sent to locate a server.
Furthermore, this datagram will follow only a single path.
A minor difference between the two approaches is that anycast may be
less fault tolerant than multicast. When an anycast server fails,
some datagrams may continue to be mistakenly routed to the server,
whereas if the datagram had been multicast, other servers would have
received it.
Related Work
The ARPANET AHIP-E Host Access Protocol described in RFC 878 supports
logical addressing which allows several hosts to share a single
logical address. This scheme could be used to support anycasting
within a PSN subnet.
Security Considerations
There are at least two security issues in anycasting, which are
simply mentioned here without suggested solutions.
First, it is clear that malevolent hosts could volunteer to serve an
anycast address and divert anycast datagrams from legitimate servers
to themselves.
Second, eavesdropping hosts could reply to anycast queries with
inaccurate information. Since there is no way to verify membership
in an anycast address, there is no way to detect that the
eavesdropping host is not serving the anycast address to which the
original query was sent.
Acknowledgements
This memo has benefitted from comments from Steve Deering, Paul
Francis, Christian Huitema, Greg Minshall, Jon Postel, Ram
Ramanathan, and Bill Simpson. However, the authors are solely
responsible for any dumb ideas in this work.
Authors' Addresses
Craig Partridge
Bolt Beranek and Newman
10 Moulton St
Cambridge MA 02138
EMail: craig@bbn.com
Trevor Mendez
Bolt Beranek and Newman
10 Moulton St
Cambridge MA 02138
EMail: tmendez@bbn.com
Walter Milliken
Bolt Beranek and Newman
10 Moulton St
Cambridge MA 02138
EMail: milliken@bbn.com
AI ELI5
On this page
§1Why Anycasting
Sometimes a host, application or user wants a server for a service and does not care which one it gets. With anycasting, a host sends a datagram to an anycast address, and the internetwork provides best-effort delivery to at least one, and preferably only one, of the servers that accept datagrams for that address.
The RFC offers three examples: typing telnet archie.net and reaching the nearest archie server, DNS resolvers sending queries to a well-known DNS anycast address instead of being configured with server addresses, and mirrored FTP sites sharing a single anycast address.
This memo is produced by the Internet Research Task Force (IRTF). It describes an experimental service and does not propose a protocol.
Instead of picking from a long list of helpers, you ask for any helper and the closest one answers.
§2What Anycast Means, and Its Addresses
The hard question is how to square IP's stateless service with an address that stands for a single virtual host. If two servers X and Y share an anycast address, can one datagram reach both? Yes: IP is allowed to duplicate and misroute datagrams, so delivery to both is permissible. Can two datagrams from the same sender go to different servers? Also yes, because IP cannot track where earlier datagrams went.
So the RFC defines IP anycasting as a stateless best-effort delivery of an anycast datagram to at least one host, and preferably only one, that serves the address. Anycast datagrams get the same basic type of service as other IP datagrams.
Anything that needs a series of datagrams to reach the same peer has to add its own mechanism, because the network gives no such guarantee.
The memo weighs three ways to provide anycast addresses. Carving them from existing site address space may make routing easier, but TCP has no easy way to tell an address is anycast and well-known Internet-wide anycast addresses are harder. A separate class of addresses makes anycast easy to recognize and well-known addresses easier, but routing protocols may have to track more routes. An intermediate approach uses part of the current space, such as 256 Class C addresses, but wastes address space.
On balance the RFC assumes anycast addresses will be a separate class of IP addresses, not yet assigned. Because the number of anycasting hosts seems unlikely to exceed the number of services offered by protocols like TCP and UDP, the space could be small, perhaps as little as 2**16 addresses.
The network promises to try to reach one helper, but not the same helper every time, so you can not count on talking to the same one twice.
Anycast addresses should get their own special range, like a separate set of phone numbers just for hotlines, so everyone can tell them apart.
§3Sending and Receiving Anycast Datagrams
Hosts are not required to take part in routing, and IP is meant to work without routers on a LAN. So on a shared medium such as Ethernet or Token Ring, it must be possible to reach a local anycast server without a router. The RFC describes two ways. A host can ARP for the anycast address and send to the first server that replies, which needs ARP cache timeouts kept small (around 1 minute). Or it can send on a link-level multicast address that anycast servers listen to, at the cost that every local server receives the message.
On point-to-point links, one copy is forwarded along the link toward the destination. Routers forward one copy toward the next hop, and should avoid forwarding a datagram if another router will also be forwarding it.
Servers must advertise that they have joined an anycast address. On shared media this is probably best done by periodically multicasting the information, possibly using an enhanced IGMP; on point-to-point links the host tells the router at the other end. A host that receives a datagram for an anycast address it supports handles it like any other datagram, and silently discards it if it does not support the address. Hosts should accept datagrams with an anycast source address, although some transport protocols may refuse them.
Nearby computers can shout on the local network and take the first answer, while helpers tell their routers which special addresses they answer to.
§4UDP, TCP and Applications
UDP is stateless like anycast, so it can treat an anycast address like any other address. TCP is stateful, so the RFC allows an anycast address only as the remote address of a TCP SYN segment without the ACK bit set. When the SYN-ACK comes back, the initiating TCP replaces the anycast address of its peer with the address of the host that sent the SYN-ACK. From then on it talks to exactly one host.
Applications that keep state over UDP, or across several TCP connections, cannot assume the same peer answers twice. The suggested fix is to learn the peer's unicast address on the first exchange and use it afterwards.
For a phone call you need the same person the whole time, so after the first answer you switch to that person's own number.
- SYN to anycast addressAnycast is allowed only as the remote address of a SYN without ACK.
- SYN-ACK from its own addressThe initiator replaces the anycast address with this host's address.
§5Anycast Compared with Multicast
An anycast address is the address of a single virtual host, so senders need not manage TTLs and a TCP connection to one makes sense. Finding a server by multicast means sending and resending with successively larger IP TTLs, so more datagrams are sent and some expire before reaching a server. Anycast is a special use of unicast addressing, and multiple routes to an anycast address look like multiple routes to a unicast destination, so routers can use standard algorithms to choose the best.
Anycast may be less fault tolerant: when a server fails, some datagrams may still be routed to it, while a multicast datagram would also reach other servers.
Multicast is shouting louder and louder until someone answers. Anycast is asking the network to hand your message to one nearby helper.
| Aspect | Anycast | Multicast |
|---|---|---|
| Address means THIS RFC | A single virtual host | A group of hosts |
| TTL management | Not needed | Sender raises TTL until a server is found |
| TCP connection | Makes sense | Meaning unclear |
| Routing | Special use of unicast addressing | Needs more sophisticated routing support |
| Fault tolerance | May be lower | Other servers still receive the datagram |
§6Security Considerations
The RFC mentions two security issues and offers no solutions. Malevolent hosts could volunteer to serve an anycast address and divert datagrams from legitimate servers. Eavesdropping hosts could reply to anycast queries with inaccurate information, and since there is no way to verify membership in an anycast address, such a reply can not be detected as coming from a non-member.
A trickster could pretend to be a helper and answer in place of the real one, and the network has no way to check.