首页 > 代码库 > IPv6 简介以及位址介绍

IPv6 简介以及位址介绍

IPv6 简介

IPv6IP版本6)是互联网通讯协议(Internet Protocol,简称IP)的新版本,它被设计来取代IPv4。并且针对当初设计IPv4时没有考虑到的问题做了以下改进:

  • 扩展地址空间  IPv6IP地址长度从32 bits扩展到128 bits,其主要目的是支持更多层的阶层式的路由架构,更大的地址空间(IPv6的地址不再有耗尽之虑),并且提供更简单的自动组态配置。在multicast address中新增 ”scope” 字段来提升multicast routing的可扩展性。定义一个新的地址类型称为 ”anycast address”,用来发送封包到一个群组中路由最近的一个node

  • 简化IP表头格式  IPv6删除了IPv4表头中不必要的字段,并且将选项字段移到扩展表头,降低router转送IP封包的处理时间。

  • 支持更佳的扩充性  更改IP表头的某些选项,使得router转送封包更有效率,并且提供未来更大的灵活度来引入新的选项或新的扩展表头。

  • 提供更好的QoS  IP表头添加新的标签字段称为 "Flow Label”,让封包发送者能要求特殊的流量处理,譬如real-time服务。

  • 认证和保密功能  支持认证、数据完整性及保密性。

须知,IPv6除了将完全取代IPv4以外,由于IP层版本的替换过程相当冗长艰巨,其设计者更希望IPv6IP层的终极版本,未来不用再面临IP层版本更新的难题。至于IPv6是否能经得起考验,成为IP层的终极版本,只能有赖时间来证明。

专有术语

Address  地址,用来标示一个或一组interfaces

Asymmetric reachability(非对称可达性)1link可能具有non-reflexive(非反向性)或non-transitive(非传递性)的封包传送方式。Non-reflexive是指:A可传送封包到B,但是B无法传送封包到ANon-transitive是指:A可传送封包到BB可传送封包到C 但是A无法传送封包到C

Host(本机)  routernodes皆称为host

Immediate Router 封包送达目的地所经过的routers

Interface  node连接到link的实体附件。例如网络卡。

Link  通信介质,node之间可以透过link layer进行通信。即IP的下层。例如EthernetPPP linksX.25Frame relayATM networks

Link MTU  一个link上可以传送IP packet的最大单元。即maximal link framesize减掉link frame header size

Neighbors  邻居,连接到相同linknodes

Node(节点)  实现IPv6的设备皆称为node,包含hostsrouters

Path MTU  来源和目的node路径中的最小的link MTU。即来源和目的路径中可以发送的MTU。由于IPv6router不做fragmentation动作,如果packetsize超过path MTU,将无法送达目的地。

Reachability(可达性)  是指封包单向送达邻居的路径是否正常。特别是指封包是否送达邻居的IP层且被接收的IP层做适当处理。所谓reachable的邻近router,是指nodeIP层发送的IP 封包被送达邻近的routerIP层,且router也确实转送封包。所谓reachable的邻近hosts,是指nodeIP层封包被送达邻近hostIP层。

Router(路由器)  负责转发IP封包的node

Upper layer(上层)  IPv6的上层通讯协议。例如:传输协议如TCPUDP,控制协议如ICMP,路由协议如OSPF


IPv6地址

IPv6具有128 bits长度的IP地址。如此庞大的地址空间,IPv6地址不再有耗尽之虑。IPv6 的大地址空间设计主要用于建立有效率、具有更多层的阶层式路由基础结构,使主干router路由表要小得多(IPv4 Internet主干路由器的路由表中通常超过70,000个以上的路由)。

IPv6地址分成Prefix(前缀)及Interface ID两部分,各占64 bitsPrefix等同subnet IDInterface ID等同一个segment(网段)的host ID

技术分享

IPv6地址语法

IPv6地址的128 bits16 bits区分成8个区块,并用冒号隔开。每个16 bits区块转换为16进位表示法。例如:

ABCD:0F01:2345:6789:ABCD:0F01:2345:0089

2001:0DB8:0000:0000:0008:0800:020C:417A

为了简化Ipv6地址的表示,前置零可以移除,但是每个16 bits区块至少要有一个数字。

ABCD: F01:2345:6789:ABCD:F01:2345:89

2001:DB8:0:0:8:800:20C:417A

由于IPv6的大地址空间,有些类型的地址中经常会包含一连串的区块为零。为了进一步简化Ipv6地址的表示,连续为零的区块可压缩为「::」。例如:

2001:DB8:0:0:8:800:20C:417A可以压缩为2001:DB8::8:800:20C:417A

FF01:0:0:0:0:0:0:101可以压缩为FF01::101

0:0:0:0:0:0:0:1可以压缩为 ::1

0:0:0:0:0:0:0:0可以压缩为 ::

零压缩只能使用一次。否则无法确定每个「::」表示0的区块个数。

IPv6 Address Prefix

IPv6 address prefix(地址前缀)表示语法为ipv6-address/prefix-length。可以用来定义路由或子网。Prefix-length64时,代表一个segment(网段)。Prefix-length小于64时,可以代表路由表的路由、子网或地址的范围。

例如:

2001:2DB:0:BC::/64 代表segment(网段)的prefix ID

2001: 2DB:0: BC::/60 代表路由表的路由、subnet(子网络)

2001: 2DB:0:CD30::/60也可以代表地址范围:

2001:2DB:0: CD30::/642001: 2DB:0: CD3F::/64

不在prefix-length内的bits必须为零。例如2001: 2DB:0:CD3F::/60就不是个合法的表示法。

地址类型表示法

IPv6地址的类型由不同长度及内容的前缀来表示。这些不同长度内容的前缀称为Format PrefixFP)(格式前缀)。RFC 2373定义初始分配的FP如下:

技术分享

IPv6的地址类型

IPv6地址的大小为128 bits,有三种类型:

  • Unicast(单点传送)

  • Multicast(多播)

  • Anycast(任一传送)


此外,IPv6废除了使用broadcast address来传送封包。所有与broadcast相关的传送功能都被multicast address取代,主要原因是broadcast封包会传送到整个segment中所有的nodes,这种广播式的传送对同一segment上所有的nodes均造成影响。Multicast取代broadcast后,只有multicast的接收者才会加入对应的multicast group,不需要处理此multicast封包的nodes不再受到影响。

Unicast Address(单点传送)

一个识别地址指定给单一interface。目地地址为unicast addressIPv6封包将被传送到具有这个识别地址的interface。因为封包接收者只允许一个interface,所以称为unicast address

依据地址能传送的有效范围,Unicastaddress细分为以下类型:

  • Global unicast addresses (全局唯一地址)

  • Link-local addresses(区域链结地址)

  • Unique local addresses(唯一的区域地址)

  • Special addresses(特殊地址)

Global Unicast Address

IPv4public地址相同,Globalunicast addresses的传送范围适用整个IPv6 Internet,并且是独一无二的地址。格式如下:

技术分享

Global Unicast Address的最前面3 bits固定为001。最左边的48 bits或称为site prefix(站台前缀),通常是由ISP分配给一个组织或机构自行建构子网络。Subnet ID字段长度16 bits,并非为了能切分成216个网段,而是提供每个站台网络管理者建立多层的阶层式路由架构。Subnet ID字段也可能被ISP细分成更多的子网络,可提供给个别的小型网络使用(例如:家庭或个人用户)。

Link-Local Address

link-local address的传送范围只适用在一个segment,其地址唯一性仅限于同一个link上。所有的Interface都必须配置link-localaddress

技术分享

Link-local addressprefix为固定值:FE80::/64,是自行配置生成的。由于它的传送范围只适用在一个segmentIPv6 router不会转送目的地址为link-localaddress的封包到其它的segments

Unique Local Address

简称ULA1segment2segments以上透过routers连接一起的子网络,传送范围适用在一个site的子网络。类似IPv4的专用网,ULA适用于专用网。

技术分享

  • ULA的前缀固定为FC00::/7

  • L(Local) bit  值为1代表Global IDlocal自行设定。值为0代表Global ID是依照RFC 4193的算法生成的。

  • Global ID  一个Global ID指定给1site使用。

  • Subnet ID site网络管理者自行配置。16 bit的长度并非为了把site切割成216个子网,而是提供site多层的阶层式路由架构。

RFC 4193定义了一个算法,声称依此算法生成的Global ID几乎不会重复,故美其名为Unique Local Address(唯一的区域地址)。其算法的主要目的是当2个的ULA子网络需要合并在同一个子网时,可避免因为Global ID相同而必须更改整个ULA子网络的prefix

虽然RFC 4193预设ULA的传送范围为globalULA的传送范围或可大于site-local,但应该局限于合并的ULA子网络。况且ULA无法在整个internet提供全局阶层式的路由架构,把ULA提升为全局传送只会徒增routers转送封包的负担。

Special Address

以下是IPv6special addresses

  • Unspecified address  未指定的地址

未指定的地址(0:0:0:0:0:0:0:0 ::) 仅用于表示此地址是空的,未指定。Unspecifiedaddress只能做为来源地址,不能指定给 interface,也不能做为目的地址。一般而言,当发送封包者还没有IPv6地址或者有些封包并不需要指定发送者的IPv6地址时,就会将来源地址设为 (::)

  • Loopback address  回路地址

回路地址(0:0:0:0:0:0:0:1 ::1) 用于识别回路接口,使node得以向自己传送封包。发往回路地址的封包绝不能在link上传送,也不能由 router转送。Loopback address不能当来源地址。

IPV6 MULTICAST ADDRESSES(多播)

  • 一个识别地址指定给零到多个interfaces。目标地址为multicast addressIPv6封包将被传送到具有这个识别地址的所有interfaces。因为封包接收者是零到多个的interfaces,所以称为multicast(多播)。Multicast主要应用在一对多的传送方式,譬如在线游戏、在线直播节目、视频会议及聊天系统等都可能利用multicast来达到多播。

  • Multicast也称为群播,接收同一个multicast address封包流的所有nodes称为一个group。一个group的大小没有限制,可零到任意多个。透过特定的protocol(例如MLD)通知邻近的routergroup的成员可任意加入或离开。每个multicast address代表不同的group,每个group聆听对应的multicast 封包流。譬如在线直播节目,每个multicast address代表不同的节目,收看同一个节目的所有nodes即一个group

  • 多播的优点是只要发送一个封包,透过routers就可以转送到所有的聆听者。不像unicast addresses,如果要发送同一个封包给Nnodes,就必须重复发送N个封包到Nunicast addresses

  • 被指定IPv6 multicastaddressinterface只能当聆听者,不能以IPv6 multicast address的身份去发送封包,所以IPv6 multicast addresses不能做为来源地址。

  • 此外,IPv6定义特定的multicast addresses取代IPv4原有broadcast相关的功能。只有欲接收相关multicast封包的nodes才会加入该multicast group,其它的nodes不再受到影响。

  • IPv6 multicast addresses的前缀为11111110xFF),即以0xFF开始的皆为multicast地址。

MULTICAST ADDRESS格式

前缀为0xFF表示为multicast address以外,IPv6 multicast address还包含其它结构:flagscopegroup ID

技术分享

FlagsO R P T表示multicast address上设定的旗标。如下所示,该字段大小为4 bits

  • 高序位bit保留且必须设为0

  • Transient (T) flag设为 0 时,表示是由 Internet 编号机构 (IANA) 配置的永久性且众所周知的multicast address。设为 1 时,表示是一个暂时的 (非永久指派的) multicast address

  • P flag的用途定义在RFC 3306

  • R flag的用途定义在RFC 3956

    Scope  IPv6 multicastaddress可以传送的范围。长度为 4 bits。内容如下:(routers利用以下定义来确保multicast封包不会跨出其可传送范围)

技术分享

Group ID  用来识别不同的multicast group。该字段大小为 112 bits

技术分享

由于在 Group ID 中使用了 112 bits,可以拥有 2112个群组 ID。但是,考虑到 IPv6 multicast地址低序位32 bits对应到 Ethernet multicastMAC 地址低序位32 bits的方式,RFC 2373 建议从 IPv6 multicast地址的低序位 32 bits开始指定 Group ID,并将group ID其余的bits设为 0。透过只使用低序位32 bits,每个Group ID 均对应到唯一的 Ethernet multicastMAC 地址。如此可完全避免multicast封包影响到其它的nodes

预先定义好的MULTICAST 地址

RFC 4291定义了以下众所皆知的multicast 地址。

保留的MULTICAST 地址:

FF00:0:0:0:0:0:0:0

FF01:0:0:0:0:0:0:0

FF02:0:0:0:0:0:0:0

FF03:0:0:0:0:0:0:0

FF04:0:0:0:0:0:0:0

FF05:0:0:0:0:0:0:0

FF06:0:0:0:0:0:0:0

FF07:0:0:0:0:0:0:0

FF08:0:0:0:0:0:0:0

FF09:0:0:0:0:0:0:0

FF0A:0:0:0:0:0:0:0

FF0B:0:0:0:0:0:0:0

FF0C:0:0:0:0:0:0:0

FF0D:0:0:0:0:0:0:0

FF0E:0:0:0:0:0:0:0

FF0F:0:0:0:0:0:0:0

以上multicast地址均保留,且永不指定给任何multicast group

All Nodes Addresses

scope 1node-local)及2link-local)。Group值为 1表示all nodes

FF01:0:0:0:0:0:0:1

FF02:0:0:0:0:0:0:1

譬如:FF02:0:0:0:0:0:0:1表示在link的范围内,此multicast 封包接收者为所有的nodes

请注意,由于FF02:0:0:0:0:0:0:1封包会传送到link上所有的nodes,实际上,它跟broadcast所造成的影响是等同的。IPv6multicast取代broadcast的目的是把原先broadcast所造成的影响尽量降到最低,并非完全根绝使用broadcast功能。在Neighbor Discovery Protocol中,Unsolicited Router AdvertisementUnsolicited Neighbor Advertisement messages均使用FF02:0:0:0:0:0:0:1来发送封包。实际上这2 messages的发送对象正是link上所有的nodes

此外,IPv4broadcast封包传送限制在同一link内的范围,因此All Nodes Addressesscope也只限于1node-local)以及2link-local)。

All Routers Addresses

scope 1node-local),2link-local)及5site-local)。Group值为 2表示all routers

FF01:0:0:0:0:0:0:2

FF02:0:0:0:0:0:0:2

FF05:0:0:0:0:0:0:2

譬如:FF02:0:0:0:0:0:0:2表示在link的范围内,此multicast 封包接收者为所有的routersFF05:0:0:0:0:0:0:2表示在site-local的范围内,此multicast 封包接收者为所有的routers

Solicited-Node Addresses

表示法为FF02:0:0:0:0:1:FFXX:XXXX。章节Solicited-Node Address将详细介绍。

对应 IPv6 Multicast Addresses Ethernet Addresses

当从Ethernet link发送IPv6 multicast封包时,对应的目的MAC address的格式为33-33-mm-mm-mm-mm,其中mm-mm-mm-mmIPv6 multicast address的最后32 bits值。

技术分享

Ethernet网络卡有一个MAC 地址表,而且这个MAC地址表的内容可动态设置。当接收到一个Ethernet frame的目的MAC addressMAC地址表任何一个地址相同时,就会把这个Ethernet frame传送给上层做进一步的处理。当接收到的Ethernet frame的目标MAC address不符合MAC 地址表任何地址时,则丢弃这个Ethernet frame。基本上,每个MAC 地址表会有下列的MAC addresses

  • Broadcast MAC Address  MAC地址FF:FF:FF:FF:FF:FF。可能直接加在MAC地址表中,或者用另外一个flag来设定是否接收Broadcast MAC address

  • Unicast MAC Address  MAC地址是网络卡出厂时就设定好的,它是独一无二的MAC address且不可更改,其目的是防止跟其它的网络卡的Unicast MAC address冲突。所有指派给网络卡上IP层的IPv6 unicastaddresses(包含Global, Link-local, unique localanycast)都用此Unicast MAC address来接收Ethernet frame,并且发送Ethernet frame时,以它为来源MAC地址。

  • Multicast MACAddress  除了取代IPv4原有broadcast功能的multicast addresses以外,一般都是动态加入到MAC 地址表或从MAC 地址表移除。当application layer加入某个IPv6 multicast address时,系统就会把对应的multicast MAC address加入MAC 地址表。反之,当应用程序停止聆听某个IPv6 multicast address时,就会把对应的multicast MAC addressMAC 地址表中移除。

    此外,一般网络卡可以设定2种接收模式如下:

  1. Normal Mode  一般模式。即利用MAC地址表来决定接收到的Ethernet frame的去留。此模式适用在一般的Host

  2. Promiscuous Mode  混杂模式。不做目的MAC的比对,此模式下直接将所有接收到的Ethernet frames传送给上层做进一步处理。此模式适用在router或其它特殊设备。当使用工具sniffer监看网络上的所有封包时也是启动此种模式。

IPv6 Anycast Addresses(任一传送)

一个识别地址指定给1到多个interfaces。目的地址为anycast addressIPV6封包将被传送到最邻近且具有这个地址身份的interface最邻近” interface是指路由距离上最近的interface。因为封包只被传送到这些interfaces中的其中一个,所以称为anycast

每个不同的anycast address对应某特定的服务,服务内容视应用需求而定,并且是预先定义好的。目前anycast只能指定给router,所有被指定到同一个anycast addressrouters都将提供相同的特定服务。譬如电话号码110119104查号台,这些服务台散布在全国各地并且提供相同的服务,相当类似anycast的应用概念。Mobile IPv6章节里将介绍anycast address的实际应用例子,届时读者对这个既新颖又抽象的anycast addresses会有更深一层的认识。

Anycast 地址取自于unicast 地址空间而来,所以具有与unicast相同的scope 属性(即Globallink-localunique local)。由于anycast取自unicast地址空间,两者的格式完全一样,从格式语法上无法区别是anycastunicast。当某个unicast地址被指定给1个以上的interfaces时,它就变成anycast地址,而且必须预先声明它是个anycast地址。譬如:电话号码110119等都是预先经过明确公告,大众才会知道这些特殊号码的用途。

Anycast addresses不能当来源地址,也不能指定给hosts

Solicited-Node Address(请求节点地址)

此类地址为前缀FF02:0:0:0:0:1:FF00::/104,与unicastanycast地址的低序24 bits所合并形成的multicast地址,其目的用在解析邻近nodeMAC地址。IPv4 ARPbroadcast解析邻近nodeMAC地址,总是影响到所有邻近的nodes。而IPv6 Neighbor Discovery利用Solicited-Node Address取代broadcast,把这种影响降到非常低。例如:4037::01:800:200E:8C6C对应的Solicited-Node AddressFF02::1:FF0E:8C6C。只有地址的低序24 bits0E:8C6Cnodes才会受到影响,将造成影响的几率降到非常低。

技术分享

章节Neighbor Discovery将介绍如何利用Solicited-Node Addresses来解析邻近nodeMAC地址。

Node需要配置的IPv6地址

以下是host需要配置的IPv6地址:

  • Link-Local Addressfor each interface  每个interface都必须自行配置1link-local地址。这是最基本也是第一个必须先配置的地址,有了link-local地址才能配置后续的其它地址。例如:assigned unicast Addresses及所有unicast address映像的Solicited-Node Multicast Address

  • Unicast Addresses  透过routers或者DHCPv6 server,配置global unicastunique local unicast地址。这2种地址可别分配置0到多个。

  • Loopback Address

  • All-Nodes MulticastAddresses  FF01:0:0:0:0:0:0:1FF02:0:0:0:0:0:0:1

  • Solicited-NodeMulticast Address  所有配置到的unicast地址所映像的Solicited-Node Multicast地址。

  • Multicast Addresses  所有host欲聆听的multicast地址,此乃动态任意joinleavemulticast地址。

Router需要配置的IPv6地址

Router除了需要配置host所有的地址以外,还需要配置以下IPv6地址:

  • Anycast addresses  所有router配置到的anycast addresses及所映像的Solicited-Node Multicast地址。

  • All-RoutersMulticast Addresses 

    FF01:0:0:0:0:0:0:2

    FF02:0:0:0:0:0:0:2

    FF05:0:0:0:0:0:0:2

IPv6 Interface Identifiers

Interface ID用来识别link上不同的interfaces,所以它在同一link上必须是独一无二的。此外,有些生成Interface ID的方法中,所配置的Interface ID在整个IPv6全局里也可能是独一无二的。Interface ID使用固定64 bits长度的主要目的是为了能映像48 bits MAC地址,也能映像IEEE 139464 bits MAC地址和未来的网络link layer地址。由于MAC地址是唯一的,映像出的Interface ID也同样具有唯一性。

Interface ID可以由以下几种方式来配置:

  • RFC 4291中定义,可以从Extended Unique Identifier (EUI)-64配置Interface ID。由于此种配置方法是一对一的映射,从Interface ID可以反推到映像的实际MAC address,进而得知与interface或主机相关的讯息,不具隐秘性。

  • RFC 4941中定义,可以临时分配,随机产生Interface ID。这种随机配置的方法,可以提供隐秘匿名的需求。

  • 透过DHCPv6,动态配置IPv6地址(包含Interface ID)。

  • RFC 5072中定义,可以基于link-layer addressserial number来配置Interface ID。也可以在PPP产生联机时随机配置Interface ID

EUI-64配置 INTERFACE ID

IEEE 802 地址格式

技术分享

IEEE 802使用48 bits地址,它由24 bits(前3bytes)的公司ID24 bits(后3bytes)的扩展ID组成。制造每个网络卡时,组合公司ID224范围内的扩展ID,即产生一个全局唯一的48 bits地址。此地址称为硬件地址或者MAC地址。

公司ID的格式如下:

技术分享

  • “c” bits为公司ID。能申请的公司ID数可多达222.

  • “u” bitUniversal/Local (U/L) bit。值为0代表MAC是全局唯一,值为1代表MAC是本地管理(不具全局唯一性,只能区域性使用此MAC地址)。

  • “g” bit Individual/Group (I/G) bit。此bit是预留来区分unicastmulticast地址。值为0代表unicast地址,值为1代表multicast地址。

网络适配器的MAC出厂设定值:U/LI/G bits皆设为0

IEEE EUI-64 地址

3bytes的公司ID格式与IEEE 802完全相同,但扩展ID的长度是40 bits 5 bytes)。

技术分享

IEEE 802地址转换成IEEE EUI-64地址的方法:

16 bits 0xFFFE置入公司ID及扩展ID之间。

技术分享

IEEE EUI-64地址转换成Interface ID的方法:

IEEE EUI-64地址的U/L bit1的补码。如果U/L bit1,则设为0。如果为0,则设为1

技术分享

IEEE 802地址转换成INTERFACE ID的方法:

先将IEEE 802转换成EUI-64,再将EUI-64转换成Interface ID

技术分享

参考文件

RFC 3306    Unicast-Prefix-based IPv6 Multicast

RFC 3587    IPv6 Global Unicast Address Format

RFC 4193    Unique Local IPv6 Unicast Addresses

RFC 4291    IPv6 Addressing Architecture


本文出自 “IPv6通讯协定编译” 博客,谢绝转载!

IPv6 简介以及位址介绍