本地IPv6地址计算方法及反查MAC地址
文章来源于:https://blog.csdn.net/weixin_40228200/article/details/118615948文章来源于:https://www.togogo.net/article/1537.html文章来源于:http://blog.lsd365.com/63552/w/2720960.html文章来源于:https://zhuanlan.zhihu.com/p/5
本地IPv6地址计算方法及反查MAC地址
文章来源于:https://blog.csdn.net/weixin_40228200/article/details/118615948
文章来源于:https://www.togogo.net/article/1537.html
文章来源于:http://blog.lsd365.com/63552/w/2720960.html
文章来源于:https://zhuanlan.zhihu.com/p/556136525
文章来源于:https://www.jianshu.com/p/7b907ea8e1a5
本文经过整理汇总而来
IPV6地址分类
如图所示,地址分为三大类:组播、单播、任意播(也称泛播);
单播可分为:全球单播地址(可理解为公网地址—IPv6)、本地链路地址、站点本地地址、回环地址、未指定地址、内嵌IPv4地址。
IPv6的地址长度是128位(bit)。 将这128位的地址按每16位划分为一个段,将每个段转换成十六进制数字,并用冒号隔开。以及字母大小写并不影响地址变化。
IPv6公网地址(全球单播地址)
前3bit 固定001;
地址范围:2xxx:xxxxx/3 - 3FFF: :FFFF;
2001::/16 IPV6因特网地址;
2002::/16 6to4过渡地址;
3ffe::/16 用于6bone测试目的的前缀;
链路本地地址(Link-Local Addresses) 用于同一个链路上的相邻节点之间通信,相当于IPv4里面的169.254.0.0/16地址。IPv6的路由器不会转发链路本地地址的数据包。前10个bit是1111 1110 10,由于最后是64bit的interface ID,所以它的前缀总是FE80::/64 例如:FE80::1
站点本地地址(Site-Local Addresses) 对于无法访问internet的本地网络,可以使用站点本地地址,这个相当于IPv4里面的private address(10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16)。它的前10个bit是1111 1110 11,它最后是16bit的Subnet ID和64bit的interface ID,所以它的前缀是FEC0::/48。
唯一的本地IPv6单播地址(ULA,Unique Local IPv6 Unicast Address) 在RFC4193中标准化了一种用来在本地通信中取代单播站点本地地址的地址。ULA拥有固定前缀FD00::/8,后面跟一个被称为全局ID的40bit随机标识符。
一: 由MAC地址生成IPv6地址
IPv6的世界里,如果DHCP6和SLACC这两位大佬都为没有为可怜的网卡分配IP地址,也没有人为网卡设置静态的IP地址,系统就会为网卡计算一个IPv6的网址来。这样的网址只能在本地使用,不得路由,所以,被称为“link-local address”,译作“本地联网地址”。
其方法是在特殊的网段fe80::/64内,利用网卡的MAC地址拼凑一个64位的地址,放在fe80::/64后,组成一个128位的本地联网地址。
在IPv6协议中,可以手工配置LLA地址,也可以根据EUI-64,利用本地网卡的MAC地址计算IPv6的LLA地址。所谓EUI,即Extend Unique ID,因为网卡MAC地址的唯一性,因此这样计算处的LLA地址也是唯一的。
在IPv6中,无状态自动配置机制使用EUI-64格式来自动配置IPv6地址。
无状态自动配置是指在网络中没有DHCP服务器的情况下,允许节点自动配置IPv6地址的机制。
EUI-64的构造规则:根据接口的MAC地址再加上固定的前缀来生成一个IPv6的地址。
工作原理:自动将48bit的以太网MAC地址扩展成64bit,再组合一个64位的IPv6地址前缀,组成一个IPv6地址。(Link-Local地址也是通过此方法生成)
注:对于以太网链路的接口即用自己的MAC地址,对于串口链路和loopback接口会借用设备的以太网口(接口号最小的比如有F0/0,F0/1,那么默认都借用F0/0接的MAC地址)的mac地址进行组合。
总得来说,要计算本地链路地址,前64位是固定的,固定为FE80::。对于后64位,首先MAC地址为48位,在MAC地址中间插入FFFE,这样就计算出一个64位的地址,然后再把该64位地址的第七位取反,这样就得到了后面的64位地址,把前面的64位地址和后面的64位地址整合到一起,就成为一个IPv6地址了。
IPv6LLA地址计算如下所示:
1、MAC地址为 00-21-2F-B5-6E-10
2、转换EUI-64为 00-21-2F-FF-FE-B5-6E-10
3、第一个字节为0000 0000,第7位反转为0000 0010转换16进制为0x02,插入FF-FE
4、得到结果为02-21-2F-FF-FE-B5-6E-10,转换为IPv6表示格式为221:2FFF:FEB5:6E10
5、从网关得到IPv6地址前缀,64bit的地址前缀加上通过EUI-64生成的地址后缀(即221:2FFF:FEB5:6E10)拼接起来即可得到IPv6地址。
6、若生成的是链路本地地址(Link-Local Address)则加上FE80的前缀即可:FE80::221:2FFF:FEB5:6E10
实际上上面的过程简化后 将MAC地址中的第二位反转后得到的对应值,再在MAC中间插入FF与FE就得到了一个EUI-64地址,文章的下面列出了对应值
注意:
在局域网中,特别是微软系列PC机的IPv6地址是采取其特有的算法计算的,为的是防止从IPv6地址推算MAC地址,所以window系统中此地址不准确,linux中大部分是上述介绍的算法生成的。
本地的主机之间可以使用这个地址通信。
转换过程如下:
- 拆分和插入:将MAC地址拆分成两半并在中间插入FFFE:
原MAC地址:00-1A-2B-3C-4D-5E
插入FFFE后: 00-1A-2B-FF-FE-3C-4D-5E
- 比特位反转:将新生成地址的第7个比特位(从左端第二位开始计数)进行反转。在这个示例中,00的二进制是0000 0000,反转第7位后变为0000 0010,然后转换回十六进制为02:
反转前: 00-1A-2B-FF-FE-3C-4D-5E
反转后: 02-1A-2B-FF-FE-3C-4D-5E
转换后的EUI-64格式地址: FE80::021A:2BFF:FE3C:4D5E
如下图可以直接使用转换后的对应值
如MAC中第二位为 1 转换后的v6地址就为3
如MAC中第二位为 8 转换后的v6地址就为A
直接插入FE80与FF:FE 就得到了EUI-64地址
更多推荐
所有评论(0)