一、IPV6

1 IPV6概述

1.1 为什么发明IPV6?

  • IPV4数量有限(2^32个),已经在2010年分配耗尽,需要想办法解决这问题
  • 虽然后续使用NAT(包括后来的CG-NAT技术),暂时解决了这个问题,但是使用NAT难以做到真正的“端到端”通信,限制科技的发展和通信的速度(假如使用NAT穿透的话,也会影响效率)
  • 且使用端到端通信也意味着需要很多的IP地址
  • 综上主要原因就发明了IPV6

1.2 IPV6的特点

  • 128bit,IP空间大(IPV4才32bit)
  • 多等级层次有助于路由,提高因特网网络路由的效率和扩展性
  • IPV6地址可以自动配置,更加便捷(无状态&有状态自动配置)
  • 无状态:通过RS和RA和NS报文实现(作用类似:ARP request/reply/free后面会细说)
  • 有状态:DHCPV6
  • 无需NAT

注:意味着可以实现真正的端到端通信,同时也加快了设备通信的效率

  • 不再使用广播和ARP技术
  • IPV6中只有单播、组播、任波,不存在广播的形式,同时使用ICMP的RS/RA/NS代替ARP的request/reply/free
  • 广播的弊端:只要三层设备能收到广播报文,则都要解封装数据链路层和网络层之后才能判断报文是否是发给自己的,这种行为会对设备的CPU造成负担;所以在IPV6中,很多时候是用组播来代替广播行使功能,因为较之广播,组播的目的MAC是根据组播的目的IP映射而成的,很多时候一个组播的目的IP对应一个协议进程(如OSPF为FF02::5),而接收设备可以根据自身对应接收该组播目的MAC的协议程序是否有开启来判断是否能处理这个报文,也就是说可以在解封装数据链路层时就可以报文是不是发给自己处理的,加快了设备处理报文的速率;
  • ARP技术的:ARP技术实现了网络地址转换,这类技术在网络中是必不可少的,只是由于ARP技术依赖于广播同时自身安全性也不高,所以IPV6使用ICMPV6这个技术来取代他,行使相同的功能
  • IPV6包头相比IPV4更少,对于设备来说处理更快,同时扩展性又更好‘

注:后面会详细介绍报文内容

  • 更加有效的支持可移动性和安全性

2 IPV6报文

在这里插入图片描述

  • 保留的字段
  • Version
    IPV6版本号
  • Source Address
    IPV6地址
  • Destination Address
    IPV6地址
  • 取消的字段(取消原因)
  • Head Checksum
    第二层和第三层网络已经足够健壮,所以取消了验证
  • Options
    ICMPV6中使用新的头部来行使拓展性功能,而放弃使用TLV的形式;扩展头中还有赫赫有名的IPsec头(AH/ESP头)来实现安全支持,可以为上层协议省去安全认证功能(如OSPFV3)
    在这里插入图片描述
  • Frame Offset+Identification
    使用PMTU技术来发从源头发现中间节点的MTU,从而使用最小的MTU来发送报文,防止报文在中间节点被再分片,影响中间节点的设备工作效率;如果真的需要分片,也可以在扩展包头中来实现分片的一些字段的功能
  • 名字位置变化
  • Traffic Class:对应ToS(Type of Service)
  • Payload Length:对应Total Length
  • Next Header:对应Protocal行使索引的功能
  • Hop Limit:对应TTL
  • 新增字段
  • Flow Label:增加QoS的效率

3 IPV6地址

3.1 IPV6编址方式

在这里插入图片描述在这里插入图片描述

3.2 IPV6地址分类

在这里插入图片描述

注:

  • 单播地址(Unicast Address)
    标识一个接口,目的地址为单播地址的报文会被送到被标识的接口
  • 组播地址(Multicast Address)
    标识多个接口,目的地址为组播地址的报文会被送到被标识的所有接口
  • 任播地址(Anycast Address)
    标识多个接口,目的为任播地址的报文会被送到最近的一个被标识接口,最近节点是由路由协议来定义的
  • IPV6没有定义广播地址

以上的地址类型太多了,不方便对比记忆,所以我们省去了部分地址结合与IPv4的比较,来方便读者理解和记忆
在这里插入图片描述

3.2.1 单播-可聚合全球地址

在这里插入图片描述

  • 地址说明
    类比于IPV4公网IP,也就是说该地址前面48位固定不变,可以使用的子网数量就有2^16,每个子网可使用的IP地址数量就有2 ^64
  • 可聚合全球地址的范围
    2000:0000:0000:0000:0000:0000:0000:0000到
    3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
    由此看出,可聚合全球单播地址占IPV6总地址空间的1/8
3.2.2 单播-本地链路地址

在这里插入图片描述

注:接口ID在3.2.6会详细接收获取和配置的方法,这里不赘述

从上面地址的组成结构也能看出,其实链路本地地址内的设备都处于一个“网段”,因为前64bit的网络位都是相同的,自然可以进行通信;
本地链路地址仅在本地有效的情况

  • 情况一、通过交换机连接的设备
    在这里插入图片描述
  • 情况二、通过路由器连接的设备
    在这里插入图片描述
3.2.3 单播-私有本地地址

在这里插入图片描述

  • 类比于IPV4之中的内网IP地址,为了实现公网和内网之间的隔离,保证内部设备不被外部访问,只实现内部互访的需求;

注:该类地址取代了单播中的本地站点地址(Site-Local Address)

3.2.4 组播-基本组播地址

在这里插入图片描述
在这里插入图片描述

注:“FF02”开头的这类IPv6组播地址,从“2”可以看出是“链路本地范围”的组播地址,也就是说需要同网段的设备才可以接收,所以自然源IP地址是“链路本地地址”

在这里插入图片描述

  • 组播MAC映射的目的?
    为了让接收到组播的设备更快判断是否是发给自己的报文(只需要解封装数据链路层就知道了)
3.2.5 组播-被请求节点地址

在这里插入图片描述

3.2.6 接口标识(接口ID)

上面地址组成中很多都涉及到一个东西——接口ID,啥是接口ID呢?

在这里插入图片描述
在这里插入图片描述

  • 为什么电脑系统使用自动产生的方式来生成接口ID而不使用EUI-64的方式来生成?
    因为使用EUI-64生成的IPV6地址(比如链路本地地址),作为源IPv6地址的话,很容易反向推理出设备接口的MAC地址,这对于设备来说存在安全风险,所以选择自动生成的方式来产生接口ID

4 ICMPv6基本

4.1.1 ICMPv6基础

  • ICMPv6是IPv6中的最基础的协议之一

  • ICMPv6的“Next-Header”字段中的协议号为58,写作16进制为3A
    在这里插入图片描述

  • ICMPv6有两种的消息类型,差错消息和信息消息

4.1.2 ICMPv6报文结构即分类

在这里插入图片描述
在这里插入图片描述

  • 对于收到ICMP报文之后,如果出现差错则本地会返回相应的差错ICMPv6报文给发送方,来提示出现差错的类型
  • 注意在返回的ICMPv6的差错报文中还会携带接收到的差错报文的包头来告诉发送方是哪个报文出现的问题,拿20举例:
    在这里插入图片描述

比较常见的差错类型:

  • 10:设备收到报文之后,发现没有目的IPv6地址所在的网段的路由条目
  • 11:设备收到报文之后,发现存在ACL来限制到目的IP的访问
  • 13:设备收到报文之后,发现存在目的IPv6地址所在的网段的路由条目,但是不可达
  • 20:沿途设备收到报文之后,发现需要转发报文的接口的IPv6 MTU值小于报文的容量,则会返回该提示,其中也包含了自身转发接口的MTU的数值,这也是获取PMTU的方法
  • 30:沿途设备收到报文之后,发现“Hop Limit”字段已经为0,此时就会返回该提示,可以逐渐增大“Hop Limit”的数值来做到获取沿途所有的设备的IP地址的目的(类似TraceRoute用TTL字段来获取沿途设备的IP地址的方法)

5 ICMPv6的应用

5.1 PMTU(Path Maximum Transmission Unit)

  • 设计PMTU的目的
    源设备通过特殊方法获取沿途设备转发报文出接口的MTU大小,从而将报文按沿途设备中最小的MTU进行分片发送给目的设备,从而防止了分片过大的情况下沿途转发设备也需要分片的情况,可以让沿途设备更加高效的执行报文的转发功能,减轻沿途设备的负担;

  • PMTU的特性
    单向性——在需要获取PMTU的情况下,只需要获取转发出接口的MTU,类似COST的特性
    被动性——并不是所有报文都会让源设备获取到沿途设备的所有MTU,如果源设备发送的报文的容量很小,根本触发不了沿途设备的ICMP差错消息门槛,则自然源设备也就获取不到这个设备的转发接口的MTU,不过这也说明设备发送的报文容量已经足够小不会让沿途设备再次分片,所以也不需要获取PMTU了;

  • 获取PMTU的本质
    通过ICMPv6的差错消息类报文的20来获取沿途PMTU

  • 获取PMTU的过程
    在这里插入图片描述
    综上看出PMTU的触发过程是被动触发的,当A收到一个MTU大于自己转发出接口的数据报时,会触发PMTU机制,给上游发送ICMPv6的通告报文,来进行数据报的MTU调整,从而防止了中间段分片的发生;

5.2 NDP(Neighbor Discovery Protocol)邻居发现协议

  • 设计目的
    替代ARP实现其获取邻居的接口MAC地址的功能,用邻居表代替ARP表,并且在此基础上提高了安全性和效率;

  • 过程
    注:以下使用的源IPv6地址是“可聚合全球单播地址”,不过并不代表只能使用这个源IP地址
    请添加图片描述在这里插入图片描述

  • 详细状态切换
    (注意:在刚刚发送NS报文的时候,类似于发送ARP request,也会在本地生成一个incomplete的表项)
    在这里插入图片描述在这里插入图片描述
    综上:ICMPv6跟踪邻居状态的目的是为了根据数据流更新缓存表项,以及清除部分不常使用表项;来做到缓存条目的动态更新;

  • 报文详情
    在这里插入图片描述
    为什么没有像ARP一样设置Sender和Tatrget对,只有目的IP和源MAC?
    因为ARP协议不存在三层,所以需要设置这些对来实现数据承载;而NS报文是三层的协议,本身就存在IP层,所以不需要额外的载荷来承载这些数据;而需要承载源MAC是因为可能存在中继等设备使得源MAC出现变化;

5.3 DAD(Duplicate Address Detect)重复地址检测

  • 设计目的:代替免费ARP实现重复地址检测的功能

  • DAD机制使用ICMPv6的NS即NA消息实现

  • 具体机制:
    ■ 当一个IPv6接口激活之后,或者当一个接口获得IPv6地址(无论是有状态或是无状态自动配置),都会启动IPv6地址的DAD机制,以确定该地址在链路上的唯一性;
    ■ 接口的IPv6地址在通过DAD之前称为“tentative地址”也即试验性地址。接口还暂时不能使用这个试验性地址进行正常的单播通讯,除非该IPv6地址通过DAD检测;
    ■ 节点向一个自己将使用的tentative地址所对应的Solicited-Node组播地址发送一个NS
    如果收到了其他站点回应的NA,就证明该地址已经被使用,节点将不能使用该teneative地址通讯;
    如果段时间没有收到NA回应,就自己发送NA,来宣告正式使用该地址;

  • 和IPv4联系
    IPv4在接口配置地址之后也会启动ARP free来侦听链路中是否有其他的设备配置了相同的IPv4地址,如果收到回复则说明地址重复

  • 具体过程
    ■ 发现NS报文的目的IP地址是使用的被请求节点组播地址,目的MAC也是在此之上使用的映射组播MAC,可以在其他非该IP设备收到之后更快的丢弃报文,比ARP的组播更加高效;
    ■ 发现NS报文的源IP地址是使用的"::",因为此时还没有正式使用接口的单播ip,所以用这个填充;
    ■ NA报文的目的IP和MAC还是组播MAC,不过区别于发送的DAD报文,因为R2还没有正式使用接口的单播IPv6地址,所以R1只能用全路径都能收到的FF02::1组播地址;
    在这里插入图片描述

5.4 无状态自动配置

  • 概况
  • 基本介绍
    ■ IPv6 Address Stateless AutoConfiguration
    ■ 在RFC2462中定义,是IPv6最有吸引力和最有用的新特性之一
    ■ 即插即用,IPv6地址无需手动配置
    ■ 主机、网络设备均可以支持

  • 过程详解(理论)
    在这里插入图片描述
    ■ 主机网卡激活之后会自动生成一个IPv6的本地链路地址,此时会对这个地址先进行第一轮的DAD监测其可用性,如果通过则进入下一步;
    ■ 主机网卡发送组播(FF02::1)的RS报文请求获取前缀信息;
    ■ 配置了IPv6接口的设备会单播回复一个单播RA报文,内含自身前缀信息(自身单播IPv6地址的前64位);
    ■ 主机利用获取的前缀信息(64位)加上生成的接口ID(后64位)组成新IPv6单播地址;
    ■ 在使用新地址前也需要进行DAD检测其可用性,如果通过则进入下一步;
    ■ 无状态自动配置过程完成

  • 过程详解(实际)
    在这里插入图片描述
    ■ 配置IPv6接口的设备周期性发送RA报文,内含自身前缀信息;
    ■ 还未配置IPv6单播地址的网卡在收到报文之后,会根据其内部前缀信息生成IPv6单播地址
    ■ 经过DAD
    ■ 无状态自动配置过程完成

  • 一些配置说明
    R9(config-if)#ipv6 nd suppress-ra
    R9(config-if)#no ipv6 nd suppress-ra
    以上两条配置的区别在于,前者会主动周期性自动发送RA信息,而后者不会;不过两者收到RS报文之后都会回复RA信息;

  • 报文分析

在这里插入图片描述

  • Cur hop limit
    表示主机在经过该RA报文成功配置IPv6单播地址之后,发送的报文的IPv6网络层的hop Limit字段的数值为64

  • Flags_M
    当M位置零时(默认),表示接收设备不可以发送DHCPv6报文请求地址信息,只能使用该报文的前缀来自动生成IPv6单播地址
    当M位置一时,表示接收设备可以发送DHCPv6报文请求地址信息

  • Flags_O
    当O位置零时(默认),表示接收设备不可以通过DHCPv6来获取其他的网络信息
    当O位置一时,表示接收设备可以通过DHCPv6来获取其他的网络信息
    在这里插入图片描述

  • Flag
    在这里插入图片描述
    On-link
    置一,表示接收设备经过无状态配置得到的IP地址本地可达
    置零,反之
    Autonomous address-configuration
    置一,表示接收设备不可以使用该前缀来进行无状态自动配置
    置零,反之

  • Valid Lifetime + preferred Lifetime
    在这里插入图片描述

6 ICMPv6小结

6.1 ICMPv6和ARP的对比

  • 报文内容对比
    注:在下面的ICMPv6协议中的 源IP地址,可以是 私有本地地址 / 可聚合全球地址 / 本地链路地址

  • 结合ARP的来理解效果更佳,对于ICMPv6 NS而言
    在请求邻居的MAC时,源IP地址都是出接口的IP地址
    在宣告自己要使用一个接口IP地址之前,源IP地址都是“::

协议类型详细类型源IP目的IP源MAC目的MAC载荷信息
ARPRequest--出接口MAC全F在这里插入图片描述
ICMPv6NS出接口IP被请求节点组播IP(网关IP或者目的IP转换而来)出接口MAC组播IP映射的组播MACTarget Address:目的IP(网关IP)
Link-Layer Address:出接口MAC(可能不是源接口)
ARPReply--出接口MAC单播MAC在这里插入图片描述
ICMPv6NA出接口IP单播IP出接口MAC单播MACTarget Address:目的IP(网关IP)
Link-Layer Address:出接口MAC(可能不是源接口)
ARPFree(Request)--出接口MAC全F在这里插入图片描述
ICMPv6NS::(该符号表示地址全0)配置IP对应被请求节点组播IP出接口MAC组播IP映射的组播MACTarget Address:出接口IP
Link-Layer Address:出接口MAC
ARPFree(Reply)--出接口MAC目的MAC在这里插入图片描述
ICMPv6NA出接口IPFF02::1出接口MAC组播IP映射的组播MACTarget Address:目的IP
Link-Layer Address:出接口MAC
  • 表项创建更新机制对比

ARP表

报文类型更新ARP表条件
免费ARP①ARP表中已经存在报文中对应的target ip(sender ip)的表项
ARP_request①Target_IP为自己
ARP_reply①Target_IP为自己 ②ARP表中已经存在Sender的表项

ICMPv6的邻居表
接收方和发送方更新方式不同,发送方更新方式为绿色,接收方为橙色
在这里插入图片描述

  • 思考?
    1 为什么在已知目的IP的情况下,仍然要用被请求组播地址来作为NS报文目的IP?(就是取代ARP Request 报文的NS报文)
    答:主要原因——达到二三层的统一性,因为二层封装缺少目的MAC,而IPv6系统不使用广播所以只能使用组播,所以IP也要用组播;而为了尽量加快接收到报文的设备对报文的判断效率,所以需要使用特殊的组播MAC,而特殊的组播MAC就需要使用特殊的组播IP来做映射,这个组播IP就是被请求节点的组播IP;

6.2 自动配置的分类

在这里插入图片描述

  • 优势分析
    ■ 自动配置较手动配置更加便捷和高效
    ■ 无状态自动配置较有状态自动配置更简单,同时不需要对设备的性能做要求
    ■ 有状态自动配置由于使用DHCPv6,所以需要设备支持DHCPv6以及DHCP中继等,所以对设备的性能有要求,但是分配信息更加可视化也更容易管控

6.3 命令总结

  • 设备即端口开启IPv6功能

R12(config)#ipv6 unicast-routing
R12(config-if)#ipv6 enable

  • 查看状态的切换和报文收发

R12#debug ipv6 icmp
R12#debug ipv6 nd//查看邻居状态切换

  • RA-计时器设置

R12(config-if)#no ipv6 nd suppress-ra//不开启ra报文抑制
R12(config-if)#ipv6 nd ra-interval//ra报文发送间隔设置

  • 接口通过RA配置IP

R12(config-if)#ipv6 address autoconfig default//加上default可以将发送RA的路由器IP作为默认路由下一跳ip

  • RS-flags字段设置

R12(config-if)#ipv6 nd managed-config-flag//M位置1
R12(config-if)#ipv6 nd other-config-flag //O位置1

  • RS-flag字段设置

R12(config-if)#ipv6 nd prefix 2012::/64 20 10 off-link//off-link置位
R12(config-if)#ipv6 nd prefix 2012::/64 20 10 no-autoconfig//no-autoconfig置位
输入数字左到右依次为:前缀和掩码,valid时间,preferred时间

  • 其他大部分命令和ipv4类似,只是在需要输入ip的地方改为ipv6即可

7 DHCPv6

  • DHCP基础配置
    在这里插入图片描述
    在这里插入图片描述
  • DHCP-PD
    在这里插入图片描述

8 思考

1、IPv6增加链路本地地址的原因?为什么OSPFv3等协议使用链路本地地址作为源地址?
2、IPv6增加被请求节点地址的原因?为什么NS Request已近知道了目的IP地址,还是用被请求节点地址?
3、IPv6删除广播的原因?为什么取消ARP?
4、ICMPv6跟踪邻居状态的目的?
5、无状态自动获取和DHCPv6结合的方法?
6、为什么没有像ARP一样设置Sender和Tatrget对,只有目的IP和源MAC?

1、用于在没有配置 私有本地地址/可聚合全球地址 的情况下,用这个地址通过 无状态自动获取 的办法获取需要使用的地址,以及在未配置真实地址下的邻居的发现,和路由的发现;OSPFv3,使用本地链路地址作为源地址,减少了配置的复杂性,不需要手动配置IP地址再开启协议;同时,也是一种转发层和控制层IP的分离,也更方便IP管理;同时,使用链路本地地址,就意味着是个局部性的概念,可以控制OSPFv3的启用范围;
2、一种组播地址,用于在NS Request中作为目的IPv6地址使用,可以快速帮助接收设备判断是否是发送给自己的报文,较广播效率更高占用资源更少;因为,需要做到二层和三层地址的映射统一,既然二层的目的MAC未知,如果三层使用明确的单播地址,二层目的MAC将不好操作,所以最好的选择就是二层三层全部使用组播地址,且二层的组播地址是三层的被请求节点组播地址的映射地址;同时,中间设备(如交换机)处理组播的速度比未知单播的速度快,也是加快出整体的处理速度;
3、占用了较多的资源,需要解封装多层才可以判断报文是否是发给自己的,整体的处理速度也没组播快;ARP使用广播地址作为目的地址是一方面,同时ARP本身的安全性也不高,容易受到攻击;
4、通过跟踪邻居状态,来动态的管理ICMPv6的邻居表项;
5、通过RS报文中的M位和O位,来实现和DHCPv6的联动;

M和O值表示含义
M=0,O=0通过无状态自动配置获取IPv6地址,通过手动配置等非DHCPv6方法获取其他配置
M=0,O=1通过无状态自动配置获取IPv6地址,通过DHCPv6获取其他配置
M=1,O=0通过DHCPv6获取IPv6地址, 通过手动配置等非DHCPv6方法获取其他配置
M=1,O=1通过DHCPv6获取IPv6地址,通过DHCPv6获取其他配置

6、因为ARP协议不存在三层,所以需要设置这些对来实现数据承载;而NS报文是三层的协议,本身就存在IP层,所以不需要额外的载荷来承载这些数据;而需要承载源MAC是因为可能存在中继等设备使得源MAC出现变化;

在华为三(H3C)模拟器中配置静态IPv6对于网络设备来说通常涉及以下几个步骤: 1. **初始化网络结构**: - 创建四台PC(计算机),台路由器,以及两台交换机。 - 分配各自的端口给每个设备,例如PC1、PC2、PC3、PC4分别连接到交换机的相应端口。 2. **配置路由器**: - 给路由器分配个全局唯IPv6地址,作为默认网关,可以使用`fe80::/64`范围内的链路本地地址,如`2001:db8:1::1/64`。 - 配置IPv6路由表,将其他PC的前缀设置为静态路由。 3. **配置交换机**: - 每个交换机上需要配置VLAN(虚拟局域网)并给每个端口指定个VLAN ID,以便分隔不同的PC。 - 对于连接到路由器的端口,启用IP转发功能。 4. **配置PC**: - PC上开启IPv6支持,并手动配置静态IPv6地址,比如PC1: `2001:db8:1::2/64`,PC2至PC4类似,各自分配不同的地址。 - 配置DNS和网关信息,指向路由器的地址。 5. **验证连接**: - 使用ping6命令检查是否能相互之间通信,如果成功则说明IPv6静态配置完成。 ```markdown - 路由器配置示例(仅提供基本框架): ``` Router# configure terminal Router(config)# interface Ethernet0/1 Router(config-if)# ip address 2001:db8:1::1/64 Router(config-if)# ipv6 neighbor pc1-ip fe80::1 Router(config-if)# exit Router(config)# static route ::/0 next-hop 2001:db8:1::1 - PC配置示例: PC1# config terminal PC1(config)# interface eth0 PC1(config-if)# ipv6 address 2001:db8:1::2/64 PC1(config-if)# ipv6 router-advertisement PC1(config-if)# end ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辽胜于无

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值