|
Ipv6测试实践散记 1 简介
这是一组来自于笔者亲身IPv6测试的介绍,感想和探索。先申明三点,一,笔者不是网络专家,可能多有不专业之处,二,这不是学术性或理论性的介绍,而只是来自于实际测试的散记,比较杂乱,且假设读者具有最基本的网络知识。三,笔者有时候很罗嗦,很简单的东西要讲好多,而有时候很懒,很复杂的东西一下带过。如果你还有兴趣,请继续往下读吧。
无论如何,简介还是无法避免的。我们知道,现行IPv4地址是32bit的二进制串组成,习惯上我们使用人类的十进制数表示,如168.212.123.122。IPv4的理论空间是2的32次方,也就是40多亿个地址,再扣除组播地址,私有地址(如10,192)等等保留地址外,实际可用的也就更少了。于是我们面临的问题是越来越多的IP需求(越来越多的计算机,终端设备连入网络,特别是手机等)和有限的地址资源。目前最流行的解决办法是使用NAT。NAT大致分两类,一类使用端口映射,机器共享一个地址,这个配置起来相当麻烦;另一类,身边最典型的例子家里上网共享路由器,你的每一台机器都只有内网地址,外面的机器只知道你的路由器的对外的那个地址,通常是你的服务商分配给你的。但是这样就有一个问题,当你的程序需要一个外部发起的连接时,他们会无法找到你的机器,因为他们只知道你的路由器,而不知道你,最常见受影响的就是点对点传输软件。此外NAT还会造成一些其他影响,所以我们需要IPv6来帮我们解决这个问题。
2001:0db8:0000:0000:0000:0000:1428:57ab,这是一个典型的IPv6地址,第一印象如你所见,很长。在制定这个规范的时候,人们并没有提供十进制表达形式,而是改采16进制,可能是怕十进制太长记不住吧,但其实16进制也好不到哪里去。IPv4时代的网管往往可以记住地址,到了v6的时代,可能我们会看见网管都随身带着本小本子,好像木匠师傅那样,不过是用来记录地址的(插一句,任何时候总有例外,笔者的一个同事可以不用花费很大功夫的记住十条以上的v6地址,实在是恐怖的记忆力)。IPv4时代,你可以手动设定你的地址,也可以要求你的DHCP服务器动态分配一个给你,在IPv6里面你可以分别把link local address 和 global address想象成上述两种形式,但是请不要这么想,因为他们完全是不同的,我这么说只是方便类比。
下面我们先介绍一下IPv6地址:IPv6地址由128bits二进制数组成,地址空间多达3.4乘10的48次方,如果按地球人口65亿计算,平均每人可以分到5乘10的28次方个地址,即使刨去那些保留地址,也足够用到星际飞行时代了。习惯上我们用四位一组,共8组16进制数,以冒号间隔(这是个大问题,聪明的读者,也就是正在读此文的你,也许已经猜到问题所在),表示v6地址。中间连续的0可以省略为::,但是只可以省略一次,前述地址于是可以表达为2001:0db8::1428:57ab。IPv6地址前64个bit是network prefix,由网络或者其他东西提供,以后会讲,后64bit一般来自于MAC address,--由于MAC的天生唯一性,给IPv6的设计者提供了很好的偷懒机会--,也可以随机生成,这么做的原因是MAC和IP相关导致用户可以被识别,而缺乏了NAT的v6网络,使得追踪变得简单,这违背了隐私,于是就出台了这么一个规范。这个随机地址在笔者看来相当扯淡,相当麻烦,后面也会讲,这里不谈。
一如IPv4,IPv6也有组播,但是没有广播,但是它定义了一个全部主机地址的组,这样就等于广播了。这也和本文关系不大,下面详细讲下IPv6的各种地址(只讲主要的):
link local address: fe8::/10这个地址是相对固定的(后半段来自MAC),可以用来标识你的机器的,但不能global routing,也就是说只在你这个sub net里起作用。很显然的,这样一个地址是用作网络配置的不二人选,比如放在routing table里面。
Global address: 这个是主角,我们最前一个例子就是一个global address,一般应用程序都应该使用这个地址,前半段network prefix,后半段来自MAC,它也具有唯一性。
Site local address: 顾名思义,只在一个site里起作用,也就是说在一个相对隔离的网络里是可以routing的,出去了就不行,但是我们不用理它,因为它已经被废除了。而替代者Unique local IPv6 unicast addresses ,我还没有看到哪个系统支持,所以也不用管。
Localhost: ::1等于127.0.0.1
隧道:2001::/32 ,使用隧道技术让两个v6机器穿越v4的网络,不是我们重点,后面会提到点。
6to4: 2002::/16, 纯粹的把IPv6封装到v4的包,也不是我们的重点。
本节结束前最后提一句:其实前面提到的NAT的一些问题都是有解决办法的,比如如果你要接受外部连接你可以在你的路由器里设置port forwarding。而且即使是在IPv6的世界,是否还需要NAT也还是存在争论的,这里涉及一些安全性方面的问题,我们以后会涉及一些,但不会详细讨论,本文主要讨论IPv6。 |
|