本文簡要介紹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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。