背景

大概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地址的划分

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


单播地址

单播地址:
用来唯一标识一个接口,类似于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协议簇的了解不是很熟,写不下去了...


IPV6数据包详解

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


第五部分 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的简单学习与整理的更多相关文章

  1. Deep Learning(深度学习)学习笔记整理系列之(五)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  2. Deep Learning(深度学习)学习笔记整理系列之(七)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  3. Deep Learning(深度学习)学习笔记整理系列之(六)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  4. Deep Learning(深度学习)学习笔记整理系列之(四)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  5. Deep Learning(深度学习)学习笔记整理系列之(三)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  6. 超全PHP学习资源整理:入门到进阶系列

    PHP是少数几门在语言层面饱受诟病,但在实际开发和应用上却又让人无法撒手的语言之一.就好比路边摊小吃,一遍骂人家不卫生,一遍却又说:真香.所谓接地气,不外如此,大道理不说,PHP光是轮子多.市场占有率 ...

  7. 第二弹:超全Python学习资源整理(进阶系列)

    造一个草原要一株三叶草加一只蜜蜂.一株三叶草,一只蜂,再加一个梦.要是蜜蜂少,光靠梦也行. - 狄金森 "成为编程大牛要一门好语言加一点点天分.一门好语言,一点点天分,再加一份坚持.要是天分 ...

  8. CentOS 简单学习 firewalld的使用

    1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...

  9. WPF学习资源整理

    WPF(WindowsPresentation Foundation)是微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分.它提供了统一的编程模型 ...

  10. OI数学 简单学习笔记

    基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...

随机推荐

  1. 执行计划缓存,Prepared Statement性能跃升的秘密

    摘要:一起看一下GaussDB(for MySQL)是如何对执行计划进行缓存并加速Prepared Statement性能的. 本文分享自华为云社区<执行计划缓存,Prepared Statem ...

  2. DTSE Tech Talk丨第2期:1小时深度解读SaaS应用系统设计

    摘要:介绍在SaaS场景下如何技术选型,SaaS架构设计中关键的技术点等内容. 本文分享自华为云社区<DTSE Tech Talk丨第2期:1小时深度解读SaaS应用系统设计>,作者: 华 ...

  3. 云图说|ROMA演进史:一个ROMA与应用之间不得不说的故事

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 华为云ROMA源 ...

  4. 使用MRS CDL实现实时数据同步的极致性能

    摘要:MRS CDL旨在实现最大的数据复制吞吐量和低复制延迟. 本文分享自华为云社区<使用MRS CDL实现实时数据同步的极致性能>,作者:大数据修行者 . MRS CDL提供从多个RDB ...

  5. Hive查看,删除分区

    查看所有分区 show partitions 表名; 删除一般会有两种方案 1.直接删除hdfs文件 亲测删除hdfs路径后 查看分区还是能看到此分区 可能会引起其他问题 此方法不建议 2. 使用删除 ...

  6. 最高提升10倍性能!揭秘火山引擎ByteHouse查询优化器实现方案

     更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   作为企业级数据库的核心组件之一,查询优化器的地位不可忽视.对于众多依赖数据分析的现代企业来说,一个强大且完善 ...

  7. 火山引擎数智平台最新直播活动:ByteHouse技术架构与最佳实践分享

    数据的时效性,正深刻影响着企业的发展.   以大型半导体制造厂商为例,不同于常规工厂生产流水线,半导体制造通用的无人实验室生产模式高度依赖机械臂作业,且对整个生产调度链路中的精密度要求非常高,这背后主 ...

  8. MyBatis ORA-01465: 无效的十六进制数字

    MyBatis 在插入 Oralce 时报:ORA-01465: 无效的十六进制数字 解决方法: # 插入或更新时 String -> BLOB字段:RAWTOHEX(#{字段名}) Strin ...

  9. 注册中心 —— SpringCloud Netflix Eureka

    Eureka 简介 Eureka 是一个基于 REST 的服务发现组件,SpringCloud 将它集成在其子项目 spring-cloud-netflix 中,以实现 SpringCloud 的服务 ...

  10. selenium多标签,多表单切换

    Selenium多标签之间的切换 多标签之间的切换 有的时候点击一个链接,新页面并非由当前页面跳转过去,而是新打开一个页面打开,这种情况下,计算机需要识别多标签或窗口的情况 获取所有窗口的句柄 han ...