IP地址(Internet Protocol Address)是用于标识网络中的设备的唯一地址。IP地址有两种主要类型:IPv4和IPv6。
IPv4地址
一个IPv4地址是32位的二进制数,通常表示为四个十进制数,每个数在0到255之间,用点分隔,如:192.168.1.1。IPv4地址可以分为不同的分类、子网掩码、网络位和主机位。
IP地址分类
IPv4地址根据其前几位的值分为不同的类别:
- Class A:
0.0.0.0
到127.255.255.255
- 网络位:8位
- 主机位:24位
- 子网掩码:255.0.0.0
- 网络数:128个
- 主机数:每个网络16777214(2^24 – 2)
- Class B:
128.0.0.0
到191.255.255.255
- 网络位:16位
- 主机位:16位
- 子网掩码:255.255.0.0
- 网络数:16384个
- 主机数:每个网络65534(2^16 – 2)
- Class C:
192.0.0.0
到223.255.255.255
- 网络位:24位
- 主机位:8位
- 子网掩码:255.255.255.0
- 网络数:2097152个
- 主机数:每个网络254(2^8 – 2)
- Class D:
224.0.0.0
到239.255.255.255
- 用于组播
- Class E:
240.0.0.0
到255.255.255.255
- 保留用于实验
子网掩码
子网掩码用于区分IP地址的网络部分和主机部分。子网掩码也是一个32位的二进制数,与IP地址一样,通常表示为四个十进制数。
例如,子网掩码255.255.255.0表示前24位是网络位,后8位是主机位。
计算网络位和主机位
假设你有一个IP地址192.168.1.10和子网掩码255.255.255.0:
- 将IP地址和子网掩码转换为二进制形式:
IP地址: 192.168.1.10 -> 11000000.10101000.00000001.00001010
子网掩码: 255.255.255.0 -> 11111111.11111111.11111111.00000000
- 网络位是IP地址与子网掩码按位与的结果:
网络位: 11000000.10101000.00000001.00000000 -> 192.168.1.0
- 主机位是IP地址的剩余部分:
主机位: 00000000.00000000.00000000.00001010 -> 10
子网划分
子网划分是将一个大网络划分为多个小子网。假设你有一个Class C网络192.168.1.0/24,并希望将其划分为4个子网。
- 计算每个子网需要的位数:
- 需要划分4个子网,需要2位(2^2 = 4)。
- 原来的网络位是24位,加上2位子网位,共26位。
- 子网掩码变为255.255.255.192(前26位为1,其余为0)。
- 划分后的子网网络地址:
- 192.168.1.0/26
- 192.168.1.64/26
- 192.168.1.128/26
- 192.168.1.192/26
- 每个子网的主机范围(去掉网络地址和广播地址):
- 192.168.1.1 到 192.168.1.62
- 192.168.1.65 到 192.168.1.126
- 192.168.1.129 到 192.168.1.190
- 192.168.1.193 到 192.168.1.254
用Python计算子网划分
Python脚本来计算子网划分:
import ipaddress
def subnet_calculator(network, new_prefix):
network = ipaddress.IPv4Network(network)
subnets = list(network.subnets(new_prefix=new_prefix))
return subnets
def main():
network = "192.168.1.0/24"
new_prefix = 26
subnets = subnet_calculator(network, new_prefix)
for subnet in subnets:
print(f"子网: {subnet}")
print(f"网络地址: {subnet.network_address}")
print(f"广播地址: {subnet.broadcast_address}")
print(f"可用主机范围: {list(subnet.hosts())}\n")
if __name__ == "__main__":
main()
这个脚本将一个/24的网络划分为/26的子网,并输出每个子网的网络地址、广播地址和可用主机范围。