本文简要介绍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 Ipv6Addr.is_multicast用法及代码示例
- Rust Ipv6Addr.is_documentation用法及代码示例
- Rust Ipv6Addr.is_unspecified用法及代码示例
- Rust Ipv6Addr.octets用法及代码示例
- Rust Ipv6Addr.multicast_scope用法及代码示例
- Rust Ipv6Addr.is_unicast_link_local用法及代码示例
- Rust Ipv6Addr.to_ipv4用法及代码示例
- Rust Ipv6Addr.to_canonical用法及代码示例
- Rust Ipv6Addr.is_unique_local用法及代码示例
- Rust Ipv6Addr.is_benchmarking用法及代码示例
- Rust Ipv6Addr.is_loopback用法及代码示例
- Rust Ipv6Addr.new用法及代码示例
- Rust Ipv6Addr.is_unicast_global用法及代码示例
- Rust Ipv6Addr.to_ipv4_mapped用法及代码示例
- Rust Ipv6Addr.is_global用法及代码示例
- Rust Ipv6Addr.is_unicast用法及代码示例
- Rust Ipv6Addr.segments用法及代码示例
- Rust Ipv6MulticastScope用法及代码示例
- Rust Ipv4Addr.is_global用法及代码示例
- Rust Ipv4Addr.new用法及代码示例
- Rust Ipv4Addr.is_link_local用法及代码示例
- Rust Ipv4Addr.is_loopback用法及代码示例
- Rust Ipv4Addr.is_private用法及代码示例
- Rust Ipv4Addr用法及代码示例
- Rust Ipv4Addr.to_ipv6_compatible用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 Struct std::net::Ipv6Addr。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。