Hello IPv6

前言

IPv4 大家都不陌生, 就是我们平常使用的32位网络地址. 但是, 因为可能在其发展初期, 并没有考虑的十分全面, 故而其存在一些缺陷:

  1. 32位二进制仅支持约43亿个设备, 还不到全球的人口数量. (故而现在依赖于各种局域网转换技术, 比如 NAT. 否则地址早就不够用了. 但是 NAT 转换, 可以让你访问互联网的设备, 但是外面的设备不能访问你. )
  2. 不支持 Qos. 简单说就是语音通话的数据包优先级要高于文件下载数据包的优先级. 不同的数据流采用不同的优先级来保证信息的及时到达.
  3. ARP 欺骗. 因为需要知道mac地址到IP地址的映射, 所以这中间就给了攻击者可乘之机.
  4. 等等…

其他方面倒都可以通过技术来解决, 但是地址不够的问题已经愈发严重, 尤其是这个万物互联的时代. 所以, IPv6的提出主要是为了解决地址数量的问题.

不要问我IPv1 IPv2 IPv3 IPv5都哪去了, 估计是都腹死胎中了, 还没来得及推广就被 pass 了.

IPv4我们已经比较熟悉了, IPv6是什么呢? 难道只是简单的进行地址的扩充吗? 我也很好奇.

IPv6

IPv6协议最显而易见的变动, 就是其地址长度增加到了128位. 可容纳约 3.4*10^38, 数不过来了, 反正很多就是了. 据说给地球上每一粒沙子都分配一个地址都绰绰有余.

表示

既然是这么大的数字, 在用原来的地址表示方式就不合适了, IPv6的地址的书写一般使用16进制, 每16位分为一组并用冒号隔开, 共8段. 大概就长这样:

F00A:1234:7759:1239:EFAC:B976:9923:2946

这么长度数字, 为了能够少写一些, 有些约定的规则.

压缩表示

允许压缩0

某一组前面的0可以省略不写. 既:

  • 8 => 0008
  • 80 => 0080

若出现连续的0, 可以用一对冒号表示

F00A:0:0:0:EFAC:B976:9923:2946 可以表示成 F00A::EFAC:B976:9923:2946

也就意味着两个冒号中间全是0. 但是, 注意, 一个地址不能出现两对双冒号, 否则会造成意思不清晰, 不知道应该对应的补多少组0 .

网络地址表示

IPv4的网络地址通过子网掩码来标识. 有时也使用/10这种形式. IPv6使用后者表示网络地址.

地址分类

IPv4地址不是分了 A,B,C,D,E 五类地址嘛(虽然实际使用中感觉并没有区分 ABC). 那么IPv6有它自己的分类么?

单播地址

既点到点通信使用的, 用来标识通信的对象. 就相当于IPv4的公网地址. 其地址为:

  • 1-3组: 全球路由前缀. 用来标识具体的运营商地址, 比如北京电信.
  • 4组: 组织标识. 全球路由下的细分标识符. 比如某个小区, 某个公司.
  • 5-8组: 主机标识. 主机的唯一标识, 由mac地址填充组成

单播地址规定前三位必须是001.

本地链路地址

用来与同一个网络中的主机进行通信. 不会被路由的. 本地链路地址与单播地址是同时存在的.

多播地址

用来标识一组主机. 以FF开头. 将一个数据包发送给多个目标地址.

任播地址

现象: 为了提高访问速度, 一些比较大的公司都会在全国各地设置多个机房, 在对域名进行解析的时候, DNS服务器会将域名对应的IP按照由远及近的顺序返回给你, 这样就可以优先连接距离较近的服务器. 但是有些时候, 可能DNS服务器判断的也没有那么精准.

任播地址: IPv6协议提供了一个任播地址, 就是说你在全国各地设置的服务器使用同一个IPv6地址, 然后有沿途的路由器来进行选择, 将数据包送到较近的服务器那里. 再下载文件, 再也不用选择网通还是电信线路了, 丢给路由器决定吧.

这这这, 现象就是这么个现象, 具体是如何做到的呢? 我十分好奇的去查了资料, 越查越糊涂, 没搞懂…

本机地址

::1 其作用就相当于IPv4中的127.0.0.1.

网络层协议

随着网络层的IP协议升级, 与IP协议配套的就一起升级了. 其中一些协议就是换汤不换药, 就是添加了对IPv6的支持, 其本质和IPv4时代一毛一样.

  • ICMP: 由ICMPv6取代. 在原基础上做了些内容扩充
  • ARP: 由ND取代(邻居发现协议). 原来深受其害的ARP 欺骗, 我以为在v6版本能得到改善, 然而并没有从根本解决. 不过现在的解决方案倒是与HTTPS有些相似.
  • DHCP: 由DHCPv6取代. 分配网络号.
  • IGMP: 由MLD取代(多播侦听器发现协议)

我原以为IPv6会在现有基础上有很大的改变, 但是发现整套的方案基本不变, 不过每个对应的协议升级都做了一些相应的改进与扩充. 而工作在网络层的IP协议升级, 下面的物理层以及上面的传输层不需要做出任何改变, 这就是面向接口编程的优秀之处, 可以局部升级而不会对上下造成影响, 否则协议升级想都不要想了.

不过再一想, 以后买服务器, 有公网 IP 就不用在多掏钱了, 嘿嘿, 毕竟标配嘛.


出于对IPv6的好奇, 简单看了一下升级后的IP协议, 并没有特别深入的了解各个协议工作机制, 此致

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

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

相关文章

GO 内存对齐

前言 之前遇到过这样一个情况(发现问题的结构体并不长这样, 不过为了引出问题, 改了一下): type Test struct { b bool i3 int32 i8 int8 i64 int64 by byte } func main() { t : Test{} fmt.Printf("%d", unsafe.Sizeof(t)) } 创建一个结构体, 查看一下其内存占用.…

HBase 命令行

hbase是一款分布式数据库. 其对数据的索引只通过row key进行. 在存储数据的时候, 通过row key的排序进行存储. 在面对一个新的数据库时, 深究其原理并不知一个明智的选择, 正如开车一般, 大多数人都是先学会开车, 然后在开车的过程中车子出故障了, 再慢慢学着去修理. 不管怎么说…

《论可计算数及其在判定上的应用》简单理解

刚刚拜读了一本书, 《图灵的秘密》. 该书介绍了图灵的论文《论可计算数及其在判定上的应用》, 其指出: 一个拥有铅笔, 纸和一串明确指令的人类计算者, 可以被看做是一种图灵机. 那么图灵机是什么呢? 是图灵为了描述可计算数而引出的一个虚构的可以做一些简单操作的计算机器. 尽…

PHP为什么empty可以访问不存在的索引

开始之前, 先抛出问题: $arr []; echo empty: , PHP_EOL; var_dump(empty($arr[1])); echo is_array: , PHP_EOL; var_dump(is_array($arr[1]));这段代码的运行结果: 你是否和我有过同样的疑问? 同样是函数, 为什么empty访问不存在的索引就不会报错呢? 按理说哈, 函数调用的…

浮点数运算丢失精度

今天碰到了这样一个情况, 使我又去翻阅了原来课本, 在Pthon中如果输入下面这段程序: print(sys.float_info.max - 1.0) print(sys.float_info.max)结果如下: 结果发现, 这数字根本没有变化. 本来这没什么, 看这数字, 10的308次方, 也就是说, 减去的1是在308位之后了, 这里没有…

变量的作用域

起因 最近闲来无事, 在 Python 官网上看到了2.0版本, 是2001年的. 打算装起来体验一下最初发布的版本, 但是发现只有 Windows 版本, 所以我就装了个 Windows10的虚拟机, 就在我打算安装的时候, 发现: 这激起了我的好胜欲, 于是我就依次安装了Windows 8, Windows 7, Windows XP…

PHP8的注解

PHP8.0增加了注解的支持, 虽然 PHP的注解没用过, 但是咱用过JAVA的注解呀. 注解这玩意怎么用? 简单说就下面几步: 定义注解类使用注解提取注解 到了PHP中, 也基本上换汤不换药. 使用 定义注解类 #[Attribute(Attribute::TARGET_CLASS | Attribute::TARGET_FUNCTION)] cl…

目的论浅谈

一些心理学主张, 我们的现在乃至未来, 都是由过去所经历的事情所决定的, 这种思想被称为 “原因论”, 同时也符合佛家的思想. 而相对的另一种解释就是 “目的论”. 举个例子, 如果你在饭店吃饭, 被服务员不小心把汤打翻了, 泼了你一身. 此时, 你愤怒不已, 站起身来破口大骂, 此…

HBase 数据存储结构

在HBase中, 从逻辑上来讲数据大概就长这样: 单从图中的逻辑模型来看, HBase 和 MySQL 的区别就是: 将不同的列归属与同一个列族下支持多版本数据 这看着感觉也没有那么太大的区别呀, 它解决了 MySQL 的那些问题呢? 每一个新事物的出现, 都是为了解决原本存在的问题. 对写入…

HBase 文件合并

HBase在存储时, 使用了LSM树来进行数据存储, 会定期将文件进行合并, 以提升数据的查询效率, LSM树都是这么处理的. 那么到这里就有一个问题了, HBase在进行文件合并的时候, 势必会占用大量 IO, 难道不会对正常的业务产生影响么? 抱着这个疑问, 我去找了找HBase文件合并的方式.…

spark计算操作整理

spark 的计算流程大概如图: 其中, 通过多次处理, 生成多个中间数据, 最后对结果进行操作获得数据. 本文不涉及任何原理, 仅总结spark在处理的时候支持的所有操作, 方便后面使用的时候, 可以参照本文进行数据的处理. 以下函数整理, 基与Python中RDD对象. 数据的转换操作 数据…

软件工程模型

你在工作中, 软件的开发流程是怎样的? 你是否想过, 除了你当前使用的流程, 还存在其他怎样的流程? 现在的流程有哪些问题, 又能够如何解决? 别说, 前辈们已经给出了一些项目流程的模型, 既软件工程. 可以简单了解一下, 带动一下我这生了锈的脑子. 在很久以前, 一个软件的从…

关于对接需求的思考

产品说想要一个登录注册的功能, 你一想, 好说, 不就是用户名密码嘛, 然后开发完成 产品看到成果后: 我要的是手机验证码登录结果写好的功能基本废了 产品又想要一个登录注册的功能, 这回你学乖了, 确认了一下, 是手机验证码登录, 没问题, 然后开发完成 产品拿到成果: 怎么没有验…

路径.git下的文件

用了这么久的git, 可以毫不谦虚地说对git是一无所知. 每天用来用去的就是commit, add, merge 等几个有限的命令, 这不符合我这刨根问底的性格啊. 不行, 得研究研究, 从哪里下手呢? 别的咱先不说, 所有 git 项目都有这么一个文件夹.git, 不如就从它入手 ? 那咱就看看这个文件夹…

git 操作二进制文件

平常用git进行项目管理已经稀松平常了, 今天咱来点不一样的. 平常管理的都是普通的文本文件, 如果是二进制文件, git能够处理么? 比如word文档. 测试一下. 新建一个项目, 在其中创建test1.docx, test2.txt两个空文件并提交. 之后编辑文件并添加标题, git diff看一下效果: 效…

Go 常量定义

定义常量在各个语言中都是不可或缺的语法了. 而有些语言在常量的基础上, 增加了枚举类型, 比如C. enum Weekday {SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY };上面的枚举, 对应的值依次为0到6. 而在Go中, 是没有提供枚举类型的. 如果实现上面相同的功能, 难…

搭建个人博客

一直都想着搞一个自己的个人博客, 拖着这么久, 最近终于开始动手了. 故留下一篇完整的记录, 若你也刚好有相同的需要, 那这篇文章应该恰好能够帮助到你. 准备 云服务器个人域名 如果没有云服务器, 将应用跑在自己的电脑上, 通过内网穿透大概也能达到效果, 但是个人电脑实在没…

nginx 配置文件的匹配规则

引出 之前在对php-fpm 进行nginx代理时, 为了对后台限定 IP 访问, 添加了如下配置: location ^~ /admin {allow 127.0.0.1;deny all; }结果呢? 所有admin路径下的php文件, 全都没有解析, 变成文件下载了. 当时我不知道是什么问题, 不过将这段配置去掉之后, 问题就消失了. 所…

分库后如何分页

前言 在实际应用中, 为了降低单表的数据量, 会对较大的表进行水平切分, 将单表的数据切分到多表多库中. 既然要切分, 就要有一个切分的依据, 比如说按照 ID 取模等. 那么多张表联合分页是如何做到的呢? 如果分表的依据是字段 A, 但是需要根据字段 B 进行分页查询, 针对这种…

计算机是如何进行时间同步的

WHY 在网络世界中, 各个计算机之间要想协同工作, 时间同步是一个十分重要的基础. 在计算机内部是有自己的时间的, 这个时间通过内部的晶体振荡器差生的固定频率, 来模拟时间流逝进行计算. 虽然频率十分稳定, 但也是有误差的, 虽然现在的工艺水平误差已经十分小了. (关于震荡的…