IP地址

IP地址,多么熟悉啊,比如192.168.1.1就是一个IP地址,但你可能未必知道IP地址的含义,本文将分享给你一些IP地址相关的基础知识。

IP地址的结构

事实上192.168.1.1这样的IP地址是一个IPv4地址,IPv4地址实际上是由4个字节组成,回想一下一个字节(byte)多少位(bit)来着?192.168.1.1实际上是二进制11000000.10101000.00000001.00000001的十进制表达。所以IP地址的最大值也就是255.255.255.255——11111111.11111111.11111111.11111111

所以在读下去之前请记住:IP地址是由4个字节组成,IP地址是二进制的。

network id和host

IP地址包含了两个信息:

  • network id,当前主机所属的二层网络
  • host,当前主机在二层网络中的ID

但是我们怎么从IP地址的4个字节中提取这两个信息呢?这就需要子网掩码(Subnet Mask)了。

子网掩码和IP地址一样也是4个字节,区别在于它的二进制形式中的1必须从左到右且连续,比如255.255.255.0的二进制是11111111.11111111.11111111.0254.255.255.0不是一个合法的子网掩码,因为它的二进制是11111110.11111111.11111111.0,1没有连续。1.255.255.0也不是一个合法的子网掩码,因为它的二进制是00000001.11111111.11111111.0,1不是从最左侧开始的。

我们在来看192.168.1.1的network id和host,它的子网掩码是255.255.255.0,为了简便起见,我们用子网掩码中的1的数量来表示:192.168.1.1/24

1
2
3
4
ip          : 11000000.10101000.00000001.00000001 (192.168.1.1)
subnet mask : 11111111.11111111.11111111.00000000 (255.255.255.0)
network id  : 11000000.10101000.00000001.00000000 (192.168.1.0)
host        : 00000000.00000000.00000000.00000001 (1)

我们把子网掩码和IP地址Bit AND一下,得到network id=192.168.1.0 ,把子网掩码取反码和IP地址Bit AND一下,得到host=1

那我们知道network id有什么用呢?当我们试图做网络通信的时候,操作系统会计算出源IP的network id和目标IP的network id,如果两者一样就说明在同一个二层网络,如果不一样则说明不在同一个二层网络,那么数据就会发送给路由器处理(回忆网络模型及网络设备的内容)。

IP地址类型

IP地址是分类型的,有:

  • A类:1-126.xxx.xxx.xxx / 8
  • B类:128-191.xxx.xxx.xxx / 16
  • C类:192-223.xxx.xxx.xxx / 24
  • D类:224-239.xxx.xxx.xxx
  • E类:240-255.xxx.xxx.xxx
  • loopback:127.xxx.xxx.xxx

不过我们一般都只会接触到A、B、C三类加一个loopback地址。

私有IP地址

在A、B、C三类IP地址中有部分地址保留为私有地址,Internet上的网络设备均不会接受、发送或者转发属于私有地址的源IP地址或目的IP地址。私有IP地址的范围是:

  • A类:10.0.0.0 ~ 10.255.255.255
  • B类:172.16.0.0 ~ 172.31.255.255
  • C类:192.168.0.0 ~ 192.168.255.255(这个很熟悉吧)

参考资料

版权

评论