华为数通笔记-IPV6基础

IPv6概述

IPv4现状

2011年2月3日,IANA(Internet Assigned Numbers Authority,因特网地址分配组织)宣布将其最后的468万个IPv4地址平均分配到全球5个RIR(Regional Internet Registry,区域互联网注册管理机构),此后IANA再没有可分配的IPv4地址。

IANA,是负责全球互联网IP地址编号分配的机构。IANA将部分IPv4地址分配给大洲级的RIR,再由各RIR进行所辖区域内地址分配,五大RIR包括:

RIPE:Reseaux IP Europeans,欧洲IP地址注册中心,服务于欧洲、中东地区和中亚地区;

LACNIC:Latin American and Caribbean Internet Address Registry,拉丁美洲和加勒比海Internet地址注册中心,服务于中美、南美以及加勒比海地区;

ARIN:American Registry for Internet Numbers,美国Internet编号注册中心,服务于北美地区和部分加勒比海地区;

AFRINIC:Africa Network Information Centre,非洲网络信息中心,服务于非洲地区;

APNIC:Asia Pacific Network Information Centre,亚太互联网络信息中心,服务于亚洲和太平洋地区。

IPv6优势

近乎无限的地址空间:与IPv4相比,这是最明显的好处。IPv6地址是由128 bit构成,单从数量级来说,IPv6所拥有的地址容量是IPv4的约8×1028,号称可以为全世界的每一粒沙分配一个网络地址。这使得海量终端同时在线,统一编址管理,变为可能,为万物互连提供了强有力的支撑。

层次化的地址结构:正因为有了近乎无限的地址空间,IPv6在地址规划时就根据使用场景划分了各种地址段。同时严格要求单播IPv6地址段的连续性,禁止出现IPv4的地址“打洞”现象,便于IPv6路由聚合,缩小IPv6地址表规模。

即插即用:任何主机或者终端要获取网络资源,传输数据,都必须有明确的IP地址。传统的分配IP地址方式是手工或者DHCP自动获取,除了上述两个方式外,IPv6还支持SLAACStateless Address Autoconfiguration无状态地址自动配置)

端到端网络的完整性:大面积使用NAT技术的IPv4网络,从根本上破坏了端到端连接的完整性。使用IPv6之后,将不再需要NAT网络设备,上网行为管理、网络监管等将变得简单,与此同时,应用程序也不需要开发复杂的NAT适配代码。

安全性得到增强:IPsec Internet Protocol Security,因特网协议安全协议)最初是为IPv6设计的,所以基于IPv6的各种协议报文(路由协议、邻居发现等),都可以端到端地加密,当然该功能目前应用并不多。而IPv6的数据面报文安全性,跟IPv4+IPsec的能力,基本相同。

可扩展性强:IPv6的扩展属性报文头部,并不是主数据包的一部分,但是在必要的时候,这些扩展头部会插在IPv6基本头部和有效载荷之间,能够协助IPv6完成加密功能、移动功能、最优路径选路、QoS等,并可提高报文转发效率。

移动性改善:当一个用户从一个网段移动到另外一个网段,传统的网络会产生经典式“三角式路由”,IPv6网络中,这种移动设备的通信,可不再经过原“三角式路由”,而做直接路由转发,降低了流量转发的成本,提升了网络性能和可靠性。

QoS可得到进一步增强:IPv6保留了IPv4所有的QoS属性,额外定义了20 Byte的流标签字段,可为应用程序或者终端所用,针对特殊的服务和数据流,分配特定的资源,目前该机制并没有得到充分的开发和应用。

IPv6报文构成

从图中可以看出IPv6数据报文由以下几个部分组成:

IPv6基本报头(IPv6 Header

每一个IPv6数据报文都必须包含报头,其长度固定40字节。

基本报头提供报文转发的基本信息,会被转发路径上的所有路由器解析。

扩展报头(Extension Headers

IPv6扩展报头是可能跟在基本IPv6报头后面的可选报头。IPv6数据包中可以包含一个或多个扩展报头,当然也可以没有扩展头,这些扩展报头可以具有不同的长度。IPv6报头和扩展报头代替了IPv4报头及其选项。新的扩展报头格式增强了IPv6的功能,使其具有极大的扩展性。与IPv4报头中的选项不同,IPv6扩展报头没有最大长度的限制,因此可以容纳IPv6通信所需要的所有扩展数据。扩展报头提供报文转发的扩展信息,并不会被路径上所有的路由器解析,一般只会被目的路由器解析处理

上层协议数据单元(Upper Layer Protocol Data Unit

上层协议数据单元一般由上层协议报头和它的有效载荷构成有效载荷可以是一个ICMPv6报文、一个TCP报文或一个UDP报文。

 

Ipv6基本报头

IPv6基本报头也称之为固定报头。固定报头包含8个字段,总长度为40Byte。这8个字段分别为:版本(Version)、流量类型(Traffic Class)、流标签(Flow Label)、净荷长度(Payload Length)、下一个报头(Next Header)、跳数限制(Hop Limit)、源IPv6地址、目的IPv6地址。

IPv6基本包头字段解释如下:

Version:版本号,长度为4 bit对于IPv6,该值为6

Traffic Class:流类别,长度为8 bit。等同于IPv4中的ToS字段,表示IPv6数据包的类或优先级主要应用于QoS

Flow Label:流标签,长度为20 bit。IPv6中的新增字段,用于区分实时流量,不同的流标签+源地址可以唯一确定一条数据流,中间网络设备可以根据这些信息更加高效率的区分数据流。

Payload Length:有效载荷长度,长度为16 bit有效载荷是指紧跟IPv6包头的数据包的其他部分即扩展包头和上层协议数据单元)

Next Header:下一个包头,长度为8 bit。该字段定义紧跟在IPv6包头后面的第一个扩展包头(如果存在)的类型,或者上层协议数据单元中的协议类型(类似于IPv4Protocol字段)

Hop Limit:跳数限制,长度为8 bit。该字段类似于IPv4中的Time to Live字段,它定义了IP数据包所能经过的最大跳数。每经过一个路由器,该数值减去1,当该字段的值为0时,数据包将被丢弃。

Source Address:源地址,长度为128 bit。表示发送方的地址。

Destination Address:目的地址,长度为128 bit。表示接收方的地址。

IPv6拓展包头

IPv6报头设计中对原IPv4报头所做的一项重要改进就是将所有可选字段移出IPv6报头,置于扩展头中。IPv6扩展报头是可能跟在基本IPv6报头后面的可选报头。为什么在IPv6中要设计扩展报头呢?因为在IPv4的报头中包含了所有的选项,每个中间路由器都必须检查这些选项是否存在,如果存在,就必须处理它们。这种设计方法会降低路由器转发IPv4数据包的效率。为了解决转发效率问题,IPv6中,相关选项被移到了扩展报头中。中间路由器就不需要处理每一个可能出现的选项,这种处理方式提高了路由器处理数据包的速度,也提高了其转发性能。  

通常,一个典型的IPv6包,没有扩展头。仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头IPv4不同,IPv6扩展头长度任意,不受40Byte限制,以便于日后扩充新增选项,这一特征加上选项的处理方式使得IPv6选项能得以真正的利用。但是为了提高处理选项头和传输层协议的性能,扩展头总是8Byte长度的整数倍。

目前,RFC 2460中定义了以下6个IPv6扩展头:

逐跳选项报头:该扩展头被每一跳处理,可包含多种选项,如路由器告警选项。

目的选项报头:目的地处理, 可包含多种选项,如Mobile IPv6的家乡地址选项。

路由报头:指定源路由,类似IPv4源路由选项,IPv6源节点用来指定信息报到达目的地的路径上所必须经过的中间节点。IPv6基本报头的目的地址不是分组的最终目的地址,而是路由扩展头中所列的第一个地址。

分段报头:IP报文分片信息,只由目的地处理

认证报头IPSec用扩展头, 只由目的地处理。

封装安全净载报头:IPSec用扩展头,只由目的地处理。

逐跳选项扩展头和目的地选项扩展头内部提供选项功能,支持扩展性(如对移动性支持)。选项采用TLV方式。

如果数据报中没有扩展报头,也就是说数据包只包含基本报头和上层协议单元,基本报头的下一个报头(Next Header)字段值指明上层协议类型。在上例中,基本报头的下一个报头字段值为6,说明上层协议为TCP如果报文有一个扩展报头,则基本报头的下一个报头(Next Header)字段值为扩展报头类型(在上例中,指明紧跟在基本报头后面的扩展报头为43,也就是路由报头)扩展报头的下一个报头字段指明上层协议类型;以此类推,如果数据报中报括多个扩展报头,则每一个扩展报头的下一个报头指明紧跟着自己的扩展报头的类型,最后一个扩展报头的下一个报头字段指明上层协议。

IPv6报文处理机制

IPv6地址

地址格式

IPv4地址使用点隔开的4段十进制数加上掩码来表示,例如192.168.1.1/24。IPv6的地址有128位,沿用IPv4的十进制表示方法就显得太笨拙了,所以在RFC2373中定义了不同于IPv4的格式。

为了书写方便,IPv6可采用以下规则进行缩写。

为什么IPv6协议的地址长度是128bit?

CPU处理字长发展至今分别经历了4bit、8bit、16bit、32bit、64bit等,当数据能用2的指数幂字长的二进制数表示时,CPU对数值的处理效率最高。

IPv4地址长度为32bit,原因之一就是当时互联网上的主机CPU字长为32bit。从处理效率和未来网络扩展性上考虑,将IPv6的地址长度定为128bit是十分合适的。

 

IPv6的128bit地址是一个什么概念?

IPv4有(2的32方)=  4,294,967,296个地址。

IPv6有(2的128方   )= 340,282,366,920,938,463,463,374,607,431,768,211,456个地址(340万亿万亿万亿个地址),相当夸张的说,地球上每一粒沙子都可以分配到一个IPv6地址。

IPv6地址结构

一个IPv6地址可以分为如下两部分:

网络前缀:nbit,相当于IPv4地址中的网络ID。

接口标识:(128-n)bit,相当于IPv4地址中的主机ID。

IPv6单播地址示例:2001:0DB8:6101:0001:5ED9:98FF:FECA:A298/64。

IPv6地址前缀

IPv6地址接口标识

目前有三种方式可以产生IPv6接口ID:

IEEE EUI-64规范

接口ID的典型长度是64位,IEEE EUI-64规范给出了一个由48MAC地址自动生成64Interface ID的方法。

具体的转换算法为:将上述的第7bit0取反,在MAC地址的中间(24bit处)插入两个字节:FFFE。(111111111111110

这种由MAC地址产生IPv6地址接口ID的方法可以减少配置的工作量,只需要获取一个IPv6前缀就可以与接口ID形成IPv6地址。

使用这种方式最大的缺点就是某些恶意者可以通过二层MAC推算出三层IPv6地址。

设备随机生成

设备采用随机生成的方法产生一个接口ID,目前Windows操作系统使用该方式。

手动配置

顾名思义,手动配置就是人为指定接口ID来实现。

IPv6地址分类

根据IPv6地址前缀,可将IPv6地址分为为单播地址、组播地址和任播地址。

单播地址(Unicast Address:标识一个接口,目的地址为单播地址的报文会被送到被标识的接口。在IPv6中,一个接口拥有多个IPv6地址是非常常见的现象。除了全球单播地址、唯一本地地址、链路本地地址这三种地址之外,IPv6还有一些特殊单播地址的存在:

未指定地址: 0:0:0:0:0:0:0:0/128 或者::/128。该地址作为某些报文的源地址,比如作为重复地址检测时发送的邻居请求报文(NS)的源地址,或者DHCPv6初始化过程中客户端所发送的请求报文的源地址。

环回地址:0:0:0:0:0:0:0:1/128 或者::1/128,与IPv4中的127.0.0.1作用相同,用于本地回环,发往::/1的数据包实际上就是发给本地,可用于本地协议栈环回测试。

组播地址(Multicast Address:标识多个接口,目的地址为组播地址的报文会被送到被标识的所有接口。只有加入相应组播组的设备接口才会侦听发往该组播地址的报文。

任播地址(Anycast Address:任播地址标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。

IPv6没有定义广播地址(Broadcast Address)。在IPv6网络中,所有广播的应用层场景将会被IPv6组播所取代。

 

IPv6单播地址结构

一个IPv6单播地址可以分为如下两部分:

网络前缀(Network Prefix):n bit,相当于IPv4地址中的网络ID。

接口标识(Interface Identify):(128-n)bit ,相当于IPv4地址中的主机ID。

常见的IPv6单播地址如全球单播地址、链路本地地址等,要求网络前缀和接口标识必须为64 bit。

全球单播地址中,高位前3 bit为000的地址可以采用非64 bit的网络前缀

IPv6常见单播地址 - GUA

全局路由前缀:由提供商指定给一个组织机构,一般至少为48bit。目前已经分配的全局路由前缀的前3bit均为001因此前缀为2000::/3

子网:组织机构可以用子网ID来构建本地网络(Site),与IPv4中的子网号作用相似。子网ID通常最多分配到第64位。

主机位:用来标识一个设备(Host),与IPv4中的主机ID作用相似。

可以向运营商申请GUA或者直接向所在地区的IPv6地址管理机构申请。

地址范围2000到3FFF

 

单播地址规划

 

IPv6常见单播地址 - ULA

IPv6常见单播地址 - LLA

·

 

IPv6组播地址

IPv6组播地址各字段值对应的组播组类型和范围:

Flags:

0000表示永久分配或众所周知 ;

0001表示 临时的。

Scope:

0:预留;

1:节点本地范围;单个接口有效,仅用于Loopback通讯。

2:链路本地范围;例如FF02::1。

3:站点本地范围;

4:组织本地范围;

5:全球范围;

6:预留。

IPv6组播MAC

以太网传输单播IP报文的时候,目的MAC地址是下一跳的MAC地址。但是在传输组播数据包时,其目的地不再是一个具体的接收者,而是一个成员不确定的组,所以要使用组播MAC地址。

IPv4组播MAC地址

IANA规定,IPv4组播MAC地址的高24bit0x01005E,第25bit023bitIPv4组播地址的低23bit映射。

由于IPv4组播地址的高4bit1110,代表组播标识,而低28bit中只有23bit被映射到IPv4组播MAC地址,这样IPv4组播地址中就有5bit信息丢失。于是,就有32个IPv4组播地址映射到了同一个IPv4组播MAC地址上,因此在二层处理过程中,设备可能要接收一些本IPv4组播组以外的组播数据,而这些多余的组播数据就需要上层进行过滤了。

IPv6组播MAC地址

在以太网链路上发送IPv6组播数据包时,对应的MAC地址是0x3333-A-A-A-A,其中A-A-A-A是组播IP地址的后32bit的直接映射。

被请求节点组播地址

当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。该地址主要用于邻居发现机制和地址重复检测功能。被请求节点组播地址的有效范围为本地链路范围。

被请求节点组播组地址的应用场景举例:IPv6中,ARP及广播都被取消,当设备需要请求某个IPv6地址对应的MAC地址时,设备依然需要发送请求报文,但是该报文是一个组播报文,其目的IPv6地址是目标IPv6单播地址对应的被请求节点组播地址,由于只有目标节点才会侦听这个被请求节点组播地址,所以该组播报文可以被目标节点所接收,同时不会占用其他非目标节点的网络性能。

被请求节点组播地址 - 示例

类似于IPv4,IPv6同样有一些特殊的组播地址,这些地址由特别的含义,这里举几个例子(还有很多类似的特殊地址):

  • FF01::1(节点本地范围组播地址)
  • FF02::1(链路本地范围所有节点组播地址)
  • FF01::2(节点本地范围所有路由器组播地址)
  • FF02::2(链路本地范围所有路由器组播地址)
  • FF05::2(站点本地范围所有路由器组播地址)

IPv6任播地址

任播过程涉及一个任播报文发起方和一个或多个响应方。

任播报文的发起方通常为请求某一服务(例如,Web服务)的主机。

任播地址与单播地址在格式上无任何差异,唯一的区别是一台设备可以给多台具有相同地址的设备发送报文。

网络中运用任播地址有很多优势:

业务冗余。比如,用户可以通过多台使用相同地址的服务器获取同一个服务(例如,Web服务)。这些服务器都是任播报文的响应方。如果不是采用任播地址通信,当其中一台服务器发生故障时,用户需要获取另一台服务器的地址才能重新建立通信。如果采用的是任播地址,当一台服务器发生故障时,任播报文的发起方能够自动与使用相同地址的另一台服务器通信,从而实现业务冗余。

提供更优质的服务。比如,某公司在A省和B省各部署了一台提供相同Web服务的服务器。基于路由优选规则,A省的用户在访问该公司提供的Web服务时,会优先访问部署在A省的服务器,提高访问速度,降低访问时延,大大提升了用户体验。

IPv4与IPv6的对比

对比项

IPv6

IPv4

地址长度

128 bit

32 bit

报文格式

固定40 Byte的基本包头,变长的拓展字段来实现一些IPv6的特性

通过在基本头部上增加option字段的方式支持

拓展特性

地址类型

单播、组播、任播

单播、组播、广播

地址配置

静态、DHCP、SLAAC

静态、DHCP

重复地址检测

通过ICMPv6实现

通过免费ARP实现

地址解析

通过ICMPv6实现

通过ARP实现

IPv4

IPv6

地址空间

2的32次方

2的128次方

表示方式

点分十进制

冒号隔开的十六进制

地址类型

单播、组播、广播

单播、组播、任播

其它

A、B、C等主类地址

IPv6中无此概念

组播地址(224.0.0.0/4)

IPv6组播地址(FF00::/8)

广播地址

IPv6中无此概念

未指定的地址0.0.0.0/32

未指定的地址::/128

环回地址127.0.0.0/8

环回地址是::1/128

公网IP地址

全球单播地址

私网IP地址(10.0.0.0/8,172.16.0.0/12以及192.168.0.0/16)

唯一本地地址(FD00::/8)

APIPA地址(169.254.0.0/16)

链路本地地址(FE80::/10)

IPv6地址使用建议

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值