计算机网络:网络层 - IPv6

计算机网络:网络层 - IPv6

    • IPv6 数据报
    • IPv6 地址
      • 冒号十六进制记法
      • 地址分类
    • IPv4 到 IPv6 过渡
      • 双栈协议
      • 隧道技术


IPv6 是互联网协议的最新版本,它被设计用来取代现有的 IPv4 协议。这是因为 IPv4 存在一些根本性的限制,而 IPv6 则可以解决这些问题。

最典型的问题就是地址空间不足, IPv4 只有大约 43 亿个可用的 IP 地址,而随着互联网的快速发展,这一数量已经远远不够。而IPv6340282366920938463463374607431768211456个地址,你已经看到眼花了吧,这里也就是 2 128 2 ^ {128} 2128 个地址,也说明IPv6的地址有128,这个数据几乎接近于无穷,估计未来上百年都不会用完这么多地址。

IPv6 数据报

IPv6数据报格式如下:

在这里插入图片描述

IPv6数据报分为两部分:基本首部有效载荷

  • 基本首部:长度为固定的40 byte,携带数据报的基本信息
  • 有效载荷:该部分包含了数据报真正的数据部分和任意数量的扩展首部

接下来我从前往后依次讲解每个字段的功能。

版本

4 bit,指明了IP协议的版本,IPv6中版本号就是6

通信量类

8 bit,为了区分不同数据报的优先级。范围为 0 - 70 代表最低优先级,7 代表最高优先级。

流标号

20 bit,流标号字段用于标识来自同一数据流的不同数据报,并允许网络设备对它们进行优先处理。

所谓的,就是一个源点到一个终点的一系列数据报,它们有共同的流标号。

有效载荷长度

16 bit,指明有效载荷部分所占的字节数。最大值是65535

下一个首部

8 bit,这个部分相当于IPv4可选字段,用于对IPv6的首部进行拓展。

其有两种情况:

  1. 如果该数据报没有扩展首部,那么该字段指明有效载荷中的高层协议类型。比如有效载荷为TCP数据报时,该字段值为6;为UDP数据报时,该字段值为17
  2. 如果该数据报有扩展首部,该字段指向的是第一个扩展首部类型。

比如以下可以扩展的首部:

  • 路由头部 :用于指定数据包的路由路径。
  • 分片头部 :用于将数据包分割成多个片段,以便在网络中传输。
  • 鉴别头部 :用于对数据包进行身份验证。
  • 封装安全负载头部:用于对数据包进行加密。

跳数限制
8 bit,用于限制数据报的传输次数,相当于IPv4中的TTL。每当路由器转发一次数据报,跳数限制就减一,当为0时,路由器就会丢弃该报文。

可以看到,相比于IPv4数据报,IPv6数据报的设计更加简单。

主要来说,IPv6数据报对IPv4数据报的首部做了以下更改:

  1. 取消首部长度字段
  2. 取消服务类型字段
  3. 取消总长度字段,改用有效载荷长度字段
  4. 取消TTL字段,改用跳数限制字段
  5. 取消协议字段,改用下一个首部字段
  6. 取消首部检验和字段
  7. 取消选项字段,改用扩展首部来实现扩展功能

可以看到,IPv6几乎一直在做减法,从而使数据报更加简洁。

剩下的就是源地址目的地址了,因为IPv6数据报的地址长度为128,所以这两个字段长度也是128 bit,接下来我们就来看看IPv6地址。


IPv6 地址

冒号十六进制记法

由于地址要占128位,如果用之前的点分十进制表示这个地址,就会很长。因此IPv6冒号十六进制的方法来记录一个IPv6地址。

其基本记法为:16位二进制分为一组,用4个十六进制表示,各组之间用冒号分隔

比如下面这个地址:

68E6:8C64:00FF:FFFF:0000:1180:960A:FFFF

最后一个地址就被分为了8个组。

以上只是基本记录方法,冒号十六进制记法还允许对满足特定要求的地址进行缩写。

一个组内部,如果0前面没有数字,且后面有数字,那么这个0可以省略

比如刚刚的地址:

68E6:8C64:00FF:FFFF:0000:1180:960A:FFFF

第三组00FF,由于00都在数字F前面,可以将其省略为FF;第五组0000,前三个0可以被省略,最后表示为0

但是比如说960A这个组,由于这个0前面有数字,所以不能省略。

最后这个地址就写为:

68E6:8C64:FF:FFFF:0:1180:960A:FFFF

确实简短了一些。

零压缩:一串连续的0可以被压缩为一对冒号::

比如地址:

FF05:0:0:0:0:0:0:B3 

中间连续的六组0000,可以被压缩为一对冒号::,最后地址就变成了:

FF05::B3

因为一个IPv6数据报被分为了8组,上面这个地址只有两组,中间用一对冒号,说明中间剩下的6组都是0000

但是要注意:一个地址只能进行一次零压缩

因为如果进行了多次零压缩,就不能确定一个地址了。

比如这个地址:

FF05::B3::9FFF

这个地址只有三个组,说明有五个组都是0000,请问FF05::B3有几组,B3::9FFF中间又有几组呢?

可以看到,这是不确定的,所以当进行多次零压缩,就无法确定一个地址了。

兼容IPv4地址

由于IPv4地址采用点分十进制,如果想要在点分十进制冒号十六进制之间转换,还是有点麻烦的。因此如果冒号十六进制内部的地址是一个IPv4地址,可以采用点分十进制作为地址后缀。

比如一个IPv4地址128.10.2.1,在IPv6中其实就只占用了最后两个分组,前六个分组都是0000。于是我们可以这样表示:

0:0:0:0:0:0:128.10.2.1

前半部分是冒号十六进制,最后两个分组是点分十进制。我们可以再进行一次零压缩,此时就变成了:

::128.10.2.1

通过这种方式,我们就可以很快把一个IPv4地址转化为IPv6地址了。

不过要注意:IPv4地址一定可以转化为IPv6地址,但是IPv6地址不一定可以转化为IPv4地址

结合CIDR

IPv6地址也可以使用CIDR来划分网络前缀主机号,和IPv4是相同的。

比如一个网络的60位网络前缀为:

12AB:0000:0000:CD30:0000:0000:0000:0000

其可以表示为以下三种方式:

12AB:0000:0000:CD30:0000:0000:0000:0000/60
12AB::CD30:0000:0000:0000:0000/60
12AB:0000:0000:CD30::/60

第二种和第三种方式其实就是进行了一次零压缩,不过压缩了不同的部分。


地址分类

接下来我们看看特殊的IPv6地址:

地址类型二进制形式CIDR结合冒号十六进制
未指明地址128位全0::/128
环回地址前127位全0最后一位为1::1/128
多播地址前8位全1后120位全0FF00::/8
本地站点单播地址前10位为1111111011后120位全0FEC0::/10
本地链路单播地址前10位为1111111010后120位全0FE80::/10

除了这些地址,剩下的都是全球单播地址

一个IPv6数据报,有以下三种传输方式:

  1. 单播:即点对点通信
  2. 多播:一对多的通信,IPv6广播视为一种多播
  3. 任播IPv6增加的一种类型,任播的终点是一组主机,但是只有一个主机会受到数据报,也就是“传播给这一组内部的任意一个计算机”,所以叫任播。一般来说是传递给距离最近的一个。

IPv4 到 IPv6 过渡

推行IPv6不是一蹴而就的,只能慢慢逐步演进,让IPv6慢慢地替代IPv4。由于目前主流的数据报还是IPv4,所以IPv6数据报想要在网络中传输,就必须兼容IPv4。主要有两种方法:双栈协议隧道技术

双栈协议

在这里插入图片描述

双栈协议的运行过程可以概括为:

  1. 地址绑定: 设备同时拥有 IPv4 和 IPv6 地址。
  2. 协议选择: 设备根据需要选择使用 IPv4 还是 IPv6 协议进行通信。
  3. 数据包封装: 根据选择的协议,数据包被封装成相应的协议格式。

上图中,路由器B和路由器E就是两个支持双栈协议的设备,当主机A要给主机F发送IPv6数据报时,由于要经过IPv4网络。路由器B会把IPv6数据报按照一定格式转化为IPv4数据报,随后在IPv4网络中传输。当路由器E接收到该数据报后,再将其转化成IPv6数据报。这样就可以完成IPv6数据报在IPv4网络中的传输。

双栈协议通过同时使用 IPv4IPv6 协议,确保设备能够与现有网络和设备进行通信,并为未来 IPv6 时代做好准备。它通过灵活选择协议,提高通信效率,并确保与现有网络的兼容性。

双栈协议的优缺点:

  • 优点:效率高
  • 缺点:由于会发生IPv4IPv6数据报的格式转化,有可能会造成损失

隧道技术

在这里插入图片描述

隧道技术是一种在现有网络基础上建立虚拟网络连接的技术。它通过将一种网络协议的数据包封装在另一种网络协议的数据包中,实现跨越不同网络环境的通信。

相比于双栈协议隧道技术不是直接把IPv6转化为IPv4,而是把IPv6数据报作为数据,封装在IPv4内部。这样就可以通过IPv4传输了。

隧道技术的优缺点如下:

  • 优点:这个过程不会修改原始的数据报,是无损的
  • 缺点:由于进行额外封装,整个数据报变大,效率降低

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/27609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【three.js案例一】智慧星球

直接附上源码: import * as THREE from three; import { OrbitControls } from three/addons/controls/OrbitControls.js;//场景 const scene = new THREE.Scene();const geometry = new THREE.SphereGeometry(50,32,16);console.log(.postion,geometry.attributes.position)…

【吊打面试官系列-Mysql面试题】实践中如何优化 MySQL?

大家好,我是锋哥。今天分享关于 【实践中如何优化 MySQL?】面试题,希望对大家有帮助; 实践中如何优化 MySQL? 最好是按照以下顺序优化: 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 1、SQL 语…

【Linux】基础IO——理解文件系统

1.理解文件系统 1.1.ls与stat 磁盘文件由两部分构成,分别是文件内容和文件属性。 文件内容就是文件当中存储的数据,文件属性就是文件的一些基本信息, 例如文件名、文件大小以及文件创建时间等信息都是文件属性,文件属性又被称…

探索高效存储与快速查找: 深入了解B树数据结构

探索高效存储与快速查找: 深入了解B树数据结构 一、什么是B树二、B树的实现2.1 节点的定义2.2 插入关键字2.3 删除关键字2.4 查找关键字2.5 遍历B树 一、什么是B树 B树,也称为B-tree,是一种多路平衡查找树。它被广泛用于文件系统和数据库之中&#xff0c…

CentOS7服务器中安装openCV4.8的教程

参考链接:Centos7环境下cmake3.25的编译与安装 参考链接:Linux安装或者升级cmake,例子为v3.10.2升级到v3.25.0(自己指定版本) 参考链接:Linux安装Opencv(C) 一、下载资源 1.下载cmake3.25.0的压缩包&am…

使用 yocto 搭建 qemuarm64 环境

文章目录 前言一、ubuntu 环境准备1. 编译主机基础的环境准备2. 编译主机相关依赖软件的安装二、yocto5.0 代码的获取与编译1. 获取代码2. yocto5.0 代码的编译2.1 source 环境变量2.2 修改相关配置文件2.3 编译3. 启动 qemu总结参考资料前言 本文主要介绍如何在 ubuntu 下使用…

SpringCloud总结(springcloud alibaba)

目录 版本说明(很重要) springcloud alibaba对应组件版本说明 简述 spring cloud albaba 几大模块 周会讨论 - spring cloud alibaba每周都会有周会讨论,社区活跃 spring cloud alibaba官网 注册配置中心 简单介绍 nacos 步骤 示例代码 依赖…

python全栈开发《07.数据类型之数字类型的应用、初识字符串类型》

目录 一、数字类型的简单应用二、初识字符串 1.什么是字符串2.字符串的内置函数与定义方法3.字符串的重要思想 三、python的内置函数id和len 一、数字类型的简单应用 对int与float的简单应用练习–初中生春游,主人公小编。 1.起因 小编学校组织春游,…

Django配置连接池:使用django-db-connection-pool配置连接池

一、该三方库文档使用 github地址: https://github.com/altairbow/django-db-connection-pool/blob/1.2.5/README_CN.mdhttps://github.com/altairbow/django-db-connection-pool/blob/1.2.5/README_CN.md1、选择指定版本,查看指定版本的文档和配置&am…

【Java】Object类中的toString、equals方法

Object类 所有类都直接或间接的继承自Object类,Object类是所有Java类的根基类。 也就意味着所有的Java对象都拥有Object类的属性和方法。 如果在类的声明中未使用extends关键字指明其父类,则默认继承Object类。 toString()方法 【1】Object类的toStr…

ChatGPT魔法背后的原理:如何做到词语接龙式输出?

介绍 我们都知道 ChatGPT 是 AIGC 工具,其实就是生成式人工智能。大家有没有想过这些问题 🤔️: 1、我们输入一段话,就可以看见它*噼里啪啦的一顿输出*,那么它的原理到底是什么? 2、到底它是怎么锁定这些…

【MySQL】事务一

事务一 1.什么是事务2.为什么会存在事务3.事务的版本支持4.事务的提交方式5.事务常见操作方式6.事务隔离级别6.1读未提交【Read Uncommitted】6.2读提交【Read Committed】6.3可重复读【Repeatable Read】6.4串行化【serializable】 点赞👍👍收藏&#x…

SSM家乡旅游网-计算机毕业设计源码04802

摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,SSM家乡旅游网当然也不能排除在外。SSM家乡旅游网是以实际运用为开发背景,运用软件工程开发方法&#xff0c…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第八周) - 现代大语言模型

现代大语言模型 1. GPT-32. 上下文学习 2.1. 零样本提示2.2. 少样本提示2.3. 归纳头 3. 对齐 3.1. 指令微调3.2. 基于人类反馈的强化学习3.3. 事实与幻觉 1. GPT-3 GPT系列论文 GPT-1(2018): Improving Language Understanding by Generative Pre-TrainingGPT-2(2019): Lang…

基于BERT微调+模板填充快速实现文本转DSL查询语句

前言 Text2SQL是指将自然语言转化为类SQL查询语句,使得用户的查询文本可以直接实现和数据库交互,本文介绍一种以BERT为基础模型,通过模板填充来实现的Text2SQL算法和产品化。 内容摘要 Text2SQL任务说明模板填充的思路条件列选择子模型搭建…

【免费Web系列】大家好 ,今天是Web课程的第二一天点赞收藏关注,持续更新作品 !

这是Web第一天的课程大家可以传送过去学习 http://t.csdnimg.cn/K547r 员工管理 1. 条件分页查询 1.1 概述 在页面原型中,我们可以看到在查询员工信息列表时,既需要根据条件动态查询,还需要对查询的结果进行分页处理。 那要完成这个页面…

【linux】应用程序访问百度时,操作系统内核网络接口日志

代码合入: 登录 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/commit/c639573cc7c4984913d4a89884347e5a30a51eac 启动操作系统运行dmesg的日志像这样: dmesg_log/2024_06_14_00_40_54.txt r77683962/linux-6.9.0 - Gitee.com 注意&#xf…

告别交叉编译 armbian小盒子 做RK3588开发

最近在做RK3588平台的开发 按照官方文档的说明 需要搭建交叉编译环境 然后在宿主机上做开发 使用交叉编译链 编译应用 其实蛮麻烦的 正好手头上有个arm64位的armbian小盒子 黑豹X2 信息如下 RK3588 也是64位的cpu 内存4G EMMC 32G 黑豹X2 用的 RK3566 也是瑞芯微…

后端常见问题解答-位运算实际场景讲解

位运算 在计算机存储的世界中,一切都是二进制的,位运算就是对二进制位进行操作的一种运算。位运算是计算机中的一种常见运算,可以用来提高性能和提升代码的可读性。 位运算有很多种,比如与、或、非、异或等,这些运算…

编程学到什么水平可以去接单呢?

关于编程要学到何种水平才可以去接单,这是一个需要认真思考的问题。 如果没有完整的项目经验,千万不要轻易地去承接外包项目。不要觉得仅仅因为自己能够编写一个计算器程序,就自以为有能力承接工程项目了。 要是没有拥有解决问题的清晰思路以…