当前位置: 首页 > news >正文

RFC4291-IPv6地址架构

RFC4291 IP Version 6 Addressing Architecture

Author:Once Day Date:2025年6月15日

本文翻译自RFC 4291 - IP Version 6 Addressing Architecture

这篇文章总结了IPv6的基础概念,属于IPv6协议入门内容。

文章目录

      • RFC4291 IP Version 6 Addressing Architecture
        • 1. 概述
          • 1.1 本备忘录状态
          • 1.2 版权声明
          • 1.3 摘要
        • 2. IPv6 编址
          • 2.1 地址模型
          • 2.2 地址的文本表示
          • 2.3 地址前缀的文本表示
          • 2.4 地址类型标识符
          • 2.5 单播地址
            • 2.5.1 接口标识符
            • 2.5.2 未指定地址
            • 2.5.3 回环地址
            • 2.5.4 全局单播地址
            • 2.5.5 嵌入 IPv4 地址的 IPv6 地址
            • 2.5.6 链路本地 IPv6 单播地址
            • 2.5.7 站点本地 IPv6 单播地址
          • 2.6. 任播地址
            • 2.6.1. 必备任播地址
          • 2.7. 多播地址
            • 2.7.1. 预定义多播地址
          • 2.8. 节点的必备地址
        • 3. 安全考虑
        • 4. IANA 注意事项

1. 概述
1.1 本备忘录状态

本文档为互联网社区指定了一种互联网标准轨道协议,并征求有关改进的讨论和建议。有关本协议的标准化状态和状况,请参考当前版本的《互联网官方协议标准》(STD 1)。本备忘录的分发不受限制。

1.2 版权声明

版权所有(C)互联网协会(2006)。

1.3 摘要

本规范定义了 IPv6(互联网协议第 6 版)的编址架构。文档内容包括 IPv6 编址模型、IPv6 地址的文本表示、IPv6 单播地址、任播地址和多播地址的定义,以及 IPv6 节点的必备地址。

本文档替代了 RFC 3513《IPv6 编址架构》。

2. IPv6 编址

IPv6 地址是用于标识接口及接口集合的 128 位标识符(“接口” 的定义参见 [IPV6] 第 2 节)。地址分为三种类型:

单播(Unicast)

  • 标识单个接口。发往单播地址的数据包将被交付至该地址标识的接口。

任播(Anycast)

  • 标识一组接口(通常属于不同节点)。发往任播地址的数据包将被交付至该地址标识的其中一个接口(根据路由协议的距离度量,选择 “最近” 的接口)。

多播(Multicast)

  • 标识一组接口(通常属于不同节点)。发往多播地址的数据包将被交付至该地址标识的所有接口。

IPv6 中不存在广播地址,其功能已被多播地址取代。

本文档中,地址字段被赋予特定名称(如 “子网”)。当名称后接 “ID”(如 “子网 ID”)时,指该命名字段的内容;当接 “前缀”(如 “子网前缀”)时,指从地址左侧开始直至该字段(含)的全部内容。

在 IPv6 中,除非特别排除,任何字段的合法值均可为全零或全一。具体而言,前缀可包含以零值字段结尾的情况。

2.1 地址模型

所有类型的 IPv6 地址均分配给接口,而非节点。IPv6 单播地址标识单个接口,由于每个接口属于唯一节点,该节点任意接口的单播地址均可作为节点标识符。

所有接口必须至少拥有一个链路本地单播地址(其他必备地址见 2.8 节)。单个接口可同时拥有多个任意类型(单播、任播、多播)或作用域的 IPv6 地址。对于不用于与非邻居节点收发 IPv6 数据包的接口,无需配置作用域大于链路范围的单播地址 —— 这对点到点接口尤为便利。该编址模型存在一个例外情况:

若实现将多个物理接口在网络层视为单个接口,则可向这些接口分配单个或一组单播地址。此特性适用于通过多物理接口实现负载分担的场景。

当前 IPv6 沿用 IPv4 模型,即子网前缀与一条链路关联,同一链路可分配多个子网前缀。

即使接口仅用于本地通信,也必须配置链路本地地址(如 FE80::/10 前缀地址),以确保链路层通信的基础可达性。

2.2 地址的文本表示

IPv6 地址以文本字符串表示时存在三种常规形式:

(1)首选格式

格式为 x:x:x:x:x:x:x:x,其中每个 x 为地址中 8 个 16 位段的 1~4 位十六进制数字。示例:

  • ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
  • 2001:DB8:0:0:8:800:200C:417A

注意:单个字段中的前导零无需书写,但每个字段至少保留一位数字(除非符合第 2 点描述的情况)。

(2)零压缩语法

由于部分 IPv6 地址分配方式会产生长串零位,为简化书写,可用特殊语法压缩连续零段:

  • :: 表示一个或多个 16 位零组,且每个地址中 :: 只能出现一次,可用于压缩地址中的前导或 trailing 零。
原始地址压缩后地址类型说明
2001:DB8:0:0:8:800:200C:417A2001:DB8::8:800:200C:417A单播地址
FF01:0:0:0:0:0:0:101FF01::101多播地址
0:0:0:0:0:0:0:1::1回环地址
0:0:0:0:0:0:0:0::未指定地址

(3)IPv4 - 兼容混合格式

在 IPv4/IPv6 混合环境中,可用 x:x:x:x:x:x:d.d.d.d 格式。前 6 个 x 为地址高 6 个 16 位段的十六进制值,后 4 个 d 为低 4 个 8 位段的十进制值(标准 IPv4 表示法)。示例:

  • 完整格式:0:0:0:0:0:0:13.1.68.30:0:0:0:0:FFFF:129.144.52.38
  • 压缩格式:::13.1.68.3::FFFF:129.144.52.38
2.3 地址前缀的文本表示

IPv6 地址前缀的文本表示方式类似于无类别域间路由(CIDR)记法中 IPv4 地址前缀的写法。IPv6 地址前缀的表示格式为:

ipv6-address/prefix-length

其中:

  • ipv6-address:采用 2.2 节中任意一种记法表示的 IPv6 地址。
  • prefix-length:一个十进制数值,表示地址中左侧连续多少位构成前缀。

合法与非法表示示例:

前缀描述合法表示示例非法表示示例
60 位前缀 20010DB80000CD32001:0DB8:0000:CD30:0:0:0:0/60 2001:0DB8::CD30:0:0:0:0/60 2001:0DB8:0:CD30::/602001:0DB8:0:CD3/60 2001:0DB8::CD30/60 2001:0DB8::CD3/60

错误原因:

  1. 压缩后的段必须保持 16 位对齐。
  2. :: 扩展后前缀长度不足 60 位。
  3. 压缩导致非末尾段的零被移除。

当同时表示节点地址及其子网前缀时,可采用以下简化方式:

  • 节点地址:2001:0DB8:0:CD30:123:4567:89AB:CDEF
  • 子网前缀:2001:0DB8:0:CD30::/60

组合缩写:

2001:0DB8:0:CD30:123:4567:89AB:CDEF/60
2.4 地址类型标识符

IPv6 地址的类型通过地址的高位比特进行标识,如下所示:

地址类型二进制前缀IPv6 表示法章节
未指定地址全 0(128 位)::/1282.5.2
回环地址00…1(128 位)::1/1282.5.3
多播地址11111111FF00::/82.7
链路本地单播地址1111111010FE80::/102.5.6
全球单播地址(其他所有情况)--

任播地址取自单播地址空间(任意作用域),且在语法上与单播地址无区别。

全球单播地址的通用格式在 2.5.4 节描述。部分包含嵌入式 IPv4 地址的全球单播地址子类型(用于 IPv4-IPv6 互操作)在 2.5.5 节说明。

未来规范可能会将全球单播地址空间的一个或多个子范围重新定义为其他用途,但在此之前,实现必须将所有不以上述前缀开头的地址视为全球单播地址。

2.5 单播地址

IPv6 单播地址可使用任意比特长度的前缀进行聚合,这与无类别域间路由(CIDR)体系下的 IPv4 地址类似。

IPv6 中存在多种单播地址类型,特别是全球单播地址站点本地单播地址(已弃用,参见 2.5.7 节)链路本地单播地址。此外,全球单播地址还包含一些特殊用途的子类型(如嵌入 IPv4 地址的 IPv6 地址)。未来可能会定义更多地址类型或子类型。

根据节点角色(如主机与路由器)的不同,IPv6 节点对 IPv6 地址内部结构的认知程度可能存在差异。至少,节点可认为单播地址(包括其自身地址)不具备内部结构:128 位的节点地址。

略复杂的主机(但仍属于简单类型)可能额外知晓其连接链路的子网前缀(不同地址的 n 值可能不同):

n 位子网前缀 + 128-n 位接口标识符

尽管非常简单的路由器可能不了解 IPv6 单播地址的内部结构,但通常情况下,路由器会知晓一个或多个用于路由协议运行的层次化边界。具体知晓的边界因路由器在路由层次中的位置而异。

除上述关于子网边界的认知外,节点不应对 IPv6 地址的结构做任何假设。

2.5.1 接口标识符

IPv6 单播地址中的接口标识符用于标识链路上的接口,要求在子网前缀内唯一。建议同一链路上不同节点不分配相同的接口标识符,其也可在更广泛范围内唯一。在某些情况下,接口标识符可直接从该接口的链路层地址派生。单个节点的多个接口若连接至不同子网,可使用相同的接口标识符。

需注意,接口标识符的唯一性与 IPv6 地址的唯一性无关。例如,可使用本地范围接口标识符创建全球单播地址,或使用全局范围接口标识符创建链路本地地址。

除二进制值以 000 开头的单播地址外,所有单播地址的接口标识符必须为 64 位长,并采用修改的 EUI-64 格式构造。

基于修改的 EUI-64 格式的接口标识符,若派生自全局令牌(如 IEEE 802 48 位 MAC 或 IEEE EUI-64 标识符 [EUI64])则具有全局范围;若缺乏全局令牌(如串行链路、隧道端点)或无需全局令牌(如隐私保护临时令牌 [PRIV]),则具有本地范围。

从 IEEE EUI-64 标识符构造接口标识符时,需翻转 “u” 位(IEEE EUI-64 术语中的全局 / 本地位)。在修改的 EUI-64 格式中:

  • “u” 位设为 1 表示全局范围;
  • 设为 0 表示本地范围。

IEEE EUI-64 标识符的前三个八位组二进制结构如下(按互联网标准位序):

         0       0 0       1 1       2|0       7 8       5 6       3|+----+----+----+----+----+----+|cccc|ccug|cccc|cccc|cccc|cccc|+----+----+----+----+----+----+

其中:

  • “u” 为全局 / 本地位;
  • “g” 为个体 / 组位;
  • “c” 为公司标识符位。

翻转 “u” 位的设计初衷是便于系统管理员在缺乏硬件令牌时手动配置非全局标识符(如串行链路、隧道端点场景)。若不翻转该位,标识符可能需表示为0200:0:0:10200:0:0:2等形式,而翻转后可简化为0:0:0:10:0:0:2

IPv6 节点无需验证 “u” 位设为全局的修改 EUI-64 令牌所创建接口标识符的唯一性。修改的 EUI-64 格式标识符中全局 / 本地位的设计,为未来利用全局范围接口标识符的技术发展预留空间。

接口标识符的具体构造细节在相应的 “<链路> 上的 IPv6” 规范中定义,如《以太网承载 IPv6》[ETHER] 和《FDDI 承载 IPv6》[FDDI]。

2.5.2 未指定地址

地址0:0:0:0:0:0:0:0称为未指定地址,绝不可分配给任何节点。它表示地址缺失,典型用途如初始化主机在获取自身地址前发送的 IPv6 数据包的源地址字段。

未指定地址不得作为 IPv6 数据包的目的地址或出现在 IPv6 路由报头中。源地址为未指定地址的 IPv6 数据包,IPv6 路由器必须不进行转发

2.5.3 回环地址

单播地址0:0:0:0:0:0:0:1称为回环地址,节点可用其向自身发送 IPv6 数据包,但绝不可分配给任何物理接口。该地址被视为具有链路本地作用域,可理解为虚拟接口(通常称为 “回环接口”)连接到虚构链路的链路本地单播地址。

回环地址不得作为节点外发 IPv6 数据包的源地址。目的地址为回环地址的 IPv6 数据包,绝不可发送到节点外部,且 IPv6 路由器必须不进行转发。接口接收到目的地址为回环地址的数据包时,必须丢弃

2.5.4 全局单播地址

IPv6 全球单播地址用于在全球范围内唯一标识网络中的设备,其一般格式如下3:

n 位m 位128 - n - m 位
全球路由前缀子网 ID接口 ID

其中,全球路由前缀是分配给一个站点(子网 / 链路集群)的值,通常采用分层结构;子网 ID 用于标识站点内的链路;接口 ID 如 2.5.1 节中所定义。

除了以二进制 000 开头的地址外,所有全球单播地址都有一个 64 位的接口 ID 字段(即 n + m = 64),其格式如 2.5.1 节所述。以二进制 000 开头的全球单播地址,对接口 ID 字段的大小或结构没有此限制。例如,以二进制 000 开头的全球单播地址有 2.5.5 节中描述的内嵌 IPv4 地址的 IPv6 地址;而以非 000 二进制值开头(因此具有 64 位接口 ID 字段)的全球地址示例可以是2001:1111:2222:ABCD::1/64,其中全球路由前缀为2001:1111:2222,子网 ID 为ABCD,接口 ID 为::13。

2.5.5 嵌入 IPv4 地址的 IPv6 地址

定义了两种在地址低 32 位携带 IPv4 地址的 IPv6 地址类型:IPv4 兼容的 IPv6 地址IPv4 映射的 IPv6 地址

(1)IPv4 兼容的 IPv6 地址,该地址用于辅助 IPv6 过渡,格式如下:

80 位16 位32 位
0000…0000(全 0)0000IPv4 地址

说明

  • 其中的 IPv4 地址必须是全局唯一的 IPv4 单播地址。
  • 该地址类型现已弃用,因当前 IPv6 过渡机制不再使用,新实现无需支持。

(2)IPv4 映射的 IPv6 地址,用于将 IPv4 节点地址表示为 IPv6 地址,格式如下:

80 位16 位32 位
0000…0000(全 0)FFFFIPv4 地址

使用背景参见 [RFC4038]。

2.5.6 链路本地 IPv6 单播地址

链路本地地址仅用于单一链路,格式如下:

10 位54 位64 位
11111110100接口标识符

用途

  • 单一链路内的自动地址配置、邻居发现,或无路由器场景。
  • 路由器禁止转发源或目的地址为链路本地地址的数据包到其他链路。
2.5.7 站点本地 IPv6 单播地址

该地址原设计用于站点内部寻址,无需全局前缀,现已按 [SLDEP] 弃用。格式如下:

10 位54 位64 位
1111111011子网标识符接口标识符

说明

  • 新实现不再支持[RFC3513] 中定义的该前缀特殊行为(需将其视为全球单播地址)。
  • 现有实现和部署可继续使用该前缀。
2.6. 任播地址

IPv6 任播地址是分配给多个接口(通常属于不同节点)的地址,其特性是:根据路由协议的距离度量,发往任播地址的数据包将被路由至拥有该地址的 “最近” 接口。

任播地址从单播地址空间中分配,使用任意已定义的单播地址格式。因此,任播地址在语法上与单播地址无法区分。当单播地址被分配给多个接口(即转换为任播地址)时,必须显式配置地址所属节点,使其知晓该地址为任播地址。

对于任何已分配的任播地址,存在一个最长前缀 P,该前缀标识所有属于该任播地址的接口所在的拓扑区域。在 P 标识的区域内,任播地址必须作为路由系统中的独立条目(通常称为 “主机路由”)维护;在 P 标识的区域外,任播地址可聚合到前缀 P 的路由条目中。

需注意,在最坏情况下,任播地址集合的前缀 P 可能是空前缀(即集合成员无拓扑局部性)。此时,任播地址必须在整个互联网中作为独立路由条目维护,这将对支持此类 “全局” 任播集合的数量构成严重的扩展性限制。因此,全局任播集合的支持可能不可用或受到严格限制。

任播地址的典型用途之一是标识提供互联网服务的组织所属的路由器集合。此类地址可作为 IPv6 路由报头中的中间地址,使数据包通过特定服务提供商或服务提供商序列传输。

其他可能用途包括:标识连接到特定子网的路由器集合,或标识提供进入特定路由域入口的路由器集合。

2.6.1. 必备任播地址

子网路由器任播地址已预先定义,其格式如下:

n 位128-n 位
子网前缀00000000000000(全 0)

任播地址中的 “子网前缀” 用于标识特定链路,该任播地址在语法上与链路中接口标识符全为零的单播地址相同。

发往子网路由器任播地址的数据包将被交付至子网中的某一台路由器。所有路由器必须支持其接口所连接子网的子网路由器任播地址。

该地址旨在用于节点需要与路由器集合中任意一台通信的场景。

2.7. 多播地址

IPv6 多播地址是一组接口(通常位于不同节点)的标识符。一个接口可属于任意数量的多播组。多播地址的格式如下:

8 位4 位4 位112 位
11111111flgsscopgroup ID

(1)地址开头的二进制11111111标识该地址为多播地址。

(2)flgs(4 位标志位)

+-+-+-+-+
|0|R|P|T|
+-+-+-+-+
  • 最高位保留,必须初始化为 0。
  • T=0:表示永久分配的 “知名” 多播地址,由互联网数字分配机构(IANA)分配。
  • T=1:表示非永久分配的 “临时” 或动态分配的多播地址。
  • P 标志的定义和用法见 [RFC3306]。
  • R 标志的定义和用法见 [RFC3956]。

(3)scop(4 位多播作用域值)

用于限制多播组的作用域,取值如下:

描述
0保留
1接口本地作用域
2链路本地作用域
3保留
4管理本地作用域
5站点本地作用域
6-7未分配
8组织本地作用域
9-A未分配
B-D未分配
E全局作用域
F保留
  • 接口本地作用域:仅覆盖节点上的单个接口,仅用于多播环回传输。
  • 链路本地作用域:与对应单播地址的拓扑区域一致。
  • 管理本地作用域:需管理员手动配置的最小作用域(非自动基于物理连接推导)。
  • 站点本地作用域:覆盖单个站点。
  • 组织本地作用域:覆盖同一组织的多个站点。
  • 未分配值:可供管理员定义额外多播区域。

(4)group ID,在给定作用域内标识多播组(永久或临时),其结构定义见 [RFC3306]。

多播地址的作用域与组标识:

  • 永久多播地址的含义与作用域无关。例如:
    • FF01::101:与发送方同接口(同一节点)的所有 NTP 服务器。
    • FF02::101:与发送方同链路的所有 NTP 服务器。
    • FF05::101:与发送方同站点的所有 NTP 服务器。
    • FF0E::101:互联网中的所有 NTP 服务器。
  • 临时多播地址仅在给定作用域内有效。例如:
    • 某站点的临时站点本地地址FF15::101与其他站点的同地址组无关联,也与不同作用域或永久组的同 ID 组无关。

多播地址使用规则

  1. 禁止作为源地址:多播地址不得作为 IPv6 数据包的源地址,也不出现在路由报头中。
  2. 作用域转发限制:路由器不得将多播数据包转发至超过目的地址 scop 字段指定的作用域。
  3. 保留值处理:
    • 节点不得向 scop=0 的多播地址发送数据包,若接收此类数据包需静默丢弃。
    • 节点应避免向 scop=F 的多播地址发送数据包,若发送或接收,按全局(scop=E)多播地址处理。
2.7.1. 预定义多播地址

以下为预定义的知名多播地址,本节定义的组 ID(group ID)仅适用于显式作用域值。禁止将这些组 ID 与其他作用域值结合使用(且 T 标志位必须为 0)。

(1)保留多播地址:

FF00:0:0:0:0:0:0:0  
FF01:0:0:0:0:0:0:0  
FF02:0:0:0:0:0:0:0  
FF03:0:0:0:0:0:0:0  
FF04:0:0:0:0:0:0:0  
FF05:0:0:0:0:0:0:0  
FF06:0:0:0:0:0:0:0  
FF07:0:0:0:0:0:0:0  
FF08:0:0:0:0:0:0:0  
FF09:0:0:0:0:0:0:0  
FF0A:0:0:0:0:0:0:0  
FF0B:0:0:0:0:0:0:0  
FF0C:0:0:0:0:0:0:0  
FF0D:0:0:0:0:0:0:0  
FF0E:0:0:0:0:0:0:0  
FF0F:0:0:0:0:0:0:0  

上述多播地址为保留地址,不得分配给任何多播组。

(2)所有节点地址

FF01:0:0:0:0:0:0:1  (作用域1:接口本地)  
FF02:0:0:0:0:0:0:1  (作用域2:链路本地)  

上述地址标识对应作用域内的所有 IPv6 节点。

(3)所有路由器地址

FF01:0:0:0:0:0:0:2  (作用域1:接口本地)  
FF02:0:0:0:0:0:0:2  (作用域2:链路本地)  
FF05:0:0:0:0:0:0:2  (作用域5:站点本地)  

上述地址标识对应作用域内的所有 IPv6 路由器。

(4)被请求节点地址

格式:FF02:0:0:0:0:1:FFXX:XXXX

生成规则:被请求节点多播地址由节点的单播 / 任播地址计算得到:取地址的低 24 位,附加到前缀FF02:0:0:0:0:1:FF00::/104后,范围为FF02:0:0:0:0:1:FF00:0000FF02:0:0:0:0:1:FFFF:FFFF

示例:IPv6 地址4037::01:800:200E:8C6C对应的被请求节点地址为FF02::1:FF0E:8C6C

特性:仅高位不同的 IPv6 地址(如因不同聚合前缀导致)会映射到同一被请求节点地址,从而减少节点需加入的多播组数量。

实现要求:节点必须为其接口配置的所有单播 / 任播地址(手动 / 自动配置)计算并加入(在对应接口上)关联的被请求节点多播地址。

2.8. 节点的必备地址

主机必须识别以下标识自身的地址

  • 每个接口的链路本地地址(必备)。
  • 为节点接口配置的所有额外单播 / 任播地址(手动或自动配置)。
  • 回环地址(::1)
  • 2.7.1 节定义的所有节点多播地址(如链路本地作用域的 FF02::1)。
  • 每个单播 / 任播地址对应的被请求节点多播地址(如 FF02::1:FFXX:XXXX)。
  • 节点所属的所有其他多播组的地址。

路由器必备地址,路由器除需识别主机的所有必备地址外,还需额外识别:

  • 所有配置为路由器接口的子网路由器任播地址(格式为子网前缀 + 全 0 接口 ID)。
  • 路由器已配置的所有其他任播地址。
  • 2.7.1 节定义的所有路由器多播地址(如链路本地作用域的 FF02::2)。
地址类型主机需求路由器额外需求
链路本地地址每个接口必须配置同上
任播地址可选(若配置)必须支持子网路由器任播地址
多播地址加入所有节点组和被请求节点组额外加入所有路由器组
回环地址必须识别同上

示例场景

  • 主机启动时自动生成链路本地地址(如 FE80::/10),并加入 FF02::1 多播组以接收链路内广播消息。
  • 路由器在接口配置子网前缀 2001:db8:1234::/64 后,自动生成任播地址 2001:db8:1234::/64(接口 ID 全 0),并响应发往该地址的数据包。
3. 安全考虑

IPv6 寻址相关文档对互联网基础设施安全没有直接影响。IPv6 数据包的认证机制在 [AUTH] 中定义。

4. IANA 注意事项

IPv4 兼容的 IPv6 地址,已被本文档弃用。IANA 应继续将包含这些地址的地址块在:http://www.iana.org/assignments/ipv6-address-space 中标记为 “IETF 保留”,且不得重新分配作其他用途。例如:

  • 0000::/8:IETF 保留(参考 [RFC3513])。

IANA 为该地址块添加了以下注释和链接:

  • [5] 0000::/96 此前被定义为 “IPv4 兼容 IPv6 地址” 前缀,该定义已被 RFC 4291 弃用。

IANA 已相应更新 IANA 注册表中 IPv6 地址架构的引用信息。

相关文章:

  • 计算机求职提前批/求职什么时候投递合适
  • 从0开始学习R语言--Day24--稀疏建模
  • TopNet:基于Transformer的高效点云几何压缩网络模型详解
  • 基于C#部署YoloV5目标检测模型
  • 【系统分析师】2010年真题:综合知识-答案及详解
  • 6月15日星期日早报简报微语报早读
  • Babylon引擎(三)
  • 基于Ultralytics的RT-DETR改进思考
  • BEV 感知算法评价指标简介
  • Appium框架下载时卡主的解决办法(ERR_TLS_CERT_ALTNAME_INVALID)
  • 基于根茎式思维深化后的提示词设计案例
  • 【精选】计算机毕业设计基于SpringBoot高校社团管理系统 社团信息维护 活动发布报名 成员审核与公告发布平台源码+论文+PPT+讲解
  • 智能土木通 - 土木工程专业知识问答系统01:项目简介
  • 4.es、kibana容器的下载安装
  • C#最佳实践:为何应减少方法参数
  • 【python】 args和kwargs区别
  • 【git】有两个远程仓库时的推送、覆盖、合并问题
  • HarmonyOS Grid 网格拖拽完全指南
  • Vue 3 路由跳转全面指南(Composition API + <script setup>)
  • 高效便捷版,多功能一键直达!
  • 兰州新区疫情最新情况/太原自动seo
  • Ext做网站/个人网站制作
  • 基于h5的企业网站建设/百度竞价排名医院事件
  • 营销型网站建设方案演讲ppt/软文代写平台
  • 网站做代练/律师网络推广
  • 做风筝网站/培训机构管理系统哪个好