![81a1a02054762d2bfe510b3a89bbb86d.png](https://i-blog.csdnimg.cn/blog_migrate/ff1bfdde61b781af0ce46c845a4ebc33.jpeg)
IP 地址
OSI第三层是网络层,第二层的作用是让局域网中的机器能够通信,第三层则让网络之间的机器能够通信,使我们可以从一个网络向另一个网络发送信息。
第二层中有 MAC 地址来标识不同的机器,那么第三层中就有 IP 地址来标识不同的网络,在 CMD 里面使用 tracert(windows环境)+ 主机名 可以查看本地主机连接到另一个网络的跟踪路径。
![bdf32dcd7d1504719ff089bd33baf2f5.png](https://i-blog.csdnimg.cn/blog_migrate/22b4d582901cf367fe2e3e10b6bf4572.png)
比如我这里使用 tracert http://www.zhihu.com,显示从我电脑所在的网络到达知乎服务器主机所在的网络,需要经过很多不同的网络,上面显示的每一行,对应在到达目标主机所在网络之前遇到的每一个网络。
IP 地址用以点分隔的 4 个字节来表示,比如 192.168.0.1 。每个字节的数字是用十进制来表示,一个字节是 8 个二进制位,可以取值 2 ^ 8 = 256 个,因此一个字节的取值范围是 0 到 255。
那么最小的 IP 地址是当所有二进制位均为 0 时: 0.0.0.0,最大的 IP 地址是当所有二进制位均为 1 时:255.255.255.255。(二进制的 00000000 转换为十进制为 0,二进制的 11111111 转换为十进制为255 )
IP地址实际上包含了两个部分,一部分是网络地址,另一部分是主机地址,IP 地址和子网掩码密不可分,子网掩码中定义了此 IP 地址的网络地址和主机地址。
子网掩码
子网掩码与 IP 地址的格式一样,4个字节32位
![21cf70047b1ce46c351990dec5b4132c.png](https://i-blog.csdnimg.cn/blog_migrate/f95b4109f1d340cf255041ec9c4fc4ed.png)
子网掩码中为1的位必须在左边,为0的必须在右边,不能混合使用0和1。所以子网掩码中的每一个字节只能取以下几个值
00000000 —> 0
10000000 —> 128
11000000 —> 192
11100000 —> 224
11110000 —> 240
11111000 —> 248
11111100 —> 252
11111110 —> 254
11111111 —> 255
子网掩码中为1的二进制位代表 IP 地址中的网络地址,为0的二进制位代表IP地址中的主机地址,
比如上面显示我这台机器的IP地址是192.168.1.142,子网掩码是255.255.255.0,以二进制的形式写出来就是
192.168.1.142 —> 11000000.10101000.00000001.10001110
255.255.255.0 —> 11111111.11111111.11111111.00000000
因此,我这个IP地址的网络地址是192.168.1(对应二进制为11000000.10101000.00000001),主机地址是142(对应二进制为10001110)
如果分割刚好发生在一个字节中间,就只能以二进制的形式表示,不能再转回十进制了。比如IP地址192.168.1.142和子网掩码255.255.224.0
192.168.1.142 —> 11000000.10101000.00000001.10001110
255.255.224.0 —> 11111111.11111111.11100000.00000000
分割刚好在第三个字节中间,这个IP地址的网络地址为11000000.10101000.000,主机地址为00001.10001110
IP 地址范围的计算
属于同一网络中的所有主机,它们的网络地址都是相同的,如果两台主机的IP地址中的网络地址不同,则它们不属于同一网络。
因此,将主机地址位设置为不同的0或者1,就可以取到不同的IP值,所以网络中的第一个IP地址是主机地址所有位都为0的,网络中的最后一个IP地址是主机地址所有位都为1的。比如我这里IP地址192.168.1.142子网掩码255.255.255.0的取值范围为
11000000.10101000.00000001.00000000—>192.168.1.0
11000000.10101000.00000001.00000001—>192.168.1.1
……
11000000.10101000.00000001.11111110—>192.168.1.254
11000000.10101000.00000001.11111111—>192.168.1.255
网络中的地址数
要找到网络中的地址数量,只需知道主机地址的二进制位数即可,如果主机地址位数有1位,那么就能取值 2 ^ 1 = 2 个,如果主机地址位数有2位,那么就能取值 2 ^ 2 = 4 个……
而IP地址中的主机地址位数又由子网掩码中0的个数决定,所以网络中可用的IP地址数 = 2 ^ 子网掩码中0的个数。
比如我这里相关联的192.168.1.142 和 255.255.255.0,子网掩码转换为二进制是,11111111.11111111.11111111.00000000
因此子网掩码中有8个0,可用的IP地址数为 2 ^ 8 = 256,但是IP地址范围中的第一个地址是这个网络的地址本身,最后一个地址为广播地址,这两个地址不能为某个主机所用,因此我这里实际可用的IP地址数为256-2=254
上一篇:OSI模型第二层数据链路层
下一篇:OSI模型第三层网络层中的路由