3

我正在编写一个套接字服务器,它需要能够通过 IP 允许/限制,并且我正在尝试使其与 IPv4 和 IPv6 兼容。

我非常了解 IPv4 原则,例如我可以允许 192.168.0.0/255.255.255.0 满足所有 192.168.0.* 地址,基于我的代码http://blogs.msdn.com/b/knom/archive /2008/12/31/ip-address-calculations-with-c-subnetmasks-networks.aspx

但是,这如何与 IPv6 一起使用?即我如何使用该协议处理范围?

4

1 回答 1

3

按照惯例,IPv6 不像 IPv4 那样使用子网掩码格式。但是,您没有理由仍然无法以这种方式对其进行可视化。

IPv6 中 /64 的等效“子网掩码”为ffff:ffff:ffff:fffff:0:0:0:0. 只是不要尝试将其引用给任何 IPv6 用户,因为没有人会知道您的意思。并且不要尝试将其粘贴到任何 IPv6 配置中——人们使用 /64、/48、/32 等前缀(任何小于 /64 的前缀,例如 /96,都很少使用,并且正式不推荐用于 LAN环境。)

这是我刚刚写的一个方便的 ASCII 艺术图表,以帮助您理解 IPv6 前缀:

2001:db8:1000:2000:3000:4000:5000:6000/32
<--net--><-------------------host---->

2001:db8:1000:2000:3000:4000:5000:6000/48
<--network--> <--------------host---->

2001:db8:1000:2000:3000:4000:5000:6000/64
<--network-------> <---------host---->

2001:db8:1000:2000:3000:4000:5000:6000/96
<--network------------> <----host---->

希望以上内容与您可视化 IPv4 子网的方式相同(老实说,几乎完全相同)。事实上,计算 IPv6 在您的头脑中稍微容易一些,因为 IPv6 使用十六进制,所以如果您坚持使用可被 4 整除的前缀,您就可以在 nybble(即数字)边界处划分子网——这是 IPv4 无法做到的!

我承认我的答案中没有任何 C# 特定信息。尽管如此,它应该让您找到正确的方向:指定前缀长度。

于 2011-01-22T12:57:06.467 回答