C#中的IPv6地址范围

时间:2011-01-22 01:23:22

标签: c# sockets winsock ipv6 ipv4

我正在编写一个套接字服务器,它需要能够允许/限制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协同工作?即如何使用该协议处理范围?

1 个答案:

答案 0 :(得分: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#特定信息。然而,它应该让你找到正确的方向:指定前缀长度。