RFC 3513

Internet Protocol Version 6 (IPv6) Addressing Architecture

๐Ÿ“… published April 2003, from ietf

RFC 3513: Internet Protocol Version 6 (IPv6) Addressing Architecture ๐ŸŽ€

okay bestie, this is RFC 3513 ๐Ÿ’– and it's the IPv6 Addressing Architecture doc. R. Hinden (Nokia) and S. Deering (Cisco Systems) wrote it. It's a Standards Track document, dated April 2003, and it obsoletes RFC 2373 ๐Ÿ’…. The title block doesn't list anything it updates. This is part 1 of 5, so more is coming โœจ

Status of This Memo โœจ

this document is an Internet standards track protocol for the Internet community, and it asks for discussion and suggestions for improvements ๐Ÿฆ‹ for the current 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 (C) The Internet Society (2003). All Rights Reserved.

Abstract ๐ŸŒธ

this spec defines the addressing architecture of the IP Version 6 (IPv6) protocol ๐Ÿงš it covers the IPv6 addressing model, text representations of IPv6 addresses, unicast, anycast, and multicast address definitions, and the addresses an IPv6 node is required to have โญ

Table of Contents ๐Ÿ“–

1. Introduction.................................................3
2. IPv6 Addressing..............................................3
   2.1 Addressing Model.........................................4
   2.2 Text Representation of Addresses.........................4
   2.3 Text Representation of Address Prefixes..................5
   2.4 Address Type Identification..............................6
   2.5 Unicast Addresses........................................7
       2.5.1 Interface Identifiers..............................8
       2.5.2 The Unspecified Address............................9
       2.5.3 The Loopback Address...............................9
       2.5.4 Global Unicast Addresses..........................10
       2.5.5 IPv6 Addresses with Embedded IPv4 Addresses.......10
       2.5.6 Local-use IPv6 Unicast Addresses..................11
   2.6 Anycast Addresses.......................................12
       2.6.1 Required Anycast Address..........................13
   2.7 Multicast Addresses.....................................13
       2.7.1 Pre-Defined Multicast Addresses...................15
   2.8 A Node's Required Addresses.............................17
3. Security Considerations.....................................17
4. IANA Considerations.........................................18
5. References..................................................19
   5.1 Normative References....................................19
   5.2 Informative References..................................19
APPENDIX A: Creating Modified EUI-64 format Interface IDs......21
APPENDIX B: Changes from RFC-2373..............................24
Authors' Addresses.............................................25
Full Copyright Statement.......................................26

1. Introduction โœจ

okay so this spec defines the addressing architecture of the IP Version 6 (IPv6) protocol ๐Ÿ’… it includes the basic formats for the different kinds of IPv6 addresses (unicast, anycast, and multicast) ๐Ÿฆ‹

the authors want to shout out the people who helped out: Paul Francis, Scott Bradner, Jim Bound, Brian Carpenter, Matt Crawford, Deborah Estrin, Roger Fajman, Bob Fink, Peter Ford, Bob Gilligan, Dimitry Haskin, Tom Harsch, Christian Huitema, Tony Li, Greg Minshall, Thomas Narten, Erik Nordmark, Yakov Rekhter, Bill Simpson, Sue Thomson, Markku Savela, and Larry Masinter ๐Ÿซถ

2. IPv6 Addressing ๐Ÿ’–

IPv6 addresses are 128-bit identifiers for interfaces and sets of interfaces (where "interface" is as defined in section 2 of [IPV6]) ๐ŸŒˆ there are three types of addresses, and they're iconic โœจ

  • Unicast: an identifier for a single interface. A packet sent to a unicast address is delivered to the interface identified by that address ๐ŸŽ€
  • 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) ๐Ÿงš
  • Multicast: an identifier for a set of interfaces (typically belonging to different nodes). A packet sent to a multicast address is delivered to all interfaces identified by that address ๐ŸŒธ

there are no broadcast addresses in IPv6 ๐Ÿ’€ their function got taken over by multicast addresses, which is giving main character energy ๐Ÿ‘‘

in this doc, fields in addresses get specific names, like "subnet" ๐Ÿฆ‹ when that name comes with the word "ID" after it (like "subnet ID"), it means the contents of that field. when it comes with the word "prefix" (like "subnet prefix"), it means the whole address from the left up to and including that field ๐Ÿ“

in IPv6, all zeros and all ones are legal values for any field, unless specifically excluded. specifically, prefixes can contain zero-valued fields, or even end with them ๐Ÿ™ˆ

2.1 Addressing Model ๐Ÿ’œ

IPv6 addresses of every type are assigned to interfaces, not nodes ๐Ÿซถ a unicast address points at one interface. since each interface belongs to one node, any of that node's interfaces' unicast addresses can be used to identify the node โœจ

all interfaces are required to have at least one link-local unicast address (see section 2.8 for additional required addresses) ๐Ÿ’– a single interface can also have several IPv6 addresses of any type (unicast, anycast, and multicast) or scope ๐ŸŒˆ unicast addresses with a scope bigger than link-scope aren't needed for interfaces that never send or receive IPv6 packets to or from non-neighbors. this is sometimes handy for point-to-point interfaces ๐ŸŽ€ there's one exception to this model:

A unicast address or a set of unicast addresses may be assigned to multiple physical interfaces if the implementation treats the multiple physical interfaces as one interface when presenting it to the internet layer. This is useful for load-sharing over multiple physical interfaces.

currently IPv6 keeps the IPv4 model that a subnet prefix is associated with one link. multiple subnet prefixes can be assigned to the same link ๐Ÿฆ‹

2.2 Text Representation of Addresses ๐ŸŒธ

there are three conventional ways to write IPv6 addresses as text strings ๐Ÿงš

  1. the preferred form is x:x:x:x:x:x:x:x, where the 'x's are the hexadecimal values of the eight 16-bit pieces of the address ๐Ÿ’…

examples:

FEDC:BA98:7654:3210:FEDC:BA98:7654:3210

1080:0:0:0:8:800:200C:417A

it's not necessary to write the leading zeros in an individual field, but there must be at least one numeral in every field (except for the case described in 2.). ๐Ÿ™ˆ

  1. because of some ways of allocating certain styles of IPv6 addresses, it's going to be common for addresses to have long strings of zero bits ๐Ÿ˜ญ to make writing those easier, there's a special syntax that compresses the zeros ๐Ÿ“

the use of "::" stands for one or more groups of 16 bits of zeros. "::" can only show up once in an address. it can also compress leading or trailing zeros in an address ๐Ÿซถ

for example, these addresses:

1080:0:0:0:8:800:200C:417A  a unicast address
FF01:0:0:0:0:0:0:101        a multicast address
0:0:0:0:0:0:0:1             the loopback address
0:0:0:0:0:0:0:0             the unspecified addresses

can be written as:

1080::8:800:200C:417A       a unicast address
FF01::101                   a multicast address
::1                         the loopback address
::                          the unspecified addresses
  1. an alternative form that's sometimes more convenient when you're dealing with a mixed environment of IPv4 and IPv6 nodes is x:x:x:x:x:x:d.d.d.d, where the 'x's are the hexadecimal values of the six high-order 16-bit pieces of the address, and the 'd's are the decimal values of the four low-order 8-bit pieces of the address (standard IPv4 representation) ๐ŸŒˆ examples:
0:0:0:0:0:0:13.1.68.3

0:0:0:0:0:FFFF:129.144.52.38

or in compressed form:

::13.1.68.3

::FFFF:129.144.52.38

2.3 Text Representation of Address Prefixes ๐ŸŽ€

writing IPv6 address prefixes is kind of like how IPv4 prefixes get written in CIDR notation [CIDR] ๐Ÿฆ‹ an IPv6 address prefix is written like this:

ipv6-address/prefix-length

where

  • ipv6-address is an IPv6 address in any of the notations listed in section 2.2.
  • prefix-length is a decimal value that says how many of the leftmost contiguous bits of the address make up the prefix ๐Ÿ’–

for example, these are all legal ways to write the 60-bit prefix 12AB00000000CD3 (hexadecimal) โœจ:

12AB:0000:0000:CD30:0000:0000:0000:0000/60
12AB::CD30:0:0:0:0/60
12AB:0:0:CD30::/60

these are NOT legal ways to write the prefix above ๐Ÿ’€:

12AB:0:0:CD3/60   may drop leading zeros, but not trailing zeros,
                  within any 16-bit chunk of the address

12AB::CD30/60     address to left of "/" expands to
                  12AB:0000:0000:0000:0000:000:0000:CD30

12AB::CD3/60      address to left of "/" expands to
                  12AB:0000:0000:0000:0000:000:0000:0CD3

when you write both a node address and a prefix of that node address (like the node's subnet prefix), you can combine them like this ๐Ÿงš:

the node address      12AB:0:0:CD30:123:4567:89AB:CDEF
and its subnet number 12AB:0:0:CD30::/60

can be abbreviated as 12AB:0:0:CD30:123:4567:89AB:CDEF/60

2.4 Address Type Identification ๐ŸŒˆ

the type of an IPv6 address is identified by its high-order bits, like this ๐Ÿ‘‘:

Address type         Binary prefix        IPv6 notation   Section
------------         -------------        -------------   -------
Unspecified          00...0  (128 bits)   ::/128          2.5.2
Loopback             00...1  (128 bits)   ::1/128         2.5.3
Multicast            11111111             FF00::/8        2.7
Link-local unicast   1111111010           FE80::/10       2.5.6
Site-local unicast   1111111011           FEC0::/10       2.5.6
Global unicast       (everything else)

anycast addresses are taken from the unicast address spaces (of any scope), and they aren't syntactically distinguishable from unicast addresses ๐Ÿ’…

the general format of global unicast addresses is in section 2.5.4. some special-purpose subtypes of global unicast addresses that contain embedded IPv4 addresses (for IPv4-IPv6 interoperation) are in section 2.5.5 ๐Ÿซถ

future specs might redefine one or more sub-ranges of the global unicast space for other purposes ๐Ÿฆ‹ but unless and until that happens, implementations must treat every address that doesn't start with any of the prefixes above as a global unicast address ๐ŸŽ€

2.5 Unicast Addresses โœจ

okay so unicast addresses are the ones that point at exactly one interface, and they're giving flexibility ๐Ÿ’… IPv6 unicast addresses can be aggregated with prefixes of any bit-length, just like IPv4 under Classless Interdomain Routing. so no rigid boxes, you can slice them however you need ๐Ÿฆ‹

there are a few main types: global unicast, site-local unicast, and link-local unicast ๐ŸŒธ there are also some special subtypes of global unicast, like IPv6 addresses with embedded IPv4 addresses or encoded NSAP addresses. and more types or subtypes can be defined later, so keep your eyes open ๐Ÿ‘€ ๐ŸŒˆ

now, how much a node knows about the inside of an address depends on its role. a host versus a router, for example, knows different amounts ๐Ÿงš at the very least, a node MAY consider that unicast addresses (including its own) have no internal structure at all:

|                           128 bits                              |
+-----------------------------------------------------------------+
|                          node address                           |
+-----------------------------------------------------------------+

a slightly more sophisticated host (still pretty simple, not gonna lie) MAY additionally know the subnet prefix(es) for the link(s) it's attached to. and different addresses MAY have different values for n ๐Ÿ“

|                         n bits                 |   128-n bits   |
+------------------------------------------------+----------------+
|                   subnet prefix                | interface ID   |
+------------------------------------------------+----------------+

a very simple router MAY have no idea what the internal structure is, but routers usually know about one or more of the hierarchical boundaries used by routing protocols ๐Ÿ›ฃ๏ธ and those boundaries differ from router to router, depending on where that router sits in the routing hierarchy. it's all about main character positioning ๐Ÿ‘‘

2.5.1 Interface Identifiers

interface identifiers are how you tell interfaces apart on a link ๐ŸŽ€ they are REQUIRED to be unique within a subnet prefix. it is RECOMMENDED that the same interface identifier NOT be assigned to different nodes on a link. they MAY also be unique over a broader scope, and sometimes an interface's identifier gets derived straight from that interface's link-layer address ๐Ÿซถ the same interface identifier MAY be used on multiple interfaces of one node, as long as those interfaces are attached to different subnets.

the uniqueness of interface identifiers is totally separate from the uniqueness of IPv6 addresses, so don't mix them up ๐Ÿ™ˆ for example, a global unicast address MAY be created with a non-global scope interface identifier, and a site-local address MAY be created with a global scope interface identifier. wild, I know ๐Ÿ’€

for all unicast addresses EXCEPT the ones that start with the binary value 000, interface IDs are REQUIRED to be 64 bits long and to be built in Modified EUI-64 format ๐Ÿ’–

Modified EUI-64 format based interface identifiers MAY have global scope when they're derived from a global token (like an IEEE 802 48-bit MAC or an IEEE EUI-64 identifier [EUI64]). they MAY also have local scope where no global token is available (like serial links or tunnel end-points), or where global tokens are undesirable (like temporary tokens for privacy [PRIV]) โœจ

Modified EUI-64 format interface identifiers are made by inverting the "u" bit (the universal/local bit, in IEEE EUI-64 terms) when you form the interface identifier from an IEEE EUI-64 identifier. in the resulting Modified EUI-64 format, the "u" bit is set to one (1) to mean global scope, and set to zero (0) to mean local scope. the first three octets, in binary, of an IEEE EUI-64 identifier look like this:

    0       0 0       1 1       2
   |0       7 8       5 6       3|
   +----+----+----+----+----+----+
   |cccc|ccug|cccc|cccc|cccc|cccc|
   +----+----+----+----+----+----+

written in Internet standard bit-order ๐Ÿ”ฅ where "u" is the universal/local bit, "g" is the individual/group bit, and the "c"s are the bits of the company_id. Appendix A: "Creating Modified EUI-64 format Interface Identifiers" has examples of how to build these, so go peek if you want to see it in action ๐Ÿ‘€

the reason we flip the "u" bit is to make life easier for system admins who need to hand configure non-global identifiers when there are no hardware tokens around ๐Ÿฅฐ this is expected to be the case for serial links, tunnel end-points, and so on. the alternative would have been stuff like 0200:0:0:1 and 0200:0:0:2, instead of the much simpler 1, 2, and so on. no thank you ๐Ÿ™…โ€โ™€๏ธ

the universal/local bit in the Modified EUI-64 format identifier is there so future tech can take advantage of interface identifiers with global scope ๐Ÿš€

the details of forming interface identifiers are defined in the matching "IPv6 over <link>" specification, like "IPv6 over Ethernet" [ETHER], "IPv6 over FDDI" [FDDI], and so on ๐Ÿ“š

2.5.2 The Unspecified Address

the address 0:0:0:0:0:0:0:0 is called the unspecified address, and it MUST never be assigned to any node ๐Ÿ™…โ€โ™€๏ธ it means "there's no address here." one example of using it is in the Source Address field of any IPv6 packets sent by an initializing host before that host has learned its own address ๐ŸŒฑ

the unspecified address MUST NOT be used as the destination address of IPv6 packets, or in IPv6 Routing Headers. and an IPv6 packet with an unspecified source address MUST never be forwarded by an IPv6 router ๐Ÿšซ

the unspecified address is basically the "I don't have one yet" address, so it never belongs on a real route or a real destination. keep it out of those places, bestie ๐Ÿ’€

2.5.3 The Loopback Address

the unicast address 0:0:0:0:0:0:0:1 is called the loopback address ๐Ÿฆ‹ a node MAY use it to send an IPv6 packet to itself. it MUST never be assigned to any physical interface. it's treated as having link-local scope, and you can think of it as the link-local unicast address of a virtual interface (usually called "the loopback interface") to an imaginary link that goes nowhere ๐ŸŒ€ very mysterious, very iconic

the loopback address MUST NOT be used as the source address in IPv6 packets sent outside of a single node ๐Ÿ™ˆ and an IPv6 packet with a destination address of loopback MUST never be sent outside of a single node, and MUST never be forwarded by an IPv6 router. a packet received on an interface with a destination address of loopback MUST be dropped ๐Ÿ—‘๏ธ no exceptions, periodt ๐Ÿ’…

2.5.4 Global Unicast Addresses

the general format for IPv6 global unicast addresses looks like this ๐ŸŒ

|         n bits         |   m bits  |       128-n-m bits         |
+------------------------+-----------+----------------------------+
| global routing prefix  | subnet ID |       interface ID         |
+------------------------+-----------+----------------------------+

where the global routing prefix is a value (typically hierarchically structured) assigned to a site (a cluster of subnets/links) ๐Ÿก the subnet ID identifies a link within that site, and the interface ID is as defined in section 2.5.1 ๐Ÿซถ

all global unicast addresses EXCEPT the ones starting with binary 000 have a 64-bit interface ID field (so n + m = 64), formatted the way section 2.5.1 describes โœจ global unicast addresses that start with binary 000 have no such constraint on the size or structure of the interface ID field. they're the rebels of the group ๐Ÿงš

examples of global unicast addresses starting with binary 000 are the IPv6 address with embedded IPv4 addresses from section 2.5.5, and the IPv6 address containing encoded NSAP addresses specified in [NSAP]. an example of global addresses starting with a binary value OTHER than 000 (and therefore having a 64-bit interface ID field) can be found in [AGGR] ๐Ÿ“š

2.5.5 IPv6 Addresses with Embedded IPv4 Addresses

the IPv6 transition mechanisms [TRAN] include a technique for hosts and routers to dynamically tunnel IPv6 packets over IPv4 routing infrastructure ๐Ÿš‡ IPv6 nodes that use this technique get special IPv6 unicast addresses that carry a global IPv4 address in the low-order 32 bits. this type is called an "IPv4-compatible IPv6 address," and it looks like this:

|                80 bits               | 16 |      32 bits        |
+--------------------------------------+--------------------------+
|0000..............................0000|0000|    IPv4 address     |
+--------------------------------------+----+---------------------+
Note: The IPv4 address used in the "IPv4-compatible IPv6 address" MUST be a globally-unique IPv4 unicast address. ๐Ÿ”ฅ don't skip this one, it's serious

there's a second type of IPv6 address that holds an embedded IPv4 address too ๐ŸŒธ this one is used to represent the addresses of IPv4 nodes as IPv6 addresses. it's called an "IPv4-mapped IPv6 address," and it looks like this:

|                80 bits               | 16 |      32 bits        |
+--------------------------------------+--------------------------+
|0000..............................0000|FFFF|    IPv4 address     |
+--------------------------------------+----+---------------------+

2.5.6 Local-Use IPv6 Unicast Addresses

there are two types of local-use unicast addresses: Link-Local and Site-Local ๐ŸŽ€ Link-Local is for use on a single link, and Site-Local is for use inside a single site. Link-Local addresses look like this:

|   10     |
|  bits    |         54 bits         |          64 bits           |
+----------+-------------------------+----------------------------+
|1111111010|           0             |       interface ID         |
+----------+-------------------------+----------------------------+

Link-Local addresses are designed for addressing on a single link, for stuff like automatic address configuration, neighbor discovery, or when no routers are present ๐Ÿ”—

routers MUST NOT forward any packets with link-local source or destination addresses to other links ๐Ÿšง

Site-Local addresses look like this:

|   10     |
|  bits    |         54 bits         |         64 bits            |
+----------+-------------------------+----------------------------+
|1111111011|        subnet ID        |       interface ID         |
+----------+-------------------------+----------------------------+

Site-local addresses are designed for addressing inside a site without needing a global prefix ๐Ÿ  a subnet ID MAY be up to 54-bits long, although it's expected that globally-connected sites will use the same subnet IDs for site-local and global prefixes ๐ŸŒ

routers MUST NOT forward any packets with site-local source or destination addresses outside of the site ๐Ÿ›‘

---

2.6 Anycast Addresses

okay bestie, anycast addresses are giving "send it to whoever's closest" ๐Ÿฆ‹. An IPv6 anycast address is assigned to more than one interface (usually on different nodes), and a packet sent to it gets routed to the "nearest" interface that has that address, based on the routing protocols' measure of distance ๐Ÿงญ.

Anycast addresses are pulled from the unicast address space and use any of the defined unicast formats, so they look exactly the same as unicast addresses ๐Ÿ‘€. When a unicast address gets assigned to more than one interface (aka it turns into an anycast address), the nodes it's assigned to MUST be explicitly configured to know it's anycast. no guessing allowed ๐Ÿ™…โ€โ™€๏ธ

For any assigned anycast address there's a longest prefix P that identifies the topological region where all the interfaces in that anycast address live. Inside the region P, the anycast address MUST be kept as its own separate entry in the routing system (people usually call this a "host route") ๐Ÿ’…. Outside the region P, the anycast address MAY be aggregated into the routing entry for prefix P โœจ.

Note that in the worst case, the prefix P of an anycast set can be the null prefix, meaning the members have no topological locality at all ๐Ÿ˜ญ. In that case the anycast address MUST be kept as a separate routing entry across the entire internet, which is a severe scaling limit on how many "global" anycast sets can be supported. So it's expected that support for global anycast sets may be unavailable or very restricted ๐Ÿ’€.

One expected use of anycast addresses is identifying the set of routers that belong to an organization providing internet service ๐ŸŒ. These addresses could be used as intermediate addresses in an IPv6 Routing header, to make a packet get delivered via a particular service provider or a sequence of service providers ๐Ÿงš.

Some other possible uses are identifying the set of routers attached to a particular subnet, or the set of routers providing entry into a particular routing domain ๐Ÿ“.

There's not a lot of experience with widespread, arbitrary use of internet anycast addresses, and there are some known complications and hazards when using them in their full generality [ANYCST] ๐Ÿ™ˆ. Until more experience has been gained and solutions are specified, the following restrictions are imposed on IPv6 anycast addresses ๐Ÿ”ฅ:

  • An anycast address MUST NOT be used as the source address of an IPv6 packet.
  • An anycast address MUST NOT be assigned to an IPv6 host. That is, it MAY be assigned to an IPv6 router only.

2.6.1 Required Anycast Address

The Subnet-Router anycast address is predefined, and its format looks like this ๐ŸŽ€:

|                         n bits                 |   128-n bits   |
+------------------------------------------------+----------------+
|                   subnet prefix                | 00000000000000 |
+------------------------------------------------+----------------+

The "subnet prefix" in an anycast address is the prefix that identifies a specific link. This anycast address is syntactically the same as a unicast address for an interface on the link, with the interface identifier set to zero ๐Ÿฆ‹.

Packets sent to the Subnet-Router anycast address will be delivered to one router on the subnet. All routers are REQUIRED to support the Subnet-Router anycast addresses for the subnets they have interfaces on ๐Ÿซถ.

The subnet-router anycast address is intended for applications where a node needs to communicate with any one of the set of routers ๐Ÿ’–.

2.7 Multicast Addresses

An IPv6 multicast address is an identifier for a group of interfaces (typically on different nodes) ๐ŸŒˆ. An interface can belong to any number of multicast groups. Multicast addresses have the following format ๐Ÿ‘‘:

|   8    |  4 |  4 |                  112 bits                   |
+------ -+----+----+---------------------------------------------+
|11111111|flgs|scop|                  group ID                   |
+--------+----+----+---------------------------------------------+

The binary 11111111 at the start of the address identifies it as a multicast address ๐Ÿ”ฅ.

The flgs field is a set of 4 flags ๐ŸŽ€:

                                       +-+-+-+-+
         flgs is a set of 4 flags:     |0|0|0|T|
                                       +-+-+-+-+

The high-order 3 flags are reserved, and MUST be initialized to 0 ๐Ÿ™…โ€โ™€๏ธ.

T = 0 indicates a permanently-assigned ("well-known") multicast address, assigned by the Internet Assigned Number Authority (IANA) ๐Ÿ†.

T = 1 indicates a non-permanently-assigned ("transient") multicast address โญ.

The scop field is a 4-bit multicast scope value used to limit the scope of the multicast group ๐ŸŒธ. The values are:

   0  reserved
   1  interface-local scope
   2  link-local scope
   3  reserved
   4  admin-local scope
   5  site-local scope
   6  (unassigned)
   7  (unassigned)
   8  organization-local scope
   9  (unassigned)
   A  (unassigned)
   B  (unassigned)
   C  (unassigned)
   D  (unassigned)
   E  global scope
   F  reserved

interface-local scope spans only a single interface on a node, and is only useful for loopback transmission of multicast ๐Ÿชž.

link-local and site-local multicast scopes span the same topological regions as the corresponding unicast scopes ๐Ÿ—บ๏ธ.

admin-local scope is the smallest scope that MUST be administratively configured, i.e., not automatically derived from physical connectivity or other, non-multicast-related configuration โš™๏ธ.

organization-local scope is intended to span multiple sites belonging to a single organization ๐Ÿข.

Scopes labeled "(unassigned)" are available for administrators to define additional multicast regions ๐Ÿ’œ.

The group ID identifies the multicast group, either permanent or transient, within the given scope ๐Ÿงš.

The "meaning" of a permanently-assigned multicast address is independent of the scope value. For example, if the "NTP servers group" is assigned a permanent multicast address with a group ID of 101 (hex), then ๐Ÿ•ฐ๏ธ:

  • FF01:0:0:0:0:0:0:101 means all NTP servers on the same interface (i.e., the same node) as the sender.
  • FF02:0:0:0:0:0:0:101 means all NTP servers on the same link as the sender.
  • FF05:0:0:0:0:0:0:101 means all NTP servers in the same site as the sender.
  • FF0E:0:0:0:0:0:0:101 means all NTP servers in the internet.

Non-permanently-assigned multicast addresses are only meaningful within a given scope ๐Ÿซ . For example, a group identified by the non-permanent, site-local multicast address FF15:0:0:0:0:0:0:101 at one site has no relationship to a group using the same address at a different site, nor to a non-permanent group using the same group ID with a different scope, nor to a permanent group with the same group ID ๐Ÿ™ˆ.

Multicast addresses MUST NOT be used as source addresses in IPv6 packets or appear in any Routing header ๐Ÿšซ.

Routers MUST NOT forward any multicast packets beyond of the scope indicated by the scop field in the destination multicast address ๐Ÿ›‘.

Nodes MUST NOT originate a packet to a multicast address whose scop field contains the reserved value 0. If such a packet is received, it MUST be silently dropped ๐Ÿ‘ป. Nodes SHOULD NOT originate a packet to a multicast address whose scop field contains the reserved value F. If such a packet is sent or received, it MUST be treated the same as packets destined to a global (scop E) multicast address ๐Ÿ’….

2.7.1 Pre-Defined Multicast Addresses

The following well-known multicast addresses are predefined. The group IDs defined in this section are defined for explicit scope values ๐Ÿ“‹.

Using these group IDs for any other scope values, with the T flag equal to 0, is not allowed ๐Ÿšซ.

Reserved Multicast Addresses ๐Ÿ”’:

FF00:0:0:0:0:0:0:0
FF01:0:0:0:0:0:0:0
FF02:0:0:0:0:0:0:0
FF03:0:0:0:0:0:0:0
FF04:0:0:0:0:0:0:0
FF05:0:0:0:0:0:0:0
FF06:0:0:0:0:0:0:0
FF07:0:0:0:0:0:0:0
FF08:0:0:0:0:0:0:0
FF09:0:0:0:0:0:0:0
FF0A:0:0:0:0:0:0:0
FF0B:0:0:0:0:0:0:0
FF0C:0:0:0:0:0:0:0
FF0D:0:0:0:0:0:0:0
FF0E:0:0:0:0:0:0:0
FF0F:0:0:0:0:0:0:0

The above multicast addresses are reserved and SHALL never be assigned to any multicast group ๐Ÿ”.

All Nodes Addresses ๐ŸŒ:

FF01:0:0:0:0:0:0:1
FF02:0:0:0:0:0:0:1

The above multicast addresses identify the group of all IPv6 nodes, within scope 1 (interface-local) or 2 (link-local) ๐Ÿซถ.

All Routers Addresses ๐Ÿ›ฐ๏ธ:

FF01:0:0:0:0:0:0:2
FF02:0:0:0:0:0:0:2
FF05:0:0:0:0:0:0:2

The above multicast addresses identify the group of all IPv6 routers, within scope 1 (interface-local), 2 (link-local), or 5 (site-local) ๐Ÿงญ.

Solicited-Node Address ๐ŸŒ™:

FF02:0:0:0:0:1:FFXX:XXXX

Solicited-node multicast addresses are computed as a function of a node's unicast and anycast addresses ๐Ÿงฎ. A solicited-node multicast address is formed by taking the low-order 24 bits of an address (unicast or anycast) and appending those bits to the prefix FF02:0:0:0:0:1:FF00::/104, resulting in a multicast address in the range ๐ŸŽฏ:

FF02:0:0:0:0:1:FF00:0000

to

FF02:0:0:0:0:1:FFFF:FFFF

For example, the solicited-node multicast address corresponding to the IPv6 address 4037::01:800:200E:8C6C is FF02::1:FF0E:8C6C. IPv6 addresses that differ only in the high-order bits, e.g., due to multiple high-order prefixes associated with different aggregations, will map to the same solicited-node address, thereby reducing the number of multicast addresses a node must join ๐Ÿฅน.

A node is REQUIRED to compute and join (on the appropriate interface) the associated Solicited-Node multicast addresses for every unicast and anycast address it is assigned ๐Ÿ’–.

2.8. A Node's Required Addresses ๐ŸŽ€

Okay bestie, so a host is required to recognize these addresses as identifying itself. Think of them as its ID card ๐Ÿชช:

  • Its required Link-Local Address for each interface.
  • Any additional Unicast and Anycast Addresses that have been configured for the node's interfaces (manually or automatically).
  • The loopback address.
  • The All-Nodes Multicast Addresses defined in section 2.7.1.
  • The Solicited-Node Multicast Address for each of its unicast and anycast addresses.
  • Multicast Addresses of all other groups to which the node belongs.

A router is required to recognize everything a host has to recognize, PLUS these as identifying itself. It's giving main character energy ๐Ÿ‘‘:

  • The Subnet-Router Anycast Addresses for all interfaces for which it is configured to act as a router.
  • All other Anycast Addresses with which the router has been configured.
  • The All-Routers Multicast Addresses defined in section 2.7.1.

3. Security Considerations ๐Ÿ”

Okay, so the IPv6 addressing docs don't have any direct impact on Internet infrastructure security ๐Ÿ’…. Authentication of IPv6 packets is defined in [AUTH], so go check that one if you want the security tea โ˜•.


4. IANA Considerations ๐Ÿฆ‹

The table and notes at http://www.isi.edu/in-notes/iana/assignments/ipv6-address-space.txt should be replaced with the following, periodt โœจ.

INTERNET PROTOCOL VERSION 6 ADDRESS SPACE ๐ŸŒˆ

The initial assignment of IPv6 address space looks like this:

Allocation                            Prefix         Fraction of
                                      (binary)       Address Space
-----------------------------------   --------       -------------
Unassigned (see Note 1 below)         0000 0000      1/256
Unassigned                            0000 0001      1/256
Reserved for NSAP Allocation          0000 001       1/128 [RFC1888]
Unassigned                            0000 01        1/64
Unassigned                            0000 1         1/32
Unassigned                            0001           1/16
Global Unicast                        001            1/8   [RFC2374]
Unassigned                            010            1/8
Unassigned                            011            1/8
Unassigned                            100            1/8
Unassigned                            101            1/8
Unassigned                            110            1/8
Unassigned                            1110           1/16
Unassigned                            1111 0         1/32
Unassigned                            1111 10        1/64
Unassigned                            1111 110       1/128
Unassigned                            1111 1110 0    1/512
Link-Local Unicast Addresses          1111 1110 10   1/1024
Site-Local Unicast Addresses          1111 1110 11   1/1024
Multicast Addresses                   1111 1111      1/256

Notes:

  1. Okay so the "unspecified address", the "loopback address", and the IPv6 Addresses with Embedded IPv4 Addresses all live in the 0000 0000 binary prefix space ๐Ÿงš.
  2. For now, IANA should limit its allocation of IPv6 unicast address space to the range of addresses that start with binary value 001. The rest of the global unicast address space (approximately 85% of the IPv6 address space) is reserved for future definition and use, and is not to be assigned by IANA at this time ๐Ÿ”’.

5. References ๐Ÿ“š

5.1. Normative References

  • [IPV6] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) Specification", RFC 2460, December 1998.
  • [RFC2026] Bradner, S., "The Internet Standards Process -- Revision 3", BCP 9 , RFC 2026, October 1996.

5.2. Informative References

  • [ANYCST] Partridge, C., Mendez, T. and W. Milliken, "Host Anycasting Service", RFC 1546, November 1993.
  • [AUTH] Kent, S. and R. Atkinson, "IP Authentication Header", RFC 2402, November 1998.
  • [AGGR] Hinden, R., O'Dell, M. and S. Deering, "An Aggregatable Global Unicast Address Format", RFC 2374, July 1998.
  • [CIDR] Fuller, V., Li, T., Yu, J. and K. Varadhan, "Classless Inter-Domain Routing (CIDR): An Address Assignment and Aggregation Strategy", RFC 1519, September 1993.
  • [ETHER] Crawford, M., "Transmission of IPv6 Packets over Ethernet Networks", RFC 2464, December 1998.
  • [EUI64] IEEE, "Guidelines for 64-bit Global Identifier (EUI-64) Registration Authority", http://standards.ieee.org/regauth/oui/tutorials/EUI64.html, March 1997.
  • [FDDI] Crawford, M., "Transmission of IPv6 Packets over FDDI Networks", RFC 2467, December 1998.
  • [MASGN] Hinden, R. and S. Deering, "IPv6 Multicast Address Assignments", RFC 2375, July 1998.
  • [NSAP] Bound, J., Carpenter, B., Harrington, D., Houldsworth, J. and A. Lloyd, "OSI NSAPs and IPv6", RFC 1888, August 1996.
  • [PRIV] Narten, T. and R. Draves, "Privacy Extensions for Stateless Address Autoconfiguration in IPv6", RFC 3041, January 2001.
  • [TOKEN] Crawford, M., Narten, T. and S. Thomas, "Transmission of IPv6 Packets over Token Ring Networks", RFC 2470, December 1998.
  • [TRAN] Gilligan, R. and E. Nordmark, "Transition Mechanisms for IPv6 Hosts and Routers", RFC 2893, August 2000.

APPENDIX A: Creating Modified EUI-64 format Interface Identifiers ๐Ÿงฉ

Depending on the characteristics of a specific link or node, there are a number of approaches for creating Modified EUI-64 format interface identifiers. This appendix walks through some of them, bestie ๐Ÿซถ.

The only change needed to turn an IEEE EUI-64 identifier into an interface identifier is to invert the "u" (universal/local) bit. For example, a globally unique IEEE EUI-64 identifier of the form:

|0              1|1              3|3              4|4              6|
|0              5|6              1|2              7|8              3|
+----------------+----------------+----------------+----------------+
|cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+----------------+

where "c" are the bits of the assigned company_id, "0" is the value of the universal/local bit to indicate global scope, "g" is individual/group bit, and "m" are the bits of the manufacturer-selected extension identifier. The IPv6 interface identifier would be of the form:

|0              1|1              3|3              4|4              6|
|0              5|6              1|2              7|8              3|
+----------------+----------------+----------------+----------------+
|cccccc1gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+----------------+

The only change is inverting the value of the universal/local bit. Simple, iconic ๐Ÿ’–.

[EUI64] defines a method to create an IEEE EUI-64 identifier from an IEEE 48bit MAC identifier. This is to insert two octets, with hexadecimal values of 0xFF and 0xFE, in the middle of the 48 bit MAC (between the company_id and vendor supplied id). For example, the 48 bit IEEE MAC with global scope:

|0              1|1              3|3              4|
|0              5|6              1|2              7|
+----------------+----------------+----------------+
|cccccc0gcccccccc|ccccccccmmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+

where "c" are the bits of the assigned company_id, "0" is the value of the universal/local bit to indicate global scope, "g" is individual/group bit, and "m" are the bits of the manufacturer-selected extension identifier. The interface identifier would be of the form:

|0              1|1              3|3              4|4              6|
|0              5|6              1|2              7|8              3|
+----------------+----------------+----------------+----------------+
|cccccc1gcccccccc|cccccccc11111111|11111110mmmmmmmm|mmmmmmmmmmmmmmmm|
+----------------+----------------+----------------+----------------+

When IEEE 802 48bit MAC addresses are available (on an interface or a node), an implementation may use them to create interface identifiers due to their availability and uniqueness properties ๐Ÿ“.

There are a number of link types that have link-layer interface identifiers other than IEEE EIU-64 or IEEE 802 48-bit MACs. Examples include LocalTalk and Arcnet. The method to create a Modified EUI-64 format identifier is to take the link identifier (e.g., the LocalTalk 8 bit node identifier) and zero fill it to the left. For example, a LocalTalk 8 bit node identifier of hexadecimal value 0x4F results in the following interface identifier:

|0              1|1              3|3              4|4              6|
|0              5|6              1|2              7|8              3|
+----------------+----------------+----------------+----------------+
|0000000000000000|0000000000000000|0000000000000000|0000000001001111|
+----------------+----------------+----------------+----------------+

Note that this results in the universal/local bit set to "0" to indicate local scope ๐Ÿ™ˆ.

There are a number of links that don't have any type of built-in identifier. The most common of these are serial links and configured tunnels. Interface identifiers must be chosen that are unique within a subnet-prefix.

When no built-in identifier is available on a link, the preferred approach is to use a global interface identifier from another interface or one which is assigned to the node itself. When using this approach, no other interface connecting the same node to the same subnet-prefix may use the same identifier.

If there is no global interface identifier available for use on the link, the implementation needs to create a local-scope interface identifier. The only requirement is that it be unique within a subnet prefix. There are many possible approaches to select a subnet-prefix-unique interface identifier. These include:
  • Manual Configuration
  • Node Serial Number
  • Other node-specific token

The subnet-prefix-unique interface identifier should be generated in a manner that it does not change after a reboot of a node or if interfaces are added or deleted from the node ๐ŸŒธ.

The selection of the appropriate algorithm is link and implementation dependent. The details on forming interface identifiers are defined in the appropriate "IPv6 over <link>" specification. It is strongly recommended that a collision detection algorithm be implemented as part of any automatic algorithm. No drama, just good hygiene ๐Ÿ’….

APPENDIX B: Changes from RFC-2373 ๐Ÿ“โœจ

okay so this is the changelog bestie, and it's lowkey my favourite part ๐Ÿฆ‹ These are all the changes made from RFC-2373 "IP Version 6 Addressing Architecture" ๐Ÿ’…

  • Clarified text in section 2.2 so that :: can stand for one or more groups of 16 bits of zeros ๐ŸŒธ
  • Changed the uniqueness requirement for Interface Identifiers from unique on a link to unique within a subnet prefix ๐Ÿ’œ They also added a recommendation that the same interface identifier not be given to different machines on a link ๐Ÿซถ
  • Changed the site-local format so the subnet ID field is 54 bits long, and removed the 38-bit zeros field ๐ŸŽ€
  • Added a description of multicast scop values and rules for handling the reserved scop value 0 ๐Ÿงš
  • Revised sections 2.4 and 2.5.6 to simplify and clarify how different address types are identified ๐Ÿ‘‘ This was done so implementations don't build in any knowledge about global unicast format prefixes ๐Ÿ’€ The changes include:
    • Removed the Format Prefix (FP) terminology โœ‚๏ธ
    • Revised the list of address types so it only includes exceptions to global unicast, plus a single entry that says everything else is Global Unicast ๐ŸŒˆ
    • Removed the list of defined prefix exceptions from section 2.5.6, since it's now the main part of section 2.4 ๐Ÿ’…
  • Clarified the text about EUI-64 identifiers so it's clear the difference between IPv6's "Modified EUI-64 format" identifiers and IEEE EUI-64 identifiers ๐Ÿ“
  • Combined the sections on Global Unicast Addresses and NSAP Addresses into one section on Global Unicast Addresses ๐Ÿซง The Global Unicast format was generalised, and [AGGR] and [NSAP] are cited as examples โœจ
  • Reordered sections 2.5.4 and 2.5.5 ๐Ÿ”„
  • Removed section 2.7.2 Assignment of New IPv6 Multicast Addresses because it's being redefined somewhere else ๐Ÿ™ˆ
  • Added an IANA considerations section that updates the IANA IPv6 address allocations and documents the NSAP and AGGR allocations ๐Ÿ“‹
  • Added clarification that the "IPv4-compatible IPv6 address" must use global IPv4 unicast addresses ๐ŸŒ
  • Divided the references into normative and non-normative sections ๐Ÿ“š
  • Added a reference to [PRIV] in section 2.5.1 ๐Ÿ”
  • Added clarification that routers must not forward multicast packets outside of the scope indicated in the multicast address ๐Ÿšง
  • Added clarification that routers must not forward packets with a source address of the unspecified address ๐Ÿšซ
  • Added clarification that routers must drop packets received on an interface with a destination address of loopback ๐Ÿ™…โ€โ™€๏ธ
  • Clarified the definition of IPv4-mapped addresses ๐Ÿฆ„
  • Removed the ABNF Description of Text Representations Appendix ๐Ÿ—‘๏ธ
  • Removed the address block reserved for IPX addresses ๐Ÿ‘‹
  • Multicast scope changes:
    • Changed the name of scope value 1 from node-local to interface-local ๐Ÿ”
    • Defined scope value 4 as admin-local ๐ŸŽฏ
  • Corrected the reference to RFC1933 and updated the references ๐Ÿ“–
  • Lots of small changes to clarify things and make the text more consistent ๐Ÿงน

Authors' Addresses ๐Ÿ’Œ

Robert M. Hinden
Nokia
313 Fairchild Drive
Mountain View, CA 94043
USA

Phone: +1 650 625-2004
EMail: hinden@iprg.nokia.com


Stephen E. Deering
Cisco Systems, Inc.
170 West Tasman Drive
San Jose, CA 95134-1706
USA

Phone: +1 408 527-8213
EMail: deering@cisco.com

Copyright (C) The Internet Society (2003). All Rights Reserved. ๐Ÿ’–

okay so you're allowed to copy this document and share it with others, and to make derivative works that comment on it, explain it, or help with implementing it. You can publish and distribute those, in whole or in part, with no restrictions of any kind, as long as the above copyright notice and this paragraph are included on every copy and derivative work ๐ŸŽ€ BUT this document itself can't be modified in any way, like removing the copyright notice or the references to the Internet Society or other Internet organisations. The exceptions are when you're developing Internet standards (then the copyright procedures in the Internet Standards process have to be followed), or when you're translating it into languages other than English ๐ŸŒ

The limited permissions above are perpetual and won't 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. ๐Ÿ’€

Acknowledgement ๐Ÿซถ

Funding for the RFC Editor function is currently provided by the Internet Society. ๐ŸŒˆ Thank you, Internet Society, you're iconic ๐Ÿ‘‘

๐Ÿ“ฆ where this page comes from