IP地址(二)
1. IPv6地址和接口标识符
IPv6地址比IPv4地址长4倍,其使用特殊前缀表示一个地址范围,即其可用的网络规模,例如:
- 节点本地(只用于同一计算机中通信)
- 链路本地(只用于同一网络链路或IPv6前缀中的节点)
- 全球性(Internet范围)。
在IPv6中,大部分节点通常在同一网络接口上使用多个地址。一个IPv6节点需要一组地址,包括组播地址。
1.1 链路本地IPv6地址表示
链路本地IPv6地址和一些全球性IPv6地址使用接口表示符(IID)作为一个单播IPv6地址的分配基础。IID的长度通常
64位,并直接由一个网络接口相关的链路层MAC地址形成,该地址使用修改的EUI-64格式或者由其他进程随机提供的地址形成。
在IEEE标准中,EUI表示扩展唯一标识符。EUI-64标识符开始于一个24位的组织唯一标识符(OUI),接着是一个组织分配的
40位扩展标识符,它由前面24位识别。OUI是由IEEE注册权威机构来维护和分配。EUI可能是”统一管理“或”本地管理“。在Internet
环境下,这种地址通常是统一管理的。
很多IEEE标准兼容的网络接口(例如以太网)在使用短格式的地址(EUI-48)。EUI-64和EUI-48格式之间的显著的区别就是它们的
长度,如下图所示。
OUI的长度是24位,并占据EUI-48、EUI-64前3个字节。这些地址的第一个字节的低两位分别是u位和g位。当u位被设置时,表示地址时本地管理。
当g位被设置时,表示地址是一组或组播类型的地址。目前,我们只关心g位被未设置的情况。
一个EUI-64地址可以由EUI-48地址形成,将EUI-48的地址24位OUI值复制到EUI-64地址,并将EUI-64地址的第4和第5字节替换为FFFE,然后复制由组织分配的
剩余位。例如:EUI-48 00-11-22-33-44-55 ---> EUI-64 00-11-22-FF-FE-33-44-55。这个映射的第一步是当可以用基本EUI-48地址时由IPv6构造接口标识符。修改的
EUI-64用于形成IPv6地址的IID,但是需要对u位取反。
当一个IPv6接口标识符需要一种接口,并且该接口没有由制造商提供EUI-48地址时,我们以后在讨论。下图是我Linux机器IPv6地址。
eno1 Link encap:Ethernet HWaddr 14:02:ec:3e:8a:c0 inet addr:192.168.39.178 Bcast:192.168.39.255 Mask:255.255.255.0 inet6 addr: fe80::1602:ecff:fe3e:8ac0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4946346128 errors:0 dropped:187 overruns:0 frame:0 TX packets:4440691032 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1158295563755 (1.1 TB) TX bytes:1413694812493 (1.4 TB) Interrupt:16
以太网的硬件地址是14:02:ec:3e:8a:c0,它是如何映射为一个IPv6地址的呢?
首先,它被转换为EUI-64 格式14:02:3c:ff:fe:3c:8a:c0。接着,u位被取反,形成IID值16:02:3c:ff:fe:3c:8a:c0。为了完成链路本地IPv6地址,我们使用保留的链路本地
前缀fe80::/10。最终形成完整地址fe80::1602:ecff:fe3e:8ac0/64。/64是标准长度,用于从一个IPv6地址中识别子网/主机部分。
1.2 windows中的IPv6地址表示
就我个人观察,windows系统的IPv6地址和linux系统有些不同,以后有再做研究吧。