IPv6 addresses are 128 bits long as opposed to the 32 bits used by the current IPv4 addresses. The main benefit of this is that it provides LOTS more addresses.
Some common prefixes:
- ::aabb:ccdd -- Used for IPv4 addresses (a.b.c.d) (obsolete)
- ::FFFF:aabb:ccdd -- Used for IPv4 addresses (a.b.c.d) as per RFC:4038
- 2000::/3 -- addresses with GlobalScope, as allocated here (older version here)
- 3FFE:831F::/32 -- This is used by Teredo
- FC00::/7 -- ULA
- FE80::/64 -- LinkLocal
- FEC0::/48 -- SiteLocal (deprecated)
Subsets of 2000::/3 space:
- 2001:DB8::/32 -- reserved for example addresses in documentation as per RFC:3849
- 2002::/16 -- This is used by 6to4
The preferred form for writing IPv6 addresses is x:x:x:x:x:x:x:x where each x represents the hexadecimal values of 16 bits of the address. Examples:
Due to the way that some IPv6 addresses are allocated it will be common for some addresses to have long strings of zeros in them, making them tedious to write using the above representation. The standard defines a special syntax that can be used to compress the groups of zeros. Use of the "::" indicates indicates multiple groups of 16-bits of 0. The "::" notation can only be used once in an address and can also be used to compress leading or trailing zeros. Examples:
1080:0:0:0:8:800:200C:417A => 1080::8:800:200C:417A
FF01:0:0:0:0:0:0:101 => FF01::101
0:0:0:0:0:0:0:1 => ::1
0:0:0:0:0:0:0:0 => ::
A third format is defined for use when dealing with a mixed IPv6 / IPv4 environment, in this case the last 32 bits of the address (ie. the last two groups of 4 hexadecimal characters) are written in DottedQuad notation giving an address that looks like 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:220.127.116.11 or ::18.104.22.168
0:0:0:0:0:FFFF:22.214.171.124 or ::FFFF:126.96.36.199
An IPv6 address prefix is represented by the notation ipv6-address/prefix-length where
- is an IPv6 address in any of the notations listed above
- is a decimal value specifying how many of the leftmost contiguous bits of the address comprise the prefix.
For example, the following are legal representations of the 60-bit prefix 12AB00000000CD3 (hexadecimal):
The following are NOT legal representations of the above prefix:
|| may drop leading zeros, but not trailing zeros, within any 16-bit chunk of the address
|| address to left of "/" expands to 12AB:0000:0000:0000:0000:000:0000:CD30
|| address to left of "/" expands to 12AB:0000:0000:0000:0000:000:0000:0CD3
Types of Address
There are several different types of IPv6 address defined by the standads. The type is specified by the leading bits of an address, this field is variable-length and is called the FormatPrefix (FP). Refer to RFC2373 for the currently defined FP's some of the more common ones are.
|| Aggregatable Global Unicast Addresses (1/8 of the address space)
| 1111 1110 10
|| Link-Local Unicast Addresses (1/2024 of the address space)
| 1111 1110 11
|| Site-Local Unicast Addresses (1/2024 of the address space)
| 1111 1111
|| Multicast Addresses (1/256 of the address space)
Aggregatable Global Unicast Addresses - RFC2374
This is probably going to be the most widely used of the IPv6 address formats and is what is currently being allocated by the RIRs and is in use on the 6Bone. The format of a Aggregatable Global Unicast Addresses (AGUA) address looks like this.
| 3| 13 | 8 | 24 | 16 | 64 bits |
|FP| TLA |RES| NLA | SLA | Interface ID |
| | ID | | ID | ID | |
- Format Prefix (001)
- TLA ID
- Top-Level Aggregation Identifier
- Reserved for future use
- NLA ID
- Next-Level Aggregation Identifier
- SLA ID
- Site-Level Aggregation Identifier
- INTERFACE ID
- Interface Identifier
An important concept to grasp is that these fields in the address are used only for allocation, they are not directly used for routing. Routing of IPv6 addresses is based on prefix length, although sometimes the prefix length will be based on one of the fields above this does not always need to be the case. To explain how each field is used imagine an IPv6 internet which consists of a tight mesh of directly connected backbone nodes in the centre, moving out from this you reach transit nodes which have a connection to a subset of the backbone nodes (usually between 1 - 4) each of these transit nodes is then connected to a number of edge nodes. This structure is almost identical to the structure of the 6Bone and possibly today's IPv4 internet.
- Top-Level Aggregation ID
- This field defines the top level of the routing heirarchy to which this address belongs, usually each backbone node in the example above will have it's own TLA ID. Routers in the backbone must have an entry for every active TLA ID, plus specific entries for the TLA which they are a part of. The TLA ID field is 13 bits long allowing 8,192 (2^13) TLA'IDs.
- This field must be all zeroes in current IPv6 addresses but is intended to allow either the TLA ID or NLA ID fields to be expanded in the future if demand requires it.
- Next-Level Aggregation ID
- This field is used by organisations that have been allocated a TLA ID to create an addressing hierarchy and define sites. The NLA ID field is 24 bits which allows each organisation with a TLA ID to provide service to roughly as many organisations as the current IPv4 Internet can support total networks. For example the a TLA might use the first 8 bits of the 24bit NLA ID field to identify different sites / locations within the organisation, the remaining 16 bits could then be used to identify the individual organisations or units that are connected via the site / location defined in the first 8 bits.
- Site-Level Aggregation ID
- This field is used by an individual organisation to create it's own addressing hierarchy and subnets, this is done in much the same way as with IPv4 except that there are a lot more subnets available.
Both the NLA ID and SLA ID fields can be nested multiple times.
- Interface ID
- The interface ID is used to identify interfaces on a link, it is required that these be unique in the local scope but they may be unique in a broader scope also. In many cases this ID will be the same as the LinkLayer? address and there are defined ways of using a 48bit MAC Address or a 64bit EUI identifier to populate this field.
Link-Local Unicast Addresses
Link-Local addresses are designed to be used for addressing on a single link for purposes such as auto-address configuration, neighbor discovery, or when no routers are present. Their format is as follows. Routers must not forward packets with link-local addresses to other links.
| 10 |
| bits | 54 bits | 64 bits |
|1111111010| 0 | interface ID |
In hex, this would be fe80:0:0:0:0:0:0:(ID), or fe80::(ID) if collapsing zeroes.
eth0 Link encap:Ethernet HWaddr 00:E0:4C:39:43:BB
inet addr:10.21.1.2 Bcast:10.21.1.255 Mask:255.255.255.0
inet6 addr: fe80::2e0:4cff:fe39:43bb/64 Scope:Link
Anyone know where the extra bits (02, ff:fe) in the interface ID came from (they aren't in the MAC address)?
The 2 in 02 is from the universally unique bit being flipped in IPv6 addresses so you can easily type addresses like fe80::1 (the 2 bit is clear meaning that this is a non universally unique suffix)
ff:fe is inserted and means "Ethernet MAC" I think.
Site-Local Unicast Addresses
Site-Local addresses are designed to be used for addressing inside of a site without the need for a global prefix. Routers must not forward any packets with site-local source or destination addresses outside of the site. These addresses are analogous to the RFC:1918 IPv4 addresses in use by many organisations today.
| 10 |
| bits | 38 bits | 16 bits | 64 bits |
|1111111011| 0 | subnet ID | interface ID |
In hex, this is fec0:0:0:0:0:(ID) or fec0::(ID).
Site local addresses are currently deprecated and are likely to be replaced by some other similar mechanism which isn't so prone to address usage collisions.
An IPv6 multicast address is an identifier for a group of nodes. A node may belong to any number of multicast groups. Multicast addresses have the following format:
| 8 | 4 | 4 | 112 bits |
|11111111|flgs|scop| group ID |
The flgs field contains information about whether the group id is a well defined group (Assigned by IANA) or a temporary group.
The scop field contains information about the scope of the address, it can be used to define groups of machines such as
- All Routers on the same link as the sender
- All Routers at the same site as the sender
- All Routers on the internet!
Anycast addresses have the same format at AGUA addresses and are used to send a packet to only one of a group of machines. This group might be spread around the internet. IT can be used to route a packet to the closest of a server. (eg: the nearest nameserver).
Just like IPv4 has special addresses for thinks like loopback, network and broadcast so does IPv6.
the loopback address, used to talk to the local computer. (:__ :1/128, opposed to IPv4's 127/8)
the unspecified addresses, used for things such as address discovery when the computer does not yet have an address. Should not ever be used as a destination address.
There is no broadcast addresses, as these have been replaced by multicast ones.
- RFC:4291 - IPv6 Addressing Architecture
- RFC:2471 - IPv6 Testing Address Allocation
- RFC:2373 - IP Version 6 Addressing Architecture
- RFC:2374 - An IPv6 Aggregatable Global Unicast Address Format