6000+长文,只为讲清IPv6基础知识点

 

目录

更多免费内容,尽在G Z H :数通那点事

 一、IPv6的报头

(一)IPv4的报头内容

(二)IPv6报头

二、IPv6的基本知识点

(一)IPv6的表示

(二)IPv6地址的压缩

(三)EUI-64简述

A.具体转换方式如下:

B.需要注意的是:

C. eui-64的优缺点:

三、IPv6单播地址

(一)未指定的回环地址

(二)本地链路地址

(三)可聚合全球地址

(四)唯一本地地址

(五)IPv4兼容地址

(六)本地链路地址,唯一本地地址,可聚合全球地址的区别

四、IPv6组播

(一)IPv6 组播基本知识点                                                                    

A.组播的地址范围

B.组播地址格式

C.ip组播与组播mac地址的映射

(二)被请求节点组播地址                                                     

A.特点    

B.地址格式    

C.作用    

五、 任播                                                                                 


更多免费内容,尽在G Z H :数通那点事

 一、IPv6的报头

 今天我们聊聊IPv6的报头。下图是思科ppt上的一个对比图,个人感觉还是比较直观的,我们就以这张图来梳理IPv6的报头内容。

对比图

(一)IPv4的报头内容

       首先,我们先重新回顾一下IPv4的报头内容,对于这个内容比较熟悉的朋友可以直击跳过:

1.Version(4位)用来表明IP协议版本,如果是IPv4协议,为0100(也就是十进制的4)

2.IHL(Internet Header Length)来记录头部的总长度。

3.Type of Service 服务类型。Type of Service最初是用来给IP包分优先级,比如语音通话需要实时性,所以它的IP包应该比Web服务的IP包有更高的优先级。后来,Type of Service被实际分为两部分:Differentiated Service Field (DS, 前6位)和Explicit Congestion Notification (ECN, 后2位),前者依然用来区分服务类型,而后者用于表明IP包途径路由的交通状况。

4.total length 总长度,包括报头的长度和数据的长度。

5.Identification标识,用于区分不同的数据报。

6.flags,标定是否进行了分段。

7.fragment offset,分段偏移量,在分组太大的时候,提供分段和重组功能。

8.Time to Live最初是表示一个IP包的最大存活时间:如果IP包在传输过程中超过Time to Live,那么IP包就作废。后来,IPv4的这个区域记录一个整数(比如30),表示在IP包接力过程中最多经过30个路由接力,如果超过30个路由接力,那么这个IP包就作废。IP包每经过一个路由器,路由器就给Time to Live减一。当一个路由器发现Time to Live为0时,就不再发送该IP包。

9.Protocol,用来说明上层协议的端口,也就是IP包之上的协议是什么(tcp为6,udp为17)。

10.Header Checksum区域。这个checksum用于校验IP包的头部信息。

11.Source Adrresss表示源IP地址。

12.Destination Address表示目的地的IP地址。

13.options.用于网络测试,调试,安全。

下图是通过ensp模拟器抓包时的ip报头,大家可以对照的再次回顾一下各报头的含义和作用。

(二)IPv6报头

  下面我们来看IPv6报头:
       保留的内容:IPv6的报头保留了IPv4报头中的version,Source Adrresss,Destination Address。

 变动的的内容:

1.Payload Length用来表示IPv6的数据部分的长度。整个IP包为40 bytes + Payload Length。

2.Hop Limit区域,IPv6用于记录的也是最大路由接力数,与IPv4的Time to Live功能相同。Hop Limit避免了IP包在互联网中无限接力。

3.Next Header,与IPv4的Protocol功能一致,用来说明上层协议的端口。

4.Traffic Class在IPv6中也被如此分成两部分。通过IP包提供不同服务的想法,并针对服务进行不同的优化的想法已经产生很久了,但具体做法并没有形成公认的协议。

新增的区域:

Flow Label是IPv6中新增的区域。它被用来提醒路由器来重复使用之前的接力路径。这样IP包可以自动保持出发时的顺序。这对于流媒体之类的应用有帮助。

  删除了6项内容:

1.IHL(Internet Header Length)来记录头部的总长度。因为IPv6的报头总长度是固定的40字节。

2Header Checksum区域。IPv6的校验依赖高层的协议来完成,而且我们都知道,不仅高层协议有校验,在二层的封装上,也有FCS进行校验。因此,IPv6删除了这个区域。

3.options。因为IPv6没有options,它的头部是固定的长度40 bytes,所以IPv6中并不需要IHL区域。

4.Identification标识,用于区分不同的数据报。

5.flags,标定是否进行了分段。

6.fragment offset,分段偏移量,在分组太大的时候,提供分段和重组功能。

下面是IPv6在ensp中的抓包数据。

二、IPv6的基本知识点

(一)IPv6的表示

首先,我们在设备上进行IPv6地址的配置。需要注意的是,在配置IPv6地址的时候,首先要在全局开启IPv6,然后进入接口后,还需要再次开启IPv6的服务。

为了让大家全面的了解IPv6地址的表示,在配置地址的时候是使用的完全表示,当我们使用dis this命令进行查看的时候,显示的地址是压缩表示的方法。

从IPv6的完全表示方式来看,IPv6的地址是由8组4个16进制数来表示的,共128位(ipv4是点分十进制,由4组4个十进制数来表示,共32位),

后面的64表示的是前缀长度,与ipv4的前缀表示方式一样。a,b是十六进制数10,11的表示。

(二)IPv6地址的压缩

地址压缩规则主要有以下四点:

1.每个组前导的0可以省略,比如0101可以省略成101,

2.如果该组所有都为0,则可以写成一个"0",比如0000可以省略为0

3. 若连续2个或者多个组都为0,则可以使用"::”代替,

4."::"这只能出现一次

(三)EUI-64简述

EUI-64是一个产生IPV6接口ID的方式。主要实现将接口mac转为接口ipv6的ip,命令为

A.具体转换方式如下:

1.先获取到接口的硬件地址,可以在全局模式下输入dis int g0/0/0

通过查看,该接口的硬件地址为:5489-9828-2a5a

2.将FFFE从硬件地址的正中间插入,变成:5498-98FF-FE28-2A5A

3.将第7位进行置位,

4.加上设定的前缀,组成新的IPv6的地址。

B.需要注意的是:

1.如果给定的前缀不满足64bit,在接口ID部分往前补0.

2.如果前缀超过64bit,华为会报错,思科是进行截取。

C. eui-64的优缺点:

优势:能够尽可能的避免地址的冲突。

缺点:可由链路地址反推网络地址,存在一定的安全隐患

1.地址空间:FE80:: ~FEBF:FFFF(之后各组都为FFFF)

2.范围:仅在广播域内有效,不能跨越3层网络

3.产生方式:

    a.自动产生,由FE80:: /10作为前缀和EUI-64产生接口ID部分,比如下图

    

b.自己设定,具体命令如下:

通过设定可以看出本机的LLA的变更

Tips:

     ::为保留地址,类似有ipv4中的 0.0.0.0                                                       

     :: 1是回环地址  类似于ipv4中的127.0.0.1

图一:IPv6地址梳理 

三、IPv6单播地址

(一)未指定的回环地址

A :: /128  类似于IPv4中的0.0.0.0,主要是用于ICMPV6的DAD(重复地址检测)中。

B ::1/128  是回环地址,类似于IPv4中的127.0.0.1,用于检测本机IP协议是否安装成功。

(二)本地链路地址

a.本地链路地址的范围是FE80::~FEBF:FFFF....

b.当你在接口开启IPv6的应用时,接口会生成一个本地链路地址,用于本广播域内的通信。所以,即便没有给接口设置IPv6的地址,在本广播域中,仍然能够进行通信。而且不同广播域内的本地链路地址可以相同。

c.本地链路地址的产生方式有自动产生和人工设定两种方式,具体详见(NO.2 IPv6的基本知识点)

d.本地链路地址是一个二层地址。不能够进行三层的通信,一般在网络中,遇到FE80的地址,路由器会自动进行过滤。

(三)可聚合全球地址

a  类似于IPv4中的公网地址。范围是2000::~3FFF:FF.....

b 由全局路由前缀,子网ID和接口标识组成

全局路由前缀:由提供商制定给一个组织机构,一般至少48bit,目前已经分配的全局路由前缀的3bit均为001,因此前缀为2000::/3,在实际使用中,个人可以实际需求进行购买,长度不固定。

子网:与IPv4中的子网号作用相似,用于自身内部子网的划分,子网ID通常最多划分到64位。

接口标识:用于表示链路上的接口,主要由三种生成方式,1.手工配置,2.系统通过软件自动生成,3.通常使用的EUI-64方式生成。

PS:以上所说的都是一般情况下,在图中,m,n都是可变的,并不是固定的长度,m+n一般等于64bit,但也可超过64bit。

c 在IPv6地址梳理图中显示的的三个地址分别是2001::/16 2002::/16  3FFE::/16:

2001::/16 是前公网的地址从这个网段开始划分的;

2002::/16 是6to4的兼容隧道,用于IPv6与IPv4之间的通信

3FFE::/16 公共IPv6研究所使用的地址,目前该研究所已经废止了,目前该段地址还有没有进行重新分配需要进行查看。

(四)唯一本地地址

本地站点地址目前已经被唯一本地地址(FC00::/7)所取代,类似于IPv4 的私有地址,唯一本地地址中,“本地”指的就是该地址是一个本地的地址,内部的地址,私有的地址,而“唯一”的意思就是说这个地址是唯一的,即便是在公网上,他也能确保唯一性,不像IPv4的私有地址,任何内网都可以使用。具体格式如下:

prefix:唯一本地地址的固定前缀,FC00::/7,从二进制来看,就是1111 110 是固定的。

L:是表示该地址是本地范围内被使用的,他永远是置位为1的,L=0还没有被定义。换句话讲:就是目前我们所指的唯一本地地址都是FD开头的IPv6地址。

global ID:全球的唯一前缀,指端地址是向提供商进行购买的,提供商分配的global ID是唯一的。他的生成方式是由RFC4193提供的一套算法进行生成。具体如下图,大家可以简单了解一下。

subnet ID:子网ID,根据自身的实际情况进行划分。

interface ID:接口ID,一般根据EUI-64的方式生成。

(五)IPv4兼容地址

目前已经不被使用了。他是在IPv6的格式中内嵌IPv4的地址。具体方法是在ipv4地址前用0补齐,如下图:

(六)本地链路地址,唯一本地地址,可聚合全球地址的区别

关于本地链路地址,唯一本地地址,可聚合全球地址这三者的区别。

对于刚接触IPv6的小伙伴对于这三个地址的作用还不是太清楚,为什么要有这么多地址?

那下图来讲,本地链路地址只能够在广播域内使用,路由器不会去转发本地链路地址,所以,他只能够在各部门内部中进行使用,如果我想访问其他部门,则必须使用路由器可以进行转发的可聚合全球地址,如果说,你只是在内部网络里进行通行,你可以随便设置可聚合全球地址,如果你要接入公网,那必须向提供商申请可聚合全球地址。唯一本地地址一般用于军事机构等特殊集体。

四、IPv6组播

(一)IPv6 组播基本知识点                                                                    

组播地址是用来标识一组接口,发往组播地址的数据将被转发给侦听该地址的多个设备。

A.组播的地址范围

IPv4组播地址范围是224.0.0.0~239.255.255.255。其中224.0.0.0~224.0.0.255分配给控制协议,比如224.0.0.5,225.0.0.6就是ospf协议中的组播地址。

IPv6组播地址范围是FF00::/8,简单来说就是FF开头的IPv6地址都是组播地址。

B.组播地址格式

IPv6组播地址格式如图:

前8bit为固定的1111 1111。即FF

flags:占位4bit,用于标识永久组播地址还是临时组播地址。

            如果flags为0表示永久组播,

           其他如图。

scops:占位4bit,表示组播的范围。

                0:预留

                1.节点本地范围

                2.链路本地范围  例如:FE02::1

                5.站点本地范围

                8.组织本地范围

                E:全球范围

                F:预留

Reserved:还没有定义,目前这80bit必须保持为0。

group ID:组播组ID,共32bit。

常见的预定义组播地址如下:其中node-local的两个常用于研发人员做测试。

C.ip组播与组播mac地址的映射

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

ipv4:组播地址的前4位是固定的1110,对应组播MAC地址的高25位,后28位中只有23位被映射到MAC地址,因此丢失了5位的地址信息,直接结果是有32个IPv4组播地址映射到同一MAC地址上。

例如IP地址为224.0.1.1、224.128.1.1、225.0.1.1、239.128.1.1等组播组的组播MAC地址都为01-00-5e-00-01-01。网络管理员在分配地址时必须考虑这种情况。拿我们熟悉的ospf组播地址举例,组播IP为:224.0.0.5,组播Mac地址为01-00-5e-00-00-05。

IPv6:在IPv6中,组播IPv6地址与组播Mac地址的映射关系如下图:

组播Mac的前四位3333是固定的,后面的32bit是从IPv6地址的最后32bit进行复制。比如组播地址FF02::1,那他对应的组播Mac地址为3333-0000-0001。

(二)被请求节点组播地址                                                     

A.特点    

1.当一个节点具有了单播或任意播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。

2.一个单播地址或任播地址对应一个被请求节点组播地址。

3.该地址主要用于邻居发现机制和地址重复检测功能。

4.被请求节点组播地址的有效范围为本地链路范围。

B.地址格式    

被请求节点地址固定前缀为:FF02::1:FF00:0000/104。

生成方式为:前104bit为固定的FF02::1:FF,后面24bit是将IPv6地址的最后24bit直接拷贝。

比如,我们在接口处配置IPv6地址(2001::1/64),其对应的被请求节点组播地址为FF02::1::FF00:1。

C.作用    

被请求节点组播地址取代了IPv6中的广播,减少了对其他设备的骚扰,提高了安全性。因为当交换机对于一个被请求节点组播地址进行泛红后,由于每个设备的被请求节点组播地址不同,从而在链路层进行处理或丢弃。

举个例子,在下图中,各PC的IPv6地址和Mac地址如图进行假设。

如果PC1想请求PC2的Mac地址,他会封装一个请求报文,其源IP,目的IP,源Mac地址,目的Mac地址如图所示。

当交换机接收到这个报文后,因为其目的Mac为3333开头,发现这是一个组播报文,然后对此报文进行泛洪。

当PC2接受到这个报文后,由于PC2有一个被请求节点组播地址FF02::1:FF00:2,所以,PC2会侦听相对应的3333-FF00:0002组播Mac地址通过二层拆封,发现其目的Mac是自己的,就会进行回复。而对于PC3来说,他不侦听该组播Mac地址,所以就会直接丢弃,不再进行三层的拆封。从而节省了PC3设备的资源。

五、 任播                                                                                 

1.任播地址是IPv6特有的地址类型,用来标识一组网络接口(通常属于不同的节点)。

2.发往任播的报文只会被发送到最近的一个接口,这里所说的最近是指路由层面上的“最近”。

3.任播地址与单播地址使用相同的地址空间,因此任播与单播的表示无任何区别;

4.配置时须明确表明是任播地址,以此区别单播和任播。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,作为文本AI助手,我无法绘制思维导图。但是,我可以为您提供一个简要的java IO流知识点总结。 Java IO流是Java中用于处理输入和输出的机制。它提供了一种有效的方式来读取和写入数据,以及与文件、网络和其他设备进行交互。 Java IO流包括字节流和字符流两种类型。字节流以字节为单位进行操作,适用于处理二进制数据。而字符流以字符为单位进行操作,适用于处理文本数据。 常用的字节流包括InputStream和OutputStream类,用于读取和写入字节数据。常用的字符流包括Reader和Writer类,用于读取和写入字符数据。可以通过使用字节流和字符流的组合来实现不同类型数据的读写操作。 在Java IO流中,还有一些特殊的流,如缓冲流、转换流、对象流等。缓冲流提供了缓冲区来提高IO性能。转换流用于处理字符编码和解码。对象流用于对Java对象进行读写操作。 此外,Java IO流还包括一些常用的类和方法,如File类用于处理文件和目录,RandomAccessFile类用于对文件进行随机访问,FileInputStream和FileOutputStream类用于读写文件等。 通过组合和使用不同类型的流和类,您可以实现各种复杂的IO操作,如读写文件、网络通信、序列化对象等。 希望这个简要总结对您有所帮助。如果您有任何更具体的问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [万字长文+思维导图帮你梳理 Java IO 流,还学不会你来打我(值得收藏)](https://blog.csdn.net/a1405/article/details/116766237)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值