IPv6 Basics
This document only covers IPv6 nodes, not IPv6 routers, although the
latter play an important role beyond just routing packets between
networks; this was to keep it's length reasonably short.
Starting points for more in depth information are
a
presentation of Viagenie to RIPE and the collection of documents regarding IPv6 at JOIN.
They were also used in creating this text, as were the general parts of the NetBSD IPv6
Networking FAQ.
A New Format For Addresses
The major problem with IPv4 that IPv6 is supposed to fix is the
scarcity of public IP address space. IPv4 IP addresses are 32 bit in
length; IPv6 IP addresses were chosen to have 128 bit. Of these, 64 bit
are for 'local use', and another 16 are for 'site use' in structured
networks. This means that in a typical IPv6 site assignement you can have as
many networks as you can have hosts in a IPv4 Class B.
Of the remaining 48 bit, 11 are in some way or another reserved, 13 bit
are planned for top level aggregation (i.e. assignments of BGP speaking
providers), and 24 bit are planned for a provider's internal infrastructure.
There are 32 times as many 'sites' possible in IPv6 as there are addresses
in IPv4. As one person put it: "there's not just enough address space for
anybody. There's enough address space for anybody, their fleas and their
fleas' fleas". Therefore, the learned reflex of IPv4 admins to preserve
addresses is unneccessary in IPv6, and should take a late second to
aggregation considerations.
Another problem with current IPv4 space is not by principle, but by
history, and that is CIDR and provider-aggregatable (PA) address space
having come rather late; thus, 192/8 e.g. produces >10000 routes in the
default-free zone, 62/8 will produce only 512 routes max, even though the
assignments in the latter space are usually a lot smaller than the typical
192-space /24. Thus, a lower limit of /35 will be strictly enforced in the
inter-provider BGP. In order to make this strict provider dependence of
addresses easier to digest for end users, the planning people have gone to
great lengths to ease renumbering of address space, and it continues to be
a design goal that's forever present in IPv6 consciousness. One of the
means to gain that goal is to have nearly all hosts have their IP
addresses and so on configured from a central location. The most common
way is having a host configure their addresses from a combination of
announced prefix and MAC address.
128 give a lot of ones and zeroes, and even a conversion to base 10
at byte boundaries give a very long number. Therefore, IPv6 addresses get
written as a procession of hex numbers with a ':' between every 4 numbers.
6dns.de.kpnqwest.net thus has 2001:0680:0000:0000:0000:0000:0000:0002
as full IPv6 address. To get that address even shorter, there's the
convention of dropping leading zeroes in a number-quartett and to
substitute any number of all-zero quartetts by a :: once, so one gets:
2001:680::2 (which is short enough to remember 'just like that' :-).
Special IPv6 address ranges
- fe80::/10 linklocal: every host has at least one IPv6 address
on any interface that does IPv6, and that is the linklocal address.
Linklocal addresses are defined to not be routable on any account.
As there are as many linklocal 'networks' for a machine as there are
interfaces with different media behind them, one may need to have to
discern between, say, fe80::1 on interface hme0 and fe80::1 on qfe2;
the name of the area of validity of a linklocal address is 'scope', and is
often written as %if, so eg I might have fe80::1%qfe2. That doesn't work
quite that way on Solaris, therefore if one plans to have IPv6 running on
more than one physical interface it's a very good idea to make sure that
the interfaces have differing IPv6 addresses (easiest by making them have
different MAC addresses). With linklocal, the prefix is
implicitly known, and the host part gets built using DAD (see below).
- 2000::/3 aggregatable global unicast address, i.e. a public
IPv6 address. 2001:200::/23 is being allocated by APNIC, 2001:400::/23 is
ARIN, and 2001:600::/23 is RIPE region.
- ::1 loopback just like 127.0.0.1
- :: unspecified address (all zeroes means: 'insert address here')
- ::FFFF:193.141.40.1 IPv4 remapped address The IPv6
representation of an IPv4 node, in this case of 193.141.40.1, aka xlink1
- ff00::/8 multicast address
with the following predefined multicast groups:
- ff02::1 all nodes on this link
- ff02::2 all routers on this link
- ff02::1:ffxx:xxxx solicited-node multicast address the 'x'
are the lowest 24 bit of a hosts IPv6 address. The host needs to join its
solicited-node multicast group for every single IPv6 unicast or anycast
address it has.
the following conventions apply: ff0x:: is a permanent
multicast address, ff1x:: a temporary one. ff01:: is valid on a
certain node (eh, right), ff02:: has link scope, ff05:: site scope, ff08::
is valid within an organisation (if not using 5, site), and ff0e:: is a
global multicast address.
Special 'well-known' multicast addresses are
e.g. ff0x::101 for NTP, ff0x::108 for NIS+ and ff0x::202 for SUN RPC.
- <prefix>::ffff:ffff:ffff:ffe0 subnet anycast address an
anycast address is an address (that can be) assigned to more than one
interface or node. A packet sent to an anycast address is routed to the
'nearest' carrier of said address. An anycast address consists of the
prefix, and in the host part a seven bit anycast ID at the end, and ones
all else. Anycast addresses need to be configured in the routers for the
prefix in question, so they know what to do with it, too.
- broadcast is not defined; multicast to all nodes on
local link or anycast are used instead.
Addresses IPv6 nodes need:
- linklocal address for each interface
- loopback address
- all-nodes multicast address
- solicited-node multicast address for each assigned unicast and anycast
address
Addresses IPv6 nodes may additionally have:
- assigned unicast address(es)
- other multicast addresses the node belongs to
How a IPv6 Autoconfigured Node Boots Its Networking
Duplicate Address Detection
- build tentative linklocal address from fe80::/64 and the padded MAC address
(Ethernet address 02:80:10:00:17:31 becomes host part 0280:10ff:fe00:1731.)
- join all-nodes multicast address (ff02::1)
- join solicited-node multicast address belonging to tentative linklocal
address
- send neighbor-solicitation on solicited-node multicast address
- if no neighbor advertisement with identical host part is received,
tentative address becomes permanent; else abort (MAC address is not unique).
As soon as the node has a linklocal address, it can continue with
router solicitation, which asks the routers on the LAN (if present) to
supply prefixes and a default router (and a lifetime for both values).
IPv6 Config on Solaris8
- Enable IPv6 on an interface: touch /etc/hostname6.<if>. Do
nothing else and the host will act as an autoconfigured node.
- Enter into /etc/hostname6.<if>
addif
<IPv6-addressf> up
and the host will act as a statically configured node.
- edit /etc/inet/ipnodes for the /etc/hosts-equivalent
- enter IPv6 nameservers in /etc/resolv.conf as usual