最近在做项目中需要做网络唤醒的功能,使用有线网口接收报文,解析报文再唤醒其他的设备,涉及到IPv4的网络地址,子网、子网掩码、Server等知识,因此做个简单的总结,记录一下:
IP地址的组成
IPv4协议的地址是由4部分的数字组成,每部分的数字对应着8位二进制数字,如192.168.1.1
转换成二进制表示为:11000000. 1010 1000. 0000 0001. 0000 0001
IP地址是由网络号和主机号组成的
IPv4按照网络号和主机号长度分为五大类,分别是A、B、C、D、E类,我们常用的都是以C类地址划分的,分类示意图如下所示:
注:只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号。
以A类地址举例,由于第一位固定为0,因此其网络地址范围为:
0000 0000. 0000 0000.0000 0000. 0000 0000 ~ 01111111. 1111 1111. 1111 1111. 1111 1111
转换成10进制表示:0.0.0.0 ~ 127.255.255.255
以此类推,可以计算出其他四类地址的网络地址范围如下图所示:
网络地址和广播地址
我们用一个C类地址举例,假设我电脑现在从路由器动态分配IPv4地址是:192.168.14.4,那么其对应的网络地址为:192.168.14.0,如果一个A类地址是125.12.13.5,则其网络地址为:125.0.0.0
由此可以看出,网络地址的主机号全部为0,代表着整个网络。
广播地址则与网络地址相反,网络地址的主机号全部为1,当向某个网络的广播地址发送消息时,该网络内的所有主机都能收到该广播消息。
A、B、C类私有地址
私有地址也叫专用地址,它们不会在全球使用,只具有本地意义。换句话说去理解IP地址的唯一性,也就是在局域网的范畴内。
A类私有地址:10.0.0.0/8, 范围是:10.0.0.0~10.255.255.255
B类私有地址:172.16.0.0/12, 范围是:172.16.0.0~172.31.255.255
C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255
子网掩码
随着互联网的不断发展,IPv4地址的资源越发的紧缺,为了在网络分段情况下有效地利用IP地址,通过对主机号的高位部分取作为子网号,从通常的网络位界限中扩展或压缩子网掩码,用来创建某类地址的更多子网。但创建更多的子网时,在每个子网上的可用主机地址数目会比原先减少。
子网掩码是标志两个IP地址是否同属于一个子网的,也是32位二进制地址,其每一个为1代表该位是网络位,为0代表主机位。它和IP地址一样也是使用点式十进制来表示的。如果两个IP地址在子网掩码的按位与的计算下所得结果相同,即表明它们共属于同一子网中。
说的通俗一点就是子网掩码表示了网络地址的多少位为网络号,剩下的就是主机号,而标志成网络号的子网掩码位以1表示,举个例子吧:
我电脑的IPv4地址:192.168.14.4,子网掩码是:255.255.255.0
IPv4地址二进制: 11000000. 1010 1000. 0000 1110.0000 0100
子网掩码二进制:1111 1111. 1111 1111. 1111 1111. 0000 0000
蓝色框起来的部分即表示了网络号,可以看出是24位的网络号,因此网络地址可以书写成:192.168.14.4/24,表示了子网掩码的高24位为1,其余为0。
上述是以C类地址举例的,再举一个例子,192.168.14.4/26的网络号和主机号分别是多少呢?
IPv4地址二进制: 11000000. 1010 1000. 0000 1110. 0000 0100
子网掩码二进制:1111 1111. 1111 1111. 1111 1111. 1100 0000
蓝色框起来的部分表示网络号,剩下的表示主机号。
到这里可以明显看出网络号越多,对应的主机号就越少,反之也是一样,那这有什么用呢?
比如说一个村只有10户人家,我们默认给他一个C类的地址分配,可以有254个可以使用的IPv4地址(去掉网络地址和广播地址),那么这多出来的244个IPv4地址就白白浪费了。再比如说,另一个村有260户人家,我们默认分配就最少需要两个C类地址才能让每家都用上网络,那么剩下的也会造成浪费,因此子网掩码的价值就体现出来了。我们可以动态合理的分配网络,减少资源的浪费。只有十户的村就可以分配:192.168.14.0/28,剩余的四位做主机号,前28位做网络号,那么就只会分配15个主机给到这个村,减少资源的浪费。
至此,就足够在项目中开发使用啦,也能对网络的概念有个大概的了解。
了解基础的网络知识后,只能说前辈真是伟大。