User:David MacQuigg/Sandbox/Anycasting: Difference between revisions

From Citizendium
Jump to navigation Jump to search
imported>David MacQuigg
imported>David MacQuigg
Line 34: Line 34:
In Figure 1, there are two clients and three servers.  It makes no difference to either client which server satisfies its request.
In Figure 1, there are two clients and three servers.  It makes no difference to either client which server satisfies its request.


The traditional routing algorithm adds up the costs of links along the available routes to a destination and always picks the lowest cost route. From client '''1''', server '''A''' is closest, and therefore has the least cost route. From client '''2''', server '''C''' has the least cost.
The traditional routing algorithm adds up the costs of links along the available routes to a destination and always picks the lowest cost route. From client '''1''', server '''A''' is closest (cost=1) and server '''3''' is furthest (cost=3). Therefore, client '''1''' always connects to server '''A''', and client 2 always connects to server '''C'''.


An anycast router can balance the load among all routes, rapidly switching from one to another.  A packet from Client 1 can be routed just as easily to Server C (cost = 3) as to Server A (cost = 1).<ref>
An anycast router can balance the load among all routes, rapidly switching from one to another.  A packet from Client 1 can be routed just as easily to Server C as to Server A.<ref>
The figure raises a question.  Do we have to assume all the routers in a load-balancing setup are anycast? Should we answer this question or change the figure?</ref>
The figure raises a question.  Do we have to assume all the routers in a load-balancing setup are anycast? Should we answer this question or change the figure?
</ref>
{{Image|Anycast-before-failure.png|right|300px|Figure 2. Single client with all servers working}}
{{Image|Anycast-before-failure.png|right|300px|Figure 2. Single client with all servers working}}



Revision as of 13:20, 16 October 2009

This is a draft version in which I have added lots of editorial footnotes, to be deleted in the finished version. I'm following Einstein's rule here - Make things as simple as possible, but no simpler. I'm not an expert in routing. Tell me if I've made any of this too simple. --David MacQuigg 17:34, 16 October 2009 (UTC)

Anycasting is an Internet Protocol routing technique in which the same IP address may exist at several points in the network, with the caveat that each instance of the address must provide exactly the same services. The technique is useful for load balancing, fault tolerance, and security against a DoS attack.[1] A typical application is a heavily-used database like DNS, where the same data can be provided from any number of identical servers. Applications are not limited to "read-only" however. See the sinkholes operational example below.

Traditionally, an IP address needed to be unique. This would be absolutely true in a single network with no segmentation. The Internet, however, is a collection of networks linked by routers. When the same address is claimed by servers on different networks, an upstream router simply assumes it is the same server as seen via different routes. It picks the shortest path for its routing table, and ignores the rest. A router supporting anycast keeps these routes available as alternatives. Alternative routes may be selected randomly, in a cyclic pattern, or depending on external factors, such as the current load reported by each server.

While the term anycast came into prominence with IPv6 work,[2] it can be quite useful with IPv4. IPv4 has no infrastructure explicitly for anycast while IPv6 does, but the technique can be applied in both areas, with different address structures. Miller discusses "shared anycast",[3] which is different from the IPv6 specific work in RFC 4291, which superseded the RFC 3513 mentioned in the Miller paper.

The IPv6 architecture describes it as:

Anycast: An identifier for a set of interfaces (typically belonging to different nodes). A packet sent to an anycast address is delivered to one of the interfaces identified by that address (the "nearest" one, according to the routing protocols' measure of distance).[2]

Contrast to multicast

Anycasting is similar to Multicasting. In multicasting, a source S sends to a group G of recipients. Broadcasting is a special case where G contains all possible recipients. It is assumed that G has more than one member.

An anycast source S sends to a destination address D, which S believes to be a single recipient. In reality, there are multiple instances of D, any one of which can respond to the message addressed to D.

(CC) Image: Howard C. Berkowitz
Figure 1. Load distribution example

Load balancing case

In Figure 1, there are two clients and three servers. It makes no difference to either client which server satisfies its request.

The traditional routing algorithm adds up the costs of links along the available routes to a destination and always picks the lowest cost route. From client 1, server A is closest (cost=1) and server 3 is furthest (cost=3). Therefore, client 1 always connects to server A, and client 2 always connects to server C.

An anycast router can balance the load among all routes, rapidly switching from one to another. A packet from Client 1 can be routed just as easily to Server C as to Server A.[4]

(CC) Image: Howard C. Berkowitz
Figure 2. Single client with all servers working

Fault tolerance case

Now, simplify the scenario to have but one host. As long as server A is up, router 1 will see a cost of 1 to reach server A. The routing process was aware of other routes to 3.1.1.1, but there was a cost of 2 to server B and a cost of 3 to server C. Router 1 only put the lowest-cost route into its routing table.

(CC) Image: Howard C. Berkowitz
Single client after failure

But what if server A fails? The router knows other paths to the same address, so it will install the path that goes through router 2. The client will still receive exactly the same service from exactly the same address.

Of course, if client 2 reconnected to Router 3, it would have the lowest cost path to server C as long as Server C stayed up. If Server C fails, router 3 would change its route to 3.1.1.1 to the path to Server B.

Operational examples

Anycast works well for any application that is read-only and where the relevant servers have a common database. One common application is the root servers for the Domain Name Service: While the official list has tens of named servers, there are actually hundreds of geographically distributed machines.

Another application is in Internet Protocol infrastructure security, where the "application protocol" is IP itself. Large networks, especially of Internet Service Providers, may have multiple sinkholes for diverting hostile traffic away from the true IP address of the server or router under attack, as well as providing a place to analyze the threat. When an attack is detected, the server under attack would be useless due to overload, so its address is effectively reassigned as the more-preferred anycast address of a set of sinkholes. The sinkhole nearest the ingress router does the analysis of a single-stream denial of service (DoS) attack, while anycast-addressed sinkholes respond well under distributed denial of service (DDoS) attack.

References

  1. IP blacklists commonly use multiple servers to simply absorb the frequent attacks they endure from criminals whose IP addresses are listed.
  2. 2.0 2.1 Hinden, R. & S. Deering. (February 2006), IP Version 6 Addressing Architecture., RFC 4291
  3. Miller, Kevin (NANOG 29 – October 2003), Deploying IP Anycast
  4. The figure raises a question. Do we have to assume all the routers in a load-balancing setup are anycast? Should we answer this question or change the figure?