UDP广播地址的计算

 

winsock.h和winsock2.h中都定义了几个特殊的地址:
#define INADDR_ANY 0x00000000
#define INADDR_LOOPBACK 0x7F000001
#define INADDR_BROADCAST 0xFFFFFFFF
#define INADDR_NONE 0xFFFFFFFF

别看到BROADCAST这个词就以为它是广播地址了。广播地址是由IP地址和子网掩码(两者都是4字节)计算出来的。子网掩码的二进制形式是高N位1和低(32-N)位0。IP地址与子网掩码进行按位与操作后得到网络号,网络号相同的IP地址认为在同一网段。
比如对于子网掩码255.255.255.0, 192.168.1.2和192.168.1.3属于同一网段,他们的网络号是192.168.1.0。而他们和192.168.0.4就不属于同一网段,因为后者的网络号为192.168.0.0。但是对于子网掩码255.255.254.0,这三者属于同一网段,他们的网络号为192.168.0.0。
子网掩码的所有位取反后,与网络号进行同或操作,就是广播地址了。所以广播地址B与IP地址I,子网掩码M的关系为:
B = (I & M)|~M;

posted @ 2008-11-09 16:17  地质灾害  阅读(977)  评论(0编辑  收藏  举报