由二级(网络号+主机号)进化为三级(网络号+子网号+主机号)后,因为在“三级”中必须采用一种方式表示出哪些bit表示子网号,于是子网掩码这个概念就产生了。值得注意的是,子网掩码把“网络号”这部分也包含进去了。
那么网络号对应的子网掩码部分对应哪些呢?这个就要看IP段的首个字节的值了。比如首个字节是193,那么就知道是C类。
所以一看到子网掩码,首先看看IP段是A/B/C/D/E哪个类,然后刨去类占用的子网掩码bit,剩下的bit就是子网号对应的子网掩码bit。
子网掩码对应的子网号的那些bit是连续的(谢希仁说推荐弄成连续,就是说不连续理论上也是可以的)。
网络地址(谢希仁书中的叫法)是啥意思?和网段是一个意思?现在理解是一个意思。
谢希仁 书说道:“......只要把子网掩码和IP地址进行诸位的“与”运算,就可以得出网络地址来.....”。
这样就可以判断两个IP地址自否来自同一个网络地址(网段)了。
所以LWIP有个宏定义是
/**
* Determine if two address are on the same network.
*
* @arg addr1 IP address 1
* @arg addr2 IP address 2
* @arg mask network identifier mask
* @return !0 if the network identifiers of both address match
*/
#define ip_addr_netcmp(addr1, addr2, mask) (((addr1)->addr & \
(mask)->addr) == \
((addr2)->addr & \
(mask)->addr))
所以说最重要的是知道“ IP 子网掩码 网段”这三个词的概念以及三者之间的关系。