分享

IPV6的工作原理

 和相品 2021-01-26

IPV6如何通信
通信的时候用了哪些协议
原理
首先提一下IPV6包头的改进
1.取消了三层校验
2.取消中间节点分片功能,采用源端分片,通过PMTU来发现路径MTU
3.定义IPV6报头的固定长度,有利于加快硬件处理速度,如此一来可以大大缓解中间节点压力。
4.增加流标签:提高QoS的效率
5.安全选项的支持,IPV6提供了对IPsec的完美支持,如此上层协议就可以省去许多安全选项,如OSPFV3就取消了认证。

IPV6的工作原理

IPV6(Internet Protocol version 6)是网络层协议的第二代标准协议,也被成为IPng(IP Next Generation),他是Internet工程任务组(IETF)设局的一套规范
说起来IPV6就要提一提目前广泛部署的IPV4协议。
IPV4协议族是TCP/IP协议族中最为核心的协议族。主要包括ARP(地址解析协议),ICMP(互联网消息协议),TCP(传输控制协议),UDP(用户数据报协议)等等。
在这里插入图片描述
MAC地址处于数据链路层
IPV4地址
IPV4地址是由32位二进制数值组成的,但为了方便用户记忆,采用了点分十进制表示法。
如:00001010 00000001 00000001 00000010
采用点分十进制表示方法为10.1.1.2

IPV4的地址由两部分组成:

  • 网络号字段(Net-id)。网络号字段用来标识一个网络,网络号码字段的前几位用来区分IP地址的类型。
  • 主机号字段(Host-id)。用来区分同一网络内不同主机,对于网络号相同的设备,无论实际所处的物理位置如何,他们都是在同一个网络内。

IPV4地址的分类及其范围
A类 0.0.0.0~127.255.255.255
B类 128.0.0.0~191.255.255.255
C类 192.0.0.0~223.255.255.255
D类 224.0.0.0~239.255.255.255(组播地址)
E类 240.0.0.0~255.255.255.255(255.255.255.255保留为局域网广播地址)
目前大量使用的地址是ABC三类。D类是组播地址,E类保留。
ABCDE类,类别字段区分是二进制0/10/110/1110/1111。通过对比网络号字段前几位就可以判断出IP地址属于哪一类
在这里插入图片描述
私有IPV4地址:为了解决IP地址短缺的问题,提出私有地址的概念。私有地址只能用于内部网络,不能用于公共网络。
A类:10.0.0.0~10.255.255.255
B类:172.16.0.0~172.31.255.255
C类:192.168.0.0~192.168.255.255

IPV4地址采用32比特标识,理论上能够提供43亿(由于地址分配原因,实际可使用的数量不到43亿)另外IPV4地址分配不均衡。并且目前移动IP与宽带技术的发展需要更多的IP地址,目前IPV4地址以及消耗殆尽。IPV6应运而生
IPV6
128位的地址结构使IPV6理论上可以拥有
在这里插入图片描述
号称可以给地球上每一粒沙子分配IP地址
IPV6地址包括128bit,由冒号分隔得32位十六进制数表示。
如:2031:0000:130F:0000:0000:09C0:876A:130B 这是IPV6地址首选格式。
IPV6还支持压缩格式

  • 每组中前导0都可以省略如上述地址可以写成:2031:0:130F:0:09C0;876A;130B
  • 地址中包含的两个连续或多个连续均为0的组,可以用双冒号::来代替,所以上述地址又可以进一步简化:
    2031:0:130F::9C0:876A:130B.
    注意:IPV6地址中只能使用一次::双冒号
    IPV6地址结构
    网络前缀(N bit)+接口标识(128-N bit)

接口标识生成方式:
1.手工配置:网络管理员手工配置,便于管理,但是配置较为复杂,容易出错。
2.系统软件自动生成:由操作系统自动生成,可保证全球唯一,冲突概率很低。如windows系统
3.EUI-64规范自动生成,用于生成64bit的接口标识,使用MAC地址生成也可保证全球唯一。将MAC非常两个部分各24bit,从中间插入FFFE,组成64bit
如MAC地址为00e0-fc22-7f95(48bit)
接口标识则为:00e0-fcff-fe22-7f95(64bit)

IPV6地址分类
1.单播地址 特殊地址
::1/128:环回地址,类似IPV4中的127.0.0.1
::/128未指定地址 类似IPV4中0.0.0.0
全球单播地址:要求全球唯一类似IPV4中的公网IP。
前48位的全局路由前缀+16子网ID+64位的接口ID组成
在这里插入图片描述
目前已分配前缀3bit为 001,通常全球路由前缀至少为48bit

链路本地地址
在这里插入图片描述

  • 链路本地地址,有效范围为本地链路
  • 以FE80::/10 为前缀,第11位—64位为0,外加一个64位接口标识。
  • 链路本地地址,用于自动地址配置、邻居发现等

唯一本地地址
类似IPV4私网地址,仅仅只能在内部使用。
在这里插入图片描述
前缀固定为FC00::/7。
L:L标志位;值为1代表改地址为本地网络范围内使用的地址;值为0倍保留,用于以后拓展。
Global ID:全球唯一前缀;通过伪随机方式产。
Subnet ID:子网ID;划分子网用。
Interface ID:接口标识。
唯一本地地址具有以下特点:

  1. 全球唯一前缀(虽然随机产生但是冲突概率很低)。
  2. 可以进行网络之间私有连接,而不必担心冲突问题。
  3. 方便边缘路由器进行路由过滤,知名前缀(FC00::/7)
  4. 如果出现路由泄露,不会跟其他路由产生冲突,并且不会造成Internet路由冲突。
  5. 应用中,上层程序将这些地址看做全球单播地址对待。
  6. 独立于ISP

IPV6组播地址
组播前缀:8bit,固定为全球知名前缀FF00::/8
Flag:4bit,目前只用最后一个bit,前三个bit为000,最后一个bit为0则表示该地址为永久组播地址,最后一个bit为1则表示改地址为临时组播地址
在这里插入图片描述
scope:4bit,用于表示改地址定义组播流传递的范围
group id:112bit,其中前80bit用0填充,后32bit用于表示组播组ID。
几个常见的IPV6组播地址:

  • FF02::1 链路上的所有节点
  • FF02::2链路上所有的路由器
  • FF02::9链路上所有的RIP路由器
  • FF02::5链路上所有的OSPF路由器
  • FF02::6链路上所有的OSPF DR路由器

特殊IPV6组播地址:
被请求节点组播地址 FF02::1:FFxxx:xxxx/104

因为在IPV6中没有广播地址,所以在进行DAD检测或者地址解析时需要使用广播地址,IPV6中定义了一个被请求节点组播地址实现广播地址的功能。每个IPV6节点对应的被请求节点组播地址都不一样。改地址前104bit固定为FF02::1:FF00:0/104,后24bit为该IPV6节点的单播地址的后24bit当某个IPV6节点生成了一个IPV6单播地址后,会默认加入该单播地址对应的被请求节点组播地址的组播组。
IPV6任播地址
主要用于IPV6移动特性,没有分配独立的地址空间,使用和IPV6单播地址共同的空间。并且任播地址仅可分配给路由器,不能应用主机。任播地址不能作为IPV6报文的源地址。
在这里插入图片描述
地址结构ok
IPV6如何通信,使用了那些协议。
其中最重要的ICMPv6 类似IPV4中ICMPv4
ICMPv6 (Ineternet Control Message Protocol for the IPV6)是IPV6基础协议之一。
基于IPV6协议,next-header为58,ICMP定义了一些消息如:目的不可达,数据包超长,超时,回应请求和回应应答等等。而ICMPv6除了提供ICMPv4常用的功能外,还提供了其他一些功能基础,如邻居发现,无状态地址配置,重复地址检测,PMTU发现等等。
在这里插入图片描述
报文中各个字段解释如下:

  • Type:表明消息的类型,0-127标识差错报文类型,128-255标识消息报文类型。

  • code:表示此消息类型细分的类型。

  • checksum:标识ICMPv6报文的校验和。
    ICMPv6错误报文的分类:ICMPv6错误报文用于报告在转发IPV6数据包过程中出现的错误。可分为以下4种
    1.目的不可达错误报文
    当IPV6节点转发IPV6报文过程中,发现目的地址不可达时就会向发送报文的源节点发送ICMPv6目的不可达差错报文,同时会携带具体原因。
    通过实验抓包来验证一下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    按下面拓扑图配置好IPV6地址。同时AR1,AR3写一条默认路由都指向AR2
    在这里插入图片描述
    在这里插入图片描述
    此时AR1已经能够ping通AR3
    在这里插入图片描述

    目的不可达错误报文Type字段值=1,根据错误又可细分

  • 目的不可达code=0

在这里插入图片描述

  • 因管理原因禁止访问(如ACL拒绝等等)code=1
    算了直接写吧,出不来效果
    code=2未指定
    code=3地址不可达
    code=4端口不可达
    数据包过长
    Type=2
    code=0
    我们把AR2 G0/0/1接口MTU值改为1300
    在这里插入图片描述
    然后AR1pingAR3我们制定数据包1500字节
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
并且会告诉我们MTU为1300
这个也就是PMTU实现,依靠ICMPv6
时间超时错误报文
Type字段值为3
错误原因又可以分为
code=0:在传输中超越了跳数限制
code=1:分片重组超时
参数错误报文
Type=4 根据错误又可以细分为
code=0:IPV6基本头或者拓展头某个字段有错误
code=1:IPV6基本头或拓展头的Nextheard值不可识别
code=2:拓展头中出现未知的选项
在这里插入图片描述
总结:ICMPv6中
差错检查报文type值,code值又可细分

  1. 目的不可达
  2. 数据包过长
  3. 时间超时
  4. 参数错误
    信息报文type128.129
    1.echo request和echo relay:一般用于ping功能检测连通性
    2.RS,RA,NS,NA:NDP协议中使用。

Path MTU(路径MTU)
在这里插入图片描述
如图:AR1要发送一个1500字节的数据包给AR3
那么此时就要在AR1上执行分片使数据包大小等于路径最近MTU也就是1300
值得一提是IPV6链路MTU最小值为1280。
在这里插入图片描述
在这里插入图片描述
这个是利用ICMPv6里面packet too big字段完成的
我们可以使用命令dis ipv6 pathmtu all来查看路径MTU
在这里插入图片描述
在这里插入图片描述
NDP(Neighbor Discovery Protocol)是ICMPv6的子协议,***
由于在IPV6中没有ARP协议,所以IPV6上层定义NDP协议实现ARP的地址解析,冲突地址检测等功能,以及IPV6的邻居发现功能。

在这里插入图片描述
地址解析
R1要访问R2直连接口,需要得到R2的MAC地址。优点如下:
NDP:
1.工作在网络层,过攻击能力比ARP要强
2.使用组播机制,提高工作效率。
3.地址解析在三层完成,可以使用不同的二层介质。

  • NS报文:Type字段135,code=0,类似IPV4中ARP请求报文
  • NA报文:Type字段136,code=0类似IPV4中ARP应答报文

工作流程如下:
在这里插入图片描述
(1)R1会发送一个NS(邻居请求报文,属于ICMPv6的消息报文,type=135),该报文源IP为AR1接口的单播地址2012::1,目的地址是AR2的被请求节点地址,需要解析的目的地址为AR2的IPV6地址。
由于AR2配置了单播地址2012::2后就默认计入了该单播地址对应的被请求组播地址FF02::1:FF00:2
上面写了被请求节点组播地址固定前缀FF02::1:FF00:0/104 ,前104bit为固定,后24bit为IPV6节点单播地址的后24bit
所以当前节点组播地址为FF02::1:FF00:2
在这里插入图片描述
值得一提的是目的MAC地址也是组播MAC,固定前缀33:33:后32bit为该组播节点地址的后32bit。所以目的MAC地址为33:33:FF:00:00:02
在这里插入图片描述
(2)当AR2收到AR1的NS报文后,通过查看该报文中要解析的地址是不是自己接口的单播地址
在这里插入图片描述
是自己,则单播回应NA
NA报文中携带了AR2的2012::2对应的MAC地址。
在这里插入图片描述
这样邻居检测就完成了。通过AR2回应的NA报文就知道AR2上IPV6单播地址对应的MAC地址了。
重复地址检测DAD(Duplicate Address Detect)
和IPV4中免费ARP差不多
当一个IPV6接口获得了IPV6地址(无论是有状态或者无状态配置)都会启动IPV6的DAD机制,以确保该地址在链路上的唯一性。
DAD机制使用ICMPv6的NS以及NA消息实现。
在这里插入图片描述
配置一样的地址(先配AR2,再配AR1),并且开启抓包。
IPV6地址在通过DAD检测之前称为试验地址,此时这个地址不能进行单播通信。但是仍然会加入组播组
此时AR2会发送一个NS报文询问网络中有没有人使用
在这里插入图片描述
在这里插入图片描述.该地址源IP为“::”表示此时AR2还没获取到地址,目的IP为要检测的单播IPV6地址的节点组播地址FF02::1:FF00:12,源MAC为AR2的MAC,目的MAC为该节点请求节点组播地址映射的IPV6组播MAC:3333-FF00-0012。报文中使用Target对要检测的ipV6单播地址进行标记。
此时由于AR3上已经配置了2012::12/64这个单播地址,所以会监听该单播地址对应节点组播地址的组播组。所以AR3能够收到并且检查AR2发送的NS报文中标记的地址是否是自己所使用的,如果是,则AR3回应NA报文,该报文中源ip为AR3的IP 2012:12,目的IP为FF02::1(ipv6所有节点组播地址),此时AR2收到该报文,发现地址以及被AR3使用,所以放弃使用该地址。
如果没有人使用这个地址,则AR2会发送NA消息宣告这个地址我已经使用。
在这里插入图片描述
小结:DAD请求NS报文:源IP:"::",目的IP:节点组播IP
源MAC:自己 目的MAC:节点组播IP映射的MAC
Target:标记了要检测的IPV6单播地址
冲突后回应 :NS报文:源IP:冲突的地址
目的IP :FF02::1(所以IPV6组播节点地址)
MAC:自己MAC
目标MAC:目的IP映射的MAC
Target:标记了冲突的地址
在这里插入图片描述
路由发现–无状态地址自动配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们在AR3接口配置了IPV6单播地址2012::12/64,并且开启RA报文(路由器通告,ICMPv6消息报文,type=134)AR3会周期发送RA报文中携带了该接口的IPV6单播地址前缀2012::/64
在这里插入图片描述
该报文的源IP是AR3的G0/0/0的链路本地地址,目的地址为FF02::1(所以节点组播地址);源MAC为AR3的MAC,目的MAC为FF02::1映射的MAC地址3333-0000-0001
在这里插入图片描述
当AR2通过AR3周期发送的RA报文获得前缀,华为设备通过EUI-64规范自动生成64bit的接口标识,得到IPV6单播地址。
并且经过地址冲突检测后,才可以使用,没通过则需要进行手工配置。
写在最后小结:
IPV6通信的时候使用哪些协议,ICMPv6是一个重要的协议(DAD,重复地址检测,NDP,地址解析,PMTU,路径MTU)这些都是IPV6在最基本的通信,需要使用的。当然OSPFv3,RIPng等等也是。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多