RFC 2472
IP Version 6 over PPP
RFC 2472: IP Version 6 over PPP π¦
okay bestie, this one is RFC 2472 and it's titled IP Version 6 over PPP π It's a Standards Track doc from December 1998, published in the Network Working Group stream. The authors are D. Haskin and E. Allen, both from Bay Networks, Inc. π It obsoletes RFC 2023, which means this is the newer version that replaces it. That's the whole title-block tea β
Status of This Memo β¨
This document is an Internet standards track protocol for the Internet community, and it's asking for discussion and suggestions for improvements π«Ά For the standardization state and status of this protocol, check the current edition of the "Internet Official Protocol Standards" (STD 1). Distribution of this memo is unlimited π
Copyright Notice π
Copyright (C) The Internet Society (1998). All Rights Reserved.
Abstract πΈ
The Point-to-Point Protocol (PPP) [1] gives us a standard way to encapsulate Network Layer protocol information over point-to-point links π¦ PPP also has an extensible Link Control Protocol, and it proposes a whole family of Network Control Protocols (NCPs) for setting up and configuring different network-layer protocols. It's giving organized π
This document is the spot where we define how IP Version 6 [2] packets get sent over PPP links π It also covers the Network Control Protocol (NCP) that sets up and configures IPv6 over PPP, plus how to form IPv6 link-local addresses on PPP links β¨
Table of Contents π§
1. Introduction .......................................... 2
1.1. Specification of Requirements ..................... 2
2. Sending IPv6 Datagrams ................................ 2
3. A PPP Network Control Protocol for IPv6 ............... 3
4. IPV6CP Configuration Options .......................... 4
4.1. Interface-Identifier .............................. 4
4.2. IPv6-Compression-Protocol.......................... 9
5. Stateless Autoconfiguration and Link-Local Addresses .. 10
6 Security Considerations ............................... 11
7 Acknowledgments ....................................... 11
8 Changes from RFC-2023 ................................. 11
9 References ............................................ 12
10 Authors' Addresses .................................... 13
11 Full Copyright Statement .............................. 14
1. Introduction π
okay so PPP has three main components, and they're all important π
- A method for encapsulating datagrams over serial links.
- A Link Control Protocol (LCP) for establishing, configuring, and testing the data-link connection.
- A family of Network Control Protocols (NCPs) for establishing and configuring different network-layer protocols.
To get communications going over a point-to-point link, each end of the PPP link must first send LCP packets to configure and test the data link π₯ Once the link is up and any optional facilities the LCP needs have been negotiated, PPP must send NCP packets to pick and configure one or more network-layer protocols. Then, once each chosen network-layer protocol is configured, datagrams from that protocol can finally be sent over the link π«Ά
In this document, the NCP that sets up and configures IPv6 over PPP is called the IPv6 Control Protocol (IPV6CP) π
The link stays configured for communications until explicit LCP or NCP packets close it down, or until some external event happens, like a power failure at the other end or a carrier drop π
1.1. Specification of Requirements π
In this document, several words are used to signal the requirements of the specification. Think of them as the big-boss words π
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 [7]. π¦
2. Sending IPv6 Datagrams π
Before any IPv6 packets may be communicated, PPP MUST reach the Network-Layer Protocol phase, and the IPv6 Control Protocol MUST reach the Opened state. No skipping the line, bestie π
Exactly one IPv6 packet gets encapsulated in the Information field of a PPP Data Link Layer frame, and that happens when the Protocol field is type hex 0057 (Internet Protocol Version 6) π
The maximum length of an IPv6 packet sent over a PPP link is the same as the maximum length of the Information field of a PPP data link layer frame. PPP links that support IPv6 MUST allow the Information field to be at least as large as the minimum link MTU size required for IPv6 [2]. It's giving "make room for the big guys" energy β¨
3. A PPP Network Control Protocol for IPv6 π§
The IPv6 Control Protocol (IPV6CP) is in charge of configuring, enabling, and disabling the IPv6 protocol modules on both ends of the point-to-point link π IPV6CP uses the same packet exchange mechanism as the Link Control Protocol (LCP). IPV6CP packets may not be exchanged until PPP has reached the Network-Layer Protocol phase. And if IPV6CP packets show up before that phase is reached, they should be silently discarded π
The IPv6 Control Protocol is exactly the same as the Link Control Protocol [1], with the following exceptions π
Data Link Layer Protocol Field
Exactly one IPV6CP packet gets encapsulated in the Information field of a PPP Data Link Layer frame, and that happens when the Protocol field is type hex 8057 (IPv6 Control Protocol) πΈ
Code field
Only Codes 1 through 7 are used: Configure-Request, Configure-Ack, Configure-Nak, Configure-Reject, Terminate-Request, Terminate-Ack and Code-Reject π¦ Other Codes should be treated as unrecognized, and they should result in Code-Rejects. Not the vibe π
Timeouts
IPV6CP packets may not be exchanged until PPP has reached the Network-Layer Protocol phase. An implementation should be ready to wait for Authentication and Link Quality Determination to finish before it times out while waiting for a Configure-Ack or some other response π«Ά It's suggested that an implementation gives up only after user intervention or after a configurable amount of time. Patience is a whole mood π
Configuration Option Types
IPV6CP has its own distinct set of Configuration Options β¨
4. IPV6CP Configuration Options π
IPV6CP Configuration Options let the two ends negotiate the IPv6 parameters they want π IPV6CP uses the same Configuration Option format defined for LCP [1], but it has its own separate set of options. If a Configuration Option isn't included in a Configure-Request packet, the default value for that Configuration Option is assumed π
The up-to-date values of the IPV6CP Option Type field are specified in the most recent "Assigned Numbers" RFC [4]. Right now, the values are assigned like this:
1 Interface-Identifier
2 IPv6-Compression-Protocol
The only IPV6CP options defined in this document are Interface-Identifier and IPv6-Compression-Protocol. Any other IPV6CP configuration options that get defined over time will be defined in separate documents π§
4.1. Interface-Identifier π¦
Description
This Configuration Option gives us a way to negotiate a unique 64-bit interface identifier. It's used for address autoconfiguration [3] at the local end of the link (see section 5) π₯ A Configure-Request MUST contain exactly one instance of the Interface-Identifier option [1]. The interface identifier MUST be unique within the PPP link. In other words, once the negotiation is done, different Interface-Identifier values are to be selected for the two ends of the PPP link π The interface identifier MAY also be unique over a broader scope.
Before this Configuration Option is requested, an implementation picks its tentative Interface-Identifier. The non-zero value of that tentative Interface-Identifier SHOULD be chosen so that it's unique to the link and, if possible, consistently reproducible across initializations of the IPV6CP finite state machine (administrative Close and reOpen, reboots, etc.). Why does consistency matter? Because it keeps global scope addresses that get formed from the interface identifier stable, which is so much better than a totally random one π₯Ή
Assume the interface identifier bits are numbered from 0 to 63 in canonical bit order, where the most significant bit is bit number 0. Bit number 6 is the "u" bit (universal/local bit in IEEE EUI-64 [5] terminology). It tells you whether the interface identifier is based on a globally unique IEEE identifier (EUI-48 or EUI-64 [5]), which is the case 1 below. It's set to one (1) if a globally unique IEEE identifier is used to derive the interface identifier, and set to zero (0) otherwise πΈ
The following are methods for choosing the tentative Interface Identifier, in order of preference:
- If an IEEE global identifier (EUI-48 or EUI-64) is available anywhere on the node, it should be used to construct the tentative Interface-Identifier, because of its uniqueness properties. When extracting an IEEE global identifier from another device on the node, care should be taken to make sure the extracted identifier is presented in canonical ordering [8].
The only transformation from an EUI-64 identifier is to invert the "u" bit (universal/local bit in IEEE EUI-64 terminology). For example, take a globally unique EUI-64 identifier of this form:
most-significant least-significant
bit bit
|0 1|1 3|3 4|4 6|
|0 5|6 1|2 7|8 3|
+----------------+----------------+----------------+----------------+
|cccccc0gcccccccc|cccccccceeeeeeee|eeeeeeeeeeeeeeee|eeeeeeeeeeeeeeee|
+----------------+----------------+----------------+----------------+
Here "c" are the bits of the assigned company_id, "0" is the value of the universal/local bit to indicate global scope, "g" is the group/individual bit, and "e" are the bits of the extension identifier. The IPv6 interface identifier then looks like this:
most-significant least-significant
bit bit
|0 1|1 3|3 4|4 6|
|0 5|6 1|2 7|8 3|
+----------------+----------------+----------------+----------------+
|cccccc1gcccccccc|cccccccceeeeeeee|eeeeeeeeeeeeeeee|eeeeeeeeeeeeeeee|
+----------------+----------------+----------------+----------------+
The only change is inverting the value of the universal/local bit πͺ
If you have an EUI-48 identifier, you first convert it to the EUI-64 format by inserting two bytes, with hexadecimal values of 0xFF and 0xFE, in the middle of the 48-bit MAC (between the company_id and extension-identifier portions of the EUI-48 value). For example, take a globally unique 48-bit EUI-48 identifier of this form:
most-significant least-significant
bit bit
|0 1|1 3|3 4|
|0 5|6 1|2 7|
+----------------+----------------+----------------+
|cccccc0gcccccccc|cccccccceeeeeeee|eeeeeeeeeeeeeeee|
+----------------+----------------+----------------+
Okay, the math is about to get spicy, so let's pause here and keep going in the next part πβ¨
so basically, where "c" is the assigned company_id bits, "0" is the universal/local bit set to mean global scope, "g" is the group/individual bit, and "e" is the extension identifier bits, your IPv6 interface identifier ends up looking like this π
most-significant least-significant
bit bit
|0 1|1 3|3 4|4 6|
|0 5|6 1|2 7|8 3|
+----------------+----------------+----------------+----------------+
|cccccc1gcccccccc|cccccccc11111111|11111110eeeeeeee|eeeeeeeeeeeeeeee|
+----------------+----------------+----------------+----------------+
- okay so if you don't have an IEEE global identifier, you grab a different source of uniqueness π Good options are things like link-layer addresses, machine serial numbers, et cetera.
In this case the "u" bit of the interface identifier MUST be set to zero (0). π
- if you can't find a good source of uniqueness either, it is recommended that you generate a random number π² In this case the "u" bit of the interface identifier MUST be set to zero (0). π
Good sources [1] of uniqueness or randomness are required for the Interface-Identifier negotiation to succeed, no cap π If you can't generate either a unique number or a random number, it is recommended that a zero value be used for the Interface-Identifier transmitted in the Configure-Request. In this case the PPP peer may provide a valid non-zero Interface-Identifier in its response, as described below. Note that if at least one of the PPP peers is able to generate separate non-zero numbers for itself and its peer, the identifier negotiation will succeed. the vibes are β¨ collaborative β¨
When a Configure-Request is received with the Interface-Identifier Configuration Option and the receiving peer implements this option, the received Interface-Identifier is compared with the Interface-Identifier of the last Configure-Request sent to the peer. Depending on the result of the comparison, an implementation MUST respond in one of the following ways: π
If the two Interface-Identifiers are different but the received Interface-Identifier is zero, a Configure-Nak is sent with a non-zero Interface-Identifier value suggested for use by the remote peer. Such a suggested Interface-Identifier MUST be different from the Interface-Identifier of the last Configure-Request sent to the peer. It is recommended that the value suggested be consistently reproducible across initializations of the IPV6CP finite state machine (administrative Close and reOpen, reboots, etc). The "u" universal/local) bit of the suggested identifier MUST be set to zero (0) regardless of its source unless the globally unique EUI-48/EUI-64 derived identifier is provided for the exclusive use by the remote peer. πΈ
If the two Interface-Identifiers are different and the received Interface-Identifier is not zero, the Interface-Identifier MUST be acknowledged, i.e. a Configure-Ack is sent with the requested Interface-Identifier, meaning that the responding peer agrees with the Interface-Identifier requested. Iconic behaviour π¦
If the two Interface-Identifiers are equal and are not zero, a Configure-Nak MUST be sent specifying a different non-zero Interface-Identifier value suggested for use by the remote peer. It is recommended that the value suggested be consistently reproducible across initializations of the IPV6CP finite state machine (administrative Close and reOpen, reboots, etc). The "u" universal/local) bit of the suggested identifier MUST be set to zero (0) regardless of its source unless the globally unique EUI-48/EUI-64 derived identifier is provided for the exclusive use by the remote peer. π
If the two Interface-Identifiers are equal to zero, the Interface-Identifiers negotiation MUST be terminated by transmitting the Configure-Reject with the Interface-Identifier value set to zero. In this case a unique Interface-Identifier can not be negotiated. Rip π₯
If a Configure-Request is received with the Interface-Identifier Configuration Option and the receiving peer does not implement this option, Configure-Rej is sent.
A new Configure-Request SHOULD NOT be sent to the peer until normal processing would cause it to be sent (that is, until a Configure-Nak is received or the Restart timer runs out). β³
A new Configure-Request MUST NOT contain the Interface-Identifier option if a valid Interface-Identifier Configure-Reject is received. π«
Reception of a Configure-Nak with a suggested Interface-Identifier different from that of the last Configure-Nak sent to the peer indicates a unique Interface-Identifier. In this case a new Configure-Request MUST be sent with the identifier value suggested in the last Configure-Nak from the peer. But if the received Interface-Identifier is equal to the one sent in the last Configure-Nak, a new Interface-Identifier MUST be chosen. In this case, a new Configure-Request SHOULD be sent with the new tentative Interface-Identifier. This sequence (transmit Configure-Request, receive Configure-Request, transmit Configure-Nak, receive Configure-Nak) might occur a few times, but it is extremely unlikely to occur repeatedly. More likely, the Interface-Identifiers chosen at either end will quickly diverge, terminating the sequence. π
If negotiation of the Interface-Identifier is required, and the peer did not provide the option in its Configure-Request, the option SHOULD be appended to a Configure-Nak. The tentative value of the Interface-Identifier given must be acceptable as the remote Interface-Identifier; i.e. it should be different from the identifier value selected for the local end of the PPP link. The next Configure-Request from the peer may include this option. If the next Configure-Request does not include this option, the peer MUST NOT send another Configure-Nak with this option included. It should assume that the peer's implementation does not support this option. π§
By default, an implementation SHOULD attempt to negotiate the Interface-Identifier for its end of the PPP connection. π
A summary of the Interface-Identifier Configuration Option format is shown below. The fields are transmitted from left to right. π
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 | Interface-Identifier (MS Bytes)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Interface-Identifier (cont)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Interface-Identifier (LS Bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type
1
Length
10
Interface-Identifier
The 64-bit Interface-Identifier which is very likely to be unique on the link or zero if a good source of uniqueness can not be found.
Default
If no valid interface identifier can be successfully negotiated, no default Interface-Identifier value should be assumed. The procedures for recovering from such a case are unspecified. One approach is to manually configure the interface identifier of the interface. π οΈ
4.2. IPv6-Compression-Protocol
Description
This Configuration Option provides a way to negotiate the use of a specific IPv6 packet compression protocol. The IPv6-Compression-Protocol Configuration Option is used to indicate the ability to receive compressed packets. Each end of the link must separately request this option if bi-directional compression is desired. By default, compression is not enabled. ποΈ
IPv6 compression negotiated with this option is specific to IPv6 datagrams and is not to be confused with compression resulting from negotiations via Compression Control Protocol (CCP), which potentially effect all datagrams. different protocol, different vibe, don't mix them up bestie π
A summary of the IPv6-Compression-Protocol Configuration Option format is shown below. The fields are transmitted from left to right.
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 | IPv6-Compression-Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+
Type
2
Length
= 4
IPv6-Compression-Protocol
The IPv6-Compression-Protocol field is two octets and indicates the compression protocol desired. Values for this field are always the same as the PPP Data Link Layer Protocol field values for that same compression protocol.
No IPv6-Compression-Protocol field values are currently assigned. Specific assignments will be made in documents that define specific compression algorithms.
Data
The Data field is zero or more octets and contains additional data as determined by the particular compression protocol.
Default
No IPv6 compression protocol enabled.
5. Stateless Autoconfiguration and Link-Local Addresses β¨
The Interface Identifier of IPv6 unicast addresses [6] of a PPP interface, SHOULD be negotiated in the IPV6CP phase of the PPP connection setup (see section 4.1). If no valid Interface Identifier has been successfully negotiated, procedures for recovering from such a case are unspecified. One approach is to manually configure the Interface Identifier of the interface. π οΈ
As long as the Interface Identifier is negotiated in the IPV6CP phase of the PPP connection setup, it is redundant to perform duplicate address detection as a part of the IPv6 Stateless Autoconfiguration protocol [3]. Therefore it is recommended that for PPP links with the IPV6CP Interface-Identifier option enabled the default value of the DupAddrDetectTransmits autoconfiguration variable [3] be zero. π§
Link-local addresses of PPP interfaces have the following format:
| 10 bits | 54 bits | 64 bits |
+----------+------------------------+-----------------------------+
|1111111010| 0 | Interface Identifier |
+----------+------------------------+-----------------------------+
The most significant 10 bits of the address is the Link-Local prefix FE80::. 54 zero bits pad out the address between the Link-Local prefix and the Interface Identifier fields. πΈ
6. Security Considerations π
The IPv6 Control Protocol extension to PPP can be used with all defined PPP authentication and encryption mechanisms.
7. Acknowledgments π
This document borrows from the Magic-Number LCP option and as such is partially based on previous work done by the PPP working group. Shoutout to the PPP working group, they did the groundwork π«Ά
8. Changes from RFC-2023 β¨
okay so this section is the glow-up log π it's basically a list of everything that changed from RFC-2023 "IP Version 6 over PPP" π
- Swapped "Interface Token" for "Interface Identifier" to match the terminology in [6]. new name, same energy π¦
- Bumped the Interface Identifier up to 64 bits, following the newly adopted IPv6 addressing architecture in [6]. bigger is better, periodt π₯
- Added ways to pick an interface identifier that stays consistently reproducible across initializations of the IPV6CP finite state machine. no more identity crisis every time it restarts π«Ά
- Added interface identifier selection methods that generate a globally unique interface identifier from a unique IEEE global identifier, whenever one is available anywhere on the node π
- Changed the response to a Configure-Request carrying a zero Interface-Identifier value. it now gets a Configure-Nak instead of a Configure-Ack π
- Replaced the value assignment for the IPv6-Compression-Protocol field of the IPv6-Compression-Protocol Configuration option. the text now says no IPv6-Compression-Protocol field values are currently assigned, and specific assignments will be made in documents that define specific compression algorithms π§
- Added new and updated references β¨
- Minor text clarifications and improvements π
9. References π
- [1] Simpson, W., "The Point-to-Point Protocol", STD 51, RFC 1661, July 1994.
- [2] Deering, S., and R. Hinden, Editors, "Internet Protocol, Version 6 (IPv6) Specification", RFC 2460, December 1998.
- [3] Thomson, S., and T. Narten, "IPv6 Stateless Address Autoconfiguration", RFC 2462, December 1998.
- [4] Reynolds, J., and J. Postel, "Assigned Numbers", STD 2, RFC 1700, October 1994. See also:
http://www.iana.org/numbers.html - [5] IEEE, "Guidelines for 64-bit Global Identifier (EUI-64) Registration Authority",
http://standards.ieee.org/db/oui/tutorials/EUI64.html, March 1997. - [6] Hinden, R., and S. Deering, "IP Version 6 Addressing Architecture", RFC 2373, July 1998.
- [7] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels," BCP 14, RFC 2119, March 1997.
- [8] Narten T., and C. Burton, "A Caution On The Canonical Ordering Of Link-Layer Addresses", RFC 2469, December 1998.
10. Authors' Addresses π
These are the people who wrote it, bestie. Their contact details are below.
Dimitry Haskin
Bay Networks, Inc.
600 Technology Park
Billerica, MA 01821
EMail: dhaskin@baynetworks.com
Ed Allen
Bay Networks, Inc.
600 Technology Park
Billerica, MA 01821
EMail: eallen@baynetworks.com
11. Full Copyright Statement βοΈ
Copyright (C) The Internet Society (1998). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
π¦ where this page comes from
- ietf: rfc2472 1998-12
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms