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


Rust Ipv6Addr.is_unicast_link_local用法及代碼示例


本文簡要介紹rust語言中 std::net::Ipv6Addr.is_unicast_link_local 的用法。

用法

如果地址是具有 link-local 範圍的單播地址(如 RFC 4291 中所定義),則返回 true

如果單播地址具有前綴 fe80::/10 ,則該地址具有 link-local 範圍(根據 RFC 4291 section 2.4 )。請注意,這包含的地址比 RFC 4291 section 2.5.6 中定義的地址更多,RFC 4291 section 2.5.6 將“Link-Local IPv6 單播地址”說明為具有以下更嚴格的格式:

| 10 bits  |         54 bits         |          64 bits           |
+----------+-------------------------+----------------------------+
|1111111010|           0             |       interface ID         |
+----------+-------------------------+----------------------------+

因此,雖然目前應用程序將遇到的唯一具有 link-local 範圍的地址都在 fe80::/64 中,但隨著新標準的發布,這可能會在未來發生變化。可以分配fe80::/10 中的更多地址,這些地址將具有link-local 範圍。

另請注意,雖然 RFC 4291 section 2.5.3 提到 loopback address ( ::1 )“它被視為具有 Link-Local 範圍”,但這並不意味著環回地址實際上具有 link-local 範圍,並且此方法將返回false 就可以了。

例子

#![feature(ip)]

use std::net::Ipv6Addr;

// The loopback address (`::1`) does not actually have link-local scope.
assert_eq!(Ipv6Addr::LOCALHOST.is_unicast_link_local(), false);

// Only addresses in `fe80::/10` have link-local scope.
assert_eq!(Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0, 0).is_unicast_link_local(), false);
assert_eq!(Ipv6Addr::new(0xfe80, 0, 0, 0, 0, 0, 0, 0).is_unicast_link_local(), true);

// Addresses outside the stricter `fe80::/64` also have link-local scope.
assert_eq!(Ipv6Addr::new(0xfe80, 0, 0, 1, 0, 0, 0, 0).is_unicast_link_local(), true);
assert_eq!(Ipv6Addr::new(0xfe81, 0, 0, 0, 0, 0, 0, 0).is_unicast_link_local(), true);

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::net::Ipv6Addr.is_unicast_link_local。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。