1. 这一篇把地址规划里的“硬骨头”啃完前几篇把IPv4的基础分类、公网私有地址的边界、IPv6的地址结构挨个过了一遍,这篇终于要面对几个真正让人头疼的话题:子网怎么切才不浪费、IPv6那串超长地址到底怎么缩写成能看的样子、还有组播地址到底是个什么逻辑。这三个东西放在一起讲,是因为在实际项目里它们从来不是孤立的知识点——做网络规划的时候,IPv4子网划分是基本功,IPv6地址设计是未来必须面对的坑,而组播地址则在视频监控、直播推流、路由协议邻居建立这些场景里反复出现。我最早带项目那会儿,组播在我眼里就是个“听说过没见过”的概念,直到某次给一个视频传输系统做网络优化,才发现不懂组播地址规划,业务就是跑不起来。而IPv6呢,说实话真正动手去配置过的人比例没那么高,更多是停留在“知道它长什么样”的阶段。这篇就从这三个方向切入,把每个知识点拆开揉碎,尽量让实际配置过的人觉得“对,就是这么回事”,没配置过的人也能照着思路去动手验证。适合看这篇的,大概是网络工程师、运维朋友,或者正在备考网络相关认证的人。如果前三篇你已经追完了,这一篇就是收尾阶段的硬核补充。2. IPv4子网划分的底层逻辑2.1 掩码才是划分的真正“尺子”很多人学子网划分,喜欢背“C类地址默认24位掩码”这种口诀,真要切VLSM的时候就卡住了。根本问题在于没有理解掩码的二进制本质:掩码用来标识“网络位”的长度,网络位被固定之后,剩余的主机位就是这台设备所在子网能容纳的地址数量。举个例子,一个地址是192.168.1.100,掩码是255.255.255.192。把掩码转成二进制就知道,前面26位是1,后面6位是0。这个/26子网里,网络部分占用了前三个八位组再加上第四个八位组的前两位,那么子网块大小就是64(2的6次方在第四个八位组里体现为64的增量,不过用更简单的算法也能算出来,即256减去最后一个非零掩码段的十进制值)。每个子网范围就是0-63、64-127、128-191、192-255,主机位去掉全0和全1,可用地址就是每个块里的62个。这个计算熟练了,不借助任何子网计算工具,拿眼一看掩码就能报出子网范围和广播地址。实际项目里最常见的问题不是算不出来,而是规划的时候完全没有“预留扩展”的意识。比如某层领导说给这个办公室划一个子网,里面实际只有15台设备,有人直接配了个/24,浪费了200多个地址。要是整个项目地址段足够大,浪费也就浪费了;如果总部给的是一个/16的段,各部门都这么造,地址早晚不够用。所以我做规划的习惯是:先统计每个接入点未来三到五年的设备上线预估数量,再决定掩码长度,宁可稍大,不可不足,但也不给两倍以上的冗余。2.2 VLSM和CIDR的关系,一次讲明白VLSM和CIDR在绝大多数教材里是分开讲的,但实际它们是同一件事的两种视角。VLSM强调的是“在一个大网段内,用不同长度的掩码去划分不同大小的子网”,CIDR强调的是“将连续的小网段聚合成一个大网段来进行路由通告”。还是拿实际场景说吧,比如公司从运营商那儿拿到一个/24的地址段,需要划分给四个部门,设备数量分别是50台、30台、20台、10台。直接用固定/25的掩码去分,四个部门根本不够用,因为/25只能分出两个子网。合理做法就是按需求从大到小排序然后逐级划分:50台的部门给/26,分配第一个块,范围0-63,可用地址62个。30台的部门给/27,分配第二个块里的前一半(64-95),可用地址30个。20台的部门给/27,继续用96-127这个块,可用30个,能放下。10台的部门给/28,从128开始往后拿一个块(128-143),可用14个。这里每个部门的掩码都不同,就是VLSM。到了路由层面,把这些连续的子网汇总成一个整体通告出去,就是CIDR。很多文档搭建实验环境的时候,把路由配置里的IP地址写反或者掩码长度写错,本质就是没分清这层关系。需要注意一点,VLSM划分的时候必须保证子网从大到小分配,否则大子网可能没有足够连续空间。这个顺序习惯,能帮你少踩很多坑。2.3 划分子网时别忽略广播域和网关地址这个坑非常隐蔽。子网划分定下来之后,网关地址放在哪个位置,是很多人随缘处理的。我见过不少项目把网关放在子网的第一个可用地址,也有放在最后一个可用地址的,这本身问题不大,问题在于一个子网里跑的业务如果包含组播,网关位置影响的是组播报文能否被正确路由。另外,广播地址在每个子网的最后一个地址位,这是固定的。但是有些设备对广播地址的处理和标准有差异,尤其是某些嵌入式设备,它在发送广播探测的时候,可能把目标地址写成了255.255.255.255而不是子网定向广播地址。这种情况下,如果中间路由器开启了定向广播转发,就容易造成广播风暴,如果关闭了,这些设备又可能发现不了网关。这个细节在做无线覆盖项目时经常碰到,排查半年都未必能找到根因。所以我现在做子网划分,每个子网预留的地址不只是网络号和广播地址,还会额外预留头尾各两三个地址作为网关或接口预留位,并且把这些信息记录在地址规划表里,避免后续设备上线时地址冲突。3. IPv6地址:从陌生到实际配置3.1 IPv6地址太长,先学会“看”IPv6地址是128位二进制,通常表示为8组16进制的数,用冒号分隔,比如2001:0db8:85a3:0000:0000:8a2e:0370:7334。第一次接触的人都会觉得这串东西没法记忆,实际上IPv6地址的缩写规则非常宽松,核心就两条:每组前面的0可以省略;连续的0组可以用双冒号::替代,但双冒号只能出现一次。我见过最大的误解就是有人觉得“每组前面的0可以省略”意味着“组中间和后面的0可以省略”——不是的,能省略的只有每组的“前导0”。比如0001只能缩写成1,但1000不能缩写成1,如果把后面的0也省了,地址就完全变了。实际操作里有经验的工程师,拿到一个IPv6地址第一反应不是去看全长,而是直接抓前64位的网络前缀和后64位的接口标识符。IPv6没有广播地址的概念,末尾全0和全1的地址依然可以作为主机地址使用,这一点和IPv4完全不同,很多从IPv4转过来的人在初期总会习惯性地把全F结尾的地址当成广播地址避让,白白浪费了可用地址。3.2 IPv6地址分配的三种方式,怎么选IPv6地址分配方式主要有三种:手工静态配置、SLAAC(无状态自动配置)、DHCPv6(有状态配置)。手工配置适合基础设施设备,比如路由器互联地址、交换机管理地址,数量不多但需要完全可控。SLAAC是最常用的终端地址获取方式,它的机制是主机通过路由器通告RA报文获取前缀信息,再用自己的网卡MAC地址结合EUI-64规则构造接口标识符。DHCPv6适合需要记录详细租约信息的场景,比如企业办公网的打印机地址分配,方便后续定位设备。SLAAC有一个坑:它默认不分配DNS服务器地址。终端拿到IPv6地址之后,域名的系统解析工作主要依赖RA选项扩展或DHCPv6的附加选项来下发DNS信息;如果网络里既没开启RA的DNS选项,也没搭DHCPv6,IPv6终端能通网络但上不了网,浏览器直接报DNS解析错误。我排查过不少IPv6“通而不达”的问题,最后都是DNS下发的缺失。再补充一个实际经验:如果你在配置RA的M/O标志位,M标志位设置为1时主机用DHCPv6获取地址,O标志位设置为1时主机用RA获取前缀地址、但用DHCPv6获取其他配置信息。两个标志位的组合决定了SLAAC和DHCPv6的配合方式,网上很多教程对这一块写得含糊,实际配置起来经常会发现主机行为跟预期不一致。3.3 IPv6中继与静态路由,配置时少走弯路的做法IPv6路由配置和IPv4最大的差异在于邻接性判断。IPv4和IPv6都有路由表中下一跳地址的判断逻辑;但是IPv6中的链路本地地址(fe80::开头的地址)在实际转发时非常容易被忽略。很多人配置静态路由,下一跳想当然地写成了对端接口的全球单播地址,这通常没有什么大问题;但如果对端的全球单播地址没有配置或没生效,路由下一跳就应该配置成对端接口的链路本地地址,才能在邻居发现层面直接生效。判断标准很简单:一个接口可以同时有多个IPv6地址,但链路本地地址一定是存在的,所以只要二层是通的,下一跳写接口的链路本地地址连通性一定优于写全球单播地址。组播在IPv6里也有对应的链路本地组播地址,比如ff02::1代表所有节点,ff02::2代表所有路由器。这些地址是路由协议自动建立邻居关系的基础,像OSPFv3的邻居建立,组播地址变化会直接影响协议通信。下面这部分我们把组播地址的细节摊开讲。4. 组播地址的结构与应用场景4.1 IPv4组播地址的分类,别只记一个224.0.0.0/8组播地址在IPv4里占了整个D类地址段,从224.0.0.0到239.255.255.255。这个范围看起来很大,实际被分成若干区段,用途完全不同。224.0.0.0到224.0.0.255是链路本地组播地址,只在直连网络内有效,路由器不转发,TTL固定为1。几乎所有路由协议的组播通信都集中在这里面,比如OSPF的224.0.0.5和224.0.0.6、PIM的224.0.0.13。224.0.1.0到238.255.255.255是全球范围组播地址,可以被路由转发,适用于跨网络的组播业务。比如视频会议、直播流的组播部署,大多从这一段中选择。239.0.0.0到239.255.255.255是本地管理组播地址,类似于IPv4的私有地址,只在组织内部使用,可以复用,不冲突。常见误解是以为组播地址跟单播地址一样也有“子网划分”的概念,其实组播地址本身没有子网掩码,它的范围是通过前缀来区分的。你配置IGMP或者组播路由,用的都是完整的组播地址,不涉及掩码计算。部分厂商设备针对239网段划分的SSM(特定源组播)范围,是把组播业务的源和组都做了限制,配置复杂度比ASM(任意源组播)低不少,遇到业务需求的时候可以优先考虑SSM模式。4.2 组播地址与MAC地址的映射机制组播流量在二层传输时,需要把三层组播地址映射为二层组播MAC地址。方法不复杂:IPv4组播MAC地址是以01:00:5E开头,组播IP地址的后23位映射到MAC地址的后23位。这个映射有一个非常值得注意的问题:因为IPv4组播地址有28位在D类段里是可变位,映射到MAC时只取后23位,意味着多个组播IP会映射到同一个组播MAC地址上。具体换算中的算法是:把组播IP的二进制后23位对齐到01:00:5E的后23位,所以会出现不同的组播组对应同一个MAC地址的情况。实际影响在于交换机二层转发和终端网卡接收报文时,网卡只检查目的MAC是否为组播MAC,再用协议栈做IGMP报文的二次过滤;如果组播MAC冲突频繁,网卡接收到的无关组播报文会消耗CPU。避免这个问题的思路是:规划组播组时尽量避开那些IP后23位完全一致的范围。这个细节每一个做视频组播的人都应该知道。IPv6组播MAC映射则相对简单:IPv6组播地址的前缀是33:33,将IPv6组播地址的低32位追加到33:33后面,组成一个16位十六进制表示的二层组播MAC地址。比如ff02::1映射成33:33:00:00:00:01。IPv6组播MAC的冲突概率低很多,但也有映射规律需要注意,排查二层组播泛洪时一样要对照这个映射表。4.3 IGMP与PIM基础,动手验证一次就理解组播要真正跑起来,需要两个层面的协议支撑:接入层的IGMP负责主机与路由器之间的组成员关系维护,核心层的PIM负责组播报文在路由器之间的路径构建。IGMP有三个版本:IGMPv1有基本的组成员加入和查询机制,但离开机制不完善;IGMPv2增加了离开报文,是大多数网络里的标配;IGMPv3增加了源过滤功能,可以配合SSM使用。配置时第一步通常是在三层设备接口上开启IGMP,同时把接口配置为查询者角色,确保周期性发送组查询报文。PIM需要至少一个汇聚点RP存在,ASM模式下的组播源注册和接收者加入都围绕RP进行。配置完组播路由后,常用的验证命令是查看组播路由表项,确认(源,组)条目是否生成、入接口出接口是否正常。如果组播报文进来了但路由表里没条目,多半是RP配置有问题或者反向路径检查(RPF)失败。我遇到过一种现象:组播接收者共享一个二层交换网络,所有人都在同一个VLAN里,组播却只有部分终端能收到。查到最后发现交换机的IGMP Snooping全局没有开启,组播报文被当作广播在VLAN内泛洪。开启之后报文行为正常。这个案例说明组播配置的链路是一体的,层一层的配置都不会自动生效,每一级都需要确认。5. 几类地址配合使用时的避坑经验5.1 物联网与视频监控中的IPv6规划现在的项目越来越绕不开IPv6,尤其物联网终端模块的地址配置,往往默认就支持IPv6。同一个传感器区域可能挂了几百个设备,如果用IPv4规划,NAT和地址不足都让人头疼;换到IPv6,每个设备拿到全球单播地址,理论上数量完全不受限,但要注意防火墙策略的适配。IPv6回源管理的方式和IPv4不太一样。IPv4时代我们对内网设备用私有地址,配合NAT映射出去;IPv6时代如果直接把全球单播地址给到终端,意味着防火墙不能再用“内网可信、外网不可信”的心态去写策略,需要按区域和端口级别去做白名单。我见过很多团队因为IPv6地址分配太随意,防火墙策略通配范围过宽,最后排查安全事件时非常被动。5.2 组播与单播混合网络的性能影响组播流量进入网络后,如果交换机各端口没有做IGMP Snooping,所有组播报文会被泛洪到同一VLAN内的全部端口,这不仅浪费带宽,还会影响单播业务的延迟表现。现象就是视频监控的组播流开着的时候,办公网的网页打开变慢,文件传输等常规业务受明显影响。这种情况的判断方式比较简单:登录接入交换机,查看组播报文的泛洪计数和端口流量统计。如果确认泛洪,就要确认全局和VLAN两个层面的IGMP Snooping是不是都打开了。除此之外,还要考虑到组播报文的TTL设置和PIM域的范围边界,不要让组播流量跑到没必要的地方去。在设计组播业务网络时,我通常建议把组播业务单独划分VLAN,与单播业务物理或逻辑隔离,这样既能控制组播影响范围,又能简化故障定位逻辑。网络规模不大时,单独VLAN看似多此一举,组播业务一旦扩展,这个决策的价值立刻体现出来。5.3 子网划分方案落地前的自检清单每做完一版子网或者IPv6地址规划,我都会花点时间做一份自检清单,逐项核对,能在上设备前发现一大批低级问题:每个子网段是否预留了足够的地址空间,满足未来三年规模翻倍?网关地址是否避开首尾地址,并且有统一规范可循?组播业务用的地址段是否与其他业务地址重叠?是否记录了一份完整的“IP地址使用表”,并且与实际配置保持一致?IPv6终端的DNS获取方式是否明确,是RA带出还是DHCPv6下发?组播MAC与二层交换机IGMP Snooping的配置是否同步?这些问题看着零散,但每一项都在真实项目中暴露过问题。拿地址使用表来说,很多项目前期不重视记录,等到设备数量上百之后,地址冲突排查就变成一种体力活。后来我养成一个习惯,每个项目无论大小,先建一张表格,网络设备、终端网关、业务地址分开列,配置一台记录一台,省下来的排查时间远超记录的投入。5.4 日常维护时常用的排障命令与观察点不管配置多完善,网络设备上线后还是要靠命令行去看状态。IPv4和IPv6侧常用的几组命令,不妨花点时间练熟:查看接口地址和状态,确认目标地址和前缀长度是否正确部署。查看路由表,重点看目的网络前缀和下一跳是否正常。查看IPv6邻居缓存,确认地址冲突或者邻居发现状态异常。查看组播路由表,确认(源,组)条目以及RP信息。查看IGMP组成员关系表,确认接收者是否已正常加入组播组。在终端上做IPv6连通性测试之前,先ping一下对端全局地址,如果通了再ping链路本地地址,用于区分是地址解析问题还是路由问题。这些命令每家厂商略有差异,但观察对象是一致的。真正有价值的不是命令本身,而是看到结果之后怎么判断问题出在哪一层。我一直建议团队新人养成一个习惯:故障发生时先看端口状态和接口计数器,再往协议层去看,很多问题都在最底层就能发现端倪,不必上升到复杂的路由协议判定。6. 最后分享两个我自己踩过的坑一个是组播MAC冲突的案例。某个项目里视频服务器和会议系统用了两个不同的组播组地址,配置本身没任何问题,但二者报文经常同时到达终端,导致视频和音频串流。查到最后发现两个组播组IP虽然不同,映射出的二层组播MAC却是同一个,终端网卡无法区分,只能收到全部报文。解决办法就是把其中一个组播组重新规划,避开映射冲突范围。另一个是IPv6地址分配时EUI-64带来的地址变化问题。某台终端的网卡MAC变更或换了网卡之后,SLAAC自动生成的IPv6地址会跟着变化,如果防火墙规则是基于旧IPv6地址写的,新地址就会被防火墙直接拦掉,业务中断。后来我在支持IPv6的网络里逐渐养成一个习惯:重要设备不要依赖SLAAC,直接用DHCPv6静态绑定或手工配置地址,尽量保持地址稳定。这两个坑不涉及多高深的理论,但都是实战里容易忽略的点。地址规划这块,说到底就是细心和一致性的活儿,把每一步都做扎实了,后面运维的日子就能好过很多。
1. 这一篇把地址规划里的“硬骨头”啃完前几篇把IPv4的基础分类、公网私有地址的边界、IPv6的地址结构挨个过了一遍,这篇终于要面对几个真正让人头疼的话题:子网怎么切才不浪费、IPv6那串超长地址到底怎么缩写成能看的样子、还有组播地址到底是个什么逻辑。这三个东西放在一起讲,是因为在实际项目里它们从来不是孤立的知识点——做网络规划的时候,IPv4子网划分是基本功,IPv6地址设计是未来必须面对的坑,而组播地址则在视频监控、直播推流、路由协议邻居建立这些场景里反复出现。我最早带项目那会儿,组播在我眼里就是个“听说过没见过”的概念,直到某次给一个视频传输系统做网络优化,才发现不懂组播地址规划,业务就是跑不起来。而IPv6呢,说实话真正动手去配置过的人比例没那么高,更多是停留在“知道它长什么样”的阶段。这篇就从这三个方向切入,把每个知识点拆开揉碎,尽量让实际配置过的人觉得“对,就是这么回事”,没配置过的人也能照着思路去动手验证。适合看这篇的,大概是网络工程师、运维朋友,或者正在备考网络相关认证的人。如果前三篇你已经追完了,这一篇就是收尾阶段的硬核补充。2. IPv4子网划分的底层逻辑2.1 掩码才是划分的真正“尺子”很多人学子网划分,喜欢背“C类地址默认24位掩码”这种口诀,真要切VLSM的时候就卡住了。根本问题在于没有理解掩码的二进制本质:掩码用来标识“网络位”的长度,网络位被固定之后,剩余的主机位就是这台设备所在子网能容纳的地址数量。举个例子,一个地址是192.168.1.100,掩码是255.255.255.192。把掩码转成二进制就知道,前面26位是1,后面6位是0。这个/26子网里,网络部分占用了前三个八位组再加上第四个八位组的前两位,那么子网块大小就是64(2的6次方在第四个八位组里体现为64的增量,不过用更简单的算法也能算出来,即256减去最后一个非零掩码段的十进制值)。每个子网范围就是0-63、64-127、128-191、192-255,主机位去掉全0和全1,可用地址就是每个块里的62个。这个计算熟练了,不借助任何子网计算工具,拿眼一看掩码就能报出子网范围和广播地址。实际项目里最常见的问题不是算不出来,而是规划的时候完全没有“预留扩展”的意识。比如某层领导说给这个办公室划一个子网,里面实际只有15台设备,有人直接配了个/24,浪费了200多个地址。要是整个项目地址段足够大,浪费也就浪费了;如果总部给的是一个/16的段,各部门都这么造,地址早晚不够用。所以我做规划的习惯是:先统计每个接入点未来三到五年的设备上线预估数量,再决定掩码长度,宁可稍大,不可不足,但也不给两倍以上的冗余。2.2 VLSM和CIDR的关系,一次讲明白VLSM和CIDR在绝大多数教材里是分开讲的,但实际它们是同一件事的两种视角。VLSM强调的是“在一个大网段内,用不同长度的掩码去划分不同大小的子网”,CIDR强调的是“将连续的小网段聚合成一个大网段来进行路由通告”。还是拿实际场景说吧,比如公司从运营商那儿拿到一个/24的地址段,需要划分给四个部门,设备数量分别是50台、30台、20台、10台。直接用固定/25的掩码去分,四个部门根本不够用,因为/25只能分出两个子网。合理做法就是按需求从大到小排序然后逐级划分:50台的部门给/26,分配第一个块,范围0-63,可用地址62个。30台的部门给/27,分配第二个块里的前一半(64-95),可用地址30个。20台的部门给/27,继续用96-127这个块,可用30个,能放下。10台的部门给/28,从128开始往后拿一个块(128-143),可用14个。这里每个部门的掩码都不同,就是VLSM。到了路由层面,把这些连续的子网汇总成一个整体通告出去,就是CIDR。很多文档搭建实验环境的时候,把路由配置里的IP地址写反或者掩码长度写错,本质就是没分清这层关系。需要注意一点,VLSM划分的时候必须保证子网从大到小分配,否则大子网可能没有足够连续空间。这个顺序习惯,能帮你少踩很多坑。2.3 划分子网时别忽略广播域和网关地址这个坑非常隐蔽。子网划分定下来之后,网关地址放在哪个位置,是很多人随缘处理的。我见过不少项目把网关放在子网的第一个可用地址,也有放在最后一个可用地址的,这本身问题不大,问题在于一个子网里跑的业务如果包含组播,网关位置影响的是组播报文能否被正确路由。另外,广播地址在每个子网的最后一个地址位,这是固定的。但是有些设备对广播地址的处理和标准有差异,尤其是某些嵌入式设备,它在发送广播探测的时候,可能把目标地址写成了255.255.255.255而不是子网定向广播地址。这种情况下,如果中间路由器开启了定向广播转发,就容易造成广播风暴,如果关闭了,这些设备又可能发现不了网关。这个细节在做无线覆盖项目时经常碰到,排查半年都未必能找到根因。所以我现在做子网划分,每个子网预留的地址不只是网络号和广播地址,还会额外预留头尾各两三个地址作为网关或接口预留位,并且把这些信息记录在地址规划表里,避免后续设备上线时地址冲突。3. IPv6地址:从陌生到实际配置3.1 IPv6地址太长,先学会“看”IPv6地址是128位二进制,通常表示为8组16进制的数,用冒号分隔,比如2001:0db8:85a3:0000:0000:8a2e:0370:7334。第一次接触的人都会觉得这串东西没法记忆,实际上IPv6地址的缩写规则非常宽松,核心就两条:每组前面的0可以省略;连续的0组可以用双冒号::替代,但双冒号只能出现一次。我见过最大的误解就是有人觉得“每组前面的0可以省略”意味着“组中间和后面的0可以省略”——不是的,能省略的只有每组的“前导0”。比如0001只能缩写成1,但1000不能缩写成1,如果把后面的0也省了,地址就完全变了。实际操作里有经验的工程师,拿到一个IPv6地址第一反应不是去看全长,而是直接抓前64位的网络前缀和后64位的接口标识符。IPv6没有广播地址的概念,末尾全0和全1的地址依然可以作为主机地址使用,这一点和IPv4完全不同,很多从IPv4转过来的人在初期总会习惯性地把全F结尾的地址当成广播地址避让,白白浪费了可用地址。3.2 IPv6地址分配的三种方式,怎么选IPv6地址分配方式主要有三种:手工静态配置、SLAAC(无状态自动配置)、DHCPv6(有状态配置)。手工配置适合基础设施设备,比如路由器互联地址、交换机管理地址,数量不多但需要完全可控。SLAAC是最常用的终端地址获取方式,它的机制是主机通过路由器通告RA报文获取前缀信息,再用自己的网卡MAC地址结合EUI-64规则构造接口标识符。DHCPv6适合需要记录详细租约信息的场景,比如企业办公网的打印机地址分配,方便后续定位设备。SLAAC有一个坑:它默认不分配DNS服务器地址。终端拿到IPv6地址之后,域名的系统解析工作主要依赖RA选项扩展或DHCPv6的附加选项来下发DNS信息;如果网络里既没开启RA的DNS选项,也没搭DHCPv6,IPv6终端能通网络但上不了网,浏览器直接报DNS解析错误。我排查过不少IPv6“通而不达”的问题,最后都是DNS下发的缺失。再补充一个实际经验:如果你在配置RA的M/O标志位,M标志位设置为1时主机用DHCPv6获取地址,O标志位设置为1时主机用RA获取前缀地址、但用DHCPv6获取其他配置信息。两个标志位的组合决定了SLAAC和DHCPv6的配合方式,网上很多教程对这一块写得含糊,实际配置起来经常会发现主机行为跟预期不一致。3.3 IPv6中继与静态路由,配置时少走弯路的做法IPv6路由配置和IPv4最大的差异在于邻接性判断。IPv4和IPv6都有路由表中下一跳地址的判断逻辑;但是IPv6中的链路本地地址(fe80::开头的地址)在实际转发时非常容易被忽略。很多人配置静态路由,下一跳想当然地写成了对端接口的全球单播地址,这通常没有什么大问题;但如果对端的全球单播地址没有配置或没生效,路由下一跳就应该配置成对端接口的链路本地地址,才能在邻居发现层面直接生效。判断标准很简单:一个接口可以同时有多个IPv6地址,但链路本地地址一定是存在的,所以只要二层是通的,下一跳写接口的链路本地地址连通性一定优于写全球单播地址。组播在IPv6里也有对应的链路本地组播地址,比如ff02::1代表所有节点,ff02::2代表所有路由器。这些地址是路由协议自动建立邻居关系的基础,像OSPFv3的邻居建立,组播地址变化会直接影响协议通信。下面这部分我们把组播地址的细节摊开讲。4. 组播地址的结构与应用场景4.1 IPv4组播地址的分类,别只记一个224.0.0.0/8组播地址在IPv4里占了整个D类地址段,从224.0.0.0到239.255.255.255。这个范围看起来很大,实际被分成若干区段,用途完全不同。224.0.0.0到224.0.0.255是链路本地组播地址,只在直连网络内有效,路由器不转发,TTL固定为1。几乎所有路由协议的组播通信都集中在这里面,比如OSPF的224.0.0.5和224.0.0.6、PIM的224.0.0.13。224.0.1.0到238.255.255.255是全球范围组播地址,可以被路由转发,适用于跨网络的组播业务。比如视频会议、直播流的组播部署,大多从这一段中选择。239.0.0.0到239.255.255.255是本地管理组播地址,类似于IPv4的私有地址,只在组织内部使用,可以复用,不冲突。常见误解是以为组播地址跟单播地址一样也有“子网划分”的概念,其实组播地址本身没有子网掩码,它的范围是通过前缀来区分的。你配置IGMP或者组播路由,用的都是完整的组播地址,不涉及掩码计算。部分厂商设备针对239网段划分的SSM(特定源组播)范围,是把组播业务的源和组都做了限制,配置复杂度比ASM(任意源组播)低不少,遇到业务需求的时候可以优先考虑SSM模式。4.2 组播地址与MAC地址的映射机制组播流量在二层传输时,需要把三层组播地址映射为二层组播MAC地址。方法不复杂:IPv4组播MAC地址是以01:00:5E开头,组播IP地址的后23位映射到MAC地址的后23位。这个映射有一个非常值得注意的问题:因为IPv4组播地址有28位在D类段里是可变位,映射到MAC时只取后23位,意味着多个组播IP会映射到同一个组播MAC地址上。具体换算中的算法是:把组播IP的二进制后23位对齐到01:00:5E的后23位,所以会出现不同的组播组对应同一个MAC地址的情况。实际影响在于交换机二层转发和终端网卡接收报文时,网卡只检查目的MAC是否为组播MAC,再用协议栈做IGMP报文的二次过滤;如果组播MAC冲突频繁,网卡接收到的无关组播报文会消耗CPU。避免这个问题的思路是:规划组播组时尽量避开那些IP后23位完全一致的范围。这个细节每一个做视频组播的人都应该知道。IPv6组播MAC映射则相对简单:IPv6组播地址的前缀是33:33,将IPv6组播地址的低32位追加到33:33后面,组成一个16位十六进制表示的二层组播MAC地址。比如ff02::1映射成33:33:00:00:00:01。IPv6组播MAC的冲突概率低很多,但也有映射规律需要注意,排查二层组播泛洪时一样要对照这个映射表。4.3 IGMP与PIM基础,动手验证一次就理解组播要真正跑起来,需要两个层面的协议支撑:接入层的IGMP负责主机与路由器之间的组成员关系维护,核心层的PIM负责组播报文在路由器之间的路径构建。IGMP有三个版本:IGMPv1有基本的组成员加入和查询机制,但离开机制不完善;IGMPv2增加了离开报文,是大多数网络里的标配;IGMPv3增加了源过滤功能,可以配合SSM使用。配置时第一步通常是在三层设备接口上开启IGMP,同时把接口配置为查询者角色,确保周期性发送组查询报文。PIM需要至少一个汇聚点RP存在,ASM模式下的组播源注册和接收者加入都围绕RP进行。配置完组播路由后,常用的验证命令是查看组播路由表项,确认(源,组)条目是否生成、入接口出接口是否正常。如果组播报文进来了但路由表里没条目,多半是RP配置有问题或者反向路径检查(RPF)失败。我遇到过一种现象:组播接收者共享一个二层交换网络,所有人都在同一个VLAN里,组播却只有部分终端能收到。查到最后发现交换机的IGMP Snooping全局没有开启,组播报文被当作广播在VLAN内泛洪。开启之后报文行为正常。这个案例说明组播配置的链路是一体的,层一层的配置都不会自动生效,每一级都需要确认。5. 几类地址配合使用时的避坑经验5.1 物联网与视频监控中的IPv6规划现在的项目越来越绕不开IPv6,尤其物联网终端模块的地址配置,往往默认就支持IPv6。同一个传感器区域可能挂了几百个设备,如果用IPv4规划,NAT和地址不足都让人头疼;换到IPv6,每个设备拿到全球单播地址,理论上数量完全不受限,但要注意防火墙策略的适配。IPv6回源管理的方式和IPv4不太一样。IPv4时代我们对内网设备用私有地址,配合NAT映射出去;IPv6时代如果直接把全球单播地址给到终端,意味着防火墙不能再用“内网可信、外网不可信”的心态去写策略,需要按区域和端口级别去做白名单。我见过很多团队因为IPv6地址分配太随意,防火墙策略通配范围过宽,最后排查安全事件时非常被动。5.2 组播与单播混合网络的性能影响组播流量进入网络后,如果交换机各端口没有做IGMP Snooping,所有组播报文会被泛洪到同一VLAN内的全部端口,这不仅浪费带宽,还会影响单播业务的延迟表现。现象就是视频监控的组播流开着的时候,办公网的网页打开变慢,文件传输等常规业务受明显影响。这种情况的判断方式比较简单:登录接入交换机,查看组播报文的泛洪计数和端口流量统计。如果确认泛洪,就要确认全局和VLAN两个层面的IGMP Snooping是不是都打开了。除此之外,还要考虑到组播报文的TTL设置和PIM域的范围边界,不要让组播流量跑到没必要的地方去。在设计组播业务网络时,我通常建议把组播业务单独划分VLAN,与单播业务物理或逻辑隔离,这样既能控制组播影响范围,又能简化故障定位逻辑。网络规模不大时,单独VLAN看似多此一举,组播业务一旦扩展,这个决策的价值立刻体现出来。5.3 子网划分方案落地前的自检清单每做完一版子网或者IPv6地址规划,我都会花点时间做一份自检清单,逐项核对,能在上设备前发现一大批低级问题:每个子网段是否预留了足够的地址空间,满足未来三年规模翻倍?网关地址是否避开首尾地址,并且有统一规范可循?组播业务用的地址段是否与其他业务地址重叠?是否记录了一份完整的“IP地址使用表”,并且与实际配置保持一致?IPv6终端的DNS获取方式是否明确,是RA带出还是DHCPv6下发?组播MAC与二层交换机IGMP Snooping的配置是否同步?这些问题看着零散,但每一项都在真实项目中暴露过问题。拿地址使用表来说,很多项目前期不重视记录,等到设备数量上百之后,地址冲突排查就变成一种体力活。后来我养成一个习惯,每个项目无论大小,先建一张表格,网络设备、终端网关、业务地址分开列,配置一台记录一台,省下来的排查时间远超记录的投入。5.4 日常维护时常用的排障命令与观察点不管配置多完善,网络设备上线后还是要靠命令行去看状态。IPv4和IPv6侧常用的几组命令,不妨花点时间练熟:查看接口地址和状态,确认目标地址和前缀长度是否正确部署。查看路由表,重点看目的网络前缀和下一跳是否正常。查看IPv6邻居缓存,确认地址冲突或者邻居发现状态异常。查看组播路由表,确认(源,组)条目以及RP信息。查看IGMP组成员关系表,确认接收者是否已正常加入组播组。在终端上做IPv6连通性测试之前,先ping一下对端全局地址,如果通了再ping链路本地地址,用于区分是地址解析问题还是路由问题。这些命令每家厂商略有差异,但观察对象是一致的。真正有价值的不是命令本身,而是看到结果之后怎么判断问题出在哪一层。我一直建议团队新人养成一个习惯:故障发生时先看端口状态和接口计数器,再往协议层去看,很多问题都在最底层就能发现端倪,不必上升到复杂的路由协议判定。6. 最后分享两个我自己踩过的坑一个是组播MAC冲突的案例。某个项目里视频服务器和会议系统用了两个不同的组播组地址,配置本身没任何问题,但二者报文经常同时到达终端,导致视频和音频串流。查到最后发现两个组播组IP虽然不同,映射出的二层组播MAC却是同一个,终端网卡无法区分,只能收到全部报文。解决办法就是把其中一个组播组重新规划,避开映射冲突范围。另一个是IPv6地址分配时EUI-64带来的地址变化问题。某台终端的网卡MAC变更或换了网卡之后,SLAAC自动生成的IPv6地址会跟着变化,如果防火墙规则是基于旧IPv6地址写的,新地址就会被防火墙直接拦掉,业务中断。后来我在支持IPv6的网络里逐渐养成一个习惯:重要设备不要依赖SLAAC,直接用DHCPv6静态绑定或手工配置地址,尽量保持地址稳定。这两个坑不涉及多高深的理论,但都是实战里容易忽略的点。地址规划这块,说到底就是细心和一致性的活儿,把每一步都做扎实了,后面运维的日子就能好过很多。