當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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