掩碼與劃分子網(wǎng)實(shí)戰(zhàn):從二進(jìn)制原理到VLSM與CIDR)
1. 為什么子網(wǎng)掩碼值得單獨(dú)拎出來聊干網(wǎng)絡(luò)這行十來年被問得最多的問題里“子網(wǎng)掩碼到底怎么算”絕對(duì)排得上前三。很多人學(xué)完計(jì)算機(jī)網(wǎng)絡(luò)課程能背出“子網(wǎng)掩碼用來區(qū)分網(wǎng)絡(luò)號(hào)和主機(jī)號(hào)”可真拿到一個(gè)192.168.10.0/26這樣的地址段讓他劃出四個(gè)能用的子網(wǎng)手就開始抖了。這不是基礎(chǔ)差而是大多數(shù)教材把子網(wǎng)掩碼講成了一堆二進(jìn)制游戲沒講清楚它到底在解決什么現(xiàn)實(shí)問題。子網(wǎng)掩碼與劃分子網(wǎng)這套東西本質(zhì)上是一道“地址資源分配題”。一個(gè)公司拿到一段 IP 地址不可能所有設(shè)備都塞進(jìn)同一個(gè)廣播域里——廣播風(fēng)暴、安全隔離、部門管理哪一條都逼著你把大網(wǎng)切成小網(wǎng)。子網(wǎng)掩碼就是那把切蛋糕的刀劃分子網(wǎng)就是決定每塊蛋糕切多大、分給誰。這篇文章面向的是剛接觸網(wǎng)絡(luò)配置的運(yùn)維新人、準(zhǔn)備網(wǎng)絡(luò)相關(guān)認(rèn)證的備考者以及那些“配置過但沒真正算明白”的開發(fā)者。我會(huì)把掩碼的二進(jìn)制邏輯、VLSM 變長劃分、CIDR 匯總、常見計(jì)算陷阱全部拆開講配上可以直接抄作業(yè)的計(jì)算流程和排查表。讀完你至少能做到拿到任意一個(gè)地址段和掩碼三十秒內(nèi)算出網(wǎng)絡(luò)地址、廣播地址、可用主機(jī)范圍和子網(wǎng)數(shù)量并且知道為什么這么算。先給一個(gè)最樸素的認(rèn)知錨點(diǎn)IP 地址是“門牌號(hào)”子網(wǎng)掩碼是“郵編規(guī)則”。門牌號(hào)本身不告訴你哪幾位是街道、哪幾位是門牌掩碼用連續(xù)的 1 和 0 告訴你——1 覆蓋的位是“街道”網(wǎng)絡(luò)部分0 覆蓋的位是“門牌”主機(jī)部分。所有劃分子網(wǎng)的操作都是在玩這個(gè) 1 和 0 的邊界往哪挪的游戲。2. 子網(wǎng)掩碼的底層邏輯與核心計(jì)算2.1 掩碼的本質(zhì)連續(xù) 1 的邊界就是網(wǎng)絡(luò)邊界子網(wǎng)掩碼是一個(gè) 32 位二進(jìn)制數(shù)規(guī)則只有一條左邊全是連續(xù)的 1右邊全是連續(xù)的 0中間不允許出現(xiàn) 0 和 1 交替。這個(gè)“連續(xù)性”約束不是隨便定的它保證了網(wǎng)絡(luò)部分是一個(gè)完整的、可聚合的前綴路由器做路由查找時(shí)才能用前綴匹配高效轉(zhuǎn)發(fā)。一旦掩碼不連續(xù)比如255.0.255.0硬件查找邏輯就廢了所以這種掩碼在標(biāo)準(zhǔn)配置里是非法的。把掩碼和 IP 地址做按位與運(yùn)算得到的就是網(wǎng)絡(luò)地址。舉個(gè)例子IP192.168.10.130掩碼255.255.255.192IP: 11000000.10101000.00001010.10000010 掩碼: 11111111.11111111.11111111.11000000 與: 11000000.10101000.00001010.10000000 → 192.168.10.128網(wǎng)絡(luò)地址是192.168.10.128。這一步是所有后續(xù)計(jì)算的地基算錯(cuò)了后面全錯(cuò)。我見過太多人直接拿 IP 的最后一段去套“是不是 128 的倍數(shù)”雖然結(jié)果碰巧對(duì)但換個(gè)掩碼就翻車。老老實(shí)實(shí)做按位與或者記住“主機(jī)位全部清零”這個(gè)等價(jià)操作才是穩(wěn)的。掩碼的另一種寫法是前綴長度/26就代表 26 個(gè) 1。這兩種寫法要能瞬間互換下面這張表建議直接記牢前綴掩碼每子網(wǎng)地址數(shù)可用主機(jī)數(shù)/24255.255.255.0256254/25255.255.255.128128126/26255.255.255.1926462/27255.255.255.2243230/28255.255.255.2401614/29255.255.255.24886/30255.255.255.25242這張表是劃分子網(wǎng)的“九九乘法表”背不下來就得每次現(xiàn)算效率差一大截。注意可用主機(jī)數(shù)永遠(yuǎn)是地址數(shù)減 2——網(wǎng)絡(luò)地址和廣播地址不能分配給主機(jī)這是硬規(guī)矩。2.2 塊大小法心算子網(wǎng)的最快路徑二進(jìn)制按位與雖然嚴(yán)謹(jǐn)?shù)珜?shí)戰(zhàn)中沒人愿意每次掏計(jì)算器。我常用的是塊大小法核心就一句話塊大小 256 - 掩碼中發(fā)生變化的那一段的十進(jìn)制值。還是192.168.10.130/26掩碼第四段是 192塊大小 256 - 192 64。這意味著子網(wǎng)邊界落在 0、64、128、192 這幾個(gè)位置。130 落在 128 到 191 之間所以網(wǎng)絡(luò)地址是192.168.10.128廣播地址是下一個(gè)邊界減一即192.168.10.191可用范圍129到190。這個(gè)方法的好處是快而且不容易錯(cuò)。但有個(gè)前提你得清楚“哪一段在變”。如果掩碼是255.255.240.0/20變化的是第三段塊大小 256 - 240 16子網(wǎng)邊界在第三段的 0、16、32……240。這時(shí)候第四段是完整的主機(jī)位網(wǎng)絡(luò)地址的第四段直接歸零。很多人栽在跨段掩碼上就是因?yàn)橹欢⒅詈笠欢慰?。提示塊大小法只適用于掩碼邊界落在某一段內(nèi)部的情況。如果掩碼是 /16、/24 這種整段邊界塊大小直接就是 256不用減。2.3 網(wǎng)絡(luò)地址、廣播地址、可用范圍的固定推導(dǎo)鏈不管掩碼多復(fù)雜推導(dǎo)鏈永遠(yuǎn)是這三步順序不能亂算網(wǎng)絡(luò)地址主機(jī)位全部置 0。算廣播地址主機(jī)位全部置 1等價(jià)于“下一個(gè)子網(wǎng)網(wǎng)絡(luò)地址減 1”。算可用范圍網(wǎng)絡(luò)地址加 1 到廣播地址減 1。拿172.16.5.200/22練手。掩碼 /22 對(duì)應(yīng)255.255.252.0第三段變化塊大小 256 - 252 4。第三段 5 落在 4 到 7 之間網(wǎng)絡(luò)地址第三段是 4第四段歸零得172.16.4.0。廣播地址是下一個(gè)子網(wǎng)172.16.8.0減一即172.16.7.255??捎梅秶?72.16.4.1到172.16.7.254一共 1022 個(gè)可用地址2 的 10 次方減 2因?yàn)橹鳈C(jī)位有 10 位。這里有個(gè)容易混淆的點(diǎn)/22 的主機(jī)位是 32 - 22 10 位地址總數(shù) 1024但跨越了第三段的后 2 位和整個(gè)第四段 8 位。所以第三段的步進(jìn)是 4第四段是完整的 0 到 255。理解“主機(jī)位跨越段邊界”是掌握跨段掩碼的關(guān)鍵畫個(gè)位圖就一目了然第三段: 00000101 (5) 掩碼: 11111100 網(wǎng)絡(luò): 00000100 (4) ← 后兩位是主機(jī)位后兩位主機(jī)位在第三段內(nèi)變化所以第三段以 4 為步進(jìn)第四段 8 位全是主機(jī)位所以整段變化。3. 劃分子網(wǎng)的實(shí)戰(zhàn)方法論3.1 等長子網(wǎng)劃分從需求反推掩碼等長劃分是最常見的場景一個(gè) C 類地址192.168.1.0/24公司有四個(gè)部門每個(gè)部門大約 50 臺(tái)設(shè)備要求每個(gè)部門獨(dú)立子網(wǎng)。怎么切先算需求每個(gè)子網(wǎng)至少 50 個(gè)可用主機(jī)加上網(wǎng)絡(luò)地址和廣播地址至少需要 52 個(gè)地址。2 的 6 次方是 64夠用2 的 5 次方是 32不夠。所以主機(jī)位留 6 位網(wǎng)絡(luò)位借 2 位掩碼變成 /26即255.255.255.192。四個(gè)子網(wǎng)正好子網(wǎng)網(wǎng)絡(luò)地址可用范圍廣播地址1192.168.1.0.1 - .62.632192.168.1.64.65 - .126.1273192.168.1.128.129 - .190.1914192.168.1.192.193 - .254.255這里的關(guān)鍵決策是“借幾位”。借位公式2 的 n 次方 ≥ 子網(wǎng)數(shù)量同時(shí)2 的 (8-n) 次方 - 2 ≥ 每子網(wǎng)主機(jī)數(shù)以 C 類為例。兩個(gè)條件同時(shí)滿足的 n 就是答案。上面例子中 n2 滿足子網(wǎng)數(shù) 4主機(jī)數(shù) 62 ≥ 50成立。如果部門有 70 臺(tái)設(shè)備n2 就不夠了得 n1只能劃兩個(gè)子網(wǎng)每個(gè) 126 臺(tái)——這就是等長劃分的局限它要求所有子網(wǎng)一樣大資源利用率低。我踩過的一個(gè)坑有人把“子網(wǎng)數(shù)量”和“可用子網(wǎng)數(shù)量”搞混。某些老教材會(huì)提“子網(wǎng)號(hào)全 0 和全 1 不可用”的規(guī)則那是早期路由協(xié)議的限制現(xiàn)代設(shè)備早就支持全 0 全 1 子網(wǎng)了。所以算子網(wǎng)數(shù)直接用 2 的 n 次方不用減 2。這個(gè)點(diǎn)如果不清楚劃出來的子網(wǎng)會(huì)少一半白白浪費(fèi)地址。3.2 VLSM 變長劃分讓每塊蛋糕大小剛好真實(shí)企業(yè)里部門規(guī)模從來不一樣。一個(gè) /24 要分給 100 人的研發(fā)部、50 人的市場部、20 人的財(cái)務(wù)部還有兩個(gè)各 2 臺(tái)設(shè)備的路由器互聯(lián)鏈路。等長劃分要么浪費(fèi)要么不夠。這時(shí)候上VLSM變長子網(wǎng)掩碼原則是從大到小分配先滿足大需求再在小塊里繼續(xù)切。拿192.168.1.0/24做例子需求如下研發(fā)部100 臺(tái)市場部50 臺(tái)財(cái)務(wù)部20 臺(tái)兩條點(diǎn)對(duì)點(diǎn)鏈路各 2 臺(tái)第一步研發(fā)部 100 臺(tái)需要主機(jī)位 7 位2^7-2126 ≥ 100掩碼 /25塊大小 128。分配192.168.1.0/25可用.1到.126廣播.127。第二步剩下192.168.1.128/25。市場部 50 臺(tái)主機(jī)位 6 位62 ≥ 50掩碼 /26塊大小 64。分配192.168.1.128/26可用.129到.190廣播.191。第三步剩下192.168.1.192/26。財(cái)務(wù)部 20 臺(tái)主機(jī)位 5 位30 ≥ 20掩碼 /27塊大小 32。分配192.168.1.192/27可用.193到.222廣播.223。第四步剩下192.168.1.224/27。點(diǎn)對(duì)點(diǎn)鏈路只需要 2 個(gè)地址掩碼 /30塊大小 4。第一條鏈路192.168.1.224/30可用.225到.226廣播.227。第二條鏈路192.168.1.228/30可用.229到.230廣播.231。剩下的192.168.1.232到.255留著擴(kuò)展。整個(gè)分配過程像俄羅斯套娃每次從剩余空間里切出剛好夠用的塊。VLSM 的精髓在于“按需分配”但代價(jià)是路由表里會(huì)出現(xiàn)不同長度的掩碼條目所以必須配合支持無類路由的協(xié)議如 OSPF、RIPv2老式的 RIPv1 是不認(rèn)掩碼的配了也白配。注意VLSM 分配順序絕對(duì)不能亂。如果先給小部門分大部門可能就找不到連續(xù)的大塊空間了。這跟裝箱問題一個(gè)道理大件先裝。3.3 CIDR 路由匯總把碎塊重新捏成整塊劃分子網(wǎng)是“切”CIDR 匯總就是“合”。企業(yè)內(nèi)部分了十幾個(gè)子網(wǎng)對(duì)外通告路由時(shí)不可能一條條列得匯總成一條或幾條聚合路由。匯總的規(guī)則是找所有子網(wǎng)網(wǎng)絡(luò)地址的公共前綴前綴長度就是匯總后的掩碼。假設(shè)有四個(gè)子網(wǎng)192.168.0.0/24、192.168.1.0/24、192.168.2.0/24、192.168.3.0/24??吹谌味M(jìn)制0: 00000000 1: 00000001 2: 00000010 3: 00000011前 6 位完全相同000000只有后 2 位變化。所以公共前綴是 16 6 22 位匯總路由為192.168.0.0/22。驗(yàn)證一下/22 覆蓋192.168.0.0到192.168.3.255正好包含這四個(gè) /24。匯總最容易犯的錯(cuò)是“過度匯總”把不屬于自己的地址也包進(jìn)去了。比如只有192.168.0.0/24和192.168.2.0/24兩個(gè)子網(wǎng)硬要匯總成 /22就會(huì)把192.168.1.0/24和192.168.3.0/24也宣告出去如果這兩個(gè)段被別的部門用了流量就會(huì)跑錯(cuò)地方。所以匯總前必須確認(rèn)聚合后的地址塊內(nèi)沒有分配給其他地方的“空洞”。有空洞就得拆成多條匯總或者用更精確的前綴。4. 完整實(shí)操從零配置一個(gè)劃分子網(wǎng)的網(wǎng)絡(luò)4.1 場景設(shè)定與地址規(guī)劃表假設(shè)某小型公司拿到運(yùn)營商給的地址段10.20.30.0/24需要?jiǎng)澐洲k公區(qū) 60 臺(tái)、會(huì)議室 25 臺(tái)、服務(wù)器區(qū) 10 臺(tái)、管理網(wǎng)段 5 臺(tái)、兩條互聯(lián)鏈路。我按 VLSM 做一張規(guī)劃表這張表就是后續(xù)所有配置的依據(jù)區(qū)域需求主機(jī)掩碼網(wǎng)絡(luò)地址可用范圍廣播地址辦公區(qū)60/2610.20.30.0.1 - .62.63會(huì)議室25/2710.20.30.64.65 - .94.95服務(wù)器區(qū)10/2810.20.30.96.97 - .110.111管理網(wǎng)段5/2910.20.30.112.113 - .118.119鏈路12/3010.20.30.120.121 - .122.123鏈路22/3010.20.30.124.125 - .126.127剩余10.20.30.128到.255留作擴(kuò)展。這張表里每個(gè)子網(wǎng)的起始地址都是上一塊廣播地址加一嚴(yán)絲合縫不重疊這是手工規(guī)劃時(shí)必須逐行核對(duì)的。我習(xí)慣用“上一塊廣播 1 下一塊網(wǎng)絡(luò)”這個(gè)等式做校驗(yàn)任何一行對(duì)不上就說明算錯(cuò)了。4.2 網(wǎng)關(guān)與設(shè)備地址分配約定規(guī)劃表出來后要定一個(gè)分配約定否則后期維護(hù)一團(tuán)亂。我的習(xí)慣是每個(gè)子網(wǎng)第一個(gè)可用地址做網(wǎng)關(guān)最后一個(gè)可用地址留給交換機(jī)管理或保留。比如辦公區(qū)網(wǎng)關(guān)10.20.30.1會(huì)議室網(wǎng)關(guān)10.20.30.65以此類推。服務(wù)器區(qū)因?yàn)樵O(shè)備少網(wǎng)關(guān)用.97服務(wù)器從.98開始排。這個(gè)約定看起來是小事但省下的溝通成本巨大。新人接手時(shí)看一眼地址就知道網(wǎng)關(guān)在哪不用翻文檔。另外互聯(lián)鏈路的 /30 只有兩個(gè)地址一端是路由器 A 的接口一端是路由器 B 的接口沒有網(wǎng)關(guān)概念配置時(shí)直接寫對(duì)端地址做下一跳。4.3 路由器接口配置示例以某主流網(wǎng)絡(luò)設(shè)備命令行風(fēng)格為例辦公區(qū)網(wǎng)關(guān)接口和鏈路接口的配置大致如下不同廠商語法有差異邏輯一致# 辦公區(qū)網(wǎng)關(guān)接口 interface GigabitEthernet0/1 ip address 10.20.30.1 255.255.255.192 no shutdown # 互聯(lián)鏈路接口 interface GigabitEthernet0/2 ip address 10.20.30.121 255.255.255.252 no shutdown # 靜態(tài)路由指向?qū)Χ?ip route 10.20.30.64 255.255.255.224 10.20.30.122配置完必須驗(yàn)證三件事接口狀態(tài) up、地址掩碼正確、路由表里有對(duì)應(yīng)條目。用show ip interface brief看狀態(tài)用show ip route看路由。我見過掩碼配錯(cuò)導(dǎo)致同網(wǎng)段設(shè)備 ping 不通的案例——接口配了 /26但終端配了 /24終端認(rèn)為對(duì)方在同網(wǎng)段直接 ARP路由器卻認(rèn)為跨網(wǎng)段要轉(zhuǎn)發(fā)結(jié)果就是單向通或完全不通。所以終端和網(wǎng)關(guān)的掩碼必須嚴(yán)格一致這是排查時(shí)第一個(gè)要看的點(diǎn)。4.4 驗(yàn)證與連通性測試流程配置完成后按這個(gè)順序測先測同子網(wǎng)內(nèi)互通辦公區(qū)兩臺(tái) PC 互 ping再測跨子網(wǎng)辦公區(qū) ping 會(huì)議室最后測出口。同子網(wǎng)不通查交換機(jī) VLAN 和端口跨子網(wǎng)不通查網(wǎng)關(guān)掩碼和路由出口不通查 NAT 和上行鏈路。這個(gè)由內(nèi)到外的順序能把問題范圍快速縮小。測試時(shí)用ping加tracert或traceroute組合。ping 通但 tracert 第一跳就斷通常是網(wǎng)關(guān)的返回路由缺失ping 不通但 ARP 表里有對(duì)方 MAC說明二層通、三層掩碼或路由有問題。這些判斷經(jīng)驗(yàn)比任何文檔都實(shí)用多排幾次故障自然就形成了條件反射。5. 常見計(jì)算陷阱與排查速查5.1 五個(gè)高頻錯(cuò)誤對(duì)照表子網(wǎng)計(jì)算出錯(cuò)翻來覆去就那么幾類。我把它們整理成表遇到問題先對(duì)號(hào)入座錯(cuò)誤現(xiàn)象根因正確做法子網(wǎng)數(shù)量算少一半誤用“全 0 全 1 子網(wǎng)不可用”舊規(guī)則現(xiàn)代設(shè)備直接用 2 的 n 次方可用主機(jī)數(shù)多算 2 個(gè)忘記扣除網(wǎng)絡(luò)地址和廣播地址地址數(shù)減 2跨段掩碼網(wǎng)絡(luò)地址算錯(cuò)只盯最后一段忽略前面變化段找出掩碼變化的那一段算塊大小匯總路由導(dǎo)致流量跑偏過度匯總把空洞地址包進(jìn)去確認(rèn)聚合塊內(nèi)無其他分配終端與網(wǎng)關(guān)掩碼不一致配置時(shí)各配各的沒統(tǒng)一同子網(wǎng)內(nèi)掩碼必須完全一致第一類錯(cuò)誤現(xiàn)在其實(shí)很少見了但某些老資料還在傳播新手看了容易中招。第二類是最普遍的尤其在心算時(shí)2 的 n 次方脫口而出減 2 就忘了。第三類跨段掩碼是進(jìn)階坑/17 到 /23 這些掩碼最容易翻車建議每次都用位圖驗(yàn)證一遍。5.2 掩碼不連續(xù)與非法配置的識(shí)別前面提過掩碼必須連續(xù)但實(shí)際配置中偶爾會(huì)遇到255.255.255.100這種非法值。設(shè)備通常會(huì)直接拒絕或者報(bào)“bad mask”錯(cuò)誤。識(shí)別方法很簡單把掩碼轉(zhuǎn)二進(jìn)制看有沒有“0 后面又出現(xiàn) 1”的情況。100的二進(jìn)制是01100100中間有 0 有 1 交替非法。合法的第四段值只有 0、128、192、224、240、248、252、254、255 這幾個(gè)記住這個(gè)序列就能快速判斷。還有一種隱蔽的坑子網(wǎng)劃分后兩個(gè)子網(wǎng)的地址范圍重疊。比如把10.0.0.0/25和10.0.0.64/26同時(shí)配上去后者完全被前者包含路由會(huì)沖突。規(guī)劃時(shí)用表格逐行核對(duì)“上一塊廣播 1 下一塊網(wǎng)絡(luò)”就能杜絕這類問題。5.3 排障時(shí)的三層遞進(jìn)思路網(wǎng)絡(luò)不通時(shí)別急著抓包按三層遞進(jìn)走先看掩碼再看路由最后看策略。掩碼問題表現(xiàn)為“同網(wǎng)段不通”或“跨網(wǎng)段單向通”路由問題表現(xiàn)為“ping 網(wǎng)關(guān)通但 ping 遠(yuǎn)端不通”策略問題ACL、防火墻表現(xiàn)為“特定端口或特定方向不通”。這個(gè)順序能把 80% 的問題在前兩步定位。舉個(gè)真實(shí)案例某次辦公區(qū)能 ping 通服務(wù)器區(qū)但服務(wù)器區(qū) ping 不回辦公區(qū)。查掩碼都對(duì)查路由發(fā)現(xiàn)服務(wù)器區(qū)的網(wǎng)關(guān)路由器缺少回程路由——它不知道10.20.30.0/26怎么走。補(bǔ)一條靜態(tài)路由指向辦公區(qū)網(wǎng)關(guān)立刻恢復(fù)。這種“單向通”幾乎都是回程路由缺失記住這個(gè)特征能省很多時(shí)間。6. 我個(gè)人的幾條實(shí)操心得劃分子網(wǎng)這件事算得快不如算得穩(wěn)。我早年追求心算速度結(jié)果在跨段掩碼上栽過跟頭后來養(yǎng)成了一個(gè)笨習(xí)慣任何非 /24 的劃分先在紙上畫位圖標(biāo)出網(wǎng)絡(luò)位和主機(jī)位的分界線再動(dòng)筆算。位圖畫多了腦子里自然有了圖像速度反而上來了。塊大小法配合位圖驗(yàn)證是我目前最推薦的組合——快的時(shí)候心算拿不準(zhǔn)就畫圖兩條腿走路。另一個(gè)體會(huì)是規(guī)劃表一定要留擴(kuò)展空間。上面例子中我特意把10.20.30.128之后留空就是給未來新部門或新業(yè)務(wù)用的。如果一開始把 /24 切得干干凈凈后面加設(shè)備就得重新規(guī)劃牽一發(fā)動(dòng)全身。經(jīng)驗(yàn)值是預(yù)留至少 25% 的地址空間寧可前期看著浪費(fèi)也別后期返工。最后分享一個(gè)排查小技巧當(dāng)你不確定某臺(tái)設(shè)備的掩碼配得對(duì)不對(duì)時(shí)讓它 ping 一下所在子網(wǎng)的廣播地址。能 ping 通或收到回應(yīng)說明掩碼至少?zèng)]把它劃到別的子網(wǎng)去如果 ping 廣播地址沒反應(yīng)但 ping 網(wǎng)關(guān)正常大概率掩碼配大了把廣播地址當(dāng)成了普通主機(jī)地址。這個(gè)方法不嚴(yán)謹(jǐn)?shù)珣?yīng)急時(shí)很好用比翻配置快得多。