IPv6 簡介以及地址介紹

IPv6 简介

IPv6IP版本6)是互联网通讯协议(Internet Protocol,简称IP)的新版本,它被设计来取代IPv4,并且针对当初设计IPv4时没有考虑到的问题做了以下改进:
n  扩展地址空间  IPv6IP地址长度从32 bits扩展到128 bits,如此庞大的地址空间,除了确保IP地址不再有耗尽之虑,其主要目的是支持更多层的阶层式的路由架构,并且提供更简单的自动组态配置。在multicast address中新增“scope”字段来提升multicast routing的可扩展性。定义一个新的地址类型称为“anycast address”,用来发送封包到一个接收群组中路由最近的一个node
n  简化IP表头格式  IPv6删除了IPv4表头中不必要的字段,并且将选项字段移到扩展表头,降低router转送IP封包的处理时间。
n  支持更佳的扩充性  更改IP表头的某些选项, 使得router转送封包更有效率,并且提供未来更大的灵活度来引入新的选项或新的扩展表头。
n  提供更好的QoS  IP表头添加新的标签字段称为“Flow Label”,让封包发送者能要求特殊的流量处理,譬如real-time服务。
n  认证和保密功能  支持认证、数据完整性及保密性。
须知,IPv6除了将完全取代IPv4以外,由于IP层版本的替换过程相当冗长艰巨,其设计者更希望IPv6IP层的终极版本,未来不用再面临更换IP层版本的难题。至于IPv6是否能经得起考验,成为IP层的终极版本,只能有赖时间来证明。


专有术语

Address  地址,用来标示一个或一组interfaces
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 frame size减掉link frame header size
MTUMaximum Transmission Unit  最大传输单元。是指一种通信协议的某一层上面所能通过的数据包大小。每层的MTU值通常与通信的linkMTU值有关。
Neighbors  邻居,连接到相同linknodes
Node(节点)  实现IPv6的设备皆称为node,包含hostsrouters
Path MTU  来源和目的node路径中的最小的link MTU。即来源和目的路径中可以发送的MTU。由于IPv6router不做fragmentation动作,如果packetsize超过path MTU,将无法送达目的地。
Reachability(可达性)  是指封包单向送达邻居的路径是否正常。特别是指封包是否送达邻居的IP层且被接收的IP层做适当处理。 邻近的nodes可能为host或者router。所谓可达的邻近router,是指nodeIP层发送的IP 封包被送达邻近的routerIP层,且router也确实转送封包。所谓可达的邻近hosts,是指nodeIP层封包被送达邻近hostIP层。
Router(路由器)  负责转送IP封包的node

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

IPv6地址

IPv6具有128 bits长度的IP地址。如此庞大的地址空间,IPv6地址不再有耗尽之虑。IPv6 的大地址空间设计主要用于建立有效率,具有更多层的阶层式路由基础结构,使主干router路由表要小得多。
IPv6地址分成PrefixInterface ID两部分,各占64 bits Prefix等同segment(网段)或subnet ID,在internet上用来识别不同网段的IDInterface ID如同IPv4host ID,在同一个网段上用来识别不同nodeID


IPv6PrefixInterface ID字段各占64 bits长度。264是个极庞大的数字,在人类世界中几乎所有计量的数据都涵盖在此范围内。也就是说我们所有可能使用到的数据绝大多数都不会超过264。这是人类世界数字使用上的极限,即使有些极少数的数据数据超过此限,也可以利用2次以上的264去做运算,依旧可以做到准确的运算。
可想而知,超过64 bits处理能力的处理器已没有其必要性(因为绝大多数情况下超过64 bits的位都是零),这也代表IPv6的位置空间不再有耗尽之虑。读者不妨试着想象一下,哪些计量上的数据可能超过264
IPv6地址长度为128 bits的地址空间,以地球的总面积去计算,平均每平方公尺约有65百万兆个IPv6地址。也就是说如果在1平方公尺的范围内堆积如此广大数量的任何IPv6装置,其高度可达外层空间。很明显地,大地址空间并非为了保障IPv6地址无耗尽之虑,其主要目的乃为了建构更多层的阶层式路由基础结构,缩小主干router路由表数量,提升router的转送封包效率

所谓阶层式路由架构是指每台实现IPv6nodeprefix都是依据网络拓扑来分配的 。阶层式的路由架构最大的优点是路由表的路由数低,且阶层式属于tree(树)架构,在《理想状况》下任意2个节点之间封包的传送路径都是唯一路径,不会有回路情况。
IPv4的地址并非完全依据网络拓扑来分配,导致IPv4 Internet主干routers的路由表中通常超过70,000个以上的路由,因此routers在寻找最佳路由上承受极大的负担。阶层式路由架构降低了路由数,邻近routers之间交换路由讯息缩小许多,大大提升路由讯息交换、路由表更新以及寻找最佳路由的效率。
邮政地址就是个阶层式架构,它乃依据地域关系来分配。“省”、“县”、“县市”、“区”分别代表路由的每一阶层。“区”以下又可细分更多的阶层,甚至到大楼里还可细分楼层等。从邮政地址可以很明显地看到阶层式路由不但在寻找路由简易许多,并且是最佳路由(在理想的“tree”情况下,最佳路由也是唯一路径)。譬如,从新北市内寄到新北市辖区的邮件,在转送邮件的路程中绝不会跨出新北市的范围。IPv4并非完全依照网络拓扑来分配地址,不但路由表的路由数繁杂,封包转送的路径有可能发生错误或者绕远路,甚至发生回路情况(迷路了!)。










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时,可以代表路由表的路由、subnet(子网络)或地址的范围。
例如:
2001:2DB:0:BC::/64 代表segment(网段)的prefix ID
2001:2DB:0:BC20::/60 代表路由表的路由或者subnet(子网络)
2001:2DB:0:CD30::/60 也可以代表地址范围:
2001: 2DB:0: CD30::/64 2001: 2DB:0: CD3F::/64
不在prefix-length内的bits必须为零。例如2001: 2DB:0:CD3F::/60就不是合法的表示法。


地址类型表示法

IPv6地址的类型由不同长度及内容的前缀来表示。这些不同长度内容的前缀称为Format PrefixFP)(格式前缀)。RFC 2373定义初始分配的FP如下:
Allocation
Prefix (binary)
Fraction of Address space
Reserved
0000 0000
1/256
Unassigned
0000 0001
1/256
Reserved for NSAP Allocation
0000 001
1/128
Reserved for IPX Allocation
0000 010
1/128
Unassigned
0000 011
1/128
Unassigned
0000 1
1/32
Unassigned
0001
1/16
Global Addresses
001
1/8
Unassigned
010
1/8
Unassigned
011
1/8
Unassigned
100
1/8
Unassigned
101
1/8
Unassigned
110
1/8
Unassigned
1110
1/16
Unassigned
1111 0
1/32
Unassigned
1111 10
1/64
Unique Local Addresses
(Defined in RFC 4193)
1111 1100
1111 1101
1/128
Unassigned
1111 1110 0
1/512
Link-Local Addresses
1111 1110 10
1/1024
Site-Local Addresses
Deprecated by RFC 3879
1111 1100 11
1/1024
Multicast Addresses
1111 1111
1/1024

以下是常用并且必须熟记的地址类型:
Global Addresses  前缀内容0010以及0011,即前缀为2xxx3xxx的地址。
Unique Local Addresses  前缀为FCxxFDxx的地址。
Link-Locak Addresses  前缀为FE80的地址。
Multicast Addresses  前缀为FFxx的地址。

IPv6的地址类型

IPv6地址的大小为128 bits,封包传送的目的地址有三种类型:
-       Unicast (单点传送):  接收端只有1个。
-       Multicast (多播):  接收端可零到多个,封包由routers负责传送到所有接收端。
-       Anycast (任一传送):  接收端可以有多个(每个接收端的服务功能相同),但是封包只传送到路由最近的一个接收端。
此外,IPv6废除了使用broadcast address来传送封包,所有与broadcast相关的传送功能都被multicast address取代(例如:大家最熟悉的DHCP以及ARP)。主要原因是broadcast封包会传送到整个segment中所有的nodes,这种广播式的传送对同一segment上所有的nodes均造成影响。Multicast取代broadcast后,只有该multicast address的接收者才会加入对应的multicast group,非此multicast封包的接收者不再受到影响。

Unicast Address(单点传送)

一个识别地址指定给单一interface 。目地地址为unicast addressIPv6封包将被传送到具有这个识别地址的interface 。由于只允许一个interface为封包接收者,所以称为unicast address
依据地址能传送的有效范围,Unicast address细分为以下类型:
n  Global unicast addresses (全局唯一地址)
n  Link-local addresses(区域链结地址)
n  Unique local addresses(唯一的区域地址)
n  Special addresses(特殊地址)
定义封包传送范围的主要目的是利用routers将封包的传送目的地局限在某个区域范围内。尤其家庭客户端或site范围内的通讯可以与外隔绝,确保其隐秘性和安全性。当然,要达到此目的,必须藉助router来阻绝封包流窜到范围外的网络才能做到。借着定义传送范围以及对应的前缀内容,routers可适当地传送以及阻绝封包流窜到传送范围外的网络。

  

Global Unicast Addresses

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



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


Link-local Addresses

link-local address的传送范围只适用在一个segment,其地址的唯一性仅限于一个link上。所有的Interface都必须配置link-local address
10 bits
54 bits
64 bits
1111 1110 10
0
interface ID
Link-local addressprefix为固定值FE80::/64,是由自行配置的interface ID再与FE80::/64组合而生成的IPv6地址。由于它的传送范围只适用在一个segmentIPv6 router不会转送目的地址为link-local address的封包到其它的segments
Link-local address是每个node初始化时必须先自行配置的IPv6地址,才可顺利配置后续的其它IPv6地址。依据架设的网络使用范围,决定是否配置1到多个Global Addresses 以及Unique Local Addresses


Unique Local Addresses

简称ULA。单一segment,或2segments以上透过内部routers连接一起的子网,其传送范围适用在一个site的子网络。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多层的阶层式路由架构。
为了便于管理,Golbal Unicast AddressULA皆具有相同位置和长度的subnet ID字段,此2种地址在同一个站台(site)内可设置成相同的阶层路由架构。每个interface配置到的Golbal Unicast AddressULAsubnet ID域值皆相同。
RFC 4193定义了一个算法,声称依此算法生成的Global ID几乎不会重复,故美其名为Unique Local Address。其算法的主要目的是当2个的ULA子网需要合并成同一个子网时,可避免因为Global ID相同而必须更改整个ULA子网络的prefix
由于声称ULA的唯一性,RFC 4193预设ULA的传送范围为global。不过,ULA的传送范围或可大于site-local,但应该局限于合并的ULA子网络 。况且ULA无法在整个internet提供全局阶层式的路由架构 ,把ULA提升为全局传送只会徒增routers路由表的路由数,加重routers转送封包的负担。

Special Addresses

以下是IPv6special addresses
n   Unspecified address  未指定的地址
未指定的地址(0:0:0:0:0:0:0:0 ::) 仅用于表示此地址是空的,未指定。Unspecified address只能做为来源地址,不能指定给 interface,也不能做为目的地址。一般而言,当发送封包者还没有IPv6地址或者有些封包并不需要指定发送者的IPv6地址时,就会将IPv6表头的来源地址设为 (::)
n   Loopback address  回路地址
Loopback address (0:0:0:0:0:0:0:1 ::1) 用于回路接口,使node得以向自己传送封包。发往回路地址的封包绝不能在link上传送,也不能由 router转送。Loopback address不能当来源地址。
Loopback address被视为在link上虚拟的interface,其目的是为了将传送的封包传送给自己。每个nodes在实现上,必须提供机制将目的地址为Loopback address回传给自己。
当一个nodeIPv6封包需要回传给自己时,利用Loopback address来传送就显得非常便利。譬如在MLDMulticast Listener Discovery)协议中规范:如果router的某个interface同时扮演listener角色时,此interface除了传送MLD封包到邻近的nodes以外,必须同时回传封包给自己
node本身同时也是自己发送封包的接收者时,Loopback address就突显其妙用咯~


IPv6 Multicast Addresses(多播)

u  一个识别地址,可动态指定给零到多个interfaces。任何node皆可因需求而动态地自行配置multicast addresses来接收相关的封包流。目标地址为multicast addressIPv6封包将被传送到具有这个识别地址的所有interfaces 。因为封包接收者可零到多个的interfaces ,所以称为multicast Multicast主要应用在一对多的传送方式,譬如在线游戏、在线直播节目、视频会议以及聊天系统等都可能利用multicast addresses来达到多播。
u  Multicast也称为 “群播”,接收同一个multicast address封包流的所有nodes称为一个group。一个group的大小没有限制,可零到任意多个。透过特定的protocol(例如MLD)通知邻近的routersgroup的成员可任意加入或离开。每个multicast address封包流代表不同的group,每个group聆听者接收同一个multicast 封包流。譬如在线直播节目,每个multicast address可代表不同的节目 (实际上 1multicast封包流可携带MPEG-TS数据格式,其内容包含节目表以及多个节目。) ,收看同一个节目(或MPEG-TS)的所有nodes即一个group
u  多播的优点是只要发送一个封包,透过routers就可以转送到所有的接收者。不像unicast addresses,如果要发送同一个封包给Nnodes,发送端就必须重复发送N个封包到N个不同的unicast addresses Multicast封包的发送端不用知道到底有过少个接收者,接收者可随时透过特定的protocol(例如MLD)通知邻近的router加入或离开该group(即是否接收该multicast address),routers自会负责正确地将multicast封包传送到所有的接收端。
u  同一个multicast address封包流可能存在多个发送者。(因此,MLDv2特别提供过滤发送源的机制,详情请参考章节“MLDv2”。)
u  被指定为IPv6 multicast addressinterface只能当接收者,不能以IPv6 multicast address的身份去发送封包,所以IPv6 multicast addresses不能做为IPv6表头的来源地址。


Multicast Address格式

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

8 bits
4 bits
4 bits
112 bits
1111 1111
flags
Scope
Group ID
Flags  表示multicast address上设定的旗标。如下所示,该字段大小为4 bits
0
R
P
T
-       高序位bit保留且必须设为0
-       R flag的用途请参考RFC 3956
-       P flag的用途请参考在RFC 3306
-       Transient (T) flag设为 0 时,表示是由 Internet 编号机构 (IANA) 配置的永久性且众所周知的multicast address。设为 1 时,表示是一个暂时的 (非永久指派的) multicast address。如果是属于区域性范围的multicast封包,可将T flag设置为1并任意指定multicast addresses的内容。
Scope  RFC 7346定义IPv6 multicast address可以传送的范围。长度为 4 bits。传送范围从最小的Interface-Local (1) 依序递增到最大范围的Global scope (E)。内容如下:(routers利用以下定义来确保multicast封包不会跨出其可传送的范围)

0
reserved

1
Interface-Local scope
仅限于将multicast封包传送到node内部,不可将封包往外部发送。不像unicast loopback address::1)只能回传封包到发送封包的interfaceInterface-Local addresses可以回传封包到node的其它interfaces
2
Link-Local scope
仅限于link的范围内。
3
Realm-Local scope
仅限于local范围内。
4
Admin-Local scope
5
Site-Local scope
6 ~ 7
(unassigned)

8
Organization-Local scope
仅限于local范围内。
9 ~ D
(unassigned)

E
Global scope
全区范围。
F
reserved


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

8 bits
4 bits
4 bits
80 bits
32 bits
1111 1111
flags
Scope
0
Group ID


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


预先定义好的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 1interface-local)及2link-local)。 Group1表示接收群组为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对不相干的nodes造成影响,并非完全根绝使用broadcast功能。在Neighbor Discovery Protocol中,Unsolicited Router Advertisement以及Unsolicited Neighbor Advertisement messages均使用FF02:0:0:0:0:0:0:1来发送封包。实际上这2 messages的发送对象正是link上所有的nodes
此外,IPv4broadcast封包传送限制在同一link内的范围,因此All Nodes Addressesscope也只限于1interface-local)以及2link-local),不可超过link范围。







All Routers Addresses

scope 1node-local),2link-local)及5site-local)。Group2表示接收群组为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 封包接收者为link范围内所有的routersFF05:0:0:0:0:0:0:2表示在site-local的范围内,此multicast 封包接收者为site-local范围内所有的routers

Solicited-Node Address

表示法为FF02:0:0:0:0:1:FFXX:XXXX,其目的是为了解析邻近nodeMAC地址。章节“Solicited-Node Address(请求节点地址)”将详细介绍。

如何将IPv6 Multicast Addresses 对应到Ethernet Addresses


I

当从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 地址表会有下列的MAC addresses
(1)    Broadcast MAC Address  MAC地址FF:FF:FF:FF:FF:FF。可能直接加在MAC地址表中,或者用另外一个flag来设定是否接收Broadcast MAC address。(在IPv4完全被IPv6取代前,Broadcast MAC Address还是有存在的必要性。)
(2)    Unicast MAC Address  MAC地址是网络卡出厂时就设定好的,它是独一无二的MAC address且不可更改,其目的是防止跟其它的网络卡的Unicast MAC address发生冲突。 所有指派给网络卡上IP层的IPv6 unicast addresses以及anycast addresses都用此Unicast MAC address来接收Ethernet frame 并且发送Ethernet frame时,以它为来源MAC地址。
(3)    Multicast MAC Address  除了取代IPv4原有broadcast功能的multicast MAC 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(任一传送)

n   一个识别地址指定给1到多个interfaces。目的地址为anycast addressIPV6封包将被传送到最邻近且具有这个地址身份的interface。“最邻近” interface是指路由距离最近的interface。因为封包只被传送到这些interfaces中的其中一个,所以称为anycast
n   每个不同的anycast address对应某特定的服务,服务内容视应用需求而定,并且是预先定义好的。目前anycast的实现只能指定给router,所有被指定到同一个anycast addressrouters都将提供相同的特定服务。当anycast封包经过routers转送过程中到达具有此anycast地址身份的router时,将被router接收并做进一步内部处理。
n   电话号码110119104查号台,这些服务台散布在全国各地并且提供相同的服务,相当类似anycast的应用概念。Mobile IPv6章节里将介绍anycast address的实际应用例子,届时读者对这个既新颖又抽象的anycast addresses会有更深一层的认识。
n   Anycast 地址取自于unicast地址空间而来,所以具有与unicast相同的scope 属性(即Globallink-localunique local)。由于anycast取自于unicast地址空间,两者的格式完全一样,从格式语法上无法区别是anycastunicast 。只有当某个unicast地址被指定给1个以上的interfaces时, 它就变成anycast地址,而且必须预先声明它是个anycast地址。譬如:电话号码1101191040800-xxx-xxx等都是预先经过明确公告,大众才会知晓这些特殊号码的用途。
n   Anycast addresses不能当来源地址,也不能指定给hosts

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

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




章节 Address Resolution(地址解析)”将介绍如何利用Solicited-Node Addresses来解析邻近nodeMAC地址。

Node需要配置的IPv6地址

以下是host需要配置的IPv6地址:
-       Link-Local Address for each interface  每个interface都必须自行配置1link-local地址。这是最基本也是第一个必须先配置的地址,有了link-local地址才能顺利配置后续的其它地址。
-       Unicast Addresses  透过routers或者DHCPv6 server,配置global unicastunique local unicast地址。 2种地址可分别配置0到多个。
-       Loopback Address
-       All-Nodes Multicast Addresses  FF01:0:0:0:0:0:0:1FF02:0:0:0:0:0:0:1
-       Solicited-Node Multicast Address  所有配置到的unicast地址映像的Solicited-Node Multicast地址。
-       Multicast Addresses  所有host欲聆听的multicast地址,此乃动态加入或离开的multicast地址。
Router除了需要配置host所有的地址以外,还需要配置以下IPv6地址:
-       Anycast addresses  所有router配置到的anycast addresses映像的Solicited-Node Multicast地址。
-       All-Routers Multicast 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,只要追踪其目前搭配的prefix即可得知该装置的目前位置,因此不具隐秘性。
²  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的格式如下:

ccccccug
cccccccc
cccccccc


-       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





如何随机产生Interface ID

利用MAC地址转换的Interface ID虽具有唯一性,但是可能被追踪到其位置,不具隐秘性。RFC 4941定义随机产生Interface ID,虽然不保证其唯一性,却可以提供隐秘的需求。
此外,依据RFC 4941的方法,可以随时产生不同的新的Interface ID。利用此方法产生Interface IDnodes可以自行定义IPv6地址的lifetime(数小时到数天,但是不得超过其搭配的Prefixlifetime),适时更换IPv6地址。

RFC 4941中随机产生Interface ID的方法乃基于以下2个假设:
-              Node配备永久性的存储器,用来记录历史状态,当重新启动时可利用其内容来产生下一个Interface ID 。(如此才能保证重启后产生的Interface ID的随机性)
-              当永久性的存储器不存在时,在没有历史状态可参考的情况下,还是能够保证产生Interface ID的随机性。
RFC 4941产生随机Interface ID的方法如下:
当永久性的存储器可用时:
Step 1.  取出永久性存储器的内容(如果其内容为空的,则产生1个随机值),并且将此内容附加到Extended Unique Identifier (EUI)-64产生的Interface ID右方
Step 2.  使用MD5计算Step 1所产生的数据。
Step 3.  取下Step 2产生的数据的最左边64 bits ,并且将其最左边的第7 bit(即u bit)设为0
Step 4.  Step 3生成的ID与保留的Interface IDs以及已经分配给本地设备的IPv6位置作比较。如果发现重复,则跳到Step 1取下Step 2产生的数据的最右边64 bits附加到Extended Unique Identifier (EUI)-64产生的Interface ID后方,重新产生Interface ID
Step 5.  Step 3产生的ID设置为生成的Interface ID
Step 6.  Step 2产生的数据的最右边64 bits存放到永久性存储器内。

RFC 4941选择MD5是为了方便起见 ,由于MD5具有产生随机值的特定水平 Nodes也可以使用其它的算法来产生随机值。
利用RFC 4941所产生的Interface ID,其与Prefix组合所生成的IPv6地址仍必须经过DAD程序检测过后才能使用,否则还是得从Step 1重新产生下一个Interface ID

当永久性的存储器不存在时:
当没有永久性的存储器存放历史状态时,node还是有机会从系统本身寻求其它的随机值来当做Step 1的输入参考值。至于如何获取随机值,则因系统而异。只要系统本身能提供高水平的随机值,存放历史状态的存储器并非是必要的。

参考文献


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

评论

此博客中的热门博文

DHCPv6 简介

Neighbor Discovery 简介

Multicast Listener Discovery (MLD) 简介

MLDv2 简介

Mobile IPv6 简介

ICMPv6

IP Security 簡介