文章目录
- 基本知识
- IPv6首部40字节的格式
- IPv6地址表示方法
- IPv6地址有三类
- 单播地址
- 组播地址
- 任播地址
基本知识
- IPv4用4字节(32位),IPv6用16字节(128位)
- IPv6的基本报头具有固定的长度(40字节)
- IPv6三种地址类型:单播(
Unicast
),组播(Multicast
),泛播(Anycast
) - IPv6格式为:
x:x:x:x:x:x:x:x
举例:2035:0001:2BC5:0000:0000:087C:0000:000A
IPv6首部40字节的格式
首部固定长度40字节,包含8个字段。
- version : 版本号,值固定为6,4个比特位。
- Traffic Class : 通信量类,与IPv4 首部ToS字段等效。由于从来没被广泛使用,因此最终这个8位长的字段被分为两个部分。前6位被称为区分服务字段(DS字段),后2位是显示拥塞通知(ECN)字段或指示位。这些字段被用于数据报转发时的特殊处理。
- Flow Label : 流标识。标识这个数据包属于源节点和目标节点之间的一个特定数据包序列,该字段长度为20位。举个栗子,同一个连接IPv6数据流流标识应相同。
- Payload Length : 负载长度。不包含IPv6首部长度。这个长度就是扩展首部和数据长度和。
- Next Header : 指出下一个扩展首部的类型,如果没有扩展首部的话,这个字段指的是传输层的协议类型,例如TCP/UDP。关于扩展首部可参考之前的几篇博客。
- Hop Limit : 跳数限制,这个字段和IPv4首部中TTL类似,传输过程中,每经过一个节点,该字段递减1,为0时丢弃。
- Source Address : 128位 16字节长度 源地址。
- Destination Address : 128位 16字节长 目的地址。
IPv6地址表示方法
IPv6地址由八组、每组四位16进制数字组成,每组之间由":"来分隔,例如:
09C0:cdba:0000:0000:0000:0000:3257:9652,每个:前后都是4位16进制的数字,共分隔成8组
简写规则:
- 在4个十六进制位组成的字段中,可以省略前导0;如:09C0=9C0, 0000=0
- 可使用一对冒号(::)来表示任意数量的连续的0。如:
ff02:0000:0000:0000:0000:0000:0000:0005=ff02::5
注:一个地址中只能出现一对冒号,否则无法唯一确定地址 - 注意:
a. 前导的零必须压缩(例如,2001:0db8::0022变成2001:db8::22)
b. ::只能用于影响最大的地方(压缩最多的零),但并不是针对16位的块,如果多个块中包含等长度的零,则顺序靠前的将被替换为::
c .a到f的十六进制数字应该用小写表示。
内嵌IPv4地址的IPv6地址格式分为如下两种:
- IPv4兼容的IPv6地址: 0:0:0:0:0:0:192.168.1.2或者::192.168.1.2
- IPv4映射的IPv6地址: 0:0:0:0:0:ffff:192.168.1.2或者::ffff:192.168.1.2
48位MAC地址转换64位IPv6网络ID的方式如下:
- 将48位的MAC地址从中间分开,插入一个固定数值FFFE,如:
0050:3EE4:4C00–>0050:3EFF:FEE4:4C00 - 将首字节第7个比特位取反,如果原来是0,就变为1,如果原来是1,就变为0,如:
0050:3EFF:FEE4:4C00–>0250:3EFF:FEE4:4C00
IPv6地址有三类
IPv6三种地址类型:单播(Unicast
),组播(Multicast
),泛播(Anycast
)
单播和组播地址与ipv4的地址非常类似;但ipv6中不再支持ipv4中的广播地址,而增加了一个泛播地址。
- 单播:一个单接口的标识符。送往一个单播地址的包将被传送至该地址标识的接口上。
- 泛播:一组接口(一般属于不同节点)的标识符。送往一个泛播地址的包将被传送至该地址标识的接口之一(根据选路协议对于距离的计算方法选择“最近”的一个)
- 组播:一组接口(一般属于不同节点)的标识符。送往一个组播地址的包将被传送至该地址标识的所有接口上。
单播地址
- 未指定地址: ::/128,即地址全为0。
- 环回地址 : ::1/128,相当与IPv4中的127.0.0.1。
- 全球单播地址,类似于IPv4中的公网地址。
- 内嵌IPv4地址的IPv6地址 如 :::ffff:192.168.10.1。当需要将IPv4单播地址与IPv6全球单播地址建立联系的时候一般使用这种地址,分为两种。一种是IPv4兼容IPv6地址,另一种是IPv4映射IPv6地址。
IPv4兼容IPv6地址构成形式是96位0加上32位IPv4地址,如 ::192.168.1.1,这种地址最初用于IPv4和IPv6之间的过渡计划,但现在已经不再需要。
IPv4映射IPv6地址构成形式是80位0加上16位1,再加上IPv4地址,如::ffff:192.168.1.1。 - 本地链路地址,前缀固定fe80::/64,如 fe80::e0:f726:4e68。凡是源地址或目的地址包含由本地链路地址的报文,路由器不应当转发它。这样的报文只能在LAN中互通。
- 本地站点地址,前缀fec0::/10,紧接着54位子网ID,作用相当于IPv4中的私网地址,如fec0::e0:f726:4e68。只能在本站内使用,不能在公网上使用。
组播地址
最重要的字段要属于最后的组ID(Group-ID)字段了。该字段长度为112位,用以标识组播组,我们知道112位最多可以生成2112个组ID。目前,RFC2373并没有将所有的112位都定义成组标识,而是建议仅使用该112位的最低32位组ID,将剩余的80位都置0。
任播地址
这是IPv6特有的地址类型,它用来标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。适合于“One-to-One-of-Many”(一对组中的一个)的通讯场合。接收方只需要是一组接口中的一个即可,如移动用户上网就需要因地理位置的不同,而接入离用户最近的一个接收站,这样才可以使移动用户在地理位置上不受太多的限制。
任播地址从单播地址空间中进行分配,使用单播地址的任何格式。因而,从语法上,任播地址与单播地址没有区别。被分配具有任播地址的节点必须得到明确的配置,从而知道它是一个任播地址。目前,任播地址仅被用做目标地址,且仅分配给路由器。