TCP/IP的秘密(3)IPV6地址详解

1,305 阅读6分钟

这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战

我们上期回顾了IPV4,今天我们正式来看看IPV6,IPV6最主要解决的问题,就是IP地址扩容需求,其他的都是附加属性。

1. 地址模式

  • IPV6的地址是分配给网络接口的,不是分配给主机的;

  • 一个接口可以同时拥有多个不同类型的IPV6地址

  • V6地址分为3类,单播unicast,多播multicast和任播anycast;

  • anycast: 不同节点的一组网络接口(interface)的IP地址,这些接口共用这个IP地址,当给anycast地址发数据包时,会被送到“最近的”的那个接口;

  • multicast: 给多播地址发数据包时,会被送到这个地址标识的所有网络接口(interface);

  • V6把广播地址取消了(broadcast);

2. 地址格式

  • IPV6采用128bits编号:分为8段,每段16bits,xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx,每段使用4个16位进制数字表示,如 fe80:0:0:0:b002:d7a:e02b:92c1

  • 简短模式,使用双冒号可以省略0,但一个地址中只能使用1次双冒号,上面的地址可以缩写为 fe80::b002:d7a:e02b:92c1

  • 地址中的十六进制字符大小写不敏感

  • 地址最后还会有%百分号,表示网卡的端口号,比如fe80::b002:d7a:e02b:92c1%13表示,表示该地址仅限于13号的网络接口,而在其他网络接口是无效的

  • 地址分为两个部分:网络号+接口号,网络号是分配的,接口 ID 可以从接口的MAC地址自动配置,也可以采用 EUI-64 格式手动配置,其中接口号必须保证在一条link上是唯一的;一台主机可以在不同的link上使用相同的接口号;

image.png

3. 单播地址

  • 按照IP地址可到达的范围,单播地址又分为4类:

    • 可聚合的公网地址(aggregatable global address)
    • 本地链路地址(link-local address)
    • IPV4转换地址
    • 特殊地址
  • 可聚合的公网地址

    • 与IPV4的公网地址意义类似,可以被公网全局路由和访问,可聚合的意思是可以像超网CIDR那样对网络前缀(prefix)进行合并,这样可以有效降低路由表的容量;

    • 由公网路由前缀(由IANA负责分配给各个运营商或站点),子网ID(类似IPV4中的subnet相同,一般由运营商分配)和接口ID(标识主机)

    • 协议规定,除了起始3位二进制数字是000的公网地址外,其他所有公网地址(起始3位从001到111)的接口ID必须都是64位,如下图:

image.png

- 截至发稿,IANA分配的公网地址只限于2000::/3即001开头
| 3 |     45 bits         |  16 bits  |   64 bits       |
+---+---------------------+-----------+-----------------+
|001|global routing prefix| subnet ID |  interface ID   |
+---+---------------------+-----------+-----------------+

- 另外000打头的地址,目前被用来做IPV4的映射地址,后面会讲到
  • 本地链接地址 Link-local

    • 它是用与与在同一个link上的其他接口进行通信使用的地址,可以用于邻居发现(neighbor discover),带有该地址的IP包不能被路由,效果和IPV4中的169.254.0.0/16 prefix类似;

    • 所有IPV6的接口必须有且只有一个本地链接的单播地址

    • 所有的本地链接地址都是自动配置的,地址格式:前缀统一是1111111010 或FE80::/10;

image.png

  • V4与V6地址转换
    • IPV6协议中定义了两种V4转V6的方式:兼容式(IPv4 compatible IPv6 address)和映射式(IPv4-mapped IPv6 address);

    • 映射式是目前唯一保留的转换方式,应用场景是在IPV6系统中表示一个IPV4的节点;对最左边80bits固定是0,接下去的16bit固定为ffff,对最右边 32 个位指定十进制值,用来嵌入 IPv4 地址,比如:0:0:0:0:0:ffff:192.1.56.10或::ffff:192.1.56.10/96

image.png

- 兼容式目前已经被废,应用场景是使用IPV4网络发送IPV6的数据包时,给这些数据包分配可以适配IPV4路由的地址;
  • 特殊地址
    • ::1或0:0:0:0:0:0:0:1,环回地址,功能和IPV4中的127.x.x.x一样;

    • 0:0:0:0:0:0:0:0或::/128,未指定地址,不能分配给主机,如果看到主机地址是它的话,表明该主机没有地址;

本地唯一单播地址Unique Local Unicast Addresses

单独把它拿出来,是因为按照协议,IETF协议并没有归属到unicast地址类型中,而是单独的一类。

image.png

  • 前缀是由协议规定的FC00::/7, 即网络前缀的前7位固定是:1111110;

  • L 指示的是global id的生成方法,目前默认是1;

  • GLOBAL ID,使用伪随机算法生成的global ID,使其防碰撞性加强,并且也更加明确这些地址不能被公网路由,且这些前缀不能像超网那样被合并;通过这样的配置,可以有2^41个不同的网络前缀,以目前的世界人口来说,每人可以分配236个;

  • subnet id,是在本地站点内部分配的子网ID;

  • 接口ID,和unicast的接口ID生成方式一致;

  • 本地唯一单播地址,同样是全球唯一的,这里的全球唯一说的就是它的前缀,一共48bits是唯一的;

  • 该地址不能用于公网通信,而是只用于本地通信,比如本地站点或本地组织内进行路由;

  • 如果本地站点合并的话,可以不需要重新编号,因为它本身就是唯一的;

  • 可以被网络运营商用来做私网地址;即便发生了网络泄露,也不会和公网的地址发生冲突,但IETF强烈不建议这么做;

  • 对于应用程序来说,这些地址和公网地址没有实质区别;

以上是IPV6地址格式,以及单播地址的详细介绍,下一节会详细介绍IPV6的anycast和multicast地址,感谢阅读,如有不准确和错误之处请留言指正,我会立即修正,感谢!




总结不易,请勿私自转载,否则别怪老大爷不客气

欢迎喜欢技术的小伙伴和我交流,微信1296386616

参考资料:

《IP Version 6 Addressing Architecture》 IETF datatracker.ietf.org/doc/html/rf…

《IPv6 Global Unicast Address Format》 IETF datatracker.ietf.org/doc/html/rf…

《Internet Protocol Version 6 Address Space》 IANA www.iana.org/assignments…

《第 3 章 IPv6 介绍(概述)》 Oracle Corporation docs.oracle.com/cd/E19253-0…