当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Ipv6Addr用法及代码示例


本文简要介绍rust语言中 Struct std::net::Ipv6Addr 的用法。

用法

pub struct Ipv6Addr { /* fields omitted */ }

IPv6 地址。

IPv6 地址在 IETF RFC 4291 中定义为 128 位整数。它们通常表示为 8 个 16 位段。

Ipv6Addr 结构的大小可能因目标操作系统而异。

嵌入 IPv4 地址

有关包含 IPv4 和 IPv6 地址的类型,请参阅 IpAddr

为了帮助从 IPv4 过渡到 IPv6,定义了两种嵌入 IPv4 地址的 IPv6 地址:IPv4 兼容地址和 IPv4 映射地址。这些与 IPv4 兼容的地址已被正式弃用。

除了相关标准规定的内容外,本实施方式没有为这两种类型的地址分配任何特殊含义。这意味着像 ::ffff:127.0.0.1 这样的地址虽然代表 IPv4 环回地址,但它本身并不是 IPv6 环回地址;只有::1 是。要处理这些所谓的“IPv4-in-IPv6” 地址,必须首先将它们转换为其规范的 IPv4 地址。

与 IPv4 兼容的 IPv6 地址

IPv4 兼容的 IPv6 地址在 IETF RFC 4291 Section 2.5.5.1 中定义,并已被正式弃用。 RFC对“IPv4兼容的IPv6地址”的格式说明如下:

|                80 bits               | 16 |      32 bits        |
+--------------------------------------+--------------------------+
|0000..............................0000|0000|    IPv4 address     |
+--------------------------------------+----+---------------------+

所以 ::a.b.c.d 将是一个与 IPv4 兼容的 IPv6 地址,代表 IPv4 地址 a.b.c.d

要将 IPv4 地址转换为与 IPv4 兼容的 IPv6 地址,请使用 Ipv4Addr::to_ipv6_compatible 。使用 Ipv6Addr::to_ipv4 将 IPv4 兼容的 IPv6 地址转换为规范的 IPv4 地址。

IPv4 映射的 IPv6 地址

IPv4 映射的 IPv6 地址在 IETF RFC 4291 Section 2.5.5.2 中定义。 RFC对“IPv4映射的IPv6地址”的格式说明如下:

|                80 bits               | 16 |      32 bits        |
+--------------------------------------+--------------------------+
|0000..............................0000|FFFF|    IPv4 address     |
+--------------------------------------+----+---------------------+

所以 ::ffff:a.b.c.d 将是一个 IPv4 映射的 IPv6 地址,表示 IPv4 地址 a.b.c.d

要将 IPv4 地址转换为 IPv4 映射的 IPv6 地址,请使用 Ipv4Addr::to_ipv6_mapped 。使用 Ipv6Addr::to_ipv4 将 IPv4 映射的 IPv6 地址转换为规范的 IPv4 地址。

文本表示

Ipv6Addr 提供 FromStr 实现。在文本中表示 IPv6 地址的方法有很多种,但一般来说,每个段都以十六进制表示法编写,各个段之间用 : 分隔。有关更多信息,请参阅IETF RFC 5952

例子

use std::net::Ipv6Addr;

let localhost = Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1);
assert_eq!("::1".parse(), Ok(localhost));
assert_eq!(localhost.is_loopback(), true);

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Struct std::net::Ipv6Addr。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。