
1. 从一个让人抓狂的排障现场说起上周帮一个做智能家居的朋友排查网络问题他家有三十多个智能设备最近总是随机掉线。我让他把路由器后台的DHCP地址池截图发过来一看就乐了——地址池范围是192.168.1.100到192.168.1.150只有51个可用地址而他家设备加上访客手机、平板、电脑峰值能到四十多个再加上一些设备租约到期后没有及时释放地址池直接被占满新设备连不上老设备续约失败就掉线。这个问题的根子不在路由器也不在设备而在于IP地址划分没做对。很多人觉得IP地址划分是网管才需要操心的事实际上只要你家里设备超过二十台或者你在公司里管着一个小型办公网络甚至你只是想让自己的开发环境更清爽一点都绕不开这个基本功。我写这篇东西就是想把这十几年里踩过的坑、总结出来的方法用最直白的方式讲清楚。不管你是刚接触网络的新手还是已经能配路由器但说不清子网掩码怎么回事的老手看完都能直接上手把自己的网络重新规划一遍。核心关键词就三个IP地址划分、子网掩码、CIDR。这三个词搞明白了百分之九十的地址规划问题都能自己解决。2. 先搞懂IP地址划分到底在划分什么2.1 IP地址的本质不是一串数字而是一张门牌号很多人把IP地址当成一串随机数字192.168.1.1和192.168.1.100看起来差不多实际上它们的关系就像某条街1号和某条街100号——同一条街上但门牌号不同。IP地址由两部分组成网络部分和主机部分。网络部分标识你属于哪个网络主机部分标识你是这个网络里的哪台设备。IPv4地址是32位二进制数写成十进制就是四段每段0到255。比如192.168.1.100写成二进制是11000000.10101000.00000001.01100100这32位里前面多少位是网络部分后面多少位是主机部分由子网掩码决定。子网掩码里连续的1对应网络部分连续的0对应主机部分。比如255.255.255.0写成二进制是24个1后面跟8个0所以前24位是网络部分后8位是主机部分。这就引出一个关键结论同一个子网内的设备网络部分必须完全相同。192.168.1.100和192.168.1.200前24位都是192.168.1所以它们在同一个子网里可以直接通信。而192.168.1.100和192.168.2.100前24位不同它们就不在同一个子网通信必须经过路由器。2.2 为什么不能所有设备都塞进一个大网段有人会问既然同一个子网内通信这么方便那我干脆把所有设备都放在192.168.0.0/16这个大网段里不就行了理论上可以一个/16的网段有65534个可用地址家用和小型办公绝对够。但实际这么做会带来几个问题。第一个问题是广播风暴。同一个子网内的设备发广播包的时候所有设备都要接收和处理。设备少的时候无所谓设备一多广播包就会占用大量带宽和CPU。你可以想象成一个会议室里所有人都在同时喊话谁都听不清谁在说什么。第二个问题是管理混乱。所有设备都在一个网段里你没法通过IP段来区分设备类型。打印机、摄像头、员工电脑、服务器全混在一起出了问题排查起来非常痛苦。第三个问题是安全边界模糊。同一个子网内的设备默认是可以互相访问的你把访客设备和内部服务器放在同一个网段访客就能直接扫描到你的服务器。所以IP地址划分的核心目的就三个控制广播域大小、方便分类管理、建立安全边界。理解了这三个目的后面的划分方法就都是围绕它们展开的。2.3 私有地址和公有地址为什么你家路由器都是192.168开头IP地址分为公有地址和私有地址。公有地址是全球唯一的由专门机构分配用在互联网上。私有地址是保留给内部网络使用的不能直接在互联网上路由。私有地址范围有三个地址范围CIDR表示可用地址数量常见用途10.0.0.0 - 10.255.255.25510.0.0.0/8约1677万大型企业内网172.16.0.0 - 172.31.255.255172.16.0.0/12约104万中型企业内网192.168.0.0 - 192.168.255.255192.168.0.0/16约6.5万家庭和小型办公你家路由器默认用192.168.1.1或者192.168.0.1就是因为192.168.0.0/16这个范围足够家用而且不会和互联网上的地址冲突。运营商给你的是一个公有地址你家所有设备通过路由器的NAT功能共享这一个公有地址上网。这里有个常见的误区很多人以为192.168开头的地址更安全其实私有地址本身没有安全属性安全是靠防火墙和访问控制实现的。私有地址的好处只是不占用宝贵的公有地址资源而且可以在不同网络里重复使用。3. 子网掩码和CIDR划分地址的两把尺子3.1 子网掩码的两种写法以及为什么CIDR更受欢迎子网掩码有两种写法。一种是十进制写法比如255.255.255.0。另一种是CIDR写法比如/24。CIDR的全称是Classless Inter-Domain Routing中文叫无类别域间路由。斜杠后面的数字表示网络部分的位数。这两种写法的对应关系是这样的CIDR子网掩码网络位主机位可用主机数/24255.255.255.0248254/25255.255.255.128257126/26255.255.255.19226662/27255.255.255.22427530/28255.255.255.24028414/29255.255.255.2482936/30255.255.255.2523022为什么CIDR更受欢迎因为写起来简单而且一眼就能看出网络位有多少。255.255.255.192和/26显然后者更直观。而且在做路由汇总的时候CIDR的聚合计算更方便。这里要特别注意可用主机数的计算。以/24为例主机位有8位2的8次方是256但要去掉两个地址网络地址主机位全0和广播地址主机位全1。所以可用主机数是256减2等于254。很多人第一次算的时候会忘记减2结果规划出来的地址不够用。3.2 子网划分的数学原理借位子网划分的本质是从主机位借位给网络位。比如你有一个192.168.1.0/24的网段想把它分成两个子网就从主机位借1位给网络位变成/25。这样网络位从24变成25主机位从8变成7。借1位能分出2个子网192.168.1.0/25可用地址192.168.1.1到192.168.1.126192.168.1.128/25可用地址192.168.1.129到192.168.1.254借2位能分出4个子网192.168.1.0/26可用地址1到62192.168.1.64/26可用地址65到126192.168.1.128/26可用地址129到190192.168.1.192/26可用地址193到254借3位能分出8个子网以此类推。每借一位子网数量翻倍每个子网的可用地址数大约减半。这里有个容易搞混的地方子网的起始地址不一定是0。比如借2位的时候第二个子网是从64开始的不是从63或65。因为64的二进制是01000000前两位是01正好是第二个子网的网络位。这个规律在划分子网的时候非常关键算错了就会导致地址重叠或者浪费。3.3 一个完整的子网划分计算实例假设你拿到一个192.168.10.0/24的网段需要划分给四个部门技术部50人、市场部25人、财务部10人、行政部5人。怎么划分最合理先算需求。每个部门需要的地址数要留余量一般按实际人数的1.5到2倍算。技术部需要至少75个市场部至少40个财务部至少20个行政部至少10个。然后从大到小分配。技术部需要75个最接近的是/25126个可用但126对75来说浪费太多。可以考虑/2662个可用但62不够75。所以技术部只能用/25占用192.168.10.0/25。市场部需要40个/26有62个可用够用。分配192.168.10.128/26。财务部需要20个/27有30个可用够用。分配192.168.10.192/27。行政部需要10个/28有14个可用够用。分配192.168.10.224/28。剩下的地址从192.168.10.240到192.168.10.255可以留着做扩展或者点对点链路。这个划分方案的好处是每个部门的需求都满足了而且没有过度浪费。如果一开始就把技术部分到/24那其他部门就没地址可用了。4. 不同场景下的IP地址划分实战方案4.1 家庭网络别再用默认的192.168.1.0/24了大部分家用路由器默认网段是192.168.1.0/24或192.168.0.0/24。如果你家设备不多用默认的没问题。但如果你家智能设备多或者你经常需要远程访问家里的设备建议重新规划一下。我的建议是把家庭网络分成三个网段主网段192.168.10.0/24给电脑、手机、平板这些常用设备用IoT网段192.168.20.0/24给智能音箱、摄像头、扫地机器人这些设备用访客网段192.168.30.0/24给来访客人用为什么要分开因为IoT设备的安全性普遍较差固件更新不及时容易被攻破。把它们和你的电脑手机放在同一个网段一旦某个摄像头被攻破攻击者就能直接扫描到你的电脑。分开之后即使IoT网段被攻破也访问不到主网段的设备。具体操作上你需要一台支持多网段的路由器或者软路由。普通家用路由器一般只支持一个LAN网段但很多中高端型号支持VLAN或者多SSID对应不同网段。如果路由器不支持可以在路由器后面接一个支持VLAN的交换机把不同端口划分到不同VLAN再给每个VLAN配一个DHCP服务器。这里有个实操细节DHCP地址池的范围不要设得太满。比如/24网段有254个可用地址DHCP池设成100到200就够了剩下的留给静态IP。静态IP用来做什么给打印机、NAS、路由器管理地址这些需要固定地址的设备用。如果DHCP池把整个网段都占了你想给某台设备设静态IP的时候就可能冲突。4.2 小型办公网络按部门划分VLAN小型办公网络一般在20到100人之间这种规模的网络如果不划分广播域太大而且没法做部门间的访问控制。我的建议是按部门划分VLAN每个VLAN一个子网。假设公司有50人分为技术部20人、销售部15人、财务部5人、行政部5人、管理层5人。可以这样划分VLAN ID部门网段可用地址网关VLAN 10技术部192.168.10.0/2730192.168.10.1VLAN 20销售部192.168.20.0/2730192.168.20.1VLAN 30财务部192.168.30.0/2814192.168.30.1VLAN 40行政部192.168.40.0/2814192.168.40.1VLAN 50管理层192.168.50.0/2814192.168.50.1VLAN 60服务器192.168.60.0/2814192.168.60.1VLAN 70访客192.168.70.0/2662192.168.70.1每个VLAN的地址数都留了余量技术部和销售部各留了10个左右的扩展空间其他部门留了5到9个。访客VLAN给了62个地址因为访客数量不确定而且访客设备流动性大地址回收快。访问控制策略上财务部和管理层可以访问服务器VLAN其他部门只能访问服务器VLAN的特定端口。访客VLAN只能访问互联网不能访问任何内部网段。这些策略通过三层交换机或者防火墙的ACL来实现。4.3 实验室或开发环境用/29或/30做点对点链路在实验室或者开发环境里经常需要把两台设备直连或者做路由器的点对点链路。这种场景下用/30最合适因为/30只有2个可用地址刚好够两端各一个。比如两台服务器做心跳直连可以用10.0.0.0/30一端配10.0.0.1另一端配10.0.0.2。子网掩码255.255.255.252。这样既不浪费地址又清晰明了。如果设备比较多比如一个机柜里有8台服务器需要互联可以用/29有6个可用地址。但要注意/29的6个地址里第一个和最后一个不能用实际能用的只有中间6个。如果8台服务器都需要互联/29不够得用/28。这里有个经验点对点链路尽量用/30不要用/31。虽然RFC 3021定义了/31用于点对点链路可以有两个可用地址但很多老设备不支持/31配上去会报错。用/30虽然浪费两个地址但兼容性好省心。4.4 容器和虚拟机环境给每个项目一个独立子网如果你用Docker或者虚拟机做开发每个项目最好有独立的子网。Docker默认用172.17.0.0/16这个网段很大但如果你同时跑多个Docker网络可能会和公司内网的172.16.0.0/12冲突。我的做法是给Docker单独规划一个网段比如10.100.0.0/16然后每个项目用其中的一个/24。这样既不会和公司内网冲突项目之间也隔离得清清楚楚。具体配置Docker网络的时候可以这样指定docker network create --subnet10.100.1.0/24 project-a-net docker network create --subnet10.100.2.0/24 project-b-net每个项目的容器在各自的子网里互相不干扰。如果项目之间需要通信可以通过Docker的network connect把容器连到多个网络或者通过宿主机的端口映射来转发。虚拟机也是类似的思路。VMware和VirtualBox都支持自定义虚拟网络可以给每个虚拟机分配独立的子网。但要注意虚拟机的网段不要和宿主机所在网段重叠否则会出现路由问题。5. 划分完了怎么验证几个必做的检查项5.1 用ping和traceroute验证连通性划分完子网之后第一件事是验证同网段能通、跨网段能通、不该通的确实不通。同网段验证很简单找两台同网段的设备互相ping。比如192.168.10.10和192.168.10.20应该能直接ping通而且延迟很低一般小于1毫秒。跨网段验证要ping网关再ping对方网段的设备。比如192.168.10.10要ping 192.168.20.10先ping 192.168.10.1自己的网关再ping 192.168.20.1对方网关最后ping 192.168.20.10。如果中间任何一步不通就说明路由或者ACL有问题。traceroute可以看数据包经过了哪些跳。同网段traceroute应该只有一跳跨网段至少两跳经过网关。如果traceroute显示经过了不该经过的设备说明路由表有问题。5.2 检查DHCP分配是否符合预期划分完子网后DHCP服务器要重新配置。每个子网的DHCP池范围、网关、DNS都要对应上。验证的时候把设备的网络断开再重连看拿到的IP是不是在预期的网段里网关是不是正确的。这里有个常见的坑DHCP中继配置错误。如果你的DHCP服务器不在每个子网里都有接口就需要配置DHCP中继DHCP Relay。中继的配置里要指定DHCP服务器的地址以及哪个接口对应哪个子网。如果中继配错了设备可能拿到其他子网的IP导致网络不通。还有一个坑是租约时间设置不合理。租约时间太短设备频繁续约增加网络负担。租约时间太长设备离开网络后地址不释放地址池很快耗尽。一般办公网络设8小时到1天比较合适访客网络设2到4小时。5.3 用扫描工具检查地址冲突和非法设备划分完子网后建议用扫描工具扫一遍看看有没有IP冲突有没有未授权的设备接入。常用的扫描工具比如arp-scan、nmap可以快速扫描一个网段里有哪些设备在线。如果发现同一个IP对应多个MAC地址说明有IP冲突。如果发现不认识的MAC地址可能是有人私自接了设备。# 用arp-scan扫描192.168.10.0/24网段 arp-scan --interfaceeth0 192.168.10.0/24 # 用nmap扫描网段并识别设备类型 nmap -sn 192.168.10.0/24扫描的时候要注意有些设备可能开了防火墙不响应ping但arp-scan是通过ARP协议扫描的即使设备不响应ping也能发现。如果连ARP都发现不了那设备可能不在这个网段或者网卡有问题。6. 那些年我踩过的地址划分坑6.1 子网掩码写错一位整个网段都乱了有一次给一个客户配网络我把子网掩码从255.255.255.0写成了255.255.254.0。看起来只差一位实际上网段从/24变成了/23可用地址从254个变成了510个。结果就是本来应该属于两个不同子网的设备被划到了同一个子网里广播域扩大了一倍而且原本规划的VLAN隔离失效了。这个错误的隐蔽性在于网络表面上还能通因为同一个/23网段内的设备确实可以互相通信。但跨VLAN的访问控制全部失效因为设备根本不在不同的子网里。后来是客户反馈说访客能访问财务系统我才发现这个问题。教训就是配完子网掩码后一定要用计算器验证一遍。Windows自带的计算器切换到程序员模式可以方便地在二进制和十进制之间转换。或者用在线子网计算器输入IP和掩码看算出来的网络地址和广播地址是否符合预期。6.2 地址池设得太满静态IP没地方放前面提到过DHCP池不要设得太满。我见过一个案例有人把DHCP池设成了192.168.1.2到192.168.1.254整个网段除了网关全在池子里。后来要加一台网络打印机想给它设个静态IP 192.168.1.200结果发现这个地址已经被DHCP分配出去了打印机一上线就IP冲突。正确的做法是DHCP池留出至少10%的地址给静态设备。/24网段的话DHCP池设成100到200留出1到99和201到254给静态IP。静态IP的分配也要有记录哪个地址给了哪台设备最好用表格管理起来。6.3 忘了改默认网关设备上不了网划分新子网的时候网关地址一定要和子网匹配。比如192.168.20.0/24的网关应该是192.168.20.1不能写成192.168.10.1。如果网关写错了设备能ping通同网段的其他设备但上不了网也访问不了其他网段。这个错误的排查思路是先ping网关如果不通说明网关地址配错了或者网关设备没配这个子网的接口。如果网关能ping通但上不了网检查网关设备的路由表看有没有默认路由以及NAT配置是否正确。6.4 子网划分太细管理成本反而高了有人学了子网划分之后恨不得每个设备一个子网。我见过一个实验室把/24划分成了64个/30每个/30只放两台设备。结果就是路由器上配了64个接口路由表里有64条直连路由管理起来极其痛苦。而且每加一台设备就要新建一个子网完全没有扩展性。子网划分要适度。一般来说一个子网里的设备数量在20到100之间比较合适。太少浪费地址和管理成本太多广播域太大。家用网络三个子网足够了小型办公按部门划分每个部门一个子网不要过度细分。6.5 忽略了IPv6的地址规划现在很多运营商已经支持IPv6了如果你的网络设备也支持建议把IPv6的地址规划一起做了。IPv6的地址长度是128位地址空间极大一般家庭和小型办公可以直接用运营商分配的前缀不需要像IPv4那样精打细算。但IPv6的地址划分逻辑和IPv4不同。IPv6通常用/64作为子网前缀一个/64子网里的地址数量是2的64次方根本用不完。所以IPv6的划分重点是前缀分配而不是主机地址分配。运营商一般会分配一个/56或/48的前缀你可以从中划分出多个/64子网给不同的VLAN。IPv6的配置比IPv4简单因为不需要NAT每个设备都可以有全球唯一的地址。但这也带来了新的安全考虑设备直接暴露在互联网上防火墙规则要配得更严格。如果你的设备还不支持IPv6可以先不做但规划网络的时候要留出升级空间。7. 一套可以直接抄的地址规划模板7.1 家庭网络规划模板如果你家设备在20到50台之间可以直接用这个模板用途网段网关DHCP池说明主设备192.168.10.0/24192.168.10.1.100-.200电脑手机平板IoT设备192.168.20.0/24192.168.20.1.100-.200智能家居访客192.168.30.0/24192.168.30.1.100-.200访客隔离静态设备192.168.10.2-.99--NAS打印机等静态设备的地址从主网段里划出来不单独占一个子网。这样既保证了静态设备的稳定性又不会浪费一个完整的/24。7.2 小型办公网络规划模板50人左右的办公网络可以用这个模板VLAN用途网段网关DHCP池10技术部192.168.10.0/26.1.10-.6020销售部192.168.20.0/26.1.10-.6030财务部192.168.30.0/27.1.10-.2840行政部192.168.40.0/27.1.10-.2850管理层192.168.50.0/27.1.10-.2860服务器192.168.60.0/28.1静态70访客192.168.70.0/25.1.10-.12080网络设备192.168.80.0/28.1静态网络设备VLAN用来放交换机、路由器、AP的管理地址和业务网段分开安全性更好。7.3 规划时留余量的几个原则第一每个子网的地址数至少是当前需求的1.5倍。技术部现在20人至少给30个地址。因为人员会增长设备会增加临时访客也会接入。第二保留一个备用网段。比如你规划了10到80的VLAN可以留90到99作为备用以后扩展新部门或者新用途的时候直接用。第三文档化。规划完了要写下来哪个网段给谁用网关是多少DHCP池范围是多少静态地址分配了哪些。这份文档放在团队共享的地方谁需要谁查。没有文档的规划过三个月自己都忘了。8. 工具和命令让地址划分更省心8.1 子网计算器手算容易错工具更靠谱虽然子网划分的原理不难但手算容易出错尤其是借位比较多的时候。推荐几个常用的子网计算器ipcalcLinux命令行工具输入IP和掩码输出网络地址、广播地址、可用地址范围。安装简单apt install ipcalc或者yum install ipcalc就行。在线子网计算器搜索subnet calculator能找到很多输入IP和CIDR自动算出所有信息。适合快速验证。Python的ipaddress模块如果你写脚本用这个模块最方便。import ipaddress # 创建一个网段对象 net ipaddress.ip_network(192.168.10.0/24) # 输出网段信息 print(f网络地址: {net.network_address}) print(f广播地址: {net.broadcast_address}) print(f可用地址数: {net.num_addresses - 2}) print(f第一个可用地址: {list(net.hosts())[0]}) print(f最后一个可用地址: {list(net.hosts())[-1]}) # 划分子网 subnets list(net.subnets(new_prefix26)) for subnet in subnets: print(f子网: {subnet}, 可用地址: {subnet.num_addresses - 2})这个脚本可以快速算出一个网段的信息以及划分成更小子网后的结果。比手算快得多而且不会出错。8.2 用Excel或表格管理地址分配地址分配一定要有记录。我习惯用Excel或者在线表格管理列包括IP地址、设备名称、MAC地址、所属网段、用途、分配日期、备注。每次分配新地址就加一行设备下线就标记出来。这样做的好处是当你需要排查IP冲突的时候直接查表就知道哪个IP分给了谁。当你要扩展网段的时候看表就知道哪些地址已经用了哪些还空着。表格不用太复杂关键是坚持更新。我见过太多团队规划的时候很认真但分配的时候随手分过两个月表格就对不上了。所以要么用DHCP自动分配要么用IPAMIP地址管理工具手动分配一定要有纪律。8.3 用nmap做网段扫描和资产发现nmap是网络扫描的瑞士军刀用来做地址划分后的验证非常合适。常用的命令# 快速扫描网段里在线的设备 nmap -sn 192.168.10.0/24 # 扫描特定端口看设备开放了哪些服务 nmap -p 22,80,443 192.168.10.0/24 # 操作系统识别 nmap -O 192.168.10.0/24 # 综合扫描输出详细信息 nmap -A 192.168.10.0/24扫描的时候要注意有些设备可能开了防火墙不响应所以扫描结果不一定完整。但作为参考足够了至少能发现大部分在线设备。9. 地址划分之后还要做这几件事9.1 配好ACL让该通的通不该通的不通子网划分只是第一步划分完了还要配访问控制。比如访客VLAN只能访问互联网不能访问任何内部网段。财务VLAN可以访问服务器VLAN但其他部门不能访问财务VLAN。ACL的配置取决于你用的设备。三层交换机一般用ACL防火墙用策略。配置的时候要注意规则的顺序ACL是从上往下匹配的匹配到第一条就执行不再往下看。所以具体的规则要放在前面宽泛的规则放在后面。一个常见的错误是先配了允许所有再配拒绝访客访问财务结果访客的流量匹配到了允许所有后面的拒绝规则根本不生效。正确的顺序是拒绝访客访问财务在前允许所有在后。9.2 监控地址使用率提前发现地址耗尽地址池用满了才想起来扩展往往已经出问题了。所以要在日常监控里加上地址使用率的指标。大部分路由器和防火墙都支持SNMP可以用监控工具比如Zabbix、Prometheus采集DHCP池的使用率设个阈值比如80%就告警。如果没有监控工具也可以定期手动检查。登录路由器或者DHCP服务器看当前分配的地址数和池子总大小的比例。如果超过70%就要考虑扩展了。9.3 定期清理不用的地址和过期租约DHCP租约到期后地址会自动回收。但如果设备异常下线租约可能不会正常释放。所以定期清理过期租约是必要的。大部分DHCP服务器都有自动清理机制但有时候需要手动触发。静态地址也要定期清理。设备报废了或者换网段了原来的静态地址要回收不然就浪费了。我一般每季度检查一次地址分配表把不用的地址标记出来确认后回收。10. 写在最后地址划分是网络的地基干了这么多年网络我越来越觉得IP地址划分就像盖房子的地基。地基打得好后面加设备、加网段、做安全策略都很顺。地基没打好后面每加一个设备都是坑每改一次配置都提心吊胆。很多人觉得地址划分是配一下就行的小事但实际上它决定了整个网络的扩展性、安全性和可管理性。花一个小时规划能省后面几十个小时的排障时间。如果你现在管着一个网络不管大小建议抽时间把地址规划重新梳理一遍。看看有没有网段重叠、有没有地址浪费、有没有安全边界模糊的地方。梳理完了你会发现网络稳定性和管理效率都有明显提升。最后分享一个我自己的习惯每次规划新网段的时候先在纸上画一遍拓扑标好每个网段的地址范围和网关然后再动手配。纸上画错了擦掉重来设备上配错了回滚就麻烦了。这个习惯帮我避免了很多低级错误也推荐给你。