Good instinct separating these out. Map it like this:
Link-local (fe80::/10) — every IPv6 interface auto-generates one the moment IPv6 comes up; you never configure it. It's only valid on that single link (routers never forward it off-segment). Its job is the plumbing IPv4 hid from you: Neighbor Discovery (NS/NA — the ICMPv6 replacement for ARP), Router Advertisements, and it's the next-hop for your routing table. Look at show ipv6 route — next hops are fe80:: addresses, not globals.
Global unicast (2000::/3, docs use 2001:db8::/32) — internet-routable, the equivalent of your public/routable IPv4. Hosts use link-local to talk to on-link neighbors and the router, and the global to reach anything off-link. So both coexist on one interface by design.
SLAAC vs DHCPv6 — genuinely different, not a rename:
- SLAAC = StateLess Address AutoConfig. The router sends a Router Advertisement containing a
/64 prefix; the host builds its own address (prefix + a self-generated 64-bit interface ID, EUI-64 or a random/privacy ID). Router keeps zero per-host state.
- DHCPv6 = stateful, a server hands out and tracks specific addresses (like IPv4 DHCP).
The RA carries two flags that decide which:
M (Managed) = get your address from DHCPv6.
O (Other) = address via SLAAC, but fetch extras (DNS) from DHCPv6 — this is stateless DHCPv6.
Classic reason you still want DHCPv6: plain SLAAC historically didn't hand out DNS well, and you need it when you want address tracking/logging. In the lab, enable IPv6 on two router interfaces, debug ipv6 nd and watch the RA go out — you'll see the prefix the host uses to SLAAC itself.