这是有关IPv6子网划分的典型问题。

相关文章:


IPv4子网划分如何工作?



我对IPv4子网划分了解很多,当我准备(部署)IPv6网络时,我需要知道这些知识中有多少是可以转让的,以及我仍然需要学习。乍看起来,IPv6比IPv4复杂得多。所以我想知道:


IPv6是128位,那么/ 64为什么是主机推荐的最小子网?
相关内容:


为什么建议在路由器之间的点对点链接中使用/ 127,为什么过去建议反对使用?我应该更改现有的路由器链接以使用/ 127吗?
为什么要为虚拟机配置少于/ 64的地址?
在其他情况下,我会使用小于/ 64的子网吗? ?


我可以直接从IPv4子网映射到IPv6子网吗?例如,IPv4 / 24是否直接对应于IPv6 / 56或/ 120?
我的接口有多个IPv6地址。
为什么有时我在IPv6地址中看到%而不是/,这是什么意思?
我浪费太多子网了吗?我们不是要再次耗尽吗?
IPv6子网划分在其他哪些主要方面与IPv4子网划分有什么不同?


#1 楼

关于IPv6子网划分,首先要提到的是需要一种不同的思维方式。在IPv4中,您通常会考虑可用的地址数量以及如何为每个最终用户分配足够的地址。在IPv6中,您通常会考虑可用的/64子网以及如何将其分配给最终用户。您几乎不必担心给定子网中将使用多少个IP地址。除了点对点链接之类的特殊情况外,每个子网都只是拥有比其所需的更多地址可用的地址,因此,您只担心分配子网,而不用担心它们内部的主机。通常是/64,因为这是SLAAC(无状态地址自动配置)正常工作所必需的。即使未使用SLAAC,也可能有其他原因使用/64。例如,可能有一些最终用户设备只是假设/64,否则在某些路由器上,比/64窄的路由子网可能效率低下,因为路由器实施者已经优化了/64或更宽的路由,以节省路由表内存。

为什么建议对点对点链接使用/127

对于点对点链接的特定情况,建议使用/127代替/64,避免这样的漏洞:发往子网的四千万个未使用地址中的任何一个的数据包会导致有害的邻居请求请求和表条目,这些条目可能淹没路由器。此类地址错误的数据包可能是恶意的或偶然的。但是,即使您实际上将点对点链接配置为/127,也有人主张无论如何都要分配整个/64只是为了保持一致。 br />
我不清楚具体为什么为虚拟机配置的子网比/64窄。也许是因为托管服务提供商假设服务器就像最终用户一样,并且只需要一个/64子网,却没有想到该服务器实际上是需要内部路由拓扑的VM的集合?也可以通过使寻址计划更容易记住来简单地完成此操作:主机获取/64,然后每个VM获取PREFIX::/64,其中NNNN是VM唯一的,VM可以根据需要分配PREFIX:0:NNNN::/96

我可以直接从IPv4子网映射到IPv6子网吗?例如,IPv4 PREFIX:0:NNNN:XXXX:YYYY是否直接与IPv6 /24/56对应?在该级别上,您可以进行类比,例如“ IPv4 /120使用一半的位作为网络地址,一半使用位作为主机地址,这类似于IPv6中的/16”。但是这种比较并不是很恰当。 IPv6中出现了强大的约定,这些约定使网络大小的划分看起来更像是IPv4中有类网络的旧世界。可以肯定的是,IPv6不会重新引入其中地址的最高有效位强制使用特定网络掩码的分类寻址,但是IPv6确实具有[事实上/传统上]的标准网络大小:

/64:单个子网的基本大小:LAN,WAN,Web虚拟主机的地址块等...“正常”子网绝不比其窄(长) /64。没有子网会比/64更宽(前缀更短),因为/64的主机地址价值远远超出我们的想象。/64/56基本子网的一个块。即使当前的政策允许ISP向每个最终用户分发多达256的数据块,并且仍然认为其地址利用率是合理的,但是某些ISP可能(并且已经)选择将/48分配给消费级客户,作为分配之间的折衷

/56/48基本子网的块以及每个ISP客户端站点应接收的建议大小的块。大多数ISP每次从区域地址注册中心请求更多地址时都会收到的默认块大小。

在服务提供商和企业网络内部,可以看到比这4个更多的前缀长度。查看这些网络内部路由器的路由表时,IPv4和IPv6有很多共通之处,包括路由工作的大部分方式:较长前缀的路由会覆盖较短前缀的路由,因此可以进行汇总(缩短)并进行钻取向下(延长)路线。像在IPv4中一样,可以将路由聚合或汇总为前缀较短的较大块,以最大程度地减少路由表的大小。双堆栈计算机上的IPv6分配,因此可以轻松理解寻址计划。到目前为止,肯定有一些常用的约定可以做到这一点:将IPv4“子网号”嵌入到IPv6前缀的一部分中,可以使用BCD(例如65536变为/32)或二进制(10.0.234.0/24变为2001:db8:abcd:234::/64)。
我的接口有几个IPv6地址。所有子网的子网都必须相同吗?

绝对不!像IPv4一样,通过同时拥有来自不同子网的多个IP地址,可以使IPv6主机成为多宿主。如果它们是使用SLAAC自动配置的,则不同的子网可能来自不同路由器的路由器通告。

为什么有时我会在IPv6地址中看到%而不是/?这是什么意思? br />
您不会看到一个而不是另一个。它们具有不同的含义。斜杠表示前缀(子网),表示以相同的10.0.234.0/24位开头的地址块。没有斜杠的地址是主机地址。您可能会认为这样的地址的末尾有一个隐含的2001:db8:abcd:ea::/64,表示所有128位都已指定。

百分号与链接本地地址一起出现。在IPv6中,每个接口除了可能具有的任何其他IP地址之外,还具有本地链接地址。但问题是,链接本地地址始终无例外地位于n块中。但是,如果我们尝试使用链接本地地址与对等方通信,并且本地主机具有多个接口,我们如何知道要使用哪个接口与该对等方通信?通常,路由表会告诉我们要为特定前缀使用哪个接口,但是在这里它将告诉我们每个接口都可以访问/128。答案是,我们必须告诉它使用哪个接口来使用。语法fe80::/10。例如,fe80::/10

我浪费了太多子网吗?我们难道不是要再次耗尽吗?

没人知道。谁能告诉未来?

但是请考虑一下。在IPv6中,可用子网数是IPv4中可用单个地址数的平方。确实很多。不,我的意思是真的很多!

但仍然:我们会自动将address%interface分发给任何要求它的ISP,而我们也会将fe80::1234:5678:8765:4321%eth0分发给每个ISP客户。也许我们夸张了,毕竟我们将浪费IPv6。但是有一个规定:到目前为止,只有八分之一的IPv6空间可供使用:/32。这个想法是,如果我们把前八名搞得一团糟,而我们不得不大刀阔斧地修改自由分配政策,那么在陷入麻烦之前,我们必须再尝试七次。 IPv6不必永远持续下去。也许它的寿命比IPv4更长(已经是令人印象深刻的寿命,并且还没有结束),但是像每种技术一样,它将有一天不再重要。我们只需要在此之前完成。

评论


很好的解释!特别是关于不同的心态。如果看一下数字,您会发现2000 :: / 3中有536,870,912 / 32(小型ISP)。世界人口为70亿,每13人中就有一个ISP,每个这样的ISP可以拥有65,536个客户,每个客户/ 48。无需担心浪费地址:-)

–桑德·斯特凡(Sander Steffann)
2012年9月11日上午8:01

是的,这是一个很好的解释。

– er
2012年9月11日15:33

对2000 :: / 3的具体细节有很好的解释。

– Koos van den Hout
2012年9月17日上午11:19

很好的解释。对最终评论+1。我希望每个人都已经看到了:xkcd.com/865

–尼科
2014年8月28日在15:51

仅分配/ 64绝对不合理。大多数路由器至少需要几个子网。 / 56而不是/ 48是完全合理的。

–桑德·斯特凡(Sander Steffann)
17 Mar 3 '17 at 9:33

#2 楼

IPv6是128位,那么/ 64为什么是主机推荐的最小子网?

首先,从RFC中获得一些ASCII技术来建立术语:

br />
全局路由前缀通常标识该地址所属的整个网络。通常为48位。接口ID标识给定的网络接口。通常是64位。剩下的16位是您的子网ID。

确定,并附上说明:

根据RFC 4291-IP版本6寻址体系结构:


除以二进制000开头的全局单播地址外,所有全局单播地址都有一个64位接口ID字段。


和RFC 5375-IPv6单播地址分配注意事项:


IPv4寻址计划的重要组成部分是确定每个子网前缀的长度。与IPv4不同,IPv6寻址
体系结构[RFC4291]指定所有使用全局唯一地址和ULA的子网始终具有相同的前缀长度64
位。


因此,忽略000前缀异常,接口ID始终完全是64位。这是另一种说法,即所有本地广播网络始终都是64位。如果您有IPv6地址,则其网络掩码始终为64位。永不止息。如果为您分配的地址空间大于该地址空间(比64位短的网络掩码),则假定您将将该地址空间划分为64位网络并自己处理路由。如果为您提供的网络小于该网络(较长的网络掩码),那么有人就搞砸了。

那么,为什么要精确地64位呢?

通常,IPv6地址是自动配置的,而不是分配的。路由器将通告可用的网络前缀(路由前缀+子网ID:前64位),并且您的计算机将使用其自己的唯一标识符填充后64位。您的计算机如何提供唯一标识符?有几种可能性,最常见的是使用接口的MAC地址。您将MAC分成两半(供应商半/串行半),翻转供应商侧的通用本地位,然后将它们与中间的FF:FE重新连接在一起。所以00:30:48:01:23:45变成0230:48ff:fe01:2345。现在,在其左侧放置广告的64位网络前缀,您便拥有了IP地址。不会发生由于给定广播网络上的每个设备都需要一个唯一的MAC地址才能工作,因此将接口ID与MAC地址绑定意味着只要广播流量不冲突,IPv6地址也不会冲突。使用64位(而不是仅使用48个专用于MAC地址的地址)会提供一些摆动空间,而不仅仅是该方案提供的地址(还有其他几种地址)。

是否还有其他情况我会使用小于/ 64的子网吗?

不。除非你很伤心,否则不要。好吧,您可能有基于本地要求的理由,可以使用现有网络设置手动路由。但是请记住,这样做可能会造成混乱:

来自RFC 5375-IPv6单播地址分配注意事项:


/ 64以外的子网前缀长度会破坏IPv6的许多功能,包括邻居发现(ND),安全邻居发现(SEND)[RFC3971],隐私扩展[RFC4941],部分
移动IPv6 [RFC4866],与协议无关的多播-稀疏模式
(PIM-SM)和Embedded-RP [RFC3956],以及基于IPv6的站点多宿主
中介(SHIM6)[SHIM6]等。当前正在开发或正在提议的其他许多
功能,也依赖于
/ 64子网前缀。

....

但是,一些网络管理员对连接路由器的链接使用的前缀长于
/ 64,通常在点对点链接上仅使用两个路由器。在通过手动配置分配了所有地址的链接上,并且链接上的所有节点都是网络已知的路由器(不是
终端主机),管理员不需要
依靠/ 64子网前缀的IPv6功能,它可以
工作。一般不建议使用长度大于/ 64的子网前缀
,将其用于包含最终主机的链接
是一个特别糟糕的主意,因为很难预测IPv6的功能为什么将来会使用主机?


为什么建议在路由器之间使用/ 127进行点对点链接,为什么过去却反对呢?

您可能想掩盖RFC 3627-在被认为有害的路由器之间使用/ 127前缀长度。然后看一下随后的RFC 6164-在路由器间链接上使用127位IPv6前缀。

反对在路由器上使用长于/ 64的前缀与路由器自动配置有关在极少数情况下可能会失败。反对使用短于/ 127(仅2个主机)的前缀,这与许多与将数据包发送到未路由地址有关的潜在拒绝服务问题有关。由于现实世界中的拒绝服务问题要比理论上的自动配置失败更为严重,因此/ 127是新的首选。 br />如果您控制IPv6路由器,建议您阅读两个RFC(它们很短!),然后自己决定。

我可以直接从IPv4子网映射到IPv6子网吗?

例如,IPv4 / 24是否直接对应于IPv6 / 56或/ 120?

实际上...是。还记得我们之前故意忽略的000前缀吗?好吧,这是它的用途:

在双堆栈系统(同时具有IPv4和IPv6堆栈的系统)上,您可以使用IPv6机制表示IPv4。他们称其为“ IPv4映射的IPv6地址”。模式为全零,后跟FFFF,后跟32位IPv4地址。由于该右手位表示一个IPv4地址,因此通常以点分十进制形式写出来。

由于这是一个实际的IPv4地址,因此仍使用IPv4标头等,这意味着IPv4堆栈必须存在,必须设置IPv4路由,以及所有这些。优点是您可以使用单个地址结构表示IPv4和IPv6地址,这可以简化应用程序开发。就网络而言,这没有什么区别。

评论


“ IPv6是128位,那么/ 64为什么是主机推荐的最小子网?”实际上,/ 64是推荐的最大网络,而不是/ 127(对于点对点)和/ 128(对于环回)。任何较小的,例如/ 56应该被子网划分为/ 64。 / 48网络具有48位网络,而/ 64网络具有64位网络,并且48小于64,因此/ 64网络大于`/ 48网络。

–罗恩·莫平(Ron Maupin)
20-10-11在18:49

#3 楼



IPv6是128位的,为什么/ 64是主机的最小推荐子网?

最初在较旧的RFC中建议使用此前缀大小-此后一直在修订在考虑到“邻居发现攻击”问题并且使用/ 126的情况下,此策略的有效缓解-尽管如此,如果您仅出于路由流量的目的设置PtP链接,则替代方法是坚持使用/ 64和防火墙该子网。更好的是,为自己分配一个池,从中可以提取/ 64个子网,并将整个池作为边缘(以及可能来自于敌意的其他任何地方)列入黑名单的目的地为什么建议在路由器之间的点对点链接中使用/ 127,为什么过去却反对呢?我应该更改现有的路由器链接以使用/ 127吗?

/ 127在路由器之间不建议使用,永远也不要-127-all-routers Anycast地址是子网的全零地址。这意味着/ 127在技术上仅在其中一台未充当路由器的两台计算机之间有效。 / 126当然可以。如果您实际上要使用/ 64进行Internet连接,如果答案是否定的,则对其进行防火墙。


为什么要为虚拟机配置小于/ 64的子网?

这会破坏SLAAC和RA,除非您真的非常了解自己在做什么,否则您不太可能有充分的理由这样做-也许您的上游只给了您一个/ 64,但是如果是这样,您需要联系他们并要求更多,如果他们想向您收费,请开始寻找新的提供商,还可能向他们发送一些链接到相关RFC的阴险电子邮件。


在其他情况下,我会使用小于/ 64的子网吗?

老实说?可能不会。如果出于某种合理的原因,出于防止NDP攻击以外的目的而首选较小的子网的情况,我将进行本节的编辑。比/ 64更高-特别是在您使用硬件转发设备运行环境的任何地方(想想名牌路由器和L3交换机)-有些将无法进行长度超过/ 64的前缀的硬件路由,另一些则必须将操作分成多个因此,您至少应该尽最大努力确保/ 64是(OSPF / ISIS / EIGRP / etc。)主干网中的最长前缀。


我可以吗?直接从IPv4子网映射到IPv6子网?例如,IPv4 / 24是否直接对应于IPv6 / 56或/ 120?

正式地,:: ffff:xxxx是IPv6映射的IPv4地址的格式-当然也有许多转换机制,即6to4及其相对的6rd,将一个IPv4地址映射到一个全局IPv6中,目的是通过创建一个IPv6前缀来提供对IPv4的IPv6访问,该IPv6前缀是从其所携带的IPv4地址派生的。 br />

我的接口有几个IPv6地址。

否,在同一接口上使用不同的地址和子网大小应该不是问题。如果是这样,则说明实现存在错误。当然,更好的问题是为什么要这么做?


为什么有时我会在IPv6地址中看到%而不是/,这是什么意思? >
这是一个分隔符,通常应用于链接本地地址(fe80 :: / 12)-由于同一链接本地地址可以合法存在于多个接口上,因此%分隔符用于允许指定要使用的接口。在执行涉及本地链接的操作时,Linux通常会强制指定接口。 Windows Vista / 2008及更高版本更加智能,除非链接本地不唯一,否则不会抱怨。


我浪费了太多子网吗?我们难道不是要再次耗尽吗?

不。这是一匹死马,它被WAAAAAAAAAY浪费了太多次-当前的全球IPv6互联网是2000 :: / 3-如果地球上的每个RIR设法耗尽其地址库存,那么IANA可以使用更多前缀。因此,不会,我们将不会用完空间,即使这样做,也需要轻按一下笔才能设置新的前缀,而不是技术上的改变。这个问题真正强调的唯一一件事是,人类的大脑无法完全理解地址空间有多么荒唐。

除了不在乎您使用多少空间外,请记住没有广播地址,“子网零”地址现在是所有路由器的任意播地址(基本上是一个在配置为转发IPv6数据包的所有节点上隐式存在的地址)-这具有有益的副作用,允许您将全零地址用作网络中的默认路由(不,它不会导致数据包重复,它是ANYcast (不是多播)-请记住,尽管主机可能每隔几秒钟便会在路由器之间翻转一次,所以如果在它们之间未同步连接跟踪,则这不适用于有状态防火墙设置。

除此之外,另一个主要区别是IPv6关心重复地址和死邻居(NUD)-因此,不同于IPv4,如果主机可以确定链路上的另一个节点已经在使用该地址,则它将拒绝使用该地址。 。另一方面,如果您要配置静态路由,则NUD很有用-您实际上可以为具有不同度量的前缀定义多个单独的路由,并且它们实际上可以工作,这与IPv4不同,在IPv4中,将使用最低的度量路由,而不考虑下一条-hop死了还是活着(尽管对于某些使用ARP来验证路由的Cisco和其他主要路由器供应商之类的IPv4实现而言,这可能不是正确的)。 IPv6检测重复的地址和不可达的邻居。全零地址是所有路由器的任播地址,没有广播这样的东西,全人是常规地址。



评论


回答2)... tools.ietf.org/html/rfc6164 tools.ietf.org/html/rfc6547

– cpt_fink
2013年3月11日在2:22



#4 楼

对于那些想知道SLAAC的/ 64要求来自何处的规范,这里有一些额外的参考:

来自IPv6无状态地址自动配置(RFC 4862): />如果前缀长度和接口标识符长度的总和不等于128位,则必须忽略“前缀信息”选项。 [...]

系统管理员有责任确保
路由器广告中包含的前缀长度与该接口标识符的长度一致。
链接类型。


以及IP版本6寻址体系结构(RFC 4291):


对于所有单播地址,那些地址除外以二进制值
000开头的接口ID必须为64位长,并且必须以修改的EUI-64格式构造。


因此,因为接口ID必须为64位长,并且前缀长度和接口ID长度之和必须为128,所以使用SLAAC时前缀的唯一可能长度是64位。

#5 楼


IPv6是128位,那么/ 64为什么是主机推荐的最小子网?


因为IPv6支持者喜欢无状态自动配置的想法。

如果您选择任何其他子网大小,则无状态自动配置将会中断。其他一些细微的事情也可能会中断,请阅读rfc7421了解更多详细信息。它导致地址不可读,除了将块分配给子网之外,您几乎无法控制地址。

当然,具有约定的事情是如果您遵循这些约定而出了问题,您可以指出约定,如果您拒绝遵循这些约定而出了错,那将是您的错。 >

为什么建议将/ 127用于路由器之间的点对点链接,


使用具有少量可用地址的子网避免邻居发现耗尽攻击。

当然,这种推理不仅适用于点对点链接。我猜想在政治上可以为点对点路由器链接提供此建议,但在政治上不能为其他链接提供建议。 64位地址?


我们需要在此处进行区分。托管提供程序可以通过两种方式为计算机分配地址(无论是物理的还是虚拟的)。

他们可以向它们分配“链接上”的地址,以便机器可以响应邻居发现请求。一些托管服务提供商选择给每台机器一个/ 64,这在地址移动性方面具有优势,另一些托管服务提供商选择给每台VLAN一个/ 64,然后给每个机器的子块分配使用较少地址的子块,这可能意味着本地流量保持本地状态,而不是传递到路由器。

或者他们可以将机器视为路由器,并为其分配路由块。在这种情况下,它将需要足够的地址来寻址其所有内部子网。如果遵循“所有子网必须为/ 64”的约定,则意味着至少为其分配一个/ 64,并且可能分配更多。对于具有“内部网络”的计算机(例如容器主机),这是有意义的。


我可以直接从IPv4子网映射到IPv6子网吗?例如,IPv4 / 24是否直接对应于IPv6 / 56或/ 120?


任何这样的映射都取决于本地策略。


我的接口有几个IPv6地址。所有子网的子网都必须相同吗?





为什么有时在IPv6中有时会看到%而不是/地址及其含义?


%是接口标识符。它与链接本地地址一起使用。因为一台机器可能具有多个接口,并且连接到这些接口的网络可能具有重叠的链接本地地址,所以需要它。


我浪费了太多子网吗?我们不是要再次用完吗?


我不会担心太多。

即使IPv6设计人员做出了奇怪的决定使用128位地址空间,然后在无状态自动配置中将其丢弃近一半,IPv6仍比IPv4拥有更多的空间。

IPv6可伸缩性的一个更大的问题是路由表的大小。强烈建议不要使用IPv6 NAT。在提供商分配的地址上运行大型网络会导致提供商锁定的巨大风险。

所以我相信,随着IPv6对公司网络的渗透率不断提高,我们将看到对独立于提供商的IPv6空间的需求激增。