Bootstrap

ipv6地址零压缩方法_近来话题度颇高的IPv6,到底是个什么东东?

说起IPv6,很多人可能还感觉很遥远。其实,IPv6已经悄悄来到我们身旁。当你打开各大购物App,会发现启动页的下方都会写这一行小字「XXX已支持IPv6网络」?当你在家上网,是否留心过使用的是IPv4还是IPv6地址?

那么,IPv6究竟可以带给我们什么?在IPv6发展的浪潮下,我们应该储备哪些知识才不会被out,优雅地去拥抱IPv6呢?带着这些疑问, @华为ICT学堂 来一一解答——

首先,我们就要认识IPv6地址。

不同于我们所熟悉的IPv4,IPv6地址要复杂许多。

d222da5913ed9ef4dc24df0d4836da1c.png

如上图,IPv4的地址格式是由「.」隔开的十进制数,我们称之为「点分十进制」;而对于IPv6,则是由冒号隔开的十六进制,我们可以称之为「冒分十六进制」。这样的冒号,一共有7个,将完整的IPv6地址分成八段。比如:

f6f07234a5b4600808c371573dbd0895.png

以第一段为例,此处的「2001」并不是十进制的「2001」,而是十六进制的。把「2001」转换成二进制,「2」为0010,「0」为0000,「1」为0001,这样「2001」就会转换成00100000 0000 0001,即长度为16位的二进制数。这样的段数一共有8段,所以我们常说的128位的IPv6地址,是8*16=128得出来的。

那么,128位的IPv6地址,和32位的IPv4地址,在地址总数上是怎样的差别呢?

8832228033df4b6b89af1aa1833ec1ec.png

可以看出,IPv6具有非常庞大的地址空间,「秒杀」IPv4。我们常说的地球上每一粒沙子都可以被分配到一个IPv6地址,并没有夸大。

但是,128位的IPv6地址,长度一下变成了IPv4地址的4倍,带来的问题就是书写麻烦,容易出错,是否有简单点的书写方法呢?答案是肯定的,举个例子:

8f77c0d695986e5796b81e856b8a5760.png

这个地址,如果老老实实把每一段都写完整,我们称之为“首选格式”。实际上,每段开头的「0」是可以省略的,即:

573f0363c5a3fe4da06b345f790d5e6b.png

另外,如果出现连续的多段「0」,则可以用「::」来表示,即:

3e1a35b693aed5b01932be22c5dd1061.png

这样的格式,称之为「压缩格式」。需要注意,「::」只能出现一次,不然会有歧义。怎么样,如此来看是否简单了许多?

然后,如何在家使用IPv6地址上网呢?

先来看看家用终端上网的结构图:

1568f0160fb060d5f12c737379ad8436.png

PC上网的大体流程是,首先PC或者家庭网关(即图中CPE,可以看成是光猫)拨号(家庭网关拨号居多),经过运营商的接入网后,到达城域网边缘设备BRAS(宽带远程接入服务器),BRAS对用户拨号请求进行处理,对用户账号进行认证,并在认证成功后为用户分配IP地址,开始计费。

简化一下,就是下图中的CPE家庭网关拨号,BRAS处理并分配地址给CPE,CPE收到后再给终端PC分配地址。如果运营商只给用户分配IPv4地址,那么这样的用户就称之为单栈(即IPv4单协议栈)用户,如果同时分配IPv4和IPv6地址,那么就称之为IPv4/IPv6双栈用户。

89c3e254e9f8ab7be5627afc926c776f.png

显而易见,如果是双栈用户,CPE是必然需要升级支持IPv6的。

好了,假设现在我们即拿到了IPv4地址,又拿到了IPv6地址,如何知道我们是哪个地址去访问网站的呢?这个问题和我们使用的PC操作系统以及DNS解析流程有关。

DNS服务器存储着域名和IP地址的对应关系。

2a80f09de68076fdd75cc48b96db5ac4.png

如上图,如果域名对应的是IPv4地址,称之为A记录;如果域名对应的是IPv6地址,则称之为AAAA记录。再看下图,当PC发起http://www.a4.com的A记录解析时,DNS服务器返回IPv4地址,发起AAAA记录解析时,返回的是none,说明该网站还不支持IPv6。同理,PC发起http://www.a6.com的访问请求时,只能解析到IPv6地址,说明该网站只支持IPv6访问,不支持IPv4(当然现阶段基本不会有这种情况产生)。

daddcc8aac5cbc8774030fd04807f20e.png

以WIN7操作系统为例,WIN7操作系统会优先使用IPv4地址,同时发出A/AAAA请求。查询成功即开始访问请求,若无法成功查询到A或者AAAA请求,会使用IPv6地址发起A/AAAA查询。另外,WIN7操作系统若A/AAAA均能解析到相应地址,则优先使用IPv6地址发起访问网站请求。若只有A请求解析到相应地址,则使用IPv4地址发起访问网站请求。

总结一下,对于宽带上网场景,要能够访问IPv6网站,首先运营商内部要对设备、平台系统改造升级,在后台将用户设置为双栈用户,规划好IPv6地址池供分配使用,同时,我们家里的PC和家庭网关要支持IPv6拨号。另外,还需要我们访问的网站能够支持IPv6,有DNS的AAAA记录,这些都是必不可少的。

总而言之,要使用IPv6地址访问IPv6网站,云、管、端都必须支持,即业务网站、运营商网络、终端都必须升级支持IPv6。

讲了这么多,IPv6可以带来什么好处呢?

我们首先能想到的,就是IPv6解决了IPv4地址不足的问题。

我们首先能想到的,就是IPv6解决了IPv4地址不足的问题。IPv4的43亿地址空间,已经严重制约了业务的开展及访问质量,而IPv6海量的地址空间,能够完美解决这个问题。爆料一下,现在运营商的地址分配策略,是每用户分配一个/64位(甚至更大)的IPv6前缀段,也就是说,对于一个用户,就可以拿到264以上的地址空间,换言之,一个用户拿到的IPv6地址,比整个IPv4的地址空间(232)还要多的多!怎么样,IPv6是不是「有钱任性」呢? 第二,IPv6可以带来更快的访问速度。现阶段,由于IPv6整个生态链还没有完全成熟,部分终端或者网站还没有进行IPv6改造,我们依然使用IPv4,感知不到IPv6带来的变化。但是可以预见,在IPv6大规模铺展开来后,我们就能摆脱「IPv4私网地址+NAT转换」的上网模式,由原来的多次NAT,转换为端到端IPv6互访,省去了NAT的过程,路由器的处理负担就减少了,相应的,我们打开网页、访问应用的速度也就加快了。 除此以外,IPv6带来的优势还有很多,只是对于我们普通用户来说,感知没有那么明显罢了。比如IPv6更方便运营商进行地址规划和地址汇总,方便路由聚合;IPv6天然结合IPsec,可以提供更好的安全性;IPv6简化了报文头,提升了路由器处理效率;IPv6支持即插即用,应用更加快捷方便;IPv6新增了流标签字段,提供更优的服务质量……

这些虽然我们现在感知不到,但在未来将会一一体现。

更多内容,可在公众号“cloud云说”了解~

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;