RFC 5847

Heartbeat Mechanism for Proxy Mobile IPv6

πŸ“… published June 2010, from ietf

Heartbeat Mechanism for Proxy Mobile IPv6 πŸ’–

  • RFC: 5847 πŸŽ€, from the Internet Engineering Task Force (IETF)
  • Category: Standards Track ✨
  • Date: June 2010 🌸
  • ISSN: 2070-1721
  • Authors: V. Devarapalli, Ed. (WiChorus), R. Koodli, Ed. (Cisco Systems), H. Lim, N. Kant (Stoke), S. Krishnan and J. Laganier (Qualcomm Inc.) πŸ‘‘
  • Obsoletes / Updates: the title block doesn't list anything here, so this RFC doesn't call out any obsoletes or updates 🧚

Abstract ✨

Proxy Mobile IPv6 (PMIPv6) is a network-based mobility management protocol πŸ¦‹. Its two main players are the mobile access gateway (MAG) and the local mobility anchor (LMA). They build tunnels on the fly to handle mobility for a mobile node inside the PMIPv6 domain 🌈. This document describes a heartbeat mechanism between the MAG and the LMA. It's there to detect failures, quickly tell peers when a node recovers from a failure, and let a peer take appropriate action πŸ’….

Status of This Memo

This is an Internet Standards Track document πŸ’œ.

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). More info on Internet Standards is in Section 2 of RFC 5741 πŸ“š.

For the current status of this document, any errata, and how to give feedback on it, check http://www.rfc-editor.org/info/rfc5847 πŸ”.

Copyright (c) 2010 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), as they stand on the publication date. Please actually read these, because they spell out your rights and restrictions for this document 🫢. Any Code Components pulled out of this document must include the Simplified BSD License text described in Section 4.e of the Trust Legal Provisions. They come with no warranty, as the Simplified BSD License describes πŸ”₯.

Table of Contents

1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  3
2.  Terminology  . . . . . . . . . . . . . . . . . . . . . . . . .  3
3.  Heartbeat Mechanism  . . . . . . . . . . . . . . . . . . . . .  3
  3.1.  Failure Detection  . . . . . . . . . . . . . . . . . . . .  4
  3.2.  Restart Detection  . . . . . . . . . . . . . . . . . . . .  5
  3.3.  Heartbeat Message  . . . . . . . . . . . . . . . . . . . .  6
  3.4.  Restart Counter Mobility Option  . . . . . . . . . . . . .  7
4.  Exchanging Heartbeat Messages over an IPv4 Transport
    Network  . . . . . . . . . . . . . . . . . . . . . . . . . . .  8
5.  Configuration Variables  . . . . . . . . . . . . . . . . . . .  8
6.  Security Considerations  . . . . . . . . . . . . . . . . . . .  8
7.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . .  9
8.  Acknowledgements . . . . . . . . . . . . . . . . . . . . . . .  9
9.  References . . . . . . . . . . . . . . . . . . . . . . . . . .  9
  9.1.  Normative References . . . . . . . . . . . . . . . . . . .  9
  9.2.  Informative References . . . . . . . . . . . . . . . . . . 10

1. Introduction 🧚

Proxy Mobile IPv6 (PMIPv6) [RFC5213] gives network-based mobility to IPv6 hosts that don't implement any mobility protocols 🌸. The protocol is described in full detail in [RFC5213]. To make that network-based mobility work, PMIPv6 defines the mobile access gateway (MAG). The MAG acts as a proxy for the Mobile IPv6 [RFC3775] signaling. It also defines the local mobility anchor (LMA), which behaves a lot like a home agent and anchors a mobile node's sessions inside a PMIPv6 domain πŸ’–. The LMA and the MAG set up a bidirectional tunnel that forwards all the data traffic belonging to the mobile nodes πŸ¦‹.

In a distributed setup like a PMIPv6 domain made of LMAs and MAGs, the nodes need two things. First, they need a consistent picture of each other's reachability. Second, they need to quickly tell peers when they've recovered from a node failure 😭. So when the LMA restarts after a failure, the MAG should (quickly) find out about the restart so it can take appropriate actions, like releasing any resources it's holding 🫢. When nothing has failed, the MAG should know whether the LMA is reachable (and the other way around), so the path can be assumed to be working ✨.

This document specifies a heartbeat mechanism between the MAG and the LMA that detects the reachability status between them πŸ’œ. It also specifies a way to signal node restarts, which can be used to quickly tell peers about those restarts πŸ”₯. The Heartbeat message is a Mobility Header message with protocol type 135. It gets exchanged periodically at a configurable time threshold, or sent unsolicited soon after a node restarts πŸŽ€. This document does not define what a node actually does (like releasing resources) when it processes Heartbeat messages. That part is up to the node πŸ’….

2. Terminology πŸ“š

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119] 🌈.

3. Heartbeat Mechanism πŸ’“

The MAG and the LMA swap Heartbeat messages every HEARTBEAT_INTERVAL seconds to keep track of whether they can reach each other right now πŸ“. The MAG starts the heartbeat exchange to check whether the LMA is reachable, by sending a Heartbeat Request message to the LMA 🧚. Every Heartbeat Request carries a sequence number that goes up monotonically πŸ”’. The MAG always records the sequence number from its last Heartbeat Request, and uses it to match the corresponding Heartbeat Response πŸ’œ. The LMA starts its own heartbeat exchange with the MAG in the same way, by sending a Heartbeat Request message to check whether the MAG is reachable πŸ¦‹. The format of the Heartbeat message is described in Section 3.3 ✨.

A Heartbeat Request message can only be sent if the MAG has at least one proxy Binding Cache entry at the LMA for a mobile node attached to the MAG πŸŽ€. If there are no proxy Binding Cache entries at the LMA for any of the mobile nodes attached to the MAG, then the Heartbeat message SHOULD NOT be sent πŸ™ˆ. In the same way, the LMA SHOULD NOT send a Heartbeat Request message to a MAG if there's no active Binding Cache entry created by that MAG πŸ’…. A PMIPv6 node MUST respond to a Heartbeat Request message with a Heartbeat Response message, whether or not there's an active Binding Cache entry 🫢.

The HEARTBEAT_INTERVAL SHOULD NOT be configured to a value less than 30 seconds 🌸. Deployments need to be careful when they pick the value for HEARTBEAT_INTERVAL πŸ‘‘. Sending Heartbeat messages too often can turn into overhead on the path between the MAG and the LMA 😭. It could also create congestion in the network and hurt network performance πŸ’€. If needed, HEARTBEAT_INTERVAL can be set to a much bigger value on the MAG and the LMA, which cuts down on the burden of sending periodic Heartbeat messages 🌈.

If the LMA or the MAG doesn't support Heartbeat messages, it responds with a Binding Error message with status set to 2 (unrecognized mobility header (MH) type value), as described in [RFC3775] πŸ“. When a Binding Error message with status set to 2 comes back in response to a Heartbeat Request message, the MAG or LMA that started the exchange MUST NOT use Heartbeat messages with the other end again 🚫.

If a PMIPv6 node has detected that a peer PMIPv6 node has failed or restarted without keeping the PMIPv6 session state, it should mark the corresponding binding update list or binding cache entries as invalid 🧹. The PMIPv6 node may also take other actions, but those are outside the scope of this document πŸ¦‹.

Failure and restart events may be reported to network operators through asynchronous notifications πŸ“£. Future work may define those notifications in a Structure of Management Information Version 2 (SMIv2) Management Information Base (MIB) module πŸ’œ.

3.1. Failure Detection 🚨

A PMIPv6 node (MAG or LMA) matches every Heartbeat Response it gets to the Heartbeat Request it sent, using the sequence number πŸ”. Before it sends the next Heartbeat Request, it increments a local variable MISSING_HEARTBEAT if it hasn't received a Heartbeat Response for the previous request 😬. Once MISSING_HEARTBEAT goes above a configurable parameter called MISSING_HEARTBEATS_ALLOWED, the PMIPv6 node decides the peer PMIPv6 node isn't reachable πŸ™…. If a Heartbeat Response message does arrive, the MISSING_HEARTBEATS counter gets reset πŸ”„.

3.2. Restart Detection πŸ”

This section describes a mechanism for detecting failure recovery without session persistence 🌷. Say the LMA or the MAG crashes, reboots, and loses all its state for the PMIPv6 sessions. It would be really helpful for the peer PMIPv6 node to notice the failure and the loss of session state, so the sessions can be set up again πŸ₯Ί.

Each PMIPv6 node (both the MAG and the LMA) MUST maintain a monotonically increasing Restart Counter πŸ”’. It goes up every time the node reboots and loses PMIPv6 session state πŸ”Ό. The counter MUST NOT be incremented if the recovery happens without losing the state for the PMIPv6 sessions that were active at the time of the failure πŸ™…β€β™€οΈ. This counter MUST be treated as state that is preserved across reboots πŸ’Ύ. A PMIPv6 node puts a Restart Counter mobility option, described in Section 3.4, into a Heartbeat Response message to show the current value of its Restart Counter 🎁. Each PMIPv6 node MUST also store the Restart Counter for all the peer PMIPv6 nodes it currently has sessions with πŸ—‚οΈ. Stored Restart Counter values for peer PMIPv6 nodes don't need to survive reboots 🫧.

When a PMIPv6 node receives a Heartbeat Response message, it compares the Restart Counter value with the one it got before πŸ‘€. If the value is different, the receiving node assumes the peer PMIPv6 node crashed and recovered πŸ’₯. If the Restart Counter value changes, or if there was no previously stored value, the receiving PMIPv6 node stores the new value πŸ“.

If a PMIPv6 node restarts and loses PMIPv6 session state, it SHOULD send an unsolicited Heartbeat Response message with an incremented Restart Counter to all the PMIPv6 nodes it had PMIPv6 sessions with before πŸ“£. This only works if the PMIPv6 node can store information about its peers across reboots 🧠. The unsolicited Heartbeat Response lets the peer PMIPv6 nodes find out about the restart super fast ⚑. The sequence number field in the unsolicited Heartbeat Response is ignored, and no response is needed. The nodes will get back in sync during the next request and response exchange 🫢.

3.3. Heartbeat Message πŸ’–

okay so the Heartbeat message is basically a sibling of the Mobility Header from [RFC3775] (see Section 6.1 of [RFC3775]) πŸ¦‹. The MH Type field is how you tell it's a Heartbeat, and the value MUST be set to 13 🫢. Nothing else about the Mobility Header changes, so for the rest of the fields go check [RFC3775] bestie 🧚

Here's the general Mobility Header layout first:

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     | Payload Proto |  Header Len   |   MH Type     |   Reserved    |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |           Checksum            |                               |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               |
     |                                                               |
     .                                                               .
     .                       Message Data                            .
     .                                                               .
     |                                                               |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 1: Mobility Header Message Format

The Heartbeat message starts right after the Checksum field 🌸 Here's what it looks like:

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
                                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                     |            Reserved       |U|R|
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                       Sequence Number                         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                                                               |
     .                                                               .
     .                        Mobility Options                       .
     .                                                               .
     |                                                               |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 2: Heartbeat Message Format

Now the fields, one by one πŸ‘‘

Reserved πŸŽ€ Set to 0 and ignored by the receiver.

'U' 🌈 Set to 1 in Unsolicited Heartbeat Response. Otherwise, set to 0.

'R' πŸ’… A 1-bit flag that tells you if the message is a request or a response. When 'R' is 0, it's a request. When 'R' is 1, it's a response. Iconic binary moment 😭

Sequence Number πŸ¦‹ A 32-bit sequence number used for matching the request to the reply. Basically how you pair up your question with its answer ✨

Mobility Options 🧚 This is a variable-length field, sized so the complete Mobility Header comes out to a multiple of 8 octets. It holds zero or more TLV-encoded mobility options. The receiver MUST ignore and skip any options that it does not understand πŸ™ˆ At the time of writing this document, the Restart Counter mobility option, described in Section 3.4, is the only valid option in this message πŸ’œ

3.4. Restart Counter Mobility Option πŸ“

Here's the message format for the new mobility option that carries the Restart Counter value in the Heartbeat message. It's only valid in a Heartbeat Response message, and it has an alignment requirement of 4n+2 πŸ’–

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
                                     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                     |      Type     |     Length    |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     |                       Restart Counter                         |
     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 3: Restart Counter Mobility Option

Type 🌸 An 8-bit field that says this is a Restart Counter mobility option. It MUST be set to 28 πŸ”₯

Length πŸ¦‹ An 8-bit field with the length of the option in octets, not counting the Type and Length fields. It's set to 4 ✨

Restart Counter πŸ’… A 32-bit field with the current Restart Counter value πŸŽ€

4. Exchanging Heartbeat Messages over an IPv4 Transport Network 🌈

Sometimes the network between the MAG and the LMA is IPv4-only and can't route IPv6 packets 🧚 In that case, the Mobility Header carrying the Heartbeat message is sent the way Section 4 of [RFC5844] describes. In other words, the Mobility Header rides inside the UDP payload of an IPv4 packet (IPv4-UDP-MH) πŸ¦‹

5. Configuration Variables βš™οΈ

The LMA and the MAG must allow the following variables to be configurable πŸ’–

HEARTBEAT_INTERVAL 🌸 This sets the time interval, in seconds, between two consecutive Heartbeat Request messages. The default is 60 seconds. It SHOULD NOT be set to less than 30 seconds or more than 3600 seconds πŸ™ˆ

MISSING_HEARTBEATS_ALLOWED πŸ”₯ This is the maximum number of consecutive Heartbeat Request messages that a PMIPv6 node can send without getting a response before it decides the peer PMIPv6 node is unreachable. The default for this variable is 3 πŸ‘‘

6. Security Considerations πŸ”

Heads up, this section is serious business 😭 Read every word.

Heartbeat messages are only used to check that the MAG and the LMA can reach each other. They don't carry anything useful to eavesdroppers on the path 🫢 So confidentiality protection is not required πŸ™…β€β™€οΈ Integrity protection using IPsec [RFC4301] for the Heartbeat messages MUST be supported on the MAG and the LMA πŸ”₯ RFC 5213 [RFC5213] explains how to protect the Proxy Binding Update and Acknowledgement signaling messages with IPsec. The Heartbeat message in this specification is just another subtype of the same Mobility Header protocol that IPsec already protects. So you can protect this extra message with the same mechanisms and security policy models from these RFCs 🧚 The security policy database entries should use the new MH Type, the Heartbeat message, for the MH Type selector πŸ’œ

If dynamic key negotiation between the MAG and the LMA is required, Internet Key Exchange Protocol version 2 (IKEv2) [RFC4306] should be used πŸ¦‹

7. IANA Considerations 🌈

The Heartbeat message defined in Section 3.3 must have its type value allocated from the same space as the 'MH Type' name space in the Mobility Header defined in RFC 3775 [RFC3775] πŸŽ€

The Restart Counter mobility option defined in Section 3.4 must have its type value allocated from the same name space as the mobility options defined in RFC 3775 [RFC3775] πŸ’…

8. Acknowledgements 🫢

A heartbeat mechanism for a network-based mobility management protocol was first described in [NETLMM]. The authors want to thank the members of the NETLMM design team who produced that document 🌸 The mechanism here also comes from the path management mechanism described in [GTP] ✨

They also want to thank Alessio Casati for first suggesting a fault handling mechanism for Proxy Mobile IPv6 πŸ’–

9. References πŸ“š

9.1. Normative References

[RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
           Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC5213]  Gundavelli, S., Leung, K., Devarapalli, V., Chowdhury, K.,
           and B. Patil, "Proxy Mobile IPv6", RFC 5213, August 2008.

[RFC5844]  Wakikawa, R. and S. Gundavelli, "IPv4 Support for Proxy
           Mobile IPv6", RFC 5844, May 2010.

[RFC4301]  Kent, S. and K. Seo, "Security Architecture for the
           Internet Protocol", RFC 4301, December 2005.

[RFC4306]  Kaufman, C., "Internet Key Exchange (IKEv2) Protocol",
           RFC 4306, December 2005.

[RFC3775]  Johnson, D., Perkins, C., and J. Arkko, "Mobility Support
           in IPv6", RFC 3775, June 2004.

9.2. Informative References

[NETLMM]   Levkowetz, H., Ed., Giaretta, G., Leung, K., Liebsch, M.,
           Roberts, P., Nishida, K., Yokota, H., and M.
           Parthasarathy, "The NetLMM Protocol", Work in Progress,
           October 2006.

[GTP]      3rd Generation Partnership Project, "3GPP Technical
           Specification 29.060 V7.6.0: "Technical Specification
           Group Core Network and Terminals; General Packet Radio
           Service (GPRS); GPRS Tunnelling Protocol (GTP) across the
           Gn and Gp interface (Release 7)"", July 2007.

Authors' Addresses 🌟

Vijay Devarapalli (editor)
WiChorus
3950 North First Street
San Jose, CA  95134
USA

EMail: vijay@wichorus.com


Rajeev Koodli (editor)
Cisco Systems
USA

EMail: rkoodli@cisco.com


Heeseon Lim
Stoke
5403 Betsy Ross Drive
Santa Clara, CA  95054
USA

EMail: hlim@stoke.com

Nishi Kant
Stoke
5403 Betsy Ross Drive
Santa Clara, CA  95054
USA

EMail: nishi@stoke.com


Suresh Krishnan
Ericsson
8400 Decarie Blvd.
Town of Mount Royal, QC
Canada

EMail: suresh.krishnan@ericsson.com


Julien Laganier
Qualcomm Incorporated
5775 Morehouse Drive
San Diego, CA  92121
USA

EMail: julienl@qualcomm.com

That's the whole spec, bestie! πŸ¦‹πŸ’–βœ¨ Heartbeats, restart counters, and a whole lot of "make sure this is protected" 🫢 slay πŸ’…

πŸ“¦ where this page comes from