1、关于子网号
IP地址由网络号和主机号组成。主机号后来被分成了子网号和主机号两部分。这两部分的划分可以依据用户需要,如子网号10位,主机号6位,或者子网号8位,主机号8位,都是可以的。
这里就讨论子网号和主机号都是8位的情况。
2、子网寻址
子网对于外部路由器而言隐藏了内部网络组织。一个数据报,发往140.252.57.1,则该数据包首先发往路由器140.252.104.1,之后发往对应的子网。
下图反应了子网的组成,223.1.1.1 223.1.1.2 223.1.1.3三台主机接口和路由接口 组成了一个子网,该子网的地址是223.1.1.4(路由接口)。任何要求连接到该组网的地址都要求其地址形式为223.1.1.xxx。
与此同时,网络号+子网号 被称之为网络前缀。这里223.1.1就是网络前缀
3、子网掩码
用于区分出主机号,如图 后8位为0
4、tcp/ip inetdevice.h中的函数inet_ifa_match
addr^ifa->ifa_address两个地址异或,如果子网相同,则结果为0,&ifa->ifa_mask的意义是不考虑主机号。
!取反
那么如果两个地址是同一个子网的,那么该函数返回1.
(关于异或 a=1001 b=1010 a^b=0011)
static __inline__ bool inet_ifa_match(__be32 addr, struct in_ifaddr *ifa)
{
return !((addr^ifa->ifa_address)&ifa->ifa_mask);
}
文章参考:《计算机网络自顶向下》《TCP-IP详解卷1:协议》