【网络协议】----IPv6协议报文、地址分类
【网络协议】----IPv6协议简介
- 【网络协议】----IPv6协议简介
- IPv6特点
- IPv4 和 IPv6报文结构
- IPv6报文格式-拓展报头
- IPv6地址分类
- IPv6地址表示
- IPv6单播地址
- 可聚合全球单播地址
- 链路本地地址
- 唯一本地地址
- 特殊地址
- 补充 接口标识(主机位)生成方法
- 通过EUI-64规范根据MAC地址生成接口ID
- IPv6组播地址
- 预定义组播地址
- 被请求节点组播地址
- IPv6组播的MAC地址映射
【网络协议】----IPv6协议简介
IPv6特点
=IPv6诞生背景=
- 1、IPv4公网地址耗尽
- 2、Internet用户快速增长
- 3、NAT确实能解决私有地址空间与公网互访的问题,但是却破坏了端到端通信的完整性
- 4、IPv4对移动性的支持不够理想等
IETF在20世纪90年代提出下一代互联网协议——IPv6,目前IPv6已成为公认IPv4未来的升级版本
IPv6技术特点
- 地址空间巨大
- 精简报文结构
- 实现自动配置和重新编址
- 支持层次化网络编址
- 支持端对端安全
- 更好的支持QOS、支持移动特性
IPv4 和 IPv6报文结构
IPv4报文结构
前面的文章有写过IPv4报文结构和各个字段作用,感兴趣的朋友可以看看
《数据帧、IP数据包、TCP、UDP报文格式详解》



- Version:版本号,长度为4bit。对于IPv6,该值为6。
- Traffic Class:流类别,长度为8bit。等同于IPv4中的Type Of Service字段,表示IPv6数据报的类或优先级,主要应用于QoS
- Flow Label:流标签,长度为20bit。IPv6新增字段,用于区分实时流量。不同流标签加源地址可以唯一确定一条数据流,中间网络设备可以根据这些信息更加高效率的区分数据流。
- Payload Length:有效载荷长度,长度为16bit。有效载荷是指紧跟IPv6报头的数据报的其它部分(即扩展报头和上层协议数据单元)
- Next Header:下一个报头,长度为8bit。指明下一个扩展报头(如果存在)或上层协议的类型。
- Hop Limit:跳数限制,长度为8bit。该字段类似于IPv4中的Time to Live字段,它定义了IP数据报所能经过的最大跳数。每经过一个路由器,该数值减去1,当该字段的值为0时,数据报将被丢弃。
- Source Address:源地址,长度为128bit。表示发送方的地址。
- Destination Address:目的地址,长度为128bit。表示接收方的地址。
IPv6报文格式-拓展报头
扩展报头是可选的,只有需要该扩展报头对应的功能时,数据的发送者才会添加相应扩展报头。

1、在IPv4中,IPv4报头包含可选字段Options,内容涉及security、Timestamp、Record route等,这些Options可以将IPv4报头长度从20字节扩充到60字节。在转发过程中,处理携带这些Options的IPv4报文会占用路由器很大的资源,因此实际中也很少使用
2、在IPv6中这些Option从基本报文格式中剥离,放到基本报头和上层协议数据单元之间一个IPv6报文可以包含0个、1个或多个扩展报头,仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。与IPv4不同,IPv6扩展头长度任意,不受40字节限制,这样便于日后扩充新增选项,这一特征加上选项的处理方式使得IPv6选项能得以真正的利用。但是为了提高处理选项头和传输层协议的性能,扩展报头总是8字节长度的整数倍。
3、当使用多个扩展报头时,前面报头的Next Header字段指明下一个扩展报头的类型,这样就形成了链状的列表
extension header length
- 路由设备转发时根据基本报头中的Next Hesder值来决定是否要处理扩展头,并不是所有扩展报头都需要被路由转发设备查看和处理
- 除了目的选项扩展报头可能在一个IPv6报文中出现一次活两次(一次在路由扩展报头之前,另一次在上层协议数据报文之前),其余1扩展报头只能出现一次
IPv6地址分类

- IPv4地址分为:单播地址、组播地址、广播地址。而IPv6中没有广播地址,增加了任播地址,IPv6地址被分为:单播地址、组播地址、任播地址
- 单播地址用于标识一个接口,发往该目的地址的报文会被送到被标识的接口,一个接口拥有多个IPv6地址是非常常见的现象
- 组播地址用于标识多个接口,发往该目的地址到的报文会被送到被标识的所有接口
- 任播地址用于标识多个(一组)网络接口(通常属于不同节点),发往该目的地址的报文会被送到被标识的所有接口中最近的一个接口上,实际上任播地址与单播地址使用同一个地址空间,就是说,由路由器决定数据包是做任播转发还是单播转发(任播地址只能作为目标地址)
IPv6地址表示
IPv6地址总长128比特,通常为8组,每组为4个十六进制数的形式,每组十六进制数间用冒号分隔,例FC00:0000:130F:0000:0000:09C0:876A:130B这是IPv6地址的首选格式
压缩:每组中的前导“0”都可以省略,所以上述地址可写为:FC00:0:130F::90C:876A:130B
地址中包含两个连续或多个连续均为“0”的组,可用冒号::来代替
注意:在一个IPv6地址中只能出现一次双冒号“::”
IPv6单播地址
可聚合全球单播地址
全球单播地址定义用于IPv6 Internet,是全局唯一和全局可达路由
类似于IPv4公网地址
由前缀、子网ID和接口标识组成

2 进制表示:0010 0000 0000 0000::
16 进制表示:2 0 0 0 ::
2 进制表示:0011 1111 1111 1111::
16 进制表示: 3 E E E ::
- 全局路由前缀:由提供商指定给一个组织机构,一般至少为48bit。目前已分配的全局路由前缀前3bit均为001。前缀为2000::/3。
- 子网:组织机构用子网ID来构建本地网络,与IPv4中的子网号作用类似。
- 主机位,与IPv4中的主机ID作用相同

链路本地地址
在一个节点启动ipv6协议栈时,节点每个接口会自动分配一个链路本地地址,专门用来和相同链路上的其它主机通信
- 只能在连接到同一本地链路的节点之间使用,用于邻居发现,无状态地址,路由协议等
- 链路本地地址前缀FE80::/10,将接口ID添在后面作为地址的低64位
- 每个IPv6接口都必须具备一个链路本地地址


唯一本地地址
- 因为IPv6要实现端到端的特性,导致此地址没有实施的可能性
- 类似于IPv4中的私网地址,仅能在本地网络中使用,在公网Internet上不可被路由
唯一本地地址固定前缀FC00::/7。他被分为两块,其中FC00::/8暂未定义,另一块是FD00::/8,其格式如下:

特殊地址
- 未指定地址。
- 0:0:0:0:0:0:0:0/128 或者::/128。
该地址作为某些报文的源地址,比如作为重复地址检测时发送的邻居请求报文(NS)的源地址,或者DHCPv6初始化过程中客户端所发送的请求报文的源地址。
- 0:0:0:0:0:0:0:0/128 或者::/128。
- 环回地址
- 0:0:0:0:0:0:0:1/128 或者::1/128。
与IPv4中的127.0.0.1作用相同,用于本地回环,发往::/1的数据包实际上就是发给本地,可用于本地协议栈回环测试。
- 0:0:0:0:0:0:0:1/128 或者::1/128。
- IPv4兼容地址。
- 在过渡技术中,为了让IPv4地址显得更加突出一些,定义了内嵌IPv4地址的IPv6地址格式。在这种表示方法中,IPv6地址的部分使用十六进制表示,IPv4地址部分可用十进制格式。如:64:FF9B::11.11.11.11 用于过渡技术NAT64 翻译。
该地址已经几乎不再使用。
- 在过渡技术中,为了让IPv4地址显得更加突出一些,定义了内嵌IPv4地址的IPv6地址格式。在这种表示方法中,IPv6地址的部分使用十六进制表示,IPv4地址部分可用十进制格式。如:64:FF9B::11.11.11.11 用于过渡技术NAT64 翻译。
补充 接口标识(主机位)生成方法
关于接口ID:接口ID位64bit,用与标识链路上的接口,在每条链路上接口ID必须唯一
- 接口ID可通过3种方法生成:手工配置、系统自动生成和IEEE EUI-64规范生成
通过EUI-64规范根据MAC地址生成接口ID

- 假设一个接口的MAC地址如上图所示,那么采用EUI-64规范,接口可根据该MAC地址计算得到接口ID,由于MAC地址全局唯一,因此该接口ID也相应的具备全局唯一性。计算过程如下。
- 将48bit的MAC地址对半劈开,然后插入“FFFE”,再对从左数起的第7位,也就是U/L位取反,即可得到对应的接口ID。
- 而在在EUI-64接口ID中,第7bit的含义与MAC地址正好相反,0表示本地管理,1表示全球管理,所以使用EUI-64格式的接口ID,U/L位为1,则地址是全球唯一的,如果为0,则为本地唯一。这就是为什么要反转该位。

IPv6组播地址
- 用来表示一组接口。发往组播地址的数据将被转发给侦听该地址的多个设备
- 地址范围:FF00::/8
预定义组播地址
Node-local
FF01::1,所有节点的组播地址。
FF01::2,所有路由器的组播地址。
Link-local
FF02::1,所有节点的组播地址。
FF02::2,所有路由器的组播地址。
FF02::1:FFXX:XXXX ,Solicited-Node组播地址。
FF02::5,所有OSPF路由器组播地址。
FF02::6,所有OSPF的DR路由器组播地址。
FF02:😄,所有PIM路由器组播地址。
被请求节点组播地址
被请求节点组播地址,通过节点的单播或任播地址生成。当一个节点具有单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组
- 一个单播或任播地址对应一个被请求节点组播地址,用于地址解析和地址重复检测等功能
- 被请求节点组播地址由固定前缀FF02::1:FF00:0/104和对对应IPv6地址最后24比特组成。被请求节点组播地址的有效范围为本地链路范围。


IPv6组播的MAC地址映射
以太网环境中,一个组播IPv6报文必须执行以太网封装
- 组播IPv6报文的目的地址是组播IPv6地址,而目的MAC地址必须是组播MAC地址,并且必须与对应组播IPv6地址对应
- 3333是专门为IPv6组播预留的MAC地址前缀,组播MAC地址的后32bit从对应的组播IPv6地址的后32bit拷贝而来。
例:

例如
1、一个接口MAC地址为
00E0-FC10-2E1B 48bit
2、根据EUI-64生成接口ID 。第7bit取反,插入FFFE
02E0:FCFF:FE10:2E1B
3、 链路本地地址前缀FE80::/10 接口ID作为后64bit
FE80::2E0:FCFF:FE10:2E1B
4、对应链路本地地址的组播地址,固定前缀FF02::1:FF00:0/104加上对应IPv6地址收24bit
FF02::1:FF10:2E1B
5、对应组播地址的MAC地址,固定前缀3333-后32bit从对应组播IPv6地址后的32bit拷取
3333-FF10-2E1B
接口MAC为 00E0-FC10-2E1B
组播MAC为 3333-FF10-2E1B
悟了!!!!

下一篇打算写下NDP协议
相关文章:
【网络协议】----IPv6协议报文、地址分类
【网络协议】----IPv6协议简介 【网络协议】----IPv6协议简介IPv6特点IPv4 和 IPv6报文结构IPv6报文格式-拓展报头 IPv6地址分类IPv6地址表示IPv6单播地址可聚合全球单播地址链路本地地址唯一本地地址特殊地址补充 接口标识(主机位)生成方法通过EUI-64规…...
Llama改进之——SwiGLU激活函数
引言 今天介绍LLAMA模型引入的关于激活函数的改进——SwiGLU1,该激活函数取得了不错的效果,得到了广泛地应用。 SwiGLU是GLU的一种变体,其中包含了GLU和Swish激活函数。 GLU GLU(Gated Linear Units,门控线性单元)2引入了两个不同的线性层…...
在数据分析中所需要运用到的概率论知识
数据分析 前言一、总体二、样本三、统计抽样抽取的基本准则 四、随机抽样抽签法随机数法 五、分层抽样六、整群抽样七、系统抽样八、统计参数常用的分布函数参数 九、样本统计量十、样本均值和样本方差十一、描述样本集中位置的统计量样本均值样本中位数样本众数 十二、描述样本…...
韩顺平0基础学Java——第6天
p87-p109 运算符(第四章) 四种进制 二进制用0b或0B开头 十进制略 八进制用0开头 十六进制0x或0X开头,其中的A—F不区分大小写 10转2:将这个数不断除以2,直到商为0,然后把每步得到的余数倒过来&#…...
react18子组件设置接收默认值和值类型验证
父组件传值 import ChildCom from ./components/ChildCom export default function Person {return(<div><ChildCom name"alan-ben" age{18} score{[98, 97, 100]} /></div>) } 子组件接收并验证类型 import React from react import PropTypes…...
Java 高级面试问题及答案(二)
Java高级面试问题及答案 1. 在Java中,什么是强引用、软引用、弱引用和虚引用,它们有什么区别? 答案: 在Java中,引用类型决定了对象的生命周期,主要有以下四种: 强引用:最常见的引…...
数据统计:词频统计、词表生成、排序及计数、词云图生成
文章目录 📚输入及输出📚代码实现 📚输入及输出 输入:读取一个input.txt,其中包含单词及其对应的TED打卡号。 输出 output.txt:包含按频率降序排列的每个单词及其计数(这里直接用于后续的词云…...
W801学习笔记二十四:NES模拟器游戏
之前已经实现了NES模拟器玩游戏。W801学习笔记九:HLK-W801制作学习机/NES游戏机(模拟器) 现在要在新版本掌机中移植过来。 1、把NES文件都拷贝到SD卡中。 这回不会受内存大小限制了。我这里拷贝了4个,还可以拷贝更多。 2、应用初始化中,加载…...
ECMAScript 6简介
ECMAScript 6简介 发布日期目标ECMAScript 和 JavaScript 的关系ES6 与 ECMAScript 2015 的关系 ESx标准 命名规则 ECMAScript 的历史 1. ECMAScript 6简介 1.1. 发布日期 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已…...
第1个数据库:编号,文本,时间,
写一个数据库 编号 文本 时间1 第一个文本 有100万条数据 -- 创建一个名为texts的表格来存储数据 CREATE TABLE texts ( id INTEGER PRIMARY KEY, text TEXT, time TIMESTAMP DEFAULT CURRENT_TIMESTAMP);-- 插入数据INSERT INTO texts (text) VALUES (第一个文…...
线性数据结构-手写链表-LinkList
为什么需要手写实现数据结构? 其实技术的本身就是基础的积累和搭建的过程,基础扎实 地基平稳 万丈高楼才会久战不衰,做技术能一通百,百通千就不怕有再难得技术了。 一:链表的分类 主要有单向,双向和循环链表…...
快手客户端一二面+美团前端一面+腾讯企业微信开发客户端一面
快手一面结志 1、自我介绍 2、对称加密非对称加密 3、TCP/UDP 4、在学校有什么课程是强项,说了过去几次面试中面到的C的语言基础知识 5、问C、Java中兴趣在哪里 6、问到项目,自己做的还是跟着学校老师做的,同样问到兴趣在哪里 7、LRU …...
探索数据结构
什么是数据结构 数据结构是由:“数据”与“结构”两部分组成 数据与结构 数据:如我们所看见的广告、图片、视频等,常见的数值,教务系统里的(姓名、性别、学号、学历等等); 结构:当…...
VMware虚拟机中ubuntu使用记录(6)—— 如何标定单目相机的内参(张正友标定法)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、张正友相机标定法1. 工具的准备2. 标定的步骤(1) 启动相机(2) 启动标定程序(3) 标定过程的操作(5)可能的报错 3. 标定文件内容解析 前言 张正友相机标定法…...
每日OJ题_记忆化搜索②_力扣62. 不同路径(三种解法)
目录 力扣62. 不同路径 解析代码1_暴搜递归(超时) 解析代码2_记忆化搜索 解析代码3_动态规划 力扣62. 不同路径 62. 不同路径 难度 中等 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器…...
【微信小程序开发】微信小程序、大前端之flex布局方式详细解析
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
代码随想录算法训练营第二十天:二叉树成长
代码随想录算法训练营第二十天:二叉树成长 110.平衡二叉树 力扣题目链接(opens new window) 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝…...
Opensbi初始化分析:设备初始化-warmboot
Opensbi初始化分析:设备初始化-warmboot 设备初始化sbi_init函数init_warmboot函数coolboot & warmbootwait_for_coldboot函数domain && scratch(coldboot所特有)console初始化及print相关工作(coldboot所特有)系统调用的相关初始化(coldboot所特有)综上设备…...
软考 系统架构设计师系列知识点之软件可靠性基础知识(13)
接前一篇文章:软考 系统架构设计师系列知识点之软件可靠性基础知识(12) 所属章节: 第9章. 软件可靠性基础知识 第3节 软件可靠性管理 为了进一步提高软件可靠性,人们又提出了软件可靠性管理的概念,把软件可…...
将ESP工作为AP路由模式并当成服务器
将ESP8266模块通过usb转串口接入电脑 ATCWMODE3 //1.配置成双模ATCIPMUX1 //2.使能多链接ATCIPSERVER1 //3.建立TCPServerATCIPSEND0,4 //4.发送4个字节在链接0通道上 >ATCIPCLOSE0 //5.断开连接通过wifi找到安信可的wifi信号并连接 连接后查看自己的ip地址变为192.168.4.…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
