究竟何谓IPv6?
1.1.1.1
这是一个的IPv4地址,而它最大的问题是地址不足,把全部地址都算上大概有43亿个地址,当时计算机的数量并不多43亿已经足够使用了。而互联网是一个很方便的东西,互联网的扩张速度很快超出了预期。
在意识到地址枯竭问题后,于1990年人们开始着手设计下一代IP协议,这在当时被称作IPng,后来发展成为今天的IPv6。
IPv6常见名词解释
NDP,邻居发现协议
这个协议可以说是IPv6的灵魂了,他不仅承担IPv4中ARP的任务,即获取ipv6地址对应的mac地址(反过来也行)。还承担路由发现、重复地址检测、甚至是分配IPv6地址的任务。
RA,路由通告
路由通告是一种消息格式,同时也是邻居发现协议的一部分,主要用来实现无状态地址自动分配。
显然,如果你关闭了路由通告就会影响局域网设备获取地址。
SLAAC,无状态地址自动分配
IPv6的一个相当有趣的地方就是这个无状态地址自动分配了,路由器向局域网广播IPv6地址的前缀(路由通告),客户端通过前缀生成自己的IP地址,同时为为自己配置网关和dns,不需要像DHCP那样管理地址,减轻了配置负担。因为在路由器中不存在客户端的地址是否过期的状态,所以被称为无状态的。
早期需要通过DHCPv6配置dns的,后续为路由通告添加了dns的扩展字段(称为rdnss),只有比较新的操作系统支持。
DHCP-PD,前缀委托/前缀代理
IPv6分配的都是公网IP,这代表着地址分配不能向以前一样随意了,DHCP-PD是为了路由器向上游获取一个地址段准备的。
一个典型的例子:你的手机开启热点时就会使用前缀委托获取一个地址段,用于给连接到热点的设备分配公网ipv6地址。
中继模式
在有些情况下,上游会分配一个长度为64位的前缀地址段(刚好64的长度不适合直接给路由器使用),中继模式是应对这种情况的一种手段。
一个IPv6地址的总长度是128位(二进制),一般来说上游会为你的路由器提供一个长度为56的地址段(前缀),其中的后64位的长度(也就是后缀)是给客户端用来生成的,如果前缀超过了64位(刚好是一半的长度)就会影响客户端生成地址。所以分配前缀的长度要小于64,否则地址分配就只能靠DHCP,中继模式,甚至是NAT才行。
在路由器中,上游分配的地址段要先分给wan口,然后再从wan口中分一部分给lan口。也就是说分配给wan口的前缀长度达到64后想要再分配给lan口就只能分配出大于64的前缀了!
在这种wan口有合适地址段但是lan口没有的时候就需要配置中继模式,有些宽带开通了ipv6但是不能分配给客户端,很有可能就是这个问题导致的。
IPv6和IPv4有哪些区别?
格式区别
IPv4地址用10进制表示,用点分隔,比如:1.1.1.1
,每位数字的范围是0~255。
IPv6地址用16进制表示,每隔4位数就用冒号分隔,比如2000:333A:07E3:CF03:3B03:B483:F483:ABA9
,每位的范围是0000~ffff。
CIDR、子网掩码与前缀长度
有时在IP地址后面会有一个/24
的尾巴,无论是v4还是v6。这种在斜杠加一个数字的表示法叫CIDR即 “无类别域间路由”
比如1.1.1.1/24
或者是2606:4700:4700::1111/64
,ipv4的CIDR可以是032,ipv6则是0128,指的是二进制上、从左到右数的位数。
CIDR表示地址前缀的长度。无论是ipv4还是ipv6,一个ip地址分为两个部分,左半部分称为前缀,而右半部分称为后缀,至于这两个部分各占多长?用CIDR表示前缀的长度即可。另外在ipv4下一般叫网络部分和主机部分,而不说前后缀。
在Windows中一般用子网掩码表示类似的含义,比如255.255.255.0
与/24
等效,而且可以相互转换。
Windows中只有ipv4有子网掩码,而ipv6既不显示子网掩码也不显示CIDR……
在CIDR出现前,ipv4地址用ABCDE分类的,靠这种方式分配地址段不是很灵活。简单来说就是不是太多就是太少,像B类有65534个地址,而下一个C类有254个地址,一个大点的企业有254个以上的电脑很正常,但是能有几个企业有65534个电脑呢?CIDR就是为了解决这种情况才出现的,它用二分法将地址段一半一半地分开,可以更灵活的划分地址段。ipv6作为ipv4的继任者自然也采用了这个方式。
局域网内的地址分配方式
IPv4
- DHCP分配
- 手动配置
- 自动生成
ipv4时一般是DHCP服务器为设备分配地址,某些情况下使用手动配置,需要配置的内容主要是地址,子网掩码,DNS和网关。如果两种方式都没有设备会给自己生成一个169.254开头的地址,虽然不能上网但是可以在设备间互相访问。
IPv6
- SLAAC
- DHCPv6分配
- DHCPv6、SLAAC混合
- 手动配置
ipv6把设备自己生成地址的方式发扬光大了,只要路由器广播了地址的前缀,那么设备就可以使用这个前缀为自己生成一个ipv6地址,同时配置网关和dns,有了这些就可以上网了!(SLAAC,无状态地址自动配置)
除了自动配置以外也可以使用DHCPv6分配ip与dns等等,甚至是自动配置与DHCPv6混合使用,比如无状态DHCPv6,ip自动配置,而dns与网关等配置通过DHCPv6获取。另一种混合使用的方式是既使用SLAAC自动配置的同时也使用DHCPv6获取多个地址。也可以有状态DHCPv6,不仅获取dns和网关,地址也一同获取。
另外ipv6允许同网卡拥有多个地址,在生成时还要准备一个临时地址和一个固定地址,所以会看到一块网卡上会有很多的ipv6地址,尤其是同时使用了SLAAC和DHCPv6分配。
IPv6的地址段的分配情况
除了下面提到的外,还有很多特殊用途的ip地址,具体分配可以去看Internet Protocol Version 6 Address Space
唯一区域地址,类似192.168.1.1
以fc或者是fd开头,类似192.168.1.1这类的内网ip,用于局域网内通信,可以与公网地址一同分配。
完整地址段为FC00:0000:0000:0000:0000:0000:0000:0000
到FDFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
。
链路本地地址,类似169.254.1.1
通常以fe80
开头,功能类似ipv4中以169.254开头的地址,操作系统会为每个网卡分配一个这样的地址,用于在局域网内部访问使用,比如作为设备的网关地址。另外,拥有这个地址就代表网卡支持ipv6并且已经开启。
fe80和它的前辈169.254有些不一样,169.254只有在没有配置ip的时候才会出现,一旦有其他的ip分配就会消失,不能再使用。fe80不同,无论是否有其他地址分配都不影响,在有其他地址的情况下fe80依旧可用,可以像内网ip一样使用,如果没有特殊要求的话可以不用为局域网设备分配上面的唯一区域地址。
完整地址段为FE80:0000:0000:0000:0000:0000:0000:0000
到FEBF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
。
全球单播地址
直白的说就是公网ip,地址多起来后分配起来也变的大手大脚,比如一个局域网至少一个/64
的地址段。一个设备可以为自己分配很多的公网ip,现在不会有公网ip焦虑了!
目前所有被分配的公网地址段都在2000:0000:0000:0000:0000:0000:0000:0000
到3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
中。除此之外的大部分地址处于保留状态,未来才会被分配。
这里面还有一些地址用作特殊用途。
IPv6的安全问题
每一个关于ipv6的讨论下面一定会有人提到安全问题,一般分为两个方面,一个是隐私安全,另一个是网络安全,但主要还是每个设备都有公网ip这一特点带来的担忧。
隐私安全
在隐私安全方面,主要担心运营商可能通过网络流量精确定位到个人,自己的上网足迹被监视等等。
这里有一点必须要知道,那就是中间设备一定会知道数据的收发方的,这个问题其实并不是ipv6特有的,互联网的特性即是如此。考虑到ipv4有nat存在,多人共用ip确实可以一定程度的提高隐私性,但是运营商仍然有可能保留运营商级nat的记录,即使有nat的情况下也可以让网络流量精确到某一宽带账户。
如果确实有这方面的担忧我建议与其依靠nat不如直接使用加密代理(比如科学上网)加大信息关联难度,也能让你的访问意图难以捉摸。而且目前网络流量大多使用TLS加密流量,你的访问意图本就难以捉摸!
记得处理好自己的dns请求。
网络安全
网络安全方面则是担心自己的设备没有nat保护后被黑客入侵当作肉鸡或者泄露自己的数据等等方面。
得益于ipv6大量的可用地址,设备会为对外访问生成临时地址,在访问时使用临时地址而且定期更换,不用担心别人获取了公网地址会怎么样,因为拿到你的临时公网地址后很有可能已经过期了。也是因为ipv6广阔的地址空间,这使得ipv4时代的端口/地址扫描已经不太现实了,地址太多导致扫起来就是天荒地老,可能还没扫到有效ip你的地址就更换了。
哪怕是黑客突破重重障碍还是找到了你的公网ip也不用怕,虽然没有nat不是还有防火墙嘛,现在的路由器、操作系统等等都有一套自己的防火墙。nat虽然可以在一定程度上提供类似防火墙的安全性,但它替代不了防火墙,容易影响游戏联机、种子下载,也不能像防火墙一样灵活放开,不应该依赖nat作为网络安全的保障。
IPv6与NAT
ipv6地址多到可以不使用nat但并不代表不能用nat,甚至可以在ipv4和ipv6之间使用nat,比如局域网内使用ipv4和nat转换访问ipv6互联网,甚至可以实现一个内网ip对应一个公网ip实现1比1nat,也可以是一个内网对应多个公网ip等等。
除了特殊情况外,没有必要在ipv6上用nat。
IPv6的体验不是很好,一定要过度到IPv6吗?
ipv6脱胎于ipv4,如果ipv4好用那么ipv6也能同样好用。v4是人类第一个大规模使用的版本,要说一点缺点没有是不可能的,一些是缝缝补补还能用,另一些则是因为协议已经铺垫开来,想改很困难,不如直接等下一个版本。
v6不好用一部分是因为路由器/操作系统对的支持上不够充分,比如缺少一些相关设置影响使用,另一部分是网站只有部分页面支持v6,也有运营商不支持/配置错误的情况存在等等。
究其根本还是因为ipv4能用导致对ipv6不上心。要我说就是长痛不如短痛,直接全球关闭ipv4,一夜之间变成ipv6单栈(暴论)
还有一些说法是ipv6地址太长不好记,这是没有办法的事情,如果想要更多的地址空间就无法避免地址变长,不过好在要记ipv6地址的情况也不多。而且v6地址可以缩写,在局域网下完全可以用DHCPv6分配一个fc00::1
可以比ipv4还短!
IPv5去哪了?
ipv6全称叫网际协议第6版,所以之前是确确实实有5个版本的,只不过网际协议还没有大规模使用的时候就迭代到v4。ipv5设计要点是音频和视频传输,不能解决v4地址不足的燃眉之急,所以需要新开一个版本。这里要注意v5没有夭折,它已经包含到v6中了。