IPv6 Address Types

Hello Sumant

First of all, hosts and nodes refer to the same entity. They are devices on a network that have one or more addresses assigned to them. Now as for an anycast address, Cisco states the following from this Cisco Documentation.

An anycast address is an address that is assigned to a set of interfaces that typically belong to different nodes. A packet sent to an anycast address is delivered to the closest interface (as defined by the routing protocols in use) identified by the anycast address. Anycast addresses are syntactically indistinguishable from unicast addresses, because anycast addresses are allocated from the unicast address space. Assigning a unicast address to more than one interface makes a unicast address an anycast address. Nodes to which the anycast address is assigned must be explicitly configured to recognize that the address is an anycast address.

So an anycast address does not belong to a specific range of addresses. An address becomes an anycast address when you assign the same address to two or more nodes/hosts. Once that’s done, the routing protocol in use will choose which anycast address is closest and send all addressed packets there.

I hope this has been helpful!

Laz

Have a question re: anycast as well. If an anycast address is the same address assigned to multiple devices, how do routers account for routing this traffic? Meaning, isn’t a basic rule of network routing to not have duplicate subnets within the network? For two hosts in different subnets sharing the same anycast address, it would seem to me the routers wouldn’t know where to route the traffic or have a routing loop occur.

I’m assuming I’m missing something here with the concept of anycast still.

Thanks.

Hello Eugene

You are absolutely correct when you say that the basic rule of routing is that each address is unique. This has been true of IPv4, however, IPv6 tends to bend the rules a little bit.

First of all, let’s look again and see what an IPv6 anycast address is. Cisco describes it very well in this documentation. It states:

An anycast address is an address that is assigned to a set of interfaces that typically belong to different nodes. A packet sent to an anycast address is delivered to the closest interface (as defined by the routing protocols in use) identified by the anycast address. Anycast addresses are syntactically indistinguishable from unicast addresses, because anycast addresses are allocated from the unicast address space. Assigning a unicast address to more than one interface makes a unicast address an anycast address. Nodes to which the anycast address is assigned must be explicitly configured to recognize that the address is an anycast address.

So by simply assigning the same IPv6 address to two or more nodes, the address becomes an anycast address. Note the following:

  • if you configure a device with an anycast address, you must explicitly configure that device to KNOW that that address is an anycast address, in other words, it must KNOW that the same address is given to another node
  • routers that are close to the destinations sharing this address learn about this and keep a record of which of the destinations is closest
  • when this is done correctly, routers that are routing a packet destined for an IPv6 anycast address will know about it and will send it to the “closest” node that has that address
  • “closest” is defined using a particular measure of distance, such as hops, cost etc

I hope this has been helpful!

Laz

Hello Laz,
I have three questions :

  1. about vocabulary : Is there a historical reason for using in Cisco IPV6 documentation the same term “prefix” in two different ways: “hex prefix” to speak about “2 or 3”, “FC or FD”, “FE80”; and “cidr prefix” to speak about “/48” or “/64” ?

2 about the use of the term “global ID” : I understand, reading your site, that the global ID of, for example, fd99:abcd:f83d:4079::/64 is 99abcdf83d
can I write it “99:abcd:f83d:” or is the usage to omit all the semicolon ?
and what about the /3 for global unicast ID like “2001:3452:4952:2837::/64” do you think that global ID is “001:3452:4952:” ? Or, without semicolon “00134524952” ?
then, if “2001:3452:4952::/48” is not the global id of a subnetable ipv6 address, how do you prononce it ? “prefixed global id” ?

  1. Since the ULAs are “free”, like private ipv4, do you confirm that a local administrator can decide that the subnet zone of all its ULA ip space will be /72 or /80, instead of /48 ?

Hello Hugues

When we use the word prefix, it can refer to several related things depending on the context. When we talk about a prefix used for link local addresses for example, we are usually referring to the FE80 bits that are used to start off all such addresses. But remember that this value has no meaning unless accompanied by the /XX format prefix that indicates how many bits are actually included in that prefix. So as you can see, the word prefix is used to refer to both the beginning bits as well as the number of those bits in the slash format. Now I haven’t seen the terms “hex prefix” or “CIDR prefix” in documentation, but I know what you mean by them. I believe that the context of the term is the most reliable thing to use to understand what the word prefix is referring to.

I believe that the best place to go to for this is the related RFC. Here you will see that the global ID is typically 40 bits long, so it will always be composed of 10 hex digits. There is no absolute standard as to how to represent a global ID alone, but it is usually displayed as “99:abcd:f83d" with the semicolons, but this requires additional explanation in the text. The clearest way to represent it is “2001:3452:4952::/48” which includes all of the relevant information including the prefix bits and the /48 indicating where the subnet and interface IDs begin. Even thought this strictly does not include only the Global ID, it can be inferred.

The conventions used for ULAs are specific, as described in the lesson. However, because the address space is indeed private and does not affect, and is not affected by other networks, you are free to change the /XX lengths to whatever you like. Keep in mind that by doing so you don’t gain anything because the number of addresses available are more than enough for any of today’s private networks. It is a good idea to keep the standard lengths so that in the future, if you have to interconnect with another private network, you will be immediately compatible without the need to readdress the whole network.

I hope this has been helpful!

Laz

well received, thanks for these answers

1 Like

Hi Lazaros,
As we have global unicast address that we use it for the internet. So what is the Global ID which is 40 bit in Unique Local?
As Rene has said; The Global ID (40 bits) is something you can make up. Normally an ISP would choose prefix.
If possible please explain it to me.

Hello Muhammad

IPv4 is designed to have a specific structure. This means that an IPv4 address has a network portion and a host portion. The size of each portion of the address depends on the subnet mask.

IPv6 works similarly in the fact that we have a prefix which separates the address into two sections as well: The Prefix and the Interface ID. Their names are different than IPv4 but they’re essentially the same thing.

Now for the purposes of organization, the Prefix is often separated into two sections: The Global Routing Prefix (sometimes called the Site Prefix) and the Subnet ID. This structure is useful because a single global prefix can be given to an ISP, and the ISP can use the subnet IDs to allocate whole blocks of IPv6 addresses. For example, I can have 2001:D88:ACAD as the Global Routing Prefix assigned to an ISP. This ISP can then use the next 16 bits to identify each of their customers. So the IPv6 allocation can be done like so:

  • 2001:D88:ACAD:0001::/64 goes to customer A
  • 2001:D88:ACAD:0002::/64 goes to customer A
  • 2001:D88:ACAD:0003::/64 goes to customer A
  • 2001:D88:ACAD:0004::/64 goes to customer A
  • 2001:D88:ACAD:0005::/64 goes to customer A
  • etc…

The bold numbers are the 16 bit subnet ID

Now the way these various portions of the IPv6 address are defined depends on who you ask. Because all unicast addresses start with 001 in the first three bits, some people separate the Prefix into three sections: 3 bits for this bit sequence, 45 bits for the Global prefix and 16 bits for the subnet ID. But then again, you can always redefine the number of bits the global prefix and the subnet ID can have. So you can have 3 for the first bit sequence, 53 for the global prefix and 8 for the subnet ID. This allocation can occur however it is needed. You can even redefine the Interface ID range as well and make that /48 allowing for more subnet IDs and global prefixes.

I think the best representation of how this works is the following:
image

I hope this has been helpful!

Laz

Thanks Lazaros,
Nice explanation but I asked about the 40 bit Global ID in Unique Local, for example we have FDAB:1234:5678:0000::/64, The Global ID starts after FD (AB:1234:5678:0000) since the Global Unicast is something start with 2001 and Unique Local starts with FD I am asking about Unique Local Global ID which is 40 bit.

Hello Muhammad

The Unique Local Global ID is the same thing as the Global Routing Prefix, but is just applied to the unique local address range. Remember that the unique local address range is the counterpart of the RFC1918 private addresses of IPv4. This means that specifically for the Unique Local Global ID, ISPs nor IANAs are involved in its definition.

(There may be special cases where the ISP will give you such addresses to communicate with other networks contained within their infrastructure, or to communicate between remote branches of an organization, and in those cases, the ISP would issue you the Unique Local Global ID)

Because such addresses are independent of any routing on the Internet, that set of 40 bits can be randomly generated and there would be no conflict.

Having said that, we can even redefine the 40 bits and make them 32, or 48, just like I described in my last post. The number of bits taken up by the global ID, subnet ID and Interface ID can always be redefined whether you are using global unicast or unique local addresses.

I hope this has been helpful!

Laz

It is widely repeated that one of the achievements of ipv6 design is the absence of broadcasts, in place of which we have a more efficient multicast now. For instance for determining the mac address of the target host. But really, how is the ipv6 all-nodes multicast different from ipv4 broadcast? Thats aside from the look of the address itself? Seems still it will be sent to and accepted by all the IPV6 hosts, and flooded on all the switch ports that have hosts, since its mandatory for all hosts (ipv6 that is) to join this group. So where is it better then?

Hello Vadim

Strictly speaking, if you have an all IPv6 segment on a network and you use the IPv6 all-nodes multicast address, then yes, you will get the same result as if you were using a broadcast in IPv4. However, there are still vast differences between how these two things are implemented which result in a greater improvement than may be expected.

First of all, the all-nodes IPv6 address is just one of a multitude of predefined multicast addresses. The equivalent of ARP (Network Discovery Protocol) and DHCP (SLAAC and DHCPv6) for IPv6 (which were a substantial source of broadcasts) no longer use broadcasts to function. They use specialized multicast addresses that vastly reduce broadcast traffic. Many other functionalities use multicast addresses which limit unnecessary traffic to all hosts limiting the number of packets that need to be examined and discarded by all hosts.

There are only a very limited number of operations that require the all-nodes IPv6 address (doing a quick search I was unable to find a process that uses it) and the great advantage is that processes and functions that needed broadcasts in IPv4 don’t use them in IPv6. The capability of reaching all devices on a segment still exists, but it is not used very often, which results in an increase in efficiency.

I hope this has been helpful!

Laz

Thank you for explanation. So it seems one might say that the function of broadcast in IPV6 is taken over by all-nodes multicast (the only difference been the actual numerical value and the fact that multicast needs additional, if implicit and mandatory, step of joining the group) but a number of well known services (like DHCP, for instance) no longer use broadcast (or all-node multicast) but rather specific mcast groups. Which reduces unnecessary traffic on the network at the expense of more programming (since now every service needs to know particular group it has to use vs just using common broadcast). The all-node mcast still would be used for IPV6 neighbor discoveries a la ARP since finding mac addresses by node IP is still necessary. That makes sense. So why don’t ‘they’ just say so? :slight_smile: Thanks again.

Hello Vadim

That’s exactly it… Actually, if you look up the IPv6 neighbor discovery procedure in more detail, you’ll see that the multicast addresses are set up in such a way so that even with the neighbor solicitation messages, it is still only the remote host that will receive the solicitation. The way this is done is described in more detail in the following lesson:

The only case where the all-nodes IPv6 multicast destination address is used is the Router Advertisement message. All others are limited to some subset of the nodes on a network segment. More about that in the following lesson:

I hope this has been helpful!

Laz

Great, thank you very much!

1 Like

I am not clear. So, is FC00::/7 considered unique local even though the seventh bit of the ipv6 address needs to be a “1”?
Thanks
MGO

Hello Martha

The FC00::/7 address space is officially designated as Unique Local, however, it has been separated into to parts: FC00::/8 and FD00::/8.

The first block is currently undefined, meaning there is no official usage policy according to the IETF. It has been proposed to be managed by an allocation authority, but this has not gained any acceptance. For now, the range remains undefined. This block is defined by the L-bit being set to 0.

The second block, where the L-bit is set to 1, is defined for /48 prefixes. So officially, if you want to remain within the confines of the IETF defined IPv6 address ranges, you will have to have the L-bit set to 1, which means you must use the FD00::/8 range.

I hope this has been helpful!

Laz

Thank you Laz, this does help.

1 Like

HI Rene, typo think:

The global unicast IPv6 addresses are similar to IPv4 public addresses. These addresses can be used on the Internet. The big difference with IPv4 is that we have so much address space that we can use global unicast addresses on any device in the network.

I believe this should be IPv6.

1 Like

Hello Matthew

Yes you are correct. I’ll let @ReneMolenaar Rene know.

Thanks for pointing that out!

Laz

1 Like