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


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。