ipv4和 ipv6

早就知道因为ipv4将要耗尽,所以就导致了ipv6的诞生,至于升级ipv6之后,什么每一粒沙子都能一个ip,懂数学的都很容易理解的。最近提给苹果的审核出了个问题:

We discovered one or more bugs in your app when reviewed on iPhone and iPad running iOS 10.2.1 on Wi-Fi connected to an IPv6 network.

于是被迫学习ipv6的各种细节。

ipv4其实就是一个int32存下的数量嘛,也就是2的32次方,也就是42亿多,而全球有70多亿人(2016年统计的全球有72.6亿,中国有13.9亿人),而很多时候,每个人要占用好几个IP,比如家里的电脑、电视,我们的手机,办公室的电脑等,ipv4的设计提前考虑了这些,提前留了ABC三个网段:

A 类:10.0.0.0~10.255.255.255
B 类:172.16.0.0~172.31.255.255
C 类:192.168.0.0~192.168.255.255

这三个网段由自家的路由器或者机房的交换机进行分配,这个时候就有了内网(局域网)和外网(广域网)之分。这还间接带来一个好处,就是内网机器更为安全,不容易被外网攻击,同时因为有统一的网络出口,设置防火墙,流量控制,员工行为监控带来了便利。

但如果要让外网机器直接能够访问内网机器呢,这个时候就产生了NAT服务,NAT服务就是将外网通过IP加端口的访问,转换成内网的某台机器的访问,端口转内网IP的NAT服务,可以由某台有公网IP的机器来提供,但后来路由器和交换机都能提供,而且多路由器之间还能级联,所以这种翻译服务能够一层一层执行进去,直到指定的某台具体机器。当然这种翻译是有消耗的,需要所有请求进行扫描及重新组装,特别是对于流量巨大的交换机。

ipv6并不是简单的进行了整数的扩大,它设计的更为精巧,因为它面临几个问题,很容易想到的有如下三条:

1. 如何兼容已有的系统,你不可能要求全世界所有的路由器、交互机、基站、手机、电脑网卡全都同时升级

2. 安全性,尽管可以给每粒沙子都分配IP,但是如果真这么干了,那么每一粒沙子都会被到攻击,所以还是要有内网和外网之分

3. 效率要高,如果新设计效率低下,那么没有人愿意去升级改造的

而ipv6的设计非常精巧而强大,把各种问题都解决得非常好。

首先肯定是位数扩大了,IPV6地址长度为128位,地址空间增大了2的96次方倍,留出的32位有大用处。安全性方便,96位存储外网IP,32位存储内网IP,每一级路由跳转只需要扫描整个IP的一部分,而不再需要进行请求的转换,也就是不再需要NAT服务,于是安全性得到保证,路由分发效率也提高,同时ipv6是按聚簇设计的,也就是前缀相同越多的IP,位置也越靠近,这带来的好处是,路由表的体积大大缩小,IP转地址变得容易,查询计算变得非常快,硬件资源更为节约。

兼容性是最复杂的,如果因为ip紧张,互联网上新有的网站换成ipv6地址的,那因为域名解析后手机网卡存储不下,是无法访问的,这时一种做法是手机上安装两个网卡,一个是ipv4网卡,配置DNS,一个是ipv6网卡,配置DNS64,一个域名解析两次,哪个解析出来了,就走哪个网卡。基本硬件、软件、系统都双份的,这非常不划算。

如果这样设计,算不得兼容,手机生产商和用户都没有动力升级,而实际上只需要支持ipv6就可以兼容ipv4了,应该是这样的:

这里的NAT64完全是为了兼容ipv4的一个服务,行为跟原来的NAT不大一样。手机发起域名解析,先到DNS64,如果直接就是ipv6地址,那就正常访问,一切正常。如果没解析到ip地址,就转发给DNS进行解析,拿到ipv4的地址后,DNS64将合成一个ipv6的地址返回给手机,如何将一个ipv4地址合成为ipv6地址呢,比如192.168.0.199转成::192.168.0.199,也就是::C0A8:00C7,简单说就是96位全填零,当手机拿着这个合成的ipv6去访问时,NAT64会把合成的ipv6还原成ipv4,进而去访问ipv4的站点资源。苹果给的流程图很清楚如下图:

所以整个来看,IPv6比IPv4,扩展性更好,效率更高,安全性更高,兼容性相当好。

附录:

1. 关于写法

ipv6有很多种写法,通常是冒号16进制、零位压缩表示,如:

ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
FF01:0:0:0:0:0:0:1101 → FF01::1101
  0:0:0:0:0:0:0:1 → ::1
  0:0:0:0:0:0:0:0 → ::

2. ping地址

需要使用ping6命令,多网卡需要指定网卡,如:

ping6 ::1
ping6 fe80::6e40:8ff:febb:c134%en0
ping6 fe80::20c:29ff:fe43:9%eth0

 

发表于2017-02-16 12:08   修改于2017-02-16 12:08   评论:0   阅读:169  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo