聊聊IPv4

发表于:2025-06-15 23:03:37

前不久在抖音上刷到讲为什么局域网电脑IP能互通的问题,非常简单的用锁的概念来描述了同一网段能互通的问题。但视频中有很多内容和实际有点出入,想在这里简单的从计算机网络的角度来聊一聊这个问题。 原本想从网卡开始聊起,但写着写着,觉着这个内容太多了,又转到单纯的IPv4中来。

在IPv4网络中,正常情况下,只有在同一个网段的计算机才能直接进行通信,若不在同一个网段内,则需要使用其它的技术才能进行通信。

通常在说一个IP地址的时候,通常包含了一个隐藏条件:子网掩码。通过子网掩码和IP地址,一起来确定两个IP是否能直接通信。

IPv4地址结构与表示

地址格式

IP地址的长度为4字节,用点分十进制进行表示,如:192.168.0.1。所以一般在数据库中存储IP地址的时候,我会使用一个uint的数据类型来进行存储。

IP地址由两部分组成:网络部分和主机部分。网络部分用于标示所属的网络,只有相同的网络才能直接通信。主机部分标示同一个网络内的具体设备。

子网掩码

前面说IP地址是由4字节组成,其中又分成了网络和主机两个部分,而子网掩码就是用来区分出网络和主机部分。

子网掩码从左开始,用连续的二进制1来标识网络位,用连续的二进制0来标识主机位。子网掩码的长度也是4字节,如:255.255.255.0,表示网络位的长度是24位(3字节),主机位长度是8位(1字节)。

同时,很多时候也使用CIDR的方式来简化子网的描述。如:192.168.0.1/24,表示子长网中网络的长度是24位(3字节)。

网络计算

如果只给出一个IP地址,是没有办法确定两个IP是不是在同一个网络中,所以还必须给出子网掩码。例如在Windows的网络设置中,就必须填写IP地址和子网掩码。

Windows中的IP设置

给定了一个IP地址和子网掩码,就能够计算出网络地址。如:192.168.0.1/255.255.255.0,把IP地址的每个位与子网掩码的每个位进行&运算(逻辑与运行),这里的运算结果是:192.168.0.0,如果再给出别一个IP地址192.168.0.250/255.255.255.0,计算出来的网络号仍然是192.168.0.0,所以这两个地址能够互相通信。

如果另一个地址是192.168.0.250/255.255.255.128,则计算出来的网络号是192.168.0.128,那么这两个地址就能够互相通信。

那如果是下面的两个地址还能互相通信吗?

  • 192.168.0.1/24
  • 192.168.0.9/25

这个问题就大家自己求证吧!!

同时,网络地址是不能用来表示IP地址的,192.168.0.1/24的可用IP地址是从192.168.0.1开始的。

在IP中,主机位全是二进制1的地址就是网络地址。

广播地址

前面提到过网络地址,在IPv4中,还有另一个特殊的地址:广播地址。向广播地址发送数据,能被网络中的每一个主机接收到。

在IP中,主机位全是二进制1的地址就是广播地址。

广播地址的实际应用

远程开机

当你的主板支持远程开机的时候,就可以通过其它机器向网络中的广播地址发送开机魔术包进行开机。开机魔术包会通过广播地址发送到每一台机器的网卡上。

DHCP

当电脑刚开机的时候,如果配置了自动获取IP地址,这个时候,就会通过DHCP客户端,以广播形式发送DHCP Discover报文,源IP为0.0.0.0,目标IP为255.255.255.255,携带自身MAC地址。收到Discover后,DHCP服务器从地址池选取一个可用IP,通过DHCP Offer报文响应(广播或单播)。

上面的255.255.255.255就是IPv4最大的广播地址。