第一章IPV6地址概述RFC3513.docx
《第一章IPV6地址概述RFC3513.docx》由会员分享,可在线阅读,更多相关《第一章IPV6地址概述RFC3513.docx(24页珍藏版)》请在冰豆网上搜索。
第一章IPV6地址概述RFC3513
IPV6综述
第一章IPV6地址概述-RFC3513
共有3种类型的IP地址,长度为128位。
1.单播
标识一个单独的接口。
2.任播
标识一组接口(一般情况下属于不同的节点),发送给任播地址的报文将会被传递到该组接口其中之一(根据不同协议的最近的一个)。
3.多播
标识一组接口(一般情况下属于不同节点),发现多播地址的报文会传递到它的每一个成员。
IPV6中已经没有广播地址了,他的功能被多播取代。
1.1地址和地址前缀的文本表示法
1.X:
X:
X:
X:
X:
X:
X:
X
IPV6地址长128比特,可以表示成由:
隔开的8个16比特段。
例如:
FEDC:
BA98:
7654:
FEDC:
BA98:
7654:
3210
每一个X代表4位的16进制数,没有必要写出前导的0,例如0000可以写为0
2.压缩表示法
:
:
标识一组或多组16进制的0。
1080:
0:
0:
0:
8:
800:
200C:
417A==1080:
:
8:
800:
200C:
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==:
:
3.当处理IPV6和IPV4混合环境的时候,可以有另一种便利的表示法
X:
X:
X:
X:
X:
X:
d.d.d.d
X代表16进制数(用于嵌入在IPV6中的IPV4数据的表示),d代表10进制,4个d表示标准的IP地址格式。
4.地址前缀的文本表述
IPV6地址/前缀长度
1.2地址类型
地址类型
前缀
IPV6记号
未指定地址
00...0(128bit)
:
:
/128
环回地址
00…1(128bit)
:
:
1/128
多播地址
11111111
FF00:
:
/8
Link_local单播
1111111010
FF80:
:
/10
Site_Local单播
1111111011
FEC0:
:
/10
可聚集全局单播地址
001…
2000:
:
/3
任播地址单播地址空间中取得,于单播地址在语法上没有明显的区别。
比较新的草案中建议删除site-local地址,原因之一是site-local地址本身无法区分属于哪个site,参见draft-ietf-ipv6-deprecate-site-local-02.txt。
1.3单播地址
有如下几种类型的单播地址:
globalunicast全球单播
site-localunicast本站点单播
link-localunicast本链路单播
1.3.1接口标志符
唯一标识一个接口,要求在一个子网前缀下是唯一的。
对于所有除了二进制000开始的单播地址,接口标志符要有64位,并且按照改进的EUI_64格式构建,例如通过在MAC地址的公司标识符后插入FFFE并设置全球/本地比特为1,可以将MAC地址转变为EUI-64格式的接口标识符。
MAC地址
0000.0C0A.2C51
MAC地址的二进制表示
000000000000000000001100000010100010110001010001
在分配的公司和制造商标识值之间插入FFFE
0000000000000000000011001111111111111110000010100010110001010001
全球/本地比特设为1,表示全球范围
0000001000000000000011001111111111111110000010100010110001010001
EUI-64标识
:
0200:
0CFF:
FE0A:
2C51
1.3.2未指定地址
0:
0:
0:
0:
0:
0:
0:
0表示缺少地址,它不能应用于任何一个节点。
他的一个用途是一个刚初始化的主机不知道自身的IP地址,则在发送的数据包的源地址可以使用该未指定地址。
该地址决不能被用作目的地址。
源地址是该定地址的报文也决不应该被路由器所转发。
1.3.3环回地址
单播地址0:
0:
0:
0:
0:
0:
0:
1被称为环回地址。
不应该被指定到任何一个物理接口。
用于节点向自身发送报文。
被当作link_localscope处理。
环回地址决不能被用作离开节点的报文的源地址。
该地址作为目的地址的报文也决不能离开本节点以及被路由器转发。
接口收到目的地址是环回地址的报文必须被丢弃。
1.3.4全局单播地址
格式如下
|3|13|8|24|16|64bits
+--+-----+---+--------+--------+-------------------------------------------------------+
|FP|TLA|RES|NLA|SLA|InterfaceID|
+--+-----+---+--------+--------+-------------------------------------------------------+
<--PublicTopology-------->Site
<-------->
Topology
<------InterfaceIdentifier----->
其中:
FPFormatPrefix(001)格式前缀
TLAIDTop-LevelAggregationIdentifier顶层聚集标识
RESReservedforfutureuse保留字段
NLAIDNext-LevelAggregationIdentifier次级聚集标识
SLAIDSite-LevelAggregationIdentifier站点级聚集标识
INTERFACEIDInterfaceIdentifier接口标识
Newformat(TLA&NLAwereobsoleteinRFC3513&3587)
|3|45bits|16bits|64bits|
+---+--------------------------+--------------+----------------------------+
|001|globalroutingprefix|subnetID|interfaceID|
+---+--------------------------+--------------+----------------------------+
全局路由前缀通常是在层次结构下,为某一个site(一般是子网或链路群)指定的值。
子网ID是该site内部的一个链路的标志符。
接口ID见前文所述。
1.3.5带有嵌入IPV4地址的IPV6地址
1兼容ipv4的ipv6地址
该传输机制,允许在IPV4传输框架上使用动态IPV6隧道。
使用该技术的IPV6节点的单播地址在低32位携带了一个全局的IPV4地址,该类型的地址命名为“兼容ipv4的ipv6地址”,其格式如下:
0……0(80bit)
0..0(16bit)
Ipv4地址(32bit)
注意:
该IPV4地址必须是全局唯一的单播地址。
2映射Ipv4的IPV6地址
用于将IPV4地址表示为IPV6地址。
格式如下:
0……0(80bit)
1..1(16bit)
Ipv4地址(32bit)
1.3.6局部使用的IPV6单播地址
有两类局部单播地址:
link_lcoal和site_local。
1Link_local:
格式如下:
1111111010(10bit即FE80)
0(54bit)
接口ID(64bit)
该地址用于单个的链路中的寻址,例如邻居发现、自动地址配置等(不经过路由器)。
路由器决不能将link-local类型源地址或目的地址的报文转发到其他链路。
2Site_local:
1111111011(10bit)
子网ID(54bit)
接口ID(64bit)
该地址用于在无需全局前缀的一个site的范围内的寻址。
路由器决不应该将有site_local的源地址或目的地址的报文转发到该site外面。
1.4任播地址
标识一组接口,往往属于不同节点,送到任播地址的报文将被送到该组地址中的“最近的”一个。
(对于该最近的解释是根据路由协议对于距离的定义)。
该类地址从单播地址空间中分配,使用任何已定义的单播地址格式。
因此任播地址从语义上无法和单播地址进行区分。
当一个单播地址被赋予多个节点的时候它就是一个任播地址。
被赋予该地址的节点必须被明确的配置为知道该地址是任播地址。
任播地址的一个应用是标识在某一特定子网上的所有路由器组成的集合或者可以使报文到达某一路由器集合从而可到达特定路由区域。
1.4.1必要的任播地址
子网路由器的任播地址是预定义的,格式如下:
Nbit子网前缀
0(128-n位)
子网前缀标识了一个特定的链路。
任播地址语义上和链路接口的接口标志符设置为0的单播地址是相同的。
发给子网路由器任播地址的包文将会被发送到该子网的一台路由器,要求所有的子网路由器都支持该路由器所在端口的子网的子网路由器地址。
子网路由器任播地址用于一个节点想要和一组路由器之一进行通讯而设计的。
1.5多播地址
11111111(8bit)
标志(4bit)
范围(4bit)
组ID(112bit)
前导字节0xFF是多播地址的开始标志。
标志:
格式为“000T”其中
T=0代表由IANA(internetassignednumberauthority)分配的周知的多播地址
T=1代表暂时的多播地址
范围:
用于限制多播组的范围,如下表:
值
描述
0
保留
1
本节点范围
2
本链路范围
5
本站点范围
8
本组织范围
E
全球范围
F
保留
组ID:
在给定范围内标识多播组。
下表列出一些常见的多播组:
IPV6公认多播地址
IPV4公认多播地址
多播组
本节点范围
FF01:
0:
0:
0:
0:
0:
0:
1
224.0.0.1
所有节点地址
FF01:
0:
0:
0:
0:
0:
0:
2
224.0.0.2
所有路由器地址
本链路范围
FF02:
0:
0:
0:
0:
0:
0:
1
224.0.0.1
所有节点地址
FF02:
0:
0:
0:
0:
0:
0:
2
224.0.0.2
所有路由器地址
FF02:
0:
0:
0:
0:
0:
0:
5
224.0.0.5
OSPFrouter
FF02:
0:
0:
0:
0:
0:
0:
6
224.0.0.6
OSPFDR
FF02:
0:
0:
0:
0:
0:
0:
9
224.0.0.9
RIProuter
FF02:
0:
0:
0:
0:
0:
0:
D
224.0.0.13
PIMrouter
本站点范围
FF05:
0:
0:
0:
0:
0:
0:
2
224.0.0.2
所有路由器地址
一种特殊类型的多播地址是被请求节点(solicited-node)地址。
被请求节点多播地址由每一个分配了单播和任播地址的接口创建及分配。
该地址与本链路地址不同,使用接口ID的后24比特与前缀FF02:
0:
0:
0:
0:
1:
FF00:
:
/104组成。
例如:
MAC0000.0C0A.2C51
EUI-64:
:
200:
CFF:
FE0A:
2C51
本链路地址FE80:
:
200:
CFF:
FE0A:
2C51
本站点地址FEC0:
:
200:
CFF:
FE0A:
2C51
被请求节点多播地址FE02:
:
1:
FF0A:
2C51
使用接口ID的后24比特组成被请求节点多播地址可以减少节点必须加入的多播地址。
被请求节点多播地址的一个应用是在ND(NeighborDiscovery)中。
1.6节点所需地址
主机需要识别如下地址
1.每一个接口的本链路地址
2.所有分配的单播地址
3.环回地址
4.所有节点多播地址
5.与每个单播和任播地址对应的被请求节点多播地址
6.该节点所属的任何其他组的多播地址
除上述地址外,路由器还需要识别如下地址:
1.每个路由器接口的子网任播地址
2.其他的所有配置的任播地址
3.所有路由器多播地址
第二章IPV6概述-RFC2460
2.1介绍
ipv6是ipv4【RFC791】的下一个版本,对ipv4的主要更改如下:
✓扩展的寻址性能
地址大小从32位增加到128位
支持更高级别的寻址层次
更大的寻址空间
更简单的地址自动配置
通过在多播地址域中增加了“scope”域,使多播路由的可预测性得到了增强。
定义了一种新的地址类型“anycastaddress”,用它向一组节点中的任何一个发送数据包。
✓简化了头格式
一些ipv4头的字段被删除或者作为可选以降低包处理过程中common-case处理花销,同时限制了ipv6头的带宽花销。
✓增加了扩展项和选项的支持
ipv6头设计使转发更有效,选项长度限制更少以及使未来引入新的选项更加灵活。
✓flowlabeling功能
引入目的是可以标记包属于特定的流,从而可以对该包进行该流要求的特定的处理,例如非默认的QOS或实时服务。
✓身份认证和保密能力
IPV6指定了认证、数据完整性和数据加密(可选)的扩展。
2.2IPV6头结构
Version(4位)
Trafficclass(8位)
Flowlabel(20位)
Payloadlength(16位)
Nextheader(8位)
Hoplimit(8位)
Sourceaddress(128位)
Destinationaddress(128位)
Version:
固定为6
Trafficclass:
流类别
Flowlabel:
流标记
Payloadlength:
非负整数,记录载荷长度(包含任何在头部后面的字节,任何扩展头被认为是载荷部分),以字节计数。
Nextheader:
标记了紧跟IPV6头的头类型(例如ICMP,UDP,TCP等)。
Hoplimit:
跳限制,减到0则丢弃该包。
(类似TTL)
Sourceaddress:
源地址
Destinationaddress:
目的地址。
如果routeheader扩展头存在的话,可能不是指最终接受者的地址。
可以看到,虽然IP地址从IPV4的32位扩展到了IPV6的128位,但最小IP头长度只从20字节扩展到了40字节。
2.3IPV6扩展头
IPV6扩展头放置在IPV6头和上层协议头之间。
一个IPV6包可以携带0到多个扩展头。
每个扩展头被前一个头的nextheader字段所标记。
举例如下:
IPV6头
Nextheader=TCP
TCPheader+data
IPV6头
Nextheader=routing
Routingheader
Nextheader=TCP
TCPheader+data
除了每一跳选项,其他的扩展头在传输路径中不被检查,直到到达目的节点。
这种机制使路由器部需要处理可能只与目的节点相关的信息。
每一个扩展头的内容和意义决定了下一个扩展头是否被处理。
因此扩展头的处理必须严格按照它在包中出现的顺序。
接受者不应该扫描整个包以获取并优先处理特定的扩展头。
为了保证后继的扩展头8字节对齐,每个扩展头的大小是8字节的整数倍。
IPV6的完全实现包含如下扩展头:
Hop-by-hopoptions每一跳选项头
Routing(type0)选路头
Fragment分段包头
Destinationoptions目的地选项头
Authentication认证头
EncapsulatingSecurityPayload封装安全净荷头
1.Hop-by-HopOptionsHeader
逐跳选项头用于携带在报文发送路径上必须被每一个节点检查的可选信息,当上一个头的nextheader字段为0的时候表示本扩展头为逐跳头。
逐跳选项头必须紧随在IPV6头之后。
功能类似IPV4的ROUTERALERT选项。
2.RoutingHeader
被IPV6的源用作列出途中将要经过的节点。
功能类似于ipv4的宽松源站选路。
3.FragmentHeader
用于源站为了适应路径MTU而进行的分片。
格式如下:
Nextheader
Reserve(8bit)
Fragmentoffset(13bit)
Res(2bit)
M(1bit)
Identification
类似IPV4标志头部中的分片信息,IPV6将其放在扩展头中而不是标准头部,因为中间节点不必处理分片信息,分片仅仅在目标节点进行重新组装。
4.DestinationoptionsHeader
该选项头仅仅被目的节点进行检查。
只有这个选项可能出现2次,一次是源站选路的每个下一跳,一次是最终的目的地址。
5.AuthenticationHeader
该包头试图为IP包提供认证以及完整性。
IP包中到达目的地之前传输过程中不改变的字段都将用作计算认证信息。
在认证信息的计算中可能改变的字段,例如跳数限制,作为全0处理。
IPv6中的AH与其他扩展头一起使用时,必须置于那些将由中间路由器处理的扩展头之后,及那些只能由数据报目的地处理的扩展头之前
6.EncapsulatingSecurityPayloadHeader
完整性与保密性由封装安全净荷ESP提供。
可以ESP与AH连用来提供认证。
ESP将需要加密保护的字段加密后放入ESP头的数据部分。
存在两种封装模式:
隧道模式与传输模式。
在隧道模式中ESP将整个IPV6数据包加密后放入封装字段。
将ESP头用作新的未加密的IPV6头。
在传输模式中,ESP头仅将传输层会话(TCP,UDP,ICMP等)加密后放入封装字段,ESP头位于传输层之前。
第三章IPV6功能
3.1ICMPV6-RFC2463
实现IPV6的节点必须完全实现ICMPV6。
错误报告和许多IPV6功能,例如MTU路径发现,邻居发现等都使用ICMPV6来实现。
ICMP消息的一般格式如下:
Type(8bit)
Code(8bit)
Checksum(16bit)
Messagebody
ICMP报文有两种:
差错消息和信息消息
1.差错消息的MessageType
范围:
0―127
1目的地址不可达。
Code值有以下几种:
1无路由
2因管理原因禁止访问
3(未指定)
4地址不可达
5端口不可达
2报文太长
3超时。
Code值有以下几种:
1跳数限制到0
2分片重组超时
4参数错误
Code值有以下几种:
1错误的包头字段
2无法识别的下一包头类型
3无法识别的IPV6选项
2.信息消息的MessageType
范围:
128-255
128回显请求
129回显应答
3.2ND(NeighborDiscovery邻居发现协议)-RFC2461
3.2.1介绍
ND协议解决了同一链路上的节点交互涉及的一系列问题,包括:
RouterDiscovery:
主机如何定位在同一链路上的路由器。
PrefixDiscovery:
主机如何发现一系列on-link的地址前缀。
on-link表示在同一链路。
IPV6允许同一链路上配置不同前缀的主机相互访问。
ParameterDiscovery:
节点如何获得链路参数(如MTU)、Internet参数(如hoplimit)等的参数值。
AddressAutoconfiguration:
节点如何自动配置一个地址。
Addressresolution:
如何获知on-link目的地的链路层地址。
Next-hopdetermination:
找到下一跳目的地址的算法。
NeighborUnreachabilityDetection:
节点如何知道邻居不可达,
DuplicateAddressDetection:
节点如何知道想要使用的地址没有被其他节点使用。
Redirect:
重定向。
在IPV4中需要许多协议,包括DHCP,ICMP路由器发现,路由协议和ARP等才能提供上述功能的一部分。
ND使用ICMPV6来实现上述功能,ND试图通过将所有功能集成到IPV6的必要部分ICMPV6中来改进IPV4。
3.2.2报文类型
ND定义了五种不同的ICMP报文类型。
所有ND报文中的跳数限制必须设为255。
如果非本链路设备向本链路发送ND报文,经过路由器后跳数减1,使该包非法。
1.路由器请求RouterSolicitation
当一个接口使能时,主机可以发出报文来请求路由器立即产生RouterAdvertisement,而不是等到下一个周期。
Type(133)
Code(0)
Checksum
Reserved
Options
源IP地址:
是分配给发送主机的地址。
如果发送者还没有分配地址,则使用未指定地址:
:
0。
目的IP地址:
一般是所有路由器多播地址。
可能的选项包括:
源链路层地址。
当源IP地址为:
:
0时不允许包含发送者链路层地址选项。
2.路由器通告RouterAdvertisement
路由器周期地发送通告,或者对请求作应答。
路由器在通告中告知节点配置自己所必要的信息。
Type(134)
Code(0)
Checksum
Curhoplimit
M
O
Reserved
Routerlifetime
Reachabletime
Retranstimer
Options
源IP地址:
必须是路由器的link-local地址。
目的IP地址:
是发送路由器请求的节点地址或本链路范围所有节点多播地址。
CurHopLimit:
用于外发报文IP头部的缺省hoplimit的值,0表示路由器不指定。
M:
1bit,“managedaddressconfiguration”标记。
如果该位设定表示除了使用无状态自动地址配置,主机有状态的被管理协议进行自动地址配置。
O:
1bit,“otherstatefulconfigruation”标记。
如果该位设置表示主机使用有状态的被管理协议配置非地址的其他自动配置项目。
Routerlifetime:
16bit,以秒为单位的缺省的计数器。
最大值是18.2小时。
0表示该路由器不应该出现在主机的缺省路由器列表中。
ReachableTime:
32bit无符号整数。
以毫秒为单位。
在此时间限定内主机获得可达性通告则表明邻居可达。
用于邻居不可达检测算法。
0值表示未指定。
RetransTimer:
32bit无符号整数。
毫秒为单位。
转发邻居请求消息的时间。
用于地址解析和邻居不可达检测算法。
0值表示未指定。
可能的选项:
1.源链路层地址
在RA中包含源链路层地址省去主机在默认路由器