732 lines
30 KiB
Plaintext
732 lines
30 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Internet Engineering Task Force (IETF) B. Carpenter
|
||
Request for Comments: 7098 Univ. of Auckland
|
||
Category: Informational S. Jiang
|
||
ISSN: 2070-1721 Huawei Technologies Co., Ltd
|
||
W. Tarreau
|
||
HAProxy Technologies, Inc.
|
||
January 2014
|
||
|
||
|
||
Using the IPv6 Flow Label for Load Balancing in Server Farms
|
||
|
||
Abstract
|
||
|
||
This document describes how the currently specified IPv6 flow label
|
||
can be used to enhance layer 3/4 (L3/4) load distribution and
|
||
balancing for large server farms.
|
||
|
||
Status of This Memo
|
||
|
||
This document is not an Internet Standards Track specification; it is
|
||
published for informational purposes.
|
||
|
||
This document is a product of the Internet Engineering Task Force
|
||
(IETF). It represents the consensus of the IETF community. It has
|
||
received public review and has been approved for publication by the
|
||
Internet Engineering Steering Group (IESG). Not all documents
|
||
approved by the IESG are a candidate for any level of Internet
|
||
Standard; see Section 2 of RFC 5741.
|
||
|
||
Information about the current status of this document, any errata,
|
||
and how to provide feedback on it may be obtained at
|
||
http://www.rfc-editor.org/info/rfc7098.
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (c) 2014 IETF Trust and the persons identified as the
|
||
document authors. All rights reserved.
|
||
|
||
This document is subject to BCP 78 and the IETF Trust's Legal
|
||
Provisions Relating to IETF Documents
|
||
(http://trustee.ietf.org/license-info) in effect on the date of
|
||
publication of this document. Please review these documents
|
||
carefully, as they describe your rights and restrictions with respect
|
||
to this document. Code Components extracted from this document must
|
||
include Simplified BSD License text as described in Section 4.e of
|
||
the Trust Legal Provisions and are provided without warranty as
|
||
described in the Simplified BSD License.
|
||
|
||
|
||
|
||
|
||
Carpenter, et al. Informational [Page 1]
|
||
|
||
RFC 7098 Flow Label for Server Load Balancing January 2014
|
||
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
|
||
2. Summary of Flow Label Specification . . . . . . . . . . . . . 2
|
||
3. Summary of Server Farm Load-Balancing Techniques . . . . . . 4
|
||
4. Applying the Flow Label to Layer 3/4 Load Balancing . . . . . 8
|
||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 10
|
||
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 11
|
||
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 12
|
||
7.1. Normative References . . . . . . . . . . . . . . . . . . 12
|
||
7.2. Informative References . . . . . . . . . . . . . . . . . 12
|
||
|
||
1. Introduction
|
||
|
||
The IPv6 flow label has been redefined [RFC6437] and is now a
|
||
recommended IPv6 node requirement [RFC6434]. Its use for load
|
||
sharing in multipath routing has been specified [RFC6438]. Another
|
||
scenario in which the flow label could be used is in load
|
||
distribution for large server farms. Load distribution is a slightly
|
||
more general term than load balancing, but the latter is more
|
||
commonly used. In the context of a server farm, both terms refer to
|
||
mechanisms that distribute the workload of a server farm among
|
||
different servers in order to optimize performance. Server load
|
||
balancing commonly applies to HTTP traffic, but most of the
|
||
techniques described would apply to other upper-layer applications as
|
||
well. This document starts with brief introductions to the flow
|
||
label and to server load-balancing techniques, and then describes how
|
||
the flow label can be used to enhance load balancers operating on IP
|
||
packets and TCP sessions, commonly known as layer 3/4 load balancers.
|
||
|
||
The motivation for this approach is to improve the performance of
|
||
most types of layer 3/4 load balancers, especially for traffic
|
||
including multiple IPv6 extension headers and in particular for
|
||
fragmented packets. Fragmented packets, often the result of
|
||
customers reaching the load balancer via a VPN with a limited MTU,
|
||
are a common performance problem.
|
||
|
||
2. Summary of Flow Label Specification
|
||
|
||
The IPv6 flow label [RFC6437] is a 20-bit field included in every
|
||
IPv6 header [RFC2460]. It is recommended to be supported in all IPv6
|
||
nodes by [RFC6434]. There is additional background material in
|
||
[RFC6436] and [RFC6294]. According to its definition, the flow label
|
||
should be set to a constant value for a given traffic flow (such as
|
||
an HTTP connection), and that value will belong to a uniform
|
||
statistical distribution, making it potentially valuable for load-
|
||
balancing purposes.
|
||
|
||
|
||
|
||
|
||
Carpenter, et al. Informational [Page 2]
|
||
|
||
RFC 7098 Flow Label for Server Load Balancing January 2014
|
||
|
||
|
||
Any device that has access to the IPv6 header has access to the flow
|
||
label, and it is at a fixed position in every IPv6 packet. In
|
||
contrast, transport-layer information, such as the port numbers, is
|
||
not always in a fixed position, since it follows any IPv6 extension
|
||
headers that may be present. In fact, the logic of finding the
|
||
transport header is always more complex for IPv6 than for IPv4, due
|
||
to the absence of an Internet Header Length field in IPv6.
|
||
Additionally, if packets are fragmented, the flow label will be
|
||
present in all fragments, but the transport header will only be in
|
||
one packet. Therefore, within the lifetime of a given transport-
|
||
layer connection, the flow label can be a more convenient "handle"
|
||
than the port number for identifying that particular connection.
|
||
|
||
According to RFC 6437, source hosts should set the flow label;
|
||
however, if they do not (i.e., its value is zero), forwarding nodes
|
||
(such as the first-hop router) may set it instead. In both cases,
|
||
the flow label value must be constant for a given transport session,
|
||
normally identified by the IPv6 and Transport header 5-tuple. By
|
||
default, the flow label value should be calculated by a stateless
|
||
algorithm. The resulting value should form part of a statistically
|
||
uniform distribution, regardless of which node sets it.
|
||
|
||
It is recognized that at the time of writing, very few traffic flows
|
||
include a non-zero flow label value. The mechanism described below
|
||
is one that can be added to existing load-balancing mechanisms, so
|
||
that it will become effective as more and more flows contain a non-
|
||
zero label. Even if the flow label is chosen from an imperfectly
|
||
uniform distribution, it will nevertheless increase the information
|
||
entropy of the IPv6 header as a whole. This allows for progressive
|
||
introduction of load balancing based on the flow label.
|
||
|
||
If the recommendations in Section 3 of RFC 6437 are followed for
|
||
traffic from a given source accessing a well-known TCP port at a
|
||
given destination, the flow label can act as a substitute for the
|
||
port numbers as far as a load balancer is concerned, and it can be
|
||
found at a fixed position in the layer 3 header even if extension
|
||
headers are present.
|
||
|
||
The flow label is defined as an end-to-end component of the IPv6
|
||
header, but there are three qualifications to this:
|
||
|
||
1. Until the IPv6 flow label specification in RFC 6437 is widely
|
||
implemented as recommended by RFC 6434, the flow label will often
|
||
be set to the default value of zero.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Carpenter, et al. Informational [Page 3]
|
||
|
||
RFC 7098 Flow Label for Server Load Balancing January 2014
|
||
|
||
|
||
2. Because of the recommendation to use a stateless algorithm to
|
||
calculate the label, there is a low (but non-zero) probability
|
||
that two simultaneous flows from the same source to the same
|
||
destination have the same flow label value despite having
|
||
different transport-protocol port numbers.
|
||
|
||
3. The Flow Label field is in an unprotected part of the IPv6
|
||
header, which means that intentional or unintentional changes to
|
||
its value cannot be easily detected by a receiver.
|
||
|
||
The first two points are addressed below in Section 4 and the third
|
||
in Section 5.
|
||
|
||
3. Summary of Server Farm Load-Balancing Techniques
|
||
|
||
Load balancing for server farms is achieved by a variety of methods,
|
||
often used in combination [Tarreau]. This section gives a general
|
||
overview of common methods, although the flow label is not relevant
|
||
to all of them. The actual load-balancing algorithm (the choice of
|
||
which server to use for a new client session) is irrelevant to this
|
||
discussion. We give examples for HTTP, but analogous techniques may
|
||
be used for other application protocols.
|
||
|
||
o The simplest method is using the DNS to return different server
|
||
addresses for a single name such as www.example.com to different
|
||
users. This is typically done by rotating the order in which
|
||
different addresses within the server site are listed by the
|
||
relevant authoritative DNS server, on the assumption that the
|
||
client will pick the first one. Routing may be configured such
|
||
that the different addresses are handled by different ingress
|
||
routers. Several variants of this load-balancing mechanism exist,
|
||
such as expecting some clients to use all the advertised addresses
|
||
when multiple connections are involved, or directing the traffic
|
||
to multiple sites, also known as global load balancing. None of
|
||
these mechanisms are in the scope of this document, and the
|
||
proposal in this document does not affect their usability nor aim
|
||
to replace them, so they will not be discussed further.
|
||
|
||
o Another method, for HTTP servers, is to operate a layer 7 reverse
|
||
proxy in front of the server farm. The reverse proxy will present
|
||
a single IP address to the world, communicated to clients by a
|
||
single AAAA record. For each new client session (an incoming TCP
|
||
connection and HTTP request), it will pick a particular server and
|
||
proxy the session to it. The act of proxying should be more
|
||
efficient and less resource-intensive than the act of serving the
|
||
required content. The proxy must retain TCP state and proxy state
|
||
for the duration of the session. This TCP state could,
|
||
potentially, include the incoming flow label value.
|
||
|
||
|
||
|
||
Carpenter, et al. Informational [Page 4]
|
||
|
||
RFC 7098 Flow Label for Server Load Balancing January 2014
|
||
|
||
|
||
o A component of some load-balancing systems is an SSL reverse proxy
|
||
farm. The individual SSL proxies handle all cryptographic aspects
|
||
and exchange unencrypted HTTP with the actual servers. Thus, from
|
||
the load-balancing point of view, this really looks just like a
|
||
server farm, except that it's specialized for HTTPS. Each proxy
|
||
will retain SSL and TCP and maybe HTTP state for the duration of
|
||
the session, and the TCP state could potentially include the flow
|
||
label.
|
||
|
||
o Finally the "front end" of many load-balancing systems is a layer
|
||
3/4 load balancer. While it can be a dedicated device, it is also
|
||
a standard function of some network switches or routers (e.g.
|
||
using Equal-Cost Multipath Routing (ECMP) [RFC2991]). In this
|
||
case, it is the layer 3/4 load balancer whose IP address is
|
||
published as the primary AAAA record for the service. All client
|
||
sessions will pass through this device. Depending on the specific
|
||
scenario, the balancer will assign new sessions among the actual
|
||
application servers, across an SSL proxy farm, or among a set of
|
||
layer 7 proxies. In all cases, the layer 3/4 load balancer has to
|
||
classify incoming packets very quickly and choose the target
|
||
server or proxy so as to ensure persistence. 'Persistence' is
|
||
defined as the guarantee that a given client session will run to
|
||
completion on a single server. The layer 3/4 load balancer
|
||
therefore needs to inspect each incoming packet to classify it.
|
||
There are two common types of layer 3/4 load balancers, the
|
||
totally stateless ones which only act on single packets, generally
|
||
involving a per-packet hashing of easy-to-find information such as
|
||
the source address and/or port into a server number, and the
|
||
stateful ones that take the routing decision on the very first
|
||
packets of a session and maintain the same direction for all
|
||
packets belonging to the same session. Clearly, both types of
|
||
layer 3/4 balancers could inspect and make use of the flow label
|
||
value.
|
||
|
||
Our focus is on how the balancer identifies a particular flow.
|
||
For clarity, note that two aspects of layer 3/4 load balancers are
|
||
not affected by use of the flow label to identify sessions:
|
||
|
||
1. Balancers use various techniques to redirect traffic to a
|
||
specific target server.
|
||
|
||
+ All servers are configured with the same IP address, they
|
||
are all on the same LAN, and the load balancer sends
|
||
directly to their individual MAC addresses. In this case,
|
||
return packets from the server to the client are sent back
|
||
without passing through the balancer, a technique known as
|
||
direct server return, but we are not concerned here with
|
||
the return packets.
|
||
|
||
|
||
|
||
Carpenter, et al. Informational [Page 5]
|
||
|
||
RFC 7098 Flow Label for Server Load Balancing January 2014
|
||
|
||
|
||
+ All servers are configured with the same IP address,
|
||
treated locally as an anycast address by layer 3 ECMP
|
||
routing.
|
||
|
||
+ Each server has its own IP address, and the balancer uses
|
||
an IP-in-IP tunnel to reach it.
|
||
|
||
+ Each server has its own IP address, and the balancer
|
||
performs NAPT (Network Address and Port Translation) to
|
||
deliver the client's packets to that address.
|
||
|
||
+ The choice between these methods is not affected by use of
|
||
the flow label.
|
||
|
||
2. A layer 3/4 balancer must correctly handle Path MTU Discovery
|
||
by forwarding relevant ICMPv6 packets in both directions.
|
||
This too is not directly affected by use of the flow label.
|
||
It should be noted that there may be difficulty correlating an
|
||
ICMPv6 "Packet too big" response with the session it refers
|
||
to, but that is out of the scope of the present document.
|
||
|
||
The following diagram, inspired by [Tarreau], shows a layout with
|
||
various methods in use together. (Below, "ASIC" stands for
|
||
"Application-Specific Integrated Circuit".)
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Carpenter, et al. Informational [Page 6]
|
||
|
||
RFC 7098 Flow Label for Server Load Balancing January 2014
|
||
|
||
|
||
___________________________________________
|
||
( )
|
||
( Clients in the Internet )
|
||
(___________________________________________)
|
||
| |
|
||
------------ DNS-based ------------
|
||
| Ingress | load splitting | Ingress |
|
||
| router | affects | router |
|
||
------------ routing ------------
|
||
___|____________________________|___
|
||
| |
|
||
| |
|
||
| |
|
||
------------ ------------
|
||
| L3/4 ASIC| | L3/4 ASIC|
|
||
| balancer | | balancer |
|
||
------------ ------------
|
||
| load |
|
||
| spreading |
|
||
__________|________________________|___________
|
||
| | | |
|
||
------------ ------------ -------- --------
|
||
|HTTP proxy|...|HTTP proxy| | SSL |...| SSL |
|
||
| balancer | | balancer | | proxy| | proxy|
|
||
------------ ------------ -------- --------
|
||
____|_____________|_____________|_________|_____
|
||
| | | | |
|
||
-------- -------- -------- -------- --------
|
||
|HTTP | |HTTP | |HTTP | |HTTP | |HTTP |
|
||
|server| |server| |server| |server| |server|
|
||
-------- -------- -------- -------- --------
|
||
|
||
From the previous paragraphs, we can identify several points in this
|
||
diagram where the flow label might be relevant:
|
||
|
||
1. Layer 3/4 load balancers.
|
||
|
||
2. SSL proxies.
|
||
|
||
3. HTTP proxies.
|
||
|
||
However, usage by the proxies seems unlikely to affect performance,
|
||
because they must in any case process the application-layer header,
|
||
so in this document we focus only on layer 3/4 balancers.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Carpenter, et al. Informational [Page 7]
|
||
|
||
RFC 7098 Flow Label for Server Load Balancing January 2014
|
||
|
||
|
||
4. Applying the Flow Label to Layer 3/4 Load Balancing
|
||
|
||
The suggested model for using the flow label to enhance an layer 3/4
|
||
load-balancing mechanism is as follows:
|
||
|
||
o We are only concerned with IPv6 traffic in which the flow label
|
||
value has been set according to [RFC6437]. If the flow label of
|
||
an incoming packet is zero, load balancers will continue to use
|
||
the transport header in the traditional way. As the use of the
|
||
flow label becomes more prevalent according to RFC 6434, load
|
||
balancers, and therefore users, will reap a growing performance
|
||
benefit.
|
||
|
||
o If the flow label of an incoming packet is non-zero, layer 3/4
|
||
load balancers can use the 2-tuple {source address, flow label} as
|
||
the session key for whatever load distribution algorithm they
|
||
support. Alternatively, they might use the 3-tuple {dest address,
|
||
source address, flow label}, especially if the server farm
|
||
supports multiple server IP addresses, but using the 3-tuple will
|
||
be significantly quicker than searching for the transport port
|
||
numbers later in the packet. Moreover, the transport-layer
|
||
information such as the source port is not repeated in fragments,
|
||
which generally prevents stateless load balancers from supporting
|
||
fragmented traffic since they generally cannot reassemble
|
||
fragments.
|
||
|
||
A stateless layer 3/4 load balancer would simply apply a hash
|
||
algorithm to the 2-tuple or 3-tuple on all packets in order to
|
||
select the same target server consistently for a given flow.
|
||
Needless to say, the hash algorithm has to be well chosen for its
|
||
purpose, but this problem is common to several forms of stateless
|
||
load balancing. The discussion in [RFC6438] applies.
|
||
|
||
A stateful layer 3/4 load balancer would apply its usual load
|
||
distribution algorithm to the first packet of a session, and store
|
||
the {tuple, server} association in a table so that subsequent
|
||
packets belonging to the same session are forwarded to the same
|
||
server. Thus, for all subsequent packets of the session, it can
|
||
ignore all IPv6 extension headers, which should lead to a
|
||
performance benefit. Whether this benefit is valuable will depend
|
||
on engineering details of the specific load balancer.
|
||
|
||
Note that such a balancer will not identify new transport sessions
|
||
from the same source that use the same flow label; they will be
|
||
delivered to the same server. This is like the behavior of
|
||
existing hash-based layer 4 balancers that always send similarly
|
||
hashed packets to the same destination. However, a global state
|
||
table in a flow label balancer cannot be shared between multiple
|
||
|
||
|
||
|
||
Carpenter, et al. Informational [Page 8]
|
||
|
||
RFC 7098 Flow Label for Server Load Balancing January 2014
|
||
|
||
|
||
services if these services rely on transport-layer information,
|
||
since the goal of using the flow label is to avoid looking up that
|
||
information.
|
||
|
||
A related issue is that the balancer will not detect FIN/ACK
|
||
sequences at the end of sessions. Therefore, it will rely on
|
||
inactivity timers to delete session state. However, all existing
|
||
balancers must maintain such timers to deal with hung sessions,
|
||
and the practical impact on memory utilization is unlikely to be
|
||
significant.
|
||
|
||
o Layer 3/4 balancers that redirect the incoming packets by NAPT are
|
||
not expected to obtain any saving of time by using the flow label,
|
||
because they have no choice but to follow the extension header
|
||
chain in order to locate and modify the port number and transport
|
||
checksum. The same would apply to balancers that perform TCP
|
||
state tracking for any reason.
|
||
|
||
o Note that correct handling of ICMPv6 for Path MTU Discovery
|
||
requires the layer 3/4 balancer to keep state for the client
|
||
source address, independently of either the port numbers or the
|
||
flow label.
|
||
|
||
o SSL and HTTP proxies, if present, should forward the flow label
|
||
value towards the server. This usually has no performance
|
||
benefit, but it is consistent with the general model for the flow
|
||
label described in RFC 6437.
|
||
|
||
It should be noted that the performance benefit, if any, depends
|
||
entirely on engineering trade-offs in the design of the layer 3/4
|
||
balancer. An extra test is needed to check if the label is non-zero,
|
||
but if there is a non-zero label, all logic for handling extension
|
||
headers can be skipped except for the first packet of a new flow.
|
||
Since the identifying state to be stored is only the tuple and the
|
||
server identifier, storage requirements will be reduced.
|
||
Additionally, the method will work for fragmented traffic and for
|
||
flows where the transport information is missing (unknown transport
|
||
protocol) or obfuscated (e.g., IPsec). Traffic reaching the load
|
||
balancer via a VPN is particularly prone to the fragmentation issue,
|
||
due to MTU size issues. For some load-balancer designs, these are
|
||
very significant advantages.
|
||
|
||
In the unlikely event of two simultaneous flows from the same source
|
||
address having the same flow label value, the two flows would end up
|
||
assigned to the same server, where they would be distinguished as
|
||
normal by their port numbers. There are approximately one million
|
||
possible flow label values, and if the rules for flow label
|
||
generation [RFC6437] are followed, this would be a statistically rare
|
||
|
||
|
||
|
||
Carpenter, et al. Informational [Page 9]
|
||
|
||
RFC 7098 Flow Label for Server Load Balancing January 2014
|
||
|
||
|
||
event, and would not damage the overall load-balancing effect.
|
||
Moreover, with a million possible label values, it is very likely
|
||
that there will be many more flow label values than servers at most
|
||
sites, so it is already expected that multiple flow label values will
|
||
end up on the same server for a given client IP address.
|
||
|
||
In the case that many thousands of clients are hidden behind the same
|
||
large-scale NAPT with a single shared IP address, the assumption of
|
||
low probability of conflicts might become incorrect, unless flow
|
||
label values are random enough to avoid following similar sequences
|
||
for all clients. This is not expected to be a factor for IPv6
|
||
anyway, since there is no need to implement large-scale NAPT with
|
||
address sharing [RFC4864]. The probability of conflicts is low for
|
||
sites that implement network prefix translation [RFC6296], since this
|
||
technique provides a different address for each client.
|
||
|
||
5. Security Considerations
|
||
|
||
Security aspects of the flow label are discussed in [RFC6437]. As
|
||
noted there, a malicious source or man-in-the-middle could disturb
|
||
load balancing by manipulating flow labels. This risk already exists
|
||
today where the source address and port are used as a hashing key in
|
||
layer 3/4 load balancers, as well as where a persistence cookie is
|
||
used in HTTP to designate a server. It even exists on layer 3
|
||
components that only rely on the source address to select a
|
||
destination, making them more DDoS-prone. Nevertheless, all these
|
||
methods are currently used because the benefits for load balancing
|
||
and persistence hugely outweigh the risks. The flow label does not
|
||
significantly alter this situation.
|
||
|
||
Specifically, the IPv6 flow label specification [RFC6437] states that
|
||
"stateless classifiers should not use the flow label alone to control
|
||
load distribution, and stateful classifiers should include explicit
|
||
methods to detect and ignore suspect flow label values." The former
|
||
point is answered by also using the source address. The latter point
|
||
is more complex. If the risk is considered serious, the site ingress
|
||
router or the layer 3/4 balancer should use a suitable heuristic to
|
||
verify incoming flows with non-zero flow label values. If a flow
|
||
from a given source address and port number does not have a constant
|
||
flow label value, it is suspect and should be dropped. This would
|
||
deal with both intentional and accidental changes to the flow label.
|
||
|
||
A malicious source or man-in-the-middle could generate a flow in
|
||
which the flow label is constant but the transport port numbers in
|
||
some packets are invalid. Such packets, if load-balanced only on the
|
||
basis of the flow label, could reach the target server and create a
|
||
single-source DoS attack on its TCP engine.
|
||
|
||
|
||
|
||
|
||
Carpenter, et al. Informational [Page 10]
|
||
|
||
RFC 7098 Flow Label for Server Load Balancing January 2014
|
||
|
||
|
||
RFC 6437 notes in its Security Considerations that if the covert
|
||
channel risk is considered significant, a firewall might rewrite non-
|
||
zero flow labels. As long as this is done as described in RFC 6437,
|
||
it will not invalidate the mechanisms described above.
|
||
|
||
The flow label may be of use in protecting against DDoS attacks
|
||
against servers. As noted in RFC 6437, a source should generate flow
|
||
label values that are hard to predict, most likely by including a
|
||
secret nonce in the hash used to generate each label. The attacker
|
||
does not know the nonce and therefore has no way to invent flow
|
||
labels that will all target the same server, even with knowledge of
|
||
both the hash algorithm and the load-balancing algorithm. Still, it
|
||
is important to understand that it is always trivial to force a load
|
||
balancer to stick to the same server during an attack, so the
|
||
security of the whole solution must not rely on the unpredictability
|
||
of the flow label values alone, but should include defensive measures
|
||
like most load balancers already have against abnormal use of source
|
||
addresses or session cookies.
|
||
|
||
New flows are assigned to a server according to any of the usual
|
||
algorithms available on the load balancer (e.g., least connections,
|
||
round robin, etc.). The association between the 2-tuple {source
|
||
address, flow label} and the server is stored in a table (often
|
||
called stick table) so that future traffic from the same source using
|
||
the same flow label can be sent to the same server. This method is
|
||
more robust against a loss of server and also makes it harder for an
|
||
attacker to target a specific server, because the association between
|
||
a flow label value and a server is not known externally.
|
||
|
||
In the case that a stateless hash function is used to assign client
|
||
packets to specific servers, it may be advisable to use a
|
||
cryptographic hash function of some kind, to ensure that an attacker
|
||
cannot predict the behavior of the load balancer.
|
||
|
||
6. Acknowledgements
|
||
|
||
Valuable comments and contributions were made by Fred Baker, Olivier
|
||
Bonaventure, Ben Campbell, Lorenzo Colitti, Linda Dunbar, Donald
|
||
Eastlake, Joel Jaeggli, Gurudeep Kamat, Warren Kumari, Julia
|
||
Renouard, Julius Volz, and others.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Carpenter, et al. Informational [Page 11]
|
||
|
||
RFC 7098 Flow Label for Server Load Balancing January 2014
|
||
|
||
|
||
7. References
|
||
|
||
7.1. Normative References
|
||
|
||
[RFC2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6
|
||
(IPv6) Specification", RFC 2460, December 1998.
|
||
|
||
[RFC6434] Jankiewicz, E., Loughney, J., and T. Narten, "IPv6 Node
|
||
Requirements", RFC 6434, December 2011.
|
||
|
||
[RFC6437] Amante, S., Carpenter, B., Jiang, S., and J. Rajahalme,
|
||
"IPv6 Flow Label Specification", RFC 6437, November 2011.
|
||
|
||
7.2. Informative References
|
||
|
||
[RFC2991] Thaler, D. and C. Hopps, "Multipath Issues in Unicast and
|
||
Multicast Next-Hop Selection", RFC 2991, November 2000.
|
||
|
||
[RFC4864] Van de Velde, G., Hain, T., Droms, R., Carpenter, B., and
|
||
E. Klein, "Local Network Protection for IPv6", RFC 4864,
|
||
May 2007.
|
||
|
||
[RFC6294] Hu, Q. and B. Carpenter, "Survey of Proposed Use Cases for
|
||
the IPv6 Flow Label", RFC 6294, June 2011.
|
||
|
||
[RFC6296] Wasserman, M. and F. Baker, "IPv6-to-IPv6 Network Prefix
|
||
Translation", RFC 6296, June 2011.
|
||
|
||
[RFC6436] Amante, S., Carpenter, B., and S. Jiang, "Rationale for
|
||
Update to the IPv6 Flow Label Specification", RFC 6436,
|
||
November 2011.
|
||
|
||
[RFC6438] Carpenter, B. and S. Amante, "Using the IPv6 Flow Label
|
||
for Equal Cost Multipath Routing and Link Aggregation in
|
||
Tunnels", RFC 6438, November 2011.
|
||
|
||
[Tarreau] Tarreau, W., "Making applications scalable with load
|
||
balancing", 2006, <http://1wt.eu/articles/2006_lb/>.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Carpenter, et al. Informational [Page 12]
|
||
|
||
RFC 7098 Flow Label for Server Load Balancing January 2014
|
||
|
||
|
||
Authors' Addresses
|
||
|
||
Brian Carpenter
|
||
Department of Computer Science
|
||
University of Auckland
|
||
PB 92019
|
||
Auckland 1142
|
||
New Zealand
|
||
|
||
EMail: brian.e.carpenter@gmail.com
|
||
|
||
|
||
Sheng Jiang
|
||
Huawei Technologies Co., Ltd
|
||
Q14, Huawei Campus
|
||
No.156 Beiqing Road
|
||
Hai-Dian District, Beijing 100095
|
||
P.R. China
|
||
|
||
EMail: jiangsheng@huawei.com
|
||
|
||
|
||
Willy Tarreau
|
||
HAProxy Technologies, Inc.
|
||
R&D Network Products
|
||
3 rue du petit Robinson
|
||
78350 Jouy-en-Josas
|
||
France
|
||
|
||
EMail: willy@haproxy.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Carpenter, et al. Informational [Page 13]
|
||
|