在深入探讨为何没人关心IPv6的陈旧原因之前,我将告诉您一个值得您关注的绝对令人信服的理由:IPv6现在已在网络上的许多设备上预先启用。

如果在您不知情的情况下启用服务,那将很危险。如果我编写了恶意软件,则避免检测的方法之一就是使用IPv6在网络内部的系统之间传播-因为我知道您没有关注该频道,并且因为IPv6安全工具还不成熟。

确保您正在观看该频道的一种方法是将其打开,让其流动并对其进行良好的控制。在您做之前,让我们看一下IPv6的一些背景和理论,这些背景和理论对正确实施它很重要。

为什么IPv6的采用速度缓慢

IPv6于1998年发明,旨在通过耗尽现有的32位IPv4地址来防止Internet即将死亡。现在是2015年,互联网仍在发展32位地址。

我们通过大量使用网络地址转换(NAT)来避免命运。每个人都在其网络内部使用专用地址(10.x.x.x,172.16-31.x.x和192.168.x.x),并且仅为互联网连接之类的内容保留少量可全局访问的公共地址。它主要起作用。

但是,在某些地方NAT不能很好地工作。某些协议不能很好地应对NAT,因为它们在负载中包括IP地址信息以及数据包的报头。通常,发送数据包的设备不知道接收者将通过哪个地址知道它,因此包含本地相关的IP地址很危险。

通常的解决方法是让进行NAT的设备还重写数据包有效载荷内部的内部信息。但是,即使这样也不总是可能的,因为有效负载可能被加密了,或者NAT设备可能对协议的了解不足,无法找到和更改数据包有效负载中的信息。

通用NAT存在问题的另一个地方是在拥有太多设备的网络中。假设您使用10.x.x.x网络进行内部路由。从理论上讲,您最多可以有2 ^ 24个(即1600万个)不同的内部地址(尽管实际上,由于内部子网划分会浪费很多,因此实际数量要少一些)。

如果您可以使用其他内部NAT边界进行某种地理划分,则1600万个地址就足够了。但是,如果您想促进成千上万部手机的无缝漫游,那还不足够。它’很难在NAT边界上漫游。

我希望我们会一直努力下去,直到有人授权IPv6或专门为IPv6目标设备提供非常理想的服务。到目前为止,这些都没有发生,但是确实可以。

但是,正如我前面所说,仅IPv6已经存在于您的设备和网络中这一事实足以说明这一点。

IPv4地址用尽了IPv6

只有这么多的IPv4地址可以使用/图片: 弗洛斯堡 在Flickr上

了解IPv6地址

IPv4使用32位地址(通常用点号分隔的四个十进制数字的集合表示),而IPv6使用128位地址。 IPv6地址通常写为以冒号分隔的八组四字符十六进制数字。

xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx

十六进制表示基数为16(数字从0到15)。四位数的十六进制数具有16位(2 ^ 4 = 16)。要用单个字符指定一个以16为底的数字,习惯上使用从0到9的数字,再加上字母A到F。为了清楚表明特定数字是十六进制而不是普通的十进制数字,前面是“ 0x”。

0x1 = 1
0x2 = 2
…
0x9 = 9
0xa = 10
0xb = 11
0xc = 12
0xd = 13
0xe = 14
0xf = 15

完整的IPv6地址中有八个数字的八位数字块。这是一个真实的例子。 (我通过输入“ ipconfig / all”从自己的Windows计算机中找到了它。尝试一下。)

fe80:0000:0000:0000:b8a2:ee12:4467:03e8

这写起来很长而且很尴尬,因此有一些有用的规则可以缩短地址符号。首先,我们可以抑制所有前导0。因此03e8与3e8相同,所有那些字符串0000都可以简单地写为0。

一条非常有用的第二条规则是,您可以用::连续替换两个或更多的0000块。因此我们的示例地址可以简化为:

fe80::b8a2:ee12:4467:3e8

那好些了。第二个规则虽然有点偷偷摸摸。如果地址具有多个零字符串,则只能用双冒号代替最长的一个。所以这样的地址:

fe80:0000:0000:0a13:0000:0000:0000:001a

将被这样重写:

fe80:0:0:a13::1a

正如IPv4具有几个特殊地址和特殊地址范围(例如,专用地址为10.x.x.x,回送地址为127.0.0.1)一样,IPv6也是如此。

在上述示例中,第一个块是fe80。这是一个非常重要的地址段,您会在任何地方遇到它。叫做 本地链接,稍后我将解释这是什么意思。

有效缩短地址的一个很好的例子是标准的IPv6环回地址:: 1/128。这是IPv4地址127.0.0.1/32的等效IPv6,每个设备都使用它来引用自身。

通常,您还会在第一段看到2001。此范围包括几个保留范围。

IPv6使用 斜杠符号 子网掩码。在IPv4中也使用了斜杠,但是在IPv4中,我们还有其他困惑,例如也使用255.255.255.0这样的数字编写子网掩码。

习惯了斜杠表示法实际上要容易得多。 /后面的数字表示IP地址的网络部分中的位数。

IPv4地址具有32位,因此/后面的数字必须介于1和32之间。IPv6地址具有128位,因此斜杠之后的数字必须介于1和128之间。但是,就像最常见的IPv4掩码是/ 24,最常见的IPv6值为/ 64。

本地链接,全局地址和自动配置

链接本地地址是自动生成的。它们仅在本地局域网段上有效。当我的计算机加入网络时,它会为其自身创建一个本地链接地址,并将其用于与最近的路由器进行通信,协商其IP地址等。它从不使用本地链接地址将数据包发送到其他网络。在此之前,计算机需要一个全局地址。

在IPv4网络中,新设备自动发现其本地网络并开始通信的唯一方法是使用动态主机配置协议(DHCP)。 IPv4流程涉及将DHCP数据包广播到网络上,并请求有关本地网络,默认网关,DNS服务器等的信息。

IPv6具有两种自动配置设备的方法:

  • 使用DHCPv6的状态自动配置,以及
  • 无状态自动配置,称为邻居发现协议(NDP)。
IPv6邻居发现协议

你好,邻居! /图片: 六西德,在Flickr上

邻居发现协议如何工作

NDP是IPv6设备用于确定其应使用的地址以及如何找到将其数据包转发到世界其他地方的路由器的简单协议。它基于ICMP的IPv6版本,该协议应与通过通用ping实用程序一起使用的IPv4用户熟悉。

网络设备可以发送IPv6邻居发现 路由器请求 (RS)数据包到所有路由器始终侦听的默认多播地址。网段上的任何路由器都会收到IPv6邻居发现的响应 路由器公告 (RA)。 RA告诉它如何将数据包转发到不在同一网段中的目的地。

同样,IPv6使用IPv6邻居发现 邻居邀请 (NS)多播,以发现同一网段上另一台主机的MAC地址。邻居设备回应 邻居广告 包。这是IPv6的地址解析协议(ARP)的模拟。

无状态自动配置的寻址方式

IPv6具有称为的内置功能 无状态自动配置 允许新设备加入网络并开始使用零信息,而无需使用DHCP服务器。通常,尽管如此,您可能还希望使用DHCP。

当新设备加入网络时,它要做的第一件事就是从上述范围内生成一个本地链接地址。始终将地址的第一部分设置为fe80。然后,它根据一组标准规则设置最后64位,这些规则是从设备的以太网MAC地址唯一定义的。地址中的所有其他数字均为零。

该地址应该是唯一的,但总有可能出问题。因此,接下来要做的是使用邻居请求消息来尝试查找同一网段上可能已经在使用该地址的任何其他设备。如果该地址未被使用,则可以安全地使用它。但是,该协议实际上并没有定义设备遇到冲突时下一步应该做什么。

然后,设备使用其本地链接地址联系路由器以访问网段。它发送路由器请求消息,并等待路由器通告作为响应,告诉路由器如何到达世界其他地方。

但是它仍然无法到达世界其他地方,因为它没有全球唯一的地址。为了自动生成全局IPv6地址,设备将从路由器通告中获悉的路由器地址的前64位以及从其自己的本地链接地址获取的后64位。

要记住这一地址很重要。使用无状态自动配置时,设备会假定它们在/ 64子网中运行。如果需要使用其他子网掩码方案,则必须静态或通过DHCPv6配置寻址。

IPv6多播效率更高

IPv6与IPv4不同的另一个重要方式是对多播的使用。在IPv4中,我们经常使用广播消息。当新主机需要查找其IP地址时,它将发出DHCP广播。当需要与目标IP地址通信但不知道相应的以太网MAC地址时,它将发出ARP广播。

广播的麻烦在于,同一网络上的每个设备都必须注意每个广播数据包。这些广播数据包由主机的NIC接收并通过协议栈,从而占用了每个系统上的CPU和内存资源。广播不是使用网络的非常有效的方法。因此,IPv6使用多播代替。

在多播中,发送设备发送具有特殊IP地址和特殊以太网MAC地址的数据包。网络上参与该特定多播协议的任何其他设备都会对其进行拾取和处理,但其他所有人都可以忽略它。

使事情变得更好的是,如果交换机配置正确,它们可以跟踪哪些设备对哪种多播协议感兴趣。然后,交换机仅将这些多播数据包转发到感兴趣的设备。这有助于减少网络拥塞。

IPv6与IPv4的比较

照片: 蒂埃里·埃曼,在Flickr上

IPv6有很多头

到目前为止,我们的整个讨论是对IPv6和IPv4的比较,但是差异甚至比我所暗示的还要大。 IPv6不仅仅是地址更长的IPv4。这确实是一个完全不同的协议。

它所携带的协议(例如HTTP和SMTP)是相同的。但是数据包的IP部分(IP标头)是不同的。 IPv4只有一种类型的数据包头。 IPv6有很多。在IPv6中,您可以递归建立它们。

每个数据包必须具有带有源地址和目标地址的标准IPv6标头。此标头还包含一个名为 下一个标题。它包含一个数字,该数字定义接下来要使用的标头类型。并且该嵌套标头具有其自己的下一个标头字段,该字段可以指向另一个标头。

IPv6的最初意图是这些嵌套的标头将允许各种协议扩展。例如,有些扩展头支持IPsec加密和身份验证。还有一些扩展标头,它们以比IPv4随附的服务质量形式主义更精确,更通用的方式定义逐跳转发特征。

太糟糕了,IPv6没有NAT

我不喜欢的IPv6功能之一是它不包含NAT。现在,请记住最初发明IPv6的原因是要提供足够的地址,以便每个设备在全球范围内都是唯一的。因此,协议设计者希望将NAT排除在外是有道理的。但是问题在于,进行NAT的充分理由与地址耗尽问题无关。

例如,我经常喜欢在IPv4中使用NAT来简化服务器路由表。如果服务器具有两个或多个接口,其中一个接口旨在为通用Internet用户提供服务,那么我想将默认路由附加到该接口。

但是,如果通过该服务器的其他接口与该服务器通信的内部设备位于许多不同的子网中,则意味着我通常必须手动将每个子网配置到服务器的路由表中。这很快变得难以管理。

常见的解决方案是使用NAT,使所有设备看起来都与面向内部服务器的接口位于同一子网中。然后,我只需要服务器上的一条默认路由。

当然,出于隐私原因,NAT也被广泛使用。我不希望整个Internet都能唯一地跟踪IP地址中的每一步。 IPv6具有内置的IPsec封装,但是即使所有内容都使用HTTPS,也无法隐藏我的元数据以进行常见的网络浏览。

IPv6并未禁止NAT,只是不支持或鼓励使用。因此,我希望随着IPv6采用率的提高,我们将会看到事实上的IPv6 NAT标准的出现。

外卖

我不强烈主张推动IPv6迁移。 IPv4确实适合大多数当前需求。但是默认情况下,您的大多数设备已经打开了IPv6,因此至少也要开始准备好网络是有道理的。

在以后的博客文章中,我将向您展示 如何在Cisco设备上实施一些IPv6学习。