前言
IPv4
大家都不陌生, 就是我们平常使用的32位网络地址. 但是, 因为可能在其发展初期, 并没有考虑的十分全面, 故而其存在一些缺陷:
- 32位二进制仅支持约43亿个设备, 还不到全球的人口数量. (故而现在依赖于各种局域网转换技术, 比如 NAT. 否则地址早就不够用了. 但是 NAT 转换, 可以让你访问互联网的设备, 但是外面的设备不能访问你. )
- 不支持 Qos. 简单说就是语音通话的数据包优先级要高于文件下载数据包的优先级. 不同的数据流采用不同的优先级来保证信息的及时到达.
- ARP 欺骗. 因为需要知道
mac
地址到IP
地址的映射, 所以这中间就给了攻击者可乘之机. - 等等…
其他方面倒都可以通过技术来解决, 但是地址不够的问题已经愈发严重, 尤其是这个万物互联的时代. 所以, 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
协议, 并没有特别深入的了解各个协议工作机制, 此致