如果我理解正确的话,要将网络扩展到 254 台主机以上,基本上有两种选择:
- 我可以用第二网络,具有不同的网络前缀,并通过路由器连接两个网络(或者这已经需要两个路由器了?)
- 我可以重新屏蔽网络以使用允许更多网络地址而无需路由器的网络前缀,即
255.255.254.0
(512 个地址)或255.255.252.0
(1024 个地址)
好吧,到目前为止的理论就是这样。我对此有一些疑问:
子网掩码
如果我选择一个子网掩码,255.255.252.0
那么我将获得一个支持 1024 个地址(当然减去广播/网络名称地址)的网络,而无需路由,对吗?
我如何识别实际的网络前缀?我的意思是,对于 的子网掩码255.255.255.0
,很明显网络范围从x.y.z.1
到x.y.z.254
,我可以完全自由地选择x
,y
和z
。
对于网络来说,这个范围是什么样的255.255.252.0
?
从子网掩码的二进制表示中11111111.1111111.11111100.00000000
我可以得出,有效地址范围是从x.y.252.1
到x.y.255.254
- 对吗?
使用此子网掩码,我对地址的倒数第二个数字有任何影响吗?我的意思是,我也可以设置从x.y.0.1
到的范围吗?(x.y.3.254
由于第一个答案而固定的数字)
(如果是:使用x.y.1.1
将x.y.4.254
不是我认为可以工作,因为它是另一个网络.4.
的一部分,而不是,对吗?)/22
.0.
.1.
.2.
路由
如果我使用 4 个路由器连接四个/24
网络,它们仍然需要有所不同Network-Prefixes
,对吗?
最后
那么,扩展子网掩码和使用路由器连接多个网络之间的实际区别在哪里?(除了物理布局之外)性能方面是否存在差异,或者有其他限制?
单个 DHCP(Windows Server)是否/22
也能为网络提供地址?有什么缺点吗?
答案1
我如何识别实际的网络前缀?我的意思是,对于子网掩码 255.255.255.0,很明显网络范围从 xyz1 到 xyz254,我可以完全自由地选择 x、y 和 z。
与“常规”掩码相同 - 使用按位运算(&
是AND,|
是OR,~
是NOT):
网络 = 地址 & 掩码(网络地址中掩码中所有0位必须为0)
子网广播 = 地址 | ~掩码(广播地址中掩码中所有0位必须为1)
主机地址 = [网络+1 ..广播-1]
从子网掩码 11111111.1111111.111111100.00000000 的二进制表示中我得出有效地址范围是从 xy252.1 到 xy255.254 - 对吗?
使用此子网掩码,我对地址的倒数第二个数字有任何影响吗?我的意思是,我也可以设置从 xy1.1 到 xy4.254 的范围吗?
1
基本上,您可以选择掩码中对应的所有位。因此,在您的示例中,您可以选择任意是只要最后两位(和所有吨位)为零,这将是开始地址。这将为您提供 64 个具有相同地址的不同子网x.y
:192.168.0.0/22、192.168.4.0/22、192.168.8.0/22 等(以 .3.255、.7.255、.15.255 等结尾)。
您说得对,xy2.1 和 xy5.254 将属于不同的子网;分别是 xy0.0/22 和 xy4.0/22。(但两者都属于同一个 xy0.0/21。)
那么,扩展子网掩码和使用路由器连接多个网络之间的实际区别在哪里?(除了物理布局之外)性能方面是否存在差异,或者有其他限制?
如果我使用 4 个路由器连接 4 个 /24 网络,它们仍然需要有不同的网络前缀,对吗?
是的。您不能在具有相同前缀的两个网络之间进行路由。
单个 DHCP(Windows Server)也可以为 /22 网络提供地址吗?
是的。所有现代 DHCP 服务器都应允许您配置任意前缀长度。
或 Python等工具ipcalc
可能对生成子网列表有用:
>>> import ipaddress
>>> sub = ipaddress.IPv4Network("192.168.0.0/22")
>>> sub.network_address
IPv4Address('192.168.0.0')
>>> sub.broadcast_address
IPv4Address('192.168.3.255')
>>> sup = ipaddress.IPv4Network("192.168.0.0/16")
>>> list(sup.subnets(22-16))
[IPv4Network('192.168.0.0/22'), IPv4Network('192.168.4.0/22'),
IPv4Network('192.168.8.0/22'), IPv4Network('192.168.16.0/22'),
...]
>>> for x in sup.subnets(22-16):
>>> print(x)
192.168.0.0/22
192.168.4.0/22
192.168.8.0/22
...