IPv6的一些特殊地址
IPv6的一些特殊地址
2008年7月3日第二次修正!
昨天是修正了地址部分,本想发上来的,没来得及。今天修正了NDP协议,接下来会是路由和转换部分。
总结一下各协议的精华:OSPF在于LSA,BGP在属性和策略,IPV6在地址和NDP协议,组播的精华在哪呢?嗯,想起来了,在PIM SM模式中源树的共享树的形成和收敛过程。
有时候想想,或许我该去考考IE
第一次总结:
颠覆,又是一个颠覆!否定之否定!
大致的过了一遍,不懂的甚多,诸如被请求节点多播地址什么时候用,怎么个用法等,还得继续深入!
有许多不懂的问题,不知两位老师是否愿意解答?
问题一、邻居发现协议NDP在向外发送NS邻居请求时为什么要用被请求节点的组播地址,用所有节点的组播地址不就OK了?已解决,因为有DAD重复地址检测。
问题二、为什么一台路由器不同接口的link local地址会是一样的(用ipv6 enable)?
问题三、本地链路地址到底起什么作用?为什么ping不通?
R1#ping ipv6 FE80::C800:5FF:FE4C:0
Output Interface: s1/0
% Bad interface
这可真是大大的郁闷!
问题四:为什么一端用手工写的全局地址一端借用EUI-64格式的全局地址P不通?
问题五:什么叫本地链路?被请求节点组播地址在本地链路起作用,那么DAD冲突检测也只是检测本地链路上有没有重复地址么?
问题六:FF02::16这个地址是做什么的?为什么在NS查询的时候会发送数据包到这个地址?
问题七:为什么串口上不建立邻居关系?
一、IP地址短缺的原因:
1、因分类的减少:因分类,有D、E两大类地址不能使用,A、B、C三类中又有私有地址、本地链路地址、本地环回地址、广播地址不能使用,因而大大减少了可用的IP地址数目。
2、地址分配的不合理:
3、器由器、交换机物理接口、环回接口的占用;
4、新的地址需求的快速增长
二、节省和解决ip地址紧缺的方法
1、VLSM和CIDR:VLSM让IP地址划分更加精确,CIDR使得可以汇总超过主类网络边界的路由条目,减少了路由条目的数量
2、私有地址和NAT地址转换
3、IPV6
三、ipv4的局限性
1、地址空间的局限性:43亿的地址却只有2.5个亿能用。2011年到2012年就将耗尽
2、安全性:IPV4在网络层没有安全性可言,不能实现端对端的加密安全。
3、nat破坏了internet端到端的网络模型
4、ipv4地址分配杂乱无章,没有层次性,不可汇聚,网络设备需要维护庞大的路由表项
5、ipv4包头过于复杂,使得网络节点处理的效率不高
四、nat的局限性
1、破坏了端到端的IP模型;
2、端到端用户到用户的安全与加密不能被实现;
3、每个条目都会占用64K的内存,而且还有一个生存期,极大的占用内存资源;
4、增加了路由查询的延迟、增加了CPU的负担;
5、PAT基于端口映射,故那些基于端口的应该不能被实现,如web.
6、那些内嵌IP地址的应用程序不见得能支持NAT(无法支持,不能总改来改去吧)。
五、IPV6的高级属性
1、更大的地址空间:
这些地址全球可达
全新的地址分配,使得合理的聚合成为可能
多重初始地址
2、自动配置:
无状态自动配置,IPV6的技术核心,通过NTP协议实现
即插即用:plug and play
自动重编址
3、更简单更有效的IP包头
更大,但结构简单
没有了广播,代之以组播
没有检验。少了一个检查和重写的步骤,大大提高了路由器的性能。
扩展包头
流标签
4、移动性和安全性
mobile ip with direct routing
端到端的ipsec
5、QOS
6、组播:ipv6中的IGMP取消了,代之以MLD;PIM中的DM模式被取消了;MBGP
7、与IPV4的兼容
(1)双站:优选IPV6,次选IPV4
(2)6to4的Tunnel:在IPV6的头外面再加一个IPV4的头在IPV4的网络中进行传输。
(3)Nat转换:网络层的转换、传输层的转换、协议(ipv4和ipv6)的转换
(4)应用层网关进行转换
六、IPV6地址
1、更大的地址空间
长度为ipv4地址的4倍
总地址数量:3.4*10的38次方个地址
平均每个人:5*10的28次方个地址
2、地址格式
8个组,每个组用4个16进制的数组成.前导的0可以省略,后面的0则不能省;双::代表连0,但只能用一次;http地址写成如下格式:[url=http://[2001::1]:80/index.htm]http://[2001::1]:80/index.htm[/url]
3、IPV6单播地址
(1)未指定的地址,环回地址和ipv4兼容地址:全0的地址为未指定地址,在没有可用地址时,当作点位符使用。::1为环回地址,相当于ipv4中的127.0.0.1.ipv4兼容地址为::+ipv4地址,或者写成16进制。
(2)link local:在接口启用IPV6之后就会产生一个这样的地址,仅在本地链路使用,按64位的接口ID自动配置。格式为FE80+54个0+64位的接口ID。范围为FE80::/10
(3)site local:相当于IPV4的私有地址。格式为:FEC0+38个0+16位的子网ID+64位的接口ID.原来的定义为FEC0::/10,新标准为Unique local,范围为FC00::/8和FD00::/8
(4)全球可聚合单播地址:作为普通应用的IPV6地址。格式为:48位的全球可路由的前缀+16位的子网ID+64位的接口ID。其中最前面3位由IANA掌握,紧跟着的13位为TLA顶级聚合字段,用于互联网骨干的汇总,接下来的8位为RES区域,再下来的24位为NLA网络层聚合,子网ID为站点管理,接口ID标识主机。范围为:2000---3FFF(目前已定义)。3FFF为6骨干使用,非商业化使用。2002为6to4的Tunnel使用。2001为商业化使用。向上汇聚为/48位。
4、IPV6组播地址FF00::/16
(1)格式:FF+Lifetime+Scope+112bit的组ID
其中Lifetime为0代表永久,为1代表暂时的
Scope:为1代表本地接口范围
为2代表本地链路范围
为3代表本地子网范围
为4代表本地管理范围
为5代表本地站点范围
为8代表组织机构范围
为E代表全球范围
(2)保留地址:FF0X::(X=0~F)
FF02::1在本地链路起作用,代表所有的节点
FF02::2在本地链路起作用,代表所有的路由器
FF02::9在本地链路起作用,代表所有的RIP路由器
FF02::1:FFXX:XXXX/104在本地链路起作用,代表被请求节点的组播地址。其中一个被请求节点的组播地址的后24位为本地链路地址的后24位,或者说是mac地址的后24位。如果手工配置了全局IPV6地址,还会产生与这些地址相对应的被请求节点的组播地址,格式为FF02::1:FF+这些地址的最后24bit。每一个全局单播地址和站点地址,都会产生一个这样的被请求节点的组播地址。如果配置的地址借用了EUI-64格式,因为产生的结果地址是一样的,所以在接口信息下只显示一条。每个节点都会监听本设备上所有这些被请求节点组播地址,用于响应查询信息。
FF05::101在本地站点有效,代表所有的NTP服务器
5、IPV6的任意播地址:N位的前缀+(128-N)位的接口ID
6、 节点必须与可选的地址:
(1)link local地址:FE80::/10--------------------必须
(2)loopback地址::1-----------------------------必须
(3)site local/Unique local地址:FEC0::/8或者FC00::/8、FD00::/8-----可选
(4)Auto-configured 6to4地址--------------------可选
(5)被请求节点组播地址FF02::1:FFXX:XXXX---------必须
(6)所有节点的组播地址FF02::1-------------------必须
(7)Global地址:---------------------------------可选
7、一个接口可以有多个IPV6地址,但在进行通迅时选用最大的
8、IPV6与二层技术
(1)几乎所有链路层技术都能支持IPV6:以太、PPP、FDDI、token ring、HDLC、NBMA、ATM、帧中继、IEEE1394
(2)IPV6拥有一个特定的以太协议ID,0X86DD
(3)组播在以太网中的映射:将FF02+5组0压缩为33:33:+IPV6组播地址最后的32bit
IPV4的映射为0x005e.....
(4)本地链路地址的获得方法:EUI-64、自动配置、DHCP、手工写:
EUI-64格式,本质是将48位的MAC地址变为64位的接口ID,做法是将接口mac地址从中间一分为二,并加进FFFE,然后将第7个二进制位置1(置1为本地链路,置0为全局唯一),即得到本地链路地址。
手动配置本地链路地址:R1(config-if)#ipv6 address fe80::1 link-local
借用EUI-64格式:R1(config-if)#ipv6 add 2001:2::/64 eui-64 指定网络号为2001:2::/64,主机地址由eui-64获取(直接取自本地链路地址)。这个是为让其他地址也借用EUI-64格式。注意这时只会产生一个EUI-64格式的被请求节点的组播地址。
七、IPV6地址的获取方式
1、手工写
2、自动配置:
(1)邻居发现协议NDP:自动前缀分发,然后节点自己加上接口ID(只用于主机)
(2)借用EUI-64格式地址
(3)DHCP
八、配置
1、R1(config)#ipv6 unicast-routing 启用IPV6单播路由功能
R1(config-if)#ipv6 enable
R1(config-if)#ipv6 address
九、IPV6包格式
(1)格式:版本+traffic class+流标签+负载长度+下一个包头+hop limit+源地址+目标地址+下一个包头+扩展包头信息+DATA
traffic class相当于IPV4中的TOS字段
流标签:二十个比特长度。因为ipv6包文中去掉了协议号和包含端口号的可选项,故不能识别数据流,为此弄了一个流标签,在鉴别流的时候由5元组变为了3元组。配合traffic class实现QOS。
因为去掉了可选项,因此IPV6的包头总是定长的。
(2)与IPV4的比较:
保留的字段:可以沿用的是版本字段、源地址和目标地址字段
去掉的字段:IHL(ipv4的包长度分为总长度和包头长度,包头长度可变,IPV6中没有包头选项,不需要关心头部长度,是固定的,只需要一个总长度即可。)、分片标志,分片标识,分片偏移、checksum字段
替换的字段:TOS替换为traffic class,TTL变为hop limit,协议号变为下一个包头
新增的字段:流标签
十、NDP邻居发现协议
1、作用:
(1)替代IPV4中的ARP,用于三层和二层的映射,以完成数据包的封装;替代ICMP的重定向和路由器发
(2)建立邻居关系
(3)主机(只能对主机工作)用来发现路由器,并获得ip地址
(4)重复地址检查(DAD)
2、实现
(1)5种消息报文
RS(Router solicitation):ICMP v6类型为133.主机向路由器发送,用于获得路由前缀和缺省路由
RA(Router advertisement):ICMP V6类型为134.路由器的响应报文。
NS(Neighbor solicitation):ICMP V6类型为135.节点向被请求节点的组播地址发送这个报文,收到这个报文的节点返回自己的二层地址,并以此建立邻居表.
NA(Neighbor advertisement):ICMP V6类型为136.节点返回的报文
Redirect:ICMP v6 类型为137
注:
icmp v6在扩展包头中的编号为58
icmp v6作用:路径mtu发现
NDP协议依赖于本地链路上的ICMP消息
RS/RA只会在以太接口上出现,因为思科默认只有以太口才接主机。
(2)主机获得路由前缀和默认路由的过程
通过RS/RA报文来实现
主机首先向路由器发送一个RS路由器请求报文,数据包源地址为主机的本地链路地址,目标地址为所有节点的组播地址FF02::1,目的是为了确定自己的路由前缀和获得缺省路由。
路由器在收到RS报文后返回一个RA响应报文,数据包源地址为路由器本地链路地址,目的地址为所有节点组播地址。数据为选项、前缀、生存时间、自动配置标记。路由器每隔200秒周期性的通告RA到所有节点组播地址ff02::1。
(3)邻居发现和建立的过程
以太网上主机会主动发RS查询,路由器也会主动发RA通告,如果有主机存在那么主机和路由器之间会建立邻居关系。如果只有路由器,将只在有数据流量时才会建立邻居,并且依赖的是ICMP信息。
这时节点向对方节点的被请求组播地址发送NS查询,源地址为本节点的全球可聚合单播地址,数据部分为本节点的本地链路地址,目的是为查询对方本地链路地址.
其他节点在收到这个报文之后返回一个NA的单播响应数据包,源地址为自己的全球可聚合单播地址,目的地址为原发送节点的全局地址,数据部分为自己的本地链路地址,同时将对方加进自己的邻居表.NA只在刚开始加入IPV6进程和收到NS请求时发送。
发送NS的那个节点在收到返回的NA数据包后,将对方加进自己的邻居表.
至此,二三层映射完成!
(4)DAD冲突检测
一个设备或者一个接口加入IPV6,首先假定自己的本地链路地址(或者说是MAC地址)与网络上的其他MAC地址不冲突,并发送一个源地址为空(代表不需要回应)目标地址为本设备上自己的被节点请求的组播地址(最后24bit为自己本地链路地址的后24bit)的数据包.
因为所有节点都监听以自己的被请求节点组播地址的最后24bit为最后24bit的组播地址,所以当来了一个最后24bit和自己的被请求节点组播地址相同的被请求节点组播地址的数据包,这个设备会立马返回一个冲突的信号,申明这个地址已被占用。(如果冲突,发送DAD信息的那个节点接下来该怎么办?)
如果没有返回冲突信号,则发送DAD信息的节点会认为自己的本地链路地址唯一。这时该节点再发送一个NA通告。
(5)节点加入过程
第一步确定自己的本地链路地址合法并发送本地链路地址的NA通告:一个节点加入IPV6域时,首先发送源地址为空目标地址为FF02::16(这个是什么地址?做什么的?)的DAD,然后发送一个源地址为空,目标地址为本节点本地链路地址的NS查询信息,以确保自己的地址在本地链路唯一。收到返回的DAD查询信息后确定是启用还是不启用接口。如果本地链路地址唯一,则启用接口并发送一个源地址为自己本地链路地址目标地址为所有节点组播地址的NA邻居通告。这时还发送一个源地址为本地链路地址目标地址为FF02::16的数据包(这又是做什么的?)。
第二步确定全局地址合法并向外发送全局地址的NA通告:接下来发送一个源地址为空,目标地址为自己全局地址的NS查询,还发送一个源地址为自己的全局地址,目标地址为FF02::16的查询,确定这个全局地址唯一后发送NA通告,源地址为自己的全局地址,目标地址为所有节点组播地址。然后这个地址被启用。
如果是以太接口,且下面有主机,路由器还会发送RA路由器通告,源地址为路由器接口本地链路地址,目标地址为所有节点组播地址。(本地链路地址就是用来发RA的,怎么理解?)
以太链路上主机和路由器之间会主动形成邻居关系,路由器之间有流量才建立邻居.串口上好像不建立邻居.
(6)接口邻居发现协议信息及修改
R2(config-if)#do sh ipv int
FastEthernet0/0 is administratively down, line protocol is down
IPv6 is enabled, link-local address is FE80::C800:5FF:FE4C:0 [TEN]-----以EUI-64格式自动算出来的link local地址。
No global unicast address is configured
Joined group address(es):
FF02::1 所有结点地址,用于到达同一个链接上的所有结点
FF02::2 所有路由器地址,用于到达同一个链接上的所有路由器
FF02::4 所有“距离矢量组播路由协议(DVMRP)”路由器地址,用于到达同一个链接上的所有DVMRP组播路由器
FF02::5 所有“开放式最短路径优先(OSPF)”路由器地址,用于到达同一个链接上的所有OSPF路由器
FF02::6 所有指派的(OSPF)路由器地址,用于到达同一个链接上的所有指派的OSPF路由器
FF02::1:FFXX:XXXX 请求结点地址,用在地址解析过程中,以便将链接本地结点的IPv6地址解析为它的链接层地址。
请求结点地址的最后24位(XX:XXXX)是IPv6单播地址的最后24位
FF02::1:FF4C:0 被请求节点组播地址,路由器会监听所有这些地址,用于DAD冲突检测和邻居请求,响应查询信息MTU is 1500 bytes
ICMP error messages limited to one every 100 milliseconds
ICMP redirects are enabled
ND DAD is enabled, number of DAD attempts: 1-----------------邻居发现DAD信息,尝试次数
ND reachable time is 30000 milliseconds----------------------邻居发现可达成的或获得的时间(做什么用的?)
ND advertised reachable time is 0 milliseconds---------------NA可达成的或获得的时间(做什么用的?)
ND advertised retransmit interval is 0 milliseconds----------NA重传时间
ND router advertisements are sent every 200 seconds----------RA发送周期
ND router advertisements live for 1800 seconds---------------RA生存期
Hosts use stateless autoconfig for addresses.----------------无状态自动配置模式,非DHCP配置
修改:
R2(config-if)#ipv6 nd ?
advertisement-interval Send an advertisement interval option in RA's
dad Duplicate Address Detection
managed-config-flag Hosts should use DHCP for address config
ns-interval Set advertised NS retransmission interval
other-config-flag Hosts should use DHCP for non-address config
prefix Configure IPv6 Routing Prefix Advertisement
ra-interval Set IPv6 Router Advertisement Interval
ra-lifetime Set IPv6 Router Advertisement Lifetime
reachable-time Set advertised reachability time
suppress-ra Suppress IPv6 Router Advertisements --------抑制RA,不发RA通告
(6)用NDP来替代ARP和ICMP
要ping通一个地址(全球可聚合单播地址或本地站点地址),首先在邻居表里得有这个地址和邻居MAC地址的对应表项。
然后发送一个源地址为本地全局单播地址或本地站点地址,目标地址为以邻居表里邻居单播地址后24位为后24位的被请求节点的组播地址,网络上如果还存在这个地址的路由器,那么它会监听并返回响应数据包。这个返回的数据包是一个NA邻居通告,源地址为自己的全局单播地址或本地站点地址,目标地址为对方的全局单播地址或本地站点地址。此时邻居关系被重新激活。
查看Debug信息所得:首先两台路由器之间并未建立邻居关系,邻居表里并不存在对方的相应条目。这时要P对方,路由器会发送一个源地址为本节点全局地址目标地址为对方全局地址的节点请求组播地址的NS查询。这时因为会找不到邻居的MAC地址,数据包会封装失败。于是路由器会以源地址为本节点全局地址,目标地址为对方节点请求组播地址的数据包完成封装,因为对于节点请求的组播地址,在二层以太网上的MAC地址是33:33:+IPV6组播地址最后的32bit,而节点请求的多播地址的最后24bit就是对方全局IPV6地址的后24位,故存在二三层的映射,于是数据包被封装进而被发送出去。这个时候NS查询的源地址为本节点全局地址,目标地址为对方节点被请求节点组播地址,数据部分为本节点MAC地址。对方收到后将被请求节点多播地址转换为请求节点地址,并返回一个单播NA通告,以此建立邻居表项。
对比一下,DAD和ICMP V6都用到了NS/NA,但作用和用法不尽相同:
DAD中NS是为了在网络中找寻自己的mac地址,源地址为空,目标地址为自己的被请求节点的组播地址;
icmp v6中NS是为了找寻网络中对方的MAC地址,源地址为自己,目标地址为对方的被请求节点组播地址
十一、IPV6路由
(1)静态路由:ipv6 route 2001:2::/64 Serial1/0 先开启IPV6单播路由
(2)动态路由:
R1(config)#int s1/0
R1(config-if)#ipv6 rip cisco enable
全局模式开启协议则可调其他属性
十二、GRE隧道
(1)环境:两边是IPV6,中间是IPV4
(2)目的:实现IPV6的对接
(3)配置:
R1(config)#interface tunnel 0
R1(config-if)#tunnel source s1/0
R1(config-if)#tunnel destination 10.1.23.2
R1(config-if)#ipv6 enable
R1(config-if)#tunnel mode ipv6ip
R1(config-if)#ipv6 address 2001:1::3/64
理解得简单一点就是把tunnel或者隧道当成自己的一个接口就行了,其他的该怎么做怎么做。