计算机网络:网络层 —— 移动 IP 技术
文章目录
- IPv6
- IPv6 的诞生背景
- 主要优势
- IPv6引进的主要变化
- IPv6数据报的基本首部
- IPv6数据报首部与IPv4数据报首部的对比
- IPv6数据报的拓展首部
- IPv6地址
- IPv6地址空间大小
- IPv6地址的表示方法
- IPv6地址的分类
- 从IPv4向IPv6过渡
- 使用双协议栈
- 使用隧道技术
- 网际控制报文协议 ICMPv6
- ICMPv6报文的封装
- ICMPv6报文的分类
IPv6
IPv6 的诞生背景
IPv4 是在20世纪70年代末期设计的,其IPv4地址的设计存在以下缺陷:
-
IPv4 的设计者最初并没有想到该协议会在全球范围内广泛使用因此将IPv4地址的长度规定为他们认为足够长的32比特,
-
IPv4 地址早期的编址方法(分类的IPv4地址和划分子网的IPv4地址)也不够合理,造成 IPv4 地址资源的浪费。
主要优势
如果没有 网络地址转换 NAT 技术 的广泛应用,IPv4 早已停止发展。然而,NAT 仅仅是为了延长 IPv4 使用寿命而采取的权宜之计,解决 IPv4 地址耗尽的根本措施就是采用具有更大地址空间(IP地址的长度为128比特)的新版本IP,即IPv6。但到目前为止,IPv6还只是草案标准阶段 [RFC2460,RFC4862,RFC4443]
IPv6引进的主要变化
IPv6
(Internet Protocol version 6)是互联网上的下一代 IP 协议,用于解决 IPv4
地址空间有限的问题。
-
更大的地址空间:相比 IPv4 的 32 位地址,IPv6 采用了 128位地址空间,提供了大量可用的 IP 地址。在采用合理编址方法的情况下,在可预见的未来是不会用完的。
-
扩展的地址层次结构:可划分为更多的层次,这样可以更好地反映出因特网的拓扑结构,使得对寻址和路由层次的设计更具有灵活性。
-
灵活的首部格式:与IPv4首部并不兼容。IPv6定义了许多可选的的扩展首部,不仅可提供比IPv4更多的功能,还可以提高路由器的处理效率,因为路由器对逐跳扩展首部外的其他扪展首部都不进行处理。
-
改进的选项:IPv6允许分组包含有选项的控制信息,因而可以包含一些新的选项。然而IPv4规定的选项却是固定不变的。
-
允许协议继续扩充:这一点很重要,因为技术总是在不断地发展,而新的应用也会层出不固定不变的。
-
支持即插即用(即自动配置):IPv6支持主机或路由器自动配置IPv6地址及其他网络配置参数。因此IPv6不需要使用DHCP
-
支持资源的预分配:IPv6能为实时音视频等要求保证一定带宽和时延的应用,提供更好的服务质量保证。
IPv6数据报的基本首部
-
所有的扩展首部并不属于IPv6数据报的首部,它们与其后面的数据部分合起来构成有效载荷(payload,也称为净负荷)
-
通信量类字段:长度为8比特,该字段用来区分不同的IPv6数据报的类别或优先级。目前正在进行不同的通信量类性能的实验。
-
流标号字段:长度为20比特。IPv6提出了流的抽象概念。
“流”就是因特网上从特定源点到特定终点(单播或多播)的一系列IPv6数据报(如实时音视频数据的传送),而在这个“流”所经过的路径上的所有路由器都保证指明的服务质量。
所有属于同一个流的IPv6数据报都具有同样的流标号。换句话说,流标号用于资源分配。
流标号对于实时音视频数据的传送特别有用,但对于传统的非实时数据,流标号则没有用处,把流标号字段的值置为0即可。
-
有效载荷长度字段:长度为16比特,它指明IPv6数据报基本首部后面的有效载荷(包括扩展首部和数据部分)的字节数量。该字段以字节为单位,最大取值为 65535,IPv6数据报基本首部后面的有效载荷的最大长度为 65535 字节。
-
下一个首部字段:长度为8比特。该字段相当于IPv4数据报首部中的协议字段或可选字段。
当IPv6数据报没有扩展首部时,该字段的作用与IPv4的协议字段一样,它的值指出了IPv6数据报基本首部后面的数据是何种协议数据单元PDU。如取值为
6
时,则数据载荷部分是TCP
报文段;取值为17
,则有效载荷部分是UDP
用户数据报。当 IPv6 数据报基本首部后面带有扩展首部时,该字段的值就标识后面第一个扩展首部的类型。
-
跳数限制字段:长度为8比特。该字段用来防止IPv6数据报在因特网中永久兜圈。
源点在每个 IPv6 数据报发出时即设定某个跳数限制(最大255跳)。每个路由器在转发 IPv6 数据报时,要先把跳数限制字段中的值减1。当跳数限制的值为 0 时,就把这个 IPv6 数据报丢弃(即不转发)。
该字段的作用与IPv4数据报首部中的生存时间TTL字段完全一样。IPv6将名称改为跳数限制后可使名称与作用更加一致。
-
源地址字段和目的地址字段:长度都为128比特。分别用来填写IPv6数据报的发送端的IPv6地址和接收端的IPv6地址。
IPv6数据报首部与IPv4数据报首部的对比
-
IPv6将IPv4数据报首部中不必要的功能取消了,这使得IPv6数据报基本首部中的字段数量减少到只有8个
-
由于IPv6地址的长度扩展到了128比特,因此使得IPv6数据报基本首部的长度反而增大到了40字节,比IPv4数据报首部固定部分的长度(20字节)增大了20字节。
-
取消了首部长度字段,IPv6数据报的首部长度是固定的40字节。
-
取消了区分服务(服务类型)字段,IPv6数据报首部中的通信量类和流标号字段实现了区分服务字段的功能。
-
取消了总长度字段,改用有效载荷长度字段。IPv6数据报的首部长度是固定的40字节,只有其后面的有效载荷长度是可变的。
-
取消了标识、标志和片偏移字段,这些功能已包含在IPv6数据报的分片扩展首部中
-
把生存时间TTL字段改称为跳数限制字段,这样名称与作用更加一致。
-
取消了协议字段,改用下一个首部字段。
-
取消了首部检验和字段,这样可以加快路由器处理IPv6数据报的速度。
-
取消了选项字段,改用扩展首部来实现选项功能。
IPv6数据报的拓展首部
IPv4数据报如果在其首部中使用了选项字段,则在数据报的整个传送路径中的全部路由器,都要对选项字段进行检查,这就降低了路由器处理数据报的速度。
实际上,在路径中的路由器对很多选项是不需要检查的。因此,为了提高路由器对数据报的处理效率,IPv6把原来IPv4首部中的选项字段都放在了扩展首部中,由路径两端的源点和终点的主机来处理,而数据报传送路径中的所有路由器都不处理这些扩展首部(除逐跳选项扩展首部)。
[RFC 2460]
中定义了以下六种扩展首部:
-
逐跳选项
-
路由选择
-
分片
-
鉴别
-
封装安全有效载荷
-
目的站选项
每一个扩展首部都由若干个字段组成,它们的长度也各不相同。所有扩展首部中的第一个字段,都是8比特的下一个首部字段。该字段的值指出在该扩展首部后面是何种扩展首部。当使用多个扩展首部时,应按以上的先后顺序出现。
IPv6地址
IPv6地址空间大小
在IPv6中,每个地址占128个比特。IPv6地址空间大小为 2 128 ( 大于 3.4 × 1 0 38 ) 2^{128} (大于 3.4 \times 10^{38}) 2128(大于3.4×1038)
如果整个地球表面(包括陆地和水面)都覆盖着需要IPv6地址的通信设备,那么IPv6允许每平方米拥有 7 × 1 0 23 7\times10^{23} 7×1023 个IPv6地址。
如果IPv6地址分配速率是每微秒分配100万个IPv6地址,则需要 1 0 19 10^{19} 1019年的时间才能将所有可能的地址分配完毕。
很显然,这样巨大的地址空间在采用合理编址方法的情况下,在可预见的未来是不会用完的。
IPv6地址的表示方法
IPv6 地址的表示形式是将每16比特分为1组,以 8组16进制数 表示,每组使用冒号(:
)分隔(冒号十六进制记法),例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334
(不区分大小写)。
为了简化地址表示,IPv6还引入了一些缩写规则,如 “左侧零”省略 和 “连续零”压缩 。
-
“左侧零”省略:指两个冒号间的十六进制数中最前面的一串0可以省略不写
-
“连续零”压缩:指一连串连续的 0 可以用一对冒号取代,即连续的 0 组简写为“
::
”,例如2001:db8::1
。 -
在一个IPv6地址中只能使用一次“连续零”压缩,否则会导致歧义。
使用多次“连续零”压缩:
只使用一次“连续零”压缩,并使用“左侧零”省略:
冒号十六进制记法还可结合点分十进制的后缀。在IPv4向IPv6过渡阶段非常有用:
CIDR的斜线表示法在IPv6中仍然可用:
IPv6地址的分类
IPv6数据报的目的地址有三种基本类型:
-
单播(unicast):传统的点对点通信
-
多播(multicast):一点对多点的通信。数据报发送到一组计算机中的每一个。IPv6没有采用广播的术语,而将广播看作多播的一个特例。
-
任播(anycast):这是IPv6新增的一种类型。任播的终点是一组计算机,但数据报只交付其中的一个,通常是按照路由算法得出的距离最近的一个
[RFC 4291]
对IPv6地址进行了分类:
-
未指明地址
-
128个比特为“全0”的地址,可缩写为两个冒号 “
::
” -
该地址不能用作目的地址,只能用于还有配置到一个标准IPv6地址的主机用作源地址
-
未指明地址仅有一个
-
-
环回地址
-
最低比特为1,其余127个比特为“全0”,即
0:0:0:0:0:0:0:1
,可缩写为::1
。 -
该地址的作用与IPv4的环回地址相同。
-
IPv6的环回地址只有一个
-
-
多播地址
-
最高8比特为“全1”的地址,可记为
FF00::/8
. -
IPv6多播地址的功能与IPv4多播地址相同。
-
这类地址占IPv6地址空间的1/256。
-
-
本地链路单播地址
-
最高 10 比特为
1111111010
的地址,可记为FE80::/10
。 -
连接在这种网络上的主机即使用户网络没有连接到因特网,但仍然可以使用TCP/IP协议。都可以使用本地链路单播地址进行通信,但不能和因特网上的其他主机通信。
-
这类地址占IPv6地址空间的1/1024。
-
-
全球单播地址
-
全球单播地址是使用得最多的一类地址。
-
IPv6全球单播地址采用三级结构,这是为了使路由器可以更快地查找路由。
-
从IPv4向IPv6过渡
因特网上使用IPv4的路由器的数量太大,要让所有路由器都改用IPv6并不能一蹴而就。因此,从IPv4转变到IPv6只能采用逐步演进的办法。
另外,新部署的IPv6系统必须能够向后兼容,也就是IPv6系统必须能够接收和转发IPv4数据报,并且能够为IPv4数据报选择路由
有两种由IPv4向IPv6过渡的策略:使用双协议栈、使用隧道技术
相关文档为 [RFC2473,RFC2529,RFC 2893,RFC 3056,RFC 4038,RFC 4213]
。
使用双协议栈
双协议栈(Dual Stack)是指在完全过渡到IPv6之前,使一部分主机或路由器装有IPv4和IPv6两套协议栈。
双协议栈主机或路由器既可以和IPv6系统通信,又可以和IPv4系统通信:
-
双协议栈主机或路由器记为 IPv6/IPv4,表明它具有一个IPv6地址和一个IPv4地址
-
双协议栈主机在与IPv6主机通信时采用IPv6地址,而与IPv4主机通信时采用IPv4地址。
双协议栈主机通过域名系统DNS查询目的主机采用的IP地址:
-
若
DNS
返回的是IPv4
地址,则双协议栈的源主机就使用IPv4
地址 -
若
DNS
返回的是IPv6
地址,则双协议栈的源主机就使用IPv6
地址
IPv6数据报中的流标号字段无法转换为IPv4数据报中的内容,IPv4数据报转换为IPv6数据报时也无法将流标号恢复,这种信息的损失是使用首部转换方法所不能避免的。
使用隧道技术
隧道技术(Tunneling)的核心思想是:
-
当IPv6数据报要进入IPv4网络时,将IPv6数据报重新封装成IPv4数据报,即整个IPv6数据报成为IPv4数据报的数据载荷。
-
封装有IPv6数据报的IPv4数据报在IPv4网络中传输。
-
当IPv4数据报要离开IPv4网络时,再将其数据载荷(即原来的IPv6数据报)取出并转发到IPv6网络。
要使双协议栈路由器 R4 知道 IPv4 数据报的数据载荷是 IPv6 数据报,则IPv4数据报首部中协议字段的值必须设置为41.
使用隧道技术就好像在路由器 R1 和 R4 之间,为 IPv6 数据报的传送打通了一条专用的隧道。
网际控制报文协议 ICMPv6
由于IPv6与IPv4一样,都不确保数据报的可靠交付,因此IPv6也需要使用 网际控制报文协议ICMP 来向发送IPv6数据报的源主机反馈一些差错信息,相应的 ICMP
版本为 ICMPv6
。
ICMPv6
比 ICMPv4
要复杂得多,它 合并了原来的地址解析协议ARP 和 网际控制报文协议ICMP 的功能。因此与 IPv6
配套使用的网际层协议就只有 ICMPv6
这一个协议。
ICMPv6报文的封装
ICMPv6
报文需要封装成 IPv6
数据报进行发送
若 IPv6
数据报的有效载荷中,包含有扩展首部,在扩展首部之后封装的是ICMPV6报文,则在ICMPv6 报文前面的那个扩展首部中的下一个首部字段的值必须设置为58,表明该扩展首部后面是 ICMPv6 报文
ICMPv6报文的分类
ICMPv6
报文可被用来报告差错、获取信息、探测邻站 或 管理多播通信。
在对 ICMPv6
报文进行分类时,不同的 RFC
文档使用了不同的策略:
在 [RFC 2463]
中定义了六种类型的 ICMPv6
报文
在 [RFC 2461]
中定义了五种类型的 ICMPv6
报文
在 [RFC 2710]
中定义了三种类型的 ICMPv6
报文
相关文章:

计算机网络:网络层 —— 移动 IP 技术
文章目录 IPv6IPv6 的诞生背景主要优势IPv6引进的主要变化 IPv6数据报的基本首部IPv6数据报首部与IPv4数据报首部的对比 IPv6数据报的拓展首部IPv6地址IPv6地址空间大小IPv6地址的表示方法 IPv6地址的分类从IPv4向IPv6过渡使用双协议栈使用隧道技术 网际控制报文协议 ICMPv6ICM…...

useCrudSchemas
摘要: useCrudSchemas 不是一个标准的JavaScript或数据库操作库函数,也不是一个广泛认知的术语。它可能是某个特定项目或应用程序中定义的一个自定义函数或方法,用于简化CRUD(创建、读取、更新、删除)操作。 在Web开发…...

SpringBoot3集成Junit5
目录 1. 确保项目中包含相关依赖2. 配置JUnit 53. 编写测试类4、Junit5 新增特性4.1 注解4.2 断言4.3 嵌套测试4.4 总结 在Spring Boot 3中集成JUnit 5的步骤相对简单。以下是你可以按照的步骤: 1. 确保项目中包含相关依赖 首先,确保你的pom.xml文件中…...

【EMNLP2024】阿里云人工智能平台 PAI 多篇论文入选 EMNLP2024
近期,阿里云人工智能平台 PAI 的多篇论文在 EMNLP2024 上入选。论文成果是阿里云与华南理工大学金连文教授团队、复旦大学王鹏教授团队共同研发。EMNLP 是人工智能自然语言处理领域的顶级国际会议,聚焦于自然语言处理技术在各个应用场景的学术研究&#…...

Spark的Shuffle过程
一、Shuffle 的作用是什么? Shuffle 操作可以理解为将集群中各个节点上的数据进行重新整理和分类的过程。这一概念源自 Hadoop 的 MapReduce 模型,Shuffle 是连接 Map 阶段和 Reduce 阶段的关键环节。在分布式计算中,每个计算节点通常只处理任…...

Java+Swing可视化图像处理软件
JavaSwing可视化图像处理软件 一、系统介绍二、功能展示1.图片裁剪2.图片缩放3.图片旋转4.图像灰度处理5.图像变形6.图像扭曲7.图像移动 三、系统实现1.ImageProcessing.java 四、其它1.其他系统实现2.获取源码 一、系统介绍 该系统实现了图片裁剪、缩放、旋转、图像灰度处理、…...

RDD转换算子:【mapValues、mapPartitions】
文章目录 1、mapValues算子功能语法举例 2、mapPartitions算子功能语法举例 1、mapValues算子 功能 针对二元组KV类型的RDD,对RDD中每个元素的Value进行map处理,结果放入一个新的RDD中 语法 def mapValues(self: RDD[Tuple[K,V]], f: (V) -> U) -…...

数组和指针的复杂关系
C语言中指针和数组的关系似乎很“纠结”,让人爱恨交织。本文试图帮助读者理清它们之间的复杂关系! 数组名的理解 数组元素在内存中是连续存放的,在C语言中,数组名有特殊的含义,它表示数组首元素的地址。因此…...

Linux系统I/O调优实例
文章目录 一 、资源限制二、测试硬盘速度: 一 、资源限制 限制用户资源配置文件:/etc/security/limits.conf [rootxuegod63 ~]# vim /etc/security/limits.conf 每行的格式: 用户名/用户组名 类型(软限制/硬限制) 选项 值 通常我们在服务器…...

记录Ubuntu OS的异常
PS: 参加过408改卷的ZJU ghsongzju.edu.cn 开启嘲讽: 你们知道408有多简单吗,操作系统真实水平自己知道就行~~ dmesg dmesg 是一个用于显示内核环形缓冲区消息的命令,主要用于查看系统启动时的消息、驱动程序加载信息、硬件错误…...

Vue 3 单元测试与E2E测试
在Vue 3应用的开发过程中,测试是一个至关重要的环节。它不仅能够确保代码的正确性,还能在后续的代码重构和升级过程中提供安全保障。本文将深入探讨Vue 3的单元测试(Unit Testing)和端到端测试(End-to-End Testing, E2…...

猫用空气净化器哪个牌子好?求除毛好、噪音小的宠物空气净化器!
换毛季家里孩子不省心,疯狂掉落的猫毛和空气中乱飞的浮毛可把我折磨死了。每天下班都要抽出时间来清理,不然这个家就不能要了。猫毛靠我自己可以打扫,浮毛还得借助宠物空气净化器这种专业工具。所以我最近着手做功课,打算入手一台…...

第十九课 Vue组件中的方法
Vue组件中的方法 组件中的方法拓展与实例对象中的方法拓展类似 <div id"app"><test></test> </div> <script>Vue.component(test, {template: <input type"button" value"这是个按钮组件" click"fun()…...

【JavaScript】V8,Nodejs 与浏览器
V8 V8 是一个 JavaScript engine,负责编译并执行 JavaScript 源代码,处理对象的内存分配,并对不再需要的对象进行垃圾收集。 V8 包含两个主要组件: Memory Heap:负责存储分配。 Call Stack:代码执行时&am…...

内存马浅析
之前在jianshu上写了很多博客,但是安全相关的最近很多都被锁了。所以准备陆陆续续转到csdn来。内存马前几年一直是个很热门的漏洞攻击手段,因为相对于落地的木马,无文件攻击的内存马隐蔽性、持久性更强,适用的漏洞场景也更多。 J…...

聊一聊Elasticsearch的基本原理与形成机制
1、搜索引擎的基本原理 通常搜索引擎包括:数据采集、文本分析、索引存储、搜索等模块,它们之间的协作流程如下图: 数据采集模块负责采集需要搜索的数据源。 文本分析模块是将结构化数据中的长文本切分成有实际意义的词,这样用户…...

应急救援无人车:用科技守护安全!
一、核心功能 快速进入危险区域: 救援无人车能够迅速进入地震、火灾、洪水等自然灾害或重大事故的现场,这些区域往往对人类救援人员构成极大威胁。 通过自主导航和环境感知技术,无人车能够避开危险区域,确保自身安全的同时&…...

详解Java之Spring MVC篇二
目录 获取Cookie/Session 理解Cookie 理解Session Cookie和Session的区别 获取Cookie 获取Session 获取Header 获取User-Agent 获取Cookie/Session 理解Cookie HTTP协议自身是“无状态”协议,但是在实际开发中,我们很多时候是需要知道请求之间的…...

flutter鸿蒙next 使用 InheritedWidget 实现跨 Widget 传递状态
在 Flutter 中,状态管理是开发过程中一个至关重要的部分。Flutter 提供了多种方式来实现组件间的状态传递,其中一种比较底层的方式是使用 InheritedWidget。虽然 InheritedWidget 主要用于将数据传递给其子树中的小部件,但它也是许多更高级状…...

计算机的错误计算(一百四十六)
摘要 探讨 MATLAB 中正切函数 tan(x)、余切函数 cot(x) 关于 附近数的计算精度问题。 例1. 已知 计算 直接贴图吧: 另外,16位的正确值分别为 -0.7837941516239115e10、-0.1275845192169577e-9、0.4782331334117711e7 与 0.2091030357653982e-…...

国标GB28181视频平台EasyCVR私有化视频平台工地防盗视频监控系统方案
一、方案背景 在当代建筑施工领域,安全监管和防盗监控是保障工程顺利进行和资产安全的关键措施。随着科技进步,传统的监控系统已不足以应对现代工地的安全挑战。因此,基于国标GB28181视频平台EasyCVR的工地防盗视频监控系统应运而生…...

CUDA系统学习之一软件堆栈架构
一、CPU与GPU体系架构 计算单元分布 CPU: 少量强大的ALU(算术逻辑单元),通常4-8个核心GPU: 大量小型ALU,成百上千个计算核心特点:GPU更适合并行计算,可以同时处理大量数据控制单元(Control) CPU: 较大的控制单元,复杂的…...

SpringBoot项目中替换指定版本的tomcat
需求:项目使用的SpringBoot框架,因低版本的tomcat的有安全漏洞,根据安全要求需要将项目的tomcat版本升级到9.0.89以上版本。 解决办法: 1、在pom.xml中排除SpringBoot的默认tomcat依赖; <dependency><groupId…...

【5.10】指针算法-快慢指针将有序链表转二叉搜索树
一、题目 给定一个单链表,其中的 元素按升序排序 ,将其转换为 高度平衡的二叉搜索树 。 本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。 示例: 给定的有序链表: [ -10 , -3 , 0 , …...

机器学习—前向传播的一般实现
可以写一个函数来实现一个密集的层,那是神经网络的单层,所以定义稠密函数,它将上一层的激活作为输入以及给定层神经元的参数w和b。看下边图片所展示的例子,把所有这些权重向量堆叠成一个矩阵,wnp.array([[1,-3,5][2,4,…...

极狐GitLab 签约足下科技,加速国产智驾操作系统的发展与普及
客户背景 足下科技是一家致力于成为智能汽车软件平台、产品与服务领导者的高科技企业,成立于 2022年 3 月,总部位于深圳市。足下科技自主研发的智能驾驶操作系统 Earth 和 Air 工具链,协助OEM和Tier1厂商降低算法和软件开发难度,…...

20241102在荣品PRO-RK3566开发板的预置Android13下适配宸芯的数传模块CX6603N
20241102在荣品PRO-RK3566开发板的预置Android13下适配宸芯的数传模块CX6603N 2024/11/2 18:04 在WIN10使用程序:ViewLink-4.0.7_0708-windows-x64.exe 在荣品PRO-RK3566开发板的预置Android13下使用:ViewLink-2023_12_21-release-0.2.6.apk adb install…...

力扣(leetcode)题目总结——哈希表篇
leetcode 经典题分类 链表数组字符串哈希表二分法双指针滑动窗口递归/回溯动态规划二叉树辅助栈 本系列专栏:点击进入 leetcode题目分类 关注走一波 前言:本系列文章初衷是为了按类别整理出力扣(leetcode)最经典题目,…...

AWS RDS Oracle hit ORA-39405
报错信息: ORA-39405: Oracle Data Pump does not support importing from a source database with TSTZ version 42 into a target database with TSTZ version 35. 分析过程: 这个报错是由于timezone_file的版本,源端比目标端高…...

Dinky中配置Flink集群
需要启动yarn-session 进程,在集群服务器 cd /pwd//flink/bin yarn-session -d 启动成功后可以在yarn的资源管理队列进行查看 启动成功后会给出:JobManager Web Interface 在dinky中进行配置: 集群配置 Hadoop 配置: H…...