IPV6的简单学习与整理

ipv6,简单,学习,整理 · 浏览次数 : 705

小编点评

**IPV6简介** IPV6是一种更复杂的网络地址格式,其地址范围更广,可以识别多个接口,每个接口可以拥有不同的IP地址。 **IP地址格式** IP地址由8位数字组成,其中前6位表示网络地址,后2位表示主机地址,末2位表示网络掩码。例如,IP地址192.168.1.10表示网络地址为192.168.1.0,主机地址为192.168.1.5,网络掩码为255.255.255.0。 **IP6组播地址** IP6组播地址是用于多台设备共享同一个IP地址的地址。例如,多个路由器可以共享一个IP地址,每个路由器可以向多个设备提供IP地址。 **IP6数据包** IP6数据包是一种在IP6网络中传输的数据包。IP6数据包包含IP地址、端口号、数据等信息。 **IP6的优点** * 减少路由分类表,只允许源头进行分片。 * 更高的安全性和性能。 * 减少IP地址冲突。 **IP6的安全性** IP6协议与IP4协议兼容,但IPsec协议不是IP4协议的默认设置。

正文

背景

大概2018年时曾经突击学习过一段时间IPV6
当时没太有写文档的习惯,导致这边没有成型的记录了.
今天又有项目要求使用IPV6, 想了想就将之前学习的部分
还有想继续学习提高的部分进行一下总结. 
因为自己不是科班网工出身,总结的可能有所偏颇.

第一部分IPV6与IPV4的区别

IPV6和IPV4都属于TCP/IP协议簇中的成员.
区别在于IPV4成型较早, 并且没有考虑到万物互连的场景所以空间有限.
IPV6是为了解决IPV4存在的固有问题. 以及进行优化传输层的安全等设置.

IPV4大概有42亿个地址空间.
IPV6是2的128次方 是 42亿*42亿*42亿*42亿的地址数量. 
IPV6的地址空间大概是 340兆兆兆个.
其实 兆单位的含义是 "万亿"

第一部分IPV6与IPV4的区别

IPV4 采用 ARP协议发现同一个子网内部的其他机器.
IPV6 采用 ND协议进行同样处理 neighbour discovery 协议.

IPV4 使用 127.0.0.1 表示自己的位置. 
IPV6 可以使用 ::1来表示自己.
IPV6增加了FE80::XXXX 还有FEC0::XXXX等的地址进行表示自身.
其中后面64卫一般是通过MAC地址进行换算得来. 

在大部分路由器下都可以实现 MAC地址与IPV6地址的解析
能够实现再当前LAN内 实现IPV6的互通. 

如果汇聚层或者是核心层不支持IPV6的话. 可能跨了汇聚交换机就无法连通地址了. 

IPV6本地地址的换算

IEEE EUI-64 地址代表网络接口寻址的新标准。
公司 ID 仍然是 24 位长度,但扩展 ID 是 40 位,
从而为网络适配器制造商创建了更大的地址空间。
EUI-64 地址使用 U/L 和 I/G 位的方式与 IEEE 802 地址相同。

要获取用于 IPv6 单播地址的 64 位接口标识,
EUI-64 地址中的 U/L 位将进行求反:
如果是 1,则被设置为 0;如果是 0,则被设置为 1

IPV6本地地址的换算

主机 A 的以太网 MAC 地址是 00-AA-00-3F-2A-1C。
首先,通过在第三个和第四个字节之间插入 FF-FE 将其转换为 EUI-64 格式,
其结果是 00-AA-00-FF-FE-3F-2A-1C。

然后,对 U/L 位(第一个字节中的第七位)求反。
第一个字节的二进制形式为 00000000。将第七位求反后,
变为 00000010 (0x02)。
最后的结果是 02-AA-00-FF-FE-3F-2A-1C,
当转换为冒号十六进制符号时,
成为接口标识 2AA:FF:FE3F:2A1C。
应于 MAC 地址 00-AA-00-3F-2A-1C 的网络适配器的链接本地地址是:
FE80::2AA:FF:FE3F:2A1C。

一个简单的判断自己网络是否支持IPV6的方法

ping -6 240c::6666
如果通了 说明在自己所在的网络环境是IPV6联通的
如果不通 说明网络环境不支持IPV6
注意: 240c::6666 是中国境内政府机关定义的一个DNS

第二部分 IPV6地址的划分

  • 如图所示,地址分为三大类:组播、单播、任意播

image


单播地址

单播地址:
用来唯一标识一个接口,类似于IPv4中的单播地址。
发送到单播地址的数据报文将被传送给此地址所标识的一个接口。

一、全局单播地址:
等同于IPv4中的公网地址,可以在IPv6 Internet上进行全局路由和访问。
这种地址类型允许路由前缀的聚合,从而限制了全球路由表项的数量。

二、本地单播地址:
链路本地地址和唯一本地地址都属于本地单播地址,
在IPv6中,本地单播地址就是指本地网络使用的单播地址,
也就是IPV4地址中局域网专用地址。每个接口上至少要有一个链路本地单播地址,
另外还可分配任何类型(单播、任播和组播)或范围的IPv6地址。

组播地址

组播地址:
用来标识一组接口(通常这组接口属于不同的节点),
类似于IPv4中的组播地址。
发送到组播地址的数据报文被传送给此地址所标识的所有接口

IPv6组播地址可识别多个接口,对应于一组接口的地址(通常分属不同节点)。
发送到组播地址的数据包被送到由该地址标识的每个接口。
使用适当的组播路由拓扑,将向组播地址发送的数据包发送给该地址识别的所有接口。
任意位置的IPv6节点可以侦听任意IPv6组播地址上的组播通信。
IPv6节点可以同时侦听多个组播地址,也可以随时加入或离开组播组。 
IPv6组播地址的最明显特征就是最高的8位固定为1111 1111。
IPv6地址很容易区分组播地址,因为它总是以FF开始的 。

任播地址

任播地址:
用来标识一组接口(通常这组接口属于不同的节点)。
发送到任播地址的数据报文被传送给此地址所标识的一组接口中
距离源节点最近的一个接口。
(根据使用的路由协议进行度量)

一个IPv6任播地址与组播地址一样也可以识别多个接口,对应一组接口的地址。
大多数情况下,这些接口属于不同的节点。
但是,与组播地址不同的是,发送到任播地址的数据包被送到由该地址标识的其中一个接口。 
通过合适的路由拓扑,目的地址为任播地址的数据包将被发送到单个接口
(该地址识别的最近接口,最近接口定义的根据是因为路由距离最近),
而组播地址用于一对多通信,发送到多个接口。
一个任播地址必须不能用作IPv6数据包的源地址;
也不能分配给IPv6主机,仅可以分配给IPv6路由器。

第三部分 IPV6的数据库连接表示

Study From : https://blog.csdn.net/xlxxcc/article/details/51148086

注意IPV6的 IP地址使用 ":" 的方式进行分隔
与IPV4地址的处理时的端口 使用的分隔符是一样的

一般为了进行区分两种不通的地址,一般使用"[::1]" 将IPV6地址包裹起来.

所以一般写url的时候可以使用 http://[::1]:port 的方式来处理. 
需要注意, 如果网络不支持IPV6
可以自己手工指定IPV6的地址. 可以输入比较好记忆的地址进行使用. 

Mysql

Class.forName("com.mysql.jdbc.Driver"); 
// ipv4连接URL
// String jdbcIpv4Url = "jdbc:mysql://127.0.0.1:3306/databaseName"; 
// ipv6连接URL
// String jdbcIpv6Url = "jdbc:mysql://address=(protocol=tcp)(host=2001:470:23:13::6)(port=3306)/database"; 
// ipv6连接localhost 的 URL
String jdbcIpv6Url = "jdbc:mysql://address=(protocol=tcp)(host=::!)(port=3306)/database"; 
Properties jdbcProperties = new Properties(); 
jdbcProperties.put("user", "dbuser"); 
jdbcProperties.put("password", "db_password"); 
Connection connection = DriverManager.getConnection(jdbcIpv6Url); 

Oracle

Class.forName("oracle.jdbc.OracleDriver"); 
// ipv4连接URL
// String jdbcIpv4Url = "jdbc:oracle:thin:@//127.0.0.1:3306/orcl"; 
// ipv6连接URL
String jdbcIpv6Url = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)
(HOST=[fe80::5cf:72])(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=fnstdb1)))"; 
Properties jdbcProperties = new Properties(); 
jdbcProperties.put("user", "dbuser"); 
jdbcProperties.put("password", "db_password"); 
Connection connection = DriverManager.getConnection(jdbcIpv6Url ); 

DB2

Class.forName("com.ibm.db2.jcc.DB2Driver"); 
// ipv4的连接方式
// String jdbcIpv4Url = "jdbc:db2://127.0.0.1:50000/sample"; 
// ipv6的连接方式
String jdbcIpv6Url = "jdbc:db2://[2001:470:23:13::6]:50000/sample"; 
Properties jdbcProperties = new Properties(); 
jdbcProperties.put("user", "dbuser"); 
jdbcProperties.put("password", "db_password"); 
Connection connection = DriverManager.getConnection(jdbcIpv6Url ); 

SQLServer

Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
// ipv4
//String jdbcIpv4Url = "jdbc:jtds:sqlserver://127.0.0.1:1433/master"; 
// ipv6
String jdbcIpv6Url = "jdbc:jtds:sqlserver://"; 
Properties jdbcProperties = new Properties(); 
jdbcProperties.put("user", "dbuser"); 
jdbcProperties.put("password", "db_password"); 
// 如果使用ipv6
if (ipv6) { 
jdbcProperties.put("portNumber", 1433); 
jdbcProperties.put("instanceName ", "master"); 
jdbcProperties.put("serverName","2001:470:23:13::6"); 
} 
Connection connection = DriverManager.getConnection(jdbcUrl);

第四部分 IPV6的数据包升级

  • IPV6比IPV4的数据包头有了较大的变化
  • 自己对TCP/IP协议簇的了解不是很熟,写不下去了...

image


IPV6数据包详解

  • IPV6有很多优点:减少的路由分类表,只允许源头进行分片.

image


第五部分 IPV6的安全性提升

本来第四部分的报文头自己认为不熟悉.
发现IPsec自己更加不熟悉.

一般文章都是写IPV6默认开启了IPsec. 但是今天仔细查了下资料:
RFC 6434 中已经规定IPV6可以不强制开启IPsec了. 
所以实质上并不是所有的IPV6一定都是安全的IPsec进行保护的. 

但是晚上学习了很多文章, 发现大部分文章的观点是因为IPV4中NAT技术的问题.
IPV4的IPsec其实并不是非常完美
但是IPV6还是跟IPsec兼容的非常完美的, 可以较好的实现安全协议. 

关于IPsec

网络安全主要有三种方式进行保证:
1. 物理层 
   也就是我们常说的网络隔离,SM网,ZY网的处理.或者是政务网. 
2. 应用层
   应用层协议就是咱们经常说的TLS/SSL协议簇.
   最多的应用是 https以及smtps
3. 传输层
   IPsec. 其实也是一个协议簇,里面包好很多网络协议. 
   比如AH以及ESP还有IKE协议. 
   他可以在传输层,给IP数据包进行加密和解密的处理.
优缺点:
物理层最安全,但是最昂贵,最不灵活.
应用层对IaaS要求不高.需要应用层进行适配处理.
传输层对应用是黑盒的, 应用不需要关注, 但是操作系统行需要进行适配.

与IPV6的简单学习与整理相似的内容:

IPV6的简单学习与整理

背景 大概2018年时曾经突击学习过一段时间IPV6 当时没太有写文档的习惯,导致这边没有成型的记录了. 今天又有项目要求使用IPV6, 想了想就将之前学习的部分 还有想继续学习提高的部分进行一下总结. 因为自己不是科班网工出身,总结的可能有所偏颇. 第一部分IPV6与IPV4的区别 IPV6和IP

[转帖]DNS解析常见问题:如何添加AAAA记录?

很多人在添加解析记录时都会看到有AAAA记录,那什么是AAAA记录呢?它和A记录的区别是什么,我们又该如何添加AAAA记录呢?接下里中科三方将针对这些问题做下简单介绍。 什么是AAAA记录? AAAA记录(AAAA record)是用来将域名解析到IPv6地址的DNS记录。与之相对的A记录只能将域名

[转帖]Linux之pure-ftpd安装和使用

一、pure-ftpd简介 PureFTPd是一款专注于程序健壮和软件安全的免费FTP服务器软件(基于BSD License),以安全和配置简单为设计目标,支持虚拟主机,IPV6,PAM等功能。。其可以在多种类Unix操作系统中编译运行,包括Linux、OpenBSD、NetBSD、FreeBSD、

解密IP分片与重组:数据传输中的关键技术

本文介绍了IP分片与重组的工作原理及其在数据传输中的重要性。IP分片将大数据包分割为小分片进行传输,重组则将其重新组合为完整数据包。这种技术能适应不同网络链路的传输单元限制,提高传输效率和可靠性。随着IPv4地址枯竭,IPv6的采用越来越普遍,了解IP分片与重组对于网络优化和IPv6部署至关重要。

二进制安装Kubernetes(k8s)v1.30.1

二进制安装Kubernetes(k8s)v1.30.1 https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes(k8s)二进制高可用安装部署,支持IPv4+IPv6双栈。 我使用IPV6的目的是在公网进行访问,所以

[转帖][译]tcpdump 示例教程

https://colobu.com/2019/07/16/a-tcpdump-tutorial-with-examples/ 目录 [−] 基于IP查找流量 根据来源和目标进行筛选 根据网段进行查找 使用十六进制输出 显示特定端口的流量 显示特定协议的流量 只显示 ipv6 的流量 查看一个端口段

[转帖]IPv6地址解析库,窥探IPv6地址中包含的信息

https://zhuanlan.zhihu.com/p/479028720 大家好,我是明说网络的小明同学。 今天和大家介绍一个IPv6 地址解析库IPv6 address Parser :https://github.com/dianwoshishi/ipv6_address_parser.gi

[转帖]IPv6报文头深度解析

https://blog.51cto.com/key3feng/5725797 IPv6报文由IPv6基本报文头、IPv6扩展报文头以及上层协议数据单元3部分组成。上层协议数据单元一般由上层协议报文头和它的有效载荷构成,上层协议数据单元可以是一个ICMPv6报文、一个TCP报文或一个UDP报文。1、

Cilium系列-10-启用 IPv6 BIG TCP和启用巨帧

## 系列文章 * [Cilium 系列文章](https://ewhisper.cn/tags/Cilium/) ## 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提

NAPT网络结构下TCP/UDP/ICMP访问外网原理思考

背景 作为程序员,应该都听说过NAT(Network Address Transfer,网络地址转换)这一技术名词,并或多或少大概知道其原理与作用--NAT是用于解决IPv4地址不够用,保证我们能够在IPv6普及前依然可以正常使用互联网而广泛使用的一个技术,其原理正如其名称所示:其可以将私网IP通过