子網掩碼怎麼理解?

內網中192.168.1.199的前三組是網路號,後一組是主機號,子網掩碼就是255.255.255.0

如果IP同樣是192.168.1.199 那麼子網掩碼可以設成255.255.255.192嗎,怎麼理解

如果在同一個區域網出現這兩種掩碼可以相互通訊嗎


從前有一個地主,有256間房子,地主家的門牌號碼是「192.168.1」,那麼他家第一間房子的門牌號碼是192.168.1.0,第二間是192.168.1.1,…第256間的編號是192.168.1.255。

地主老了,需要把256間房子分給4個兒子,平均分配,每個兒子可以分64間。

請來一位先生主持公道,先生這麼來操作:

192.168.1.0-192.168.1.63 分給大兒子

192.168.1.64-192.168.1.127 分給二兒子

192.168.1.128 -192.168.1.191 分給三兒子

192.168.1.192-192.168.1.255 分給四兒子

那如何來描述四個兒子的子網網段呢?

192.168.1.0/26

192.168.1.64/26

192.168.1.128/26

192.168.1.192/26

/26是什麼鬼?

255.255.255.192的二進位是多少? 「11111111-11111111-11111111-11」大家數數一共多少個1?不用數了,是26個1,為了簡化子網掩碼的表示,用/26代替255.255.255.192。

按位與運算

我們來看大兒子的網段192.168.1.0/26是如何得到的?

以大兒子的房間為例:

192.168.1.0-192.168.1.63

二進位表示:

192.168.1.0

11000000.10101000.00000001.00000000

192.168.1.63

11000000.10101000.00000001.00111111

首尾地址完全相同的是多少?

11000000.10101000.00000001.00

數數一共多少位?26位!那麼用這個「192.168.1.0/26」就可以表示大兒子所有房間。

對照房間的門牌號碼「192.168.1.199」,很顯然屬於四兒子的。

一個主機192.168.1.199/26 能否和直連主機192.168.1.200/24 通信?可以的因為都是四兒子的房間。

一個主機192.168.1.199/26 能否和直連主機

192.168.1.1/24 通信? 不可以因為一個是大兒子的房間,一個是四兒子的房間,無法直連通信!


內網中192.168.1.199的前三組是網路號,後一組是主機號,子網掩碼就是255.255.255.0

首先要說明的是:不是某個IP的網路號和主機號決定子網掩碼是什麼,而是子網掩碼決定了某個IP地址的網路號與主機號是什麼,IP地址是要搭配子網掩碼使用的。例如上面的子網掩碼決定了192.168.1.199的前三段192.168.1是網路號,最後一段199是主機號。

我們再來理解子網掩碼的作用,先舉個例子,市面上的兩個廠家都生產電子秤,每個廠家都堅稱他們的秤最准,那你是怎麼知道他們的秤到底準不準?很簡單,你去找一個 1KG 的國際千克原器,各放到他們的秤上測量,如果秤的測量值是1KG,那這把秤就是準的,子網掩碼的作用就相當於這個大家公認的國際千克原器,是我們測量兩個IP是否屬於同一個網段的一個工具(應該說是讓你知道某個IP地址的網路號與主機號分別是什麼) 。

如果讓你判斷一個IP地址:192.168.1.199的網路號和主機號分別是什麼?

請問你怎麼判斷?你憑什麼說192.168.1是網路號?199是主機號?有什麼根據嗎?

但是如果我給你一個IP地址是以下(帶子網掩碼)形式的:

IP:192.168.1.199

子網掩碼:255.255.255.0

那麼根據大家公認的規則,你就可以得出這個IP的網路號和主機號了,怎麼算呢?

子網掩碼的長度和IP地址一樣也是一串32位的二進位數字,只不過為人類的可讀性和記憶性的方便,通常使用十進位數字來表示,例如把上面的IP地址和子網掩碼都轉換成相應的二進位就是下面這樣的:

十進位 二進位

IP 地址:192.168.1.199 ‐>11000000.10101000.00000001.11000111

子網掩碼:255.255.255.0 ‐>11111111.11111111.11111111.00000000

十進位的顯示形式是給人看的,二進位的顯示形式是給計算機看的。。。

子網掩碼的左邊是網路位,用二進位數字「1」表示,1的數目等於網路位的長度;右邊是主機位,用二進位數字「0」表示,0的數目等於主機位的長度。

例如上面的子網掩碼255.255.255.0的 「1」的個數是左邊24位,則對應IP地址左邊的位數也是24位;

十進位 二進位

IP 地址:192.168.1.199 ‐>11000000.10101000.00000001.11000111

子網掩碼:255.255.255.0 ‐>11111111.11111111.11111111.00000000

則這個IP地址的網路號就是11000000.10101000.00000001 ,轉換成十進位就是 192.168.1,網掩碼255.255.255.0的 「0」的個數是右邊8位,則這個IP地址的主機號就是11000111,轉換成十進位就是199.

下班了,後面有空再接。。。


子網掩碼不能割裂出來看。

子網掩碼、默認網關、MAC地址是需要一起解釋的東西。

1 計算機發送數據報的時候,知道對方IP是不夠的,必須要知道接受者的MAC地址才可以。數據鏈路層上是沒有IP地址概念的,只有發送者與接收者的MAC地址。

2 MAC地址與IP地址的關係,在乙太網上通過ARP維護。ARP簡單的工作原理為:

2.1 當有新設備加入網路時,會主動廣播自己的MAC與IP。

2.2 當接收到2.1的信息的時候,本機建立一張對照表維護這個信息。

2.3 當需要發送數據報給一個IP時,到2.2建立的表中查詢對應的MAC並發送。當查詢不到信息的時候,廣播一個查詢申請,要求指定的IP的主機執行2.1動作,並在稍後重新執行本步驟。

3 子網掩碼結合本地IP地址後,用來確定目標IP是否在「邏輯上」與本計算機在同一個網路內(不管實際物理情況)。當目標地址同網(邏輯同網,即兩個IP在與子網掩碼進行AND計算後得出的網路名稱相同),根據2.3策略直接發送數據;當目標地址不同網(邏輯不同網,即兩個IP在與子網掩碼進行AND計算後得出的網路名稱不同),則根據2.3策略但將數據報發往默認網關IP對應的主機,由其負責路由代發(*)。

(*)默認網關為一個默認路由,如果有更明確的路由記錄,則直接發往路由指向的目標主機。


子網掩碼的作用就是用來告訴主機有哪些ip地址是跟自己在同一個廣播域里,廣播地址又是什麼。

這樣當主機與同一個廣播域里的其他主機通訊時就可以直接通訊,如果不在同一個廣播域里,就發給默認網關。

比如ip是192.168.1.199/255.255.255.0,表示192.168.1.1-192.168.1.254在同一個廣播域,廣播地址是192.168.1.255。

如果改為192.168.1.199/255.255.255.192,表示與自己的ip在同一廣播域的ip範圍是192.168.1.193-192.168.1.254,廣播地址192.168.1.255

如果再改為192.168.1.199/255.255.255.240,表示廣播域ip192.168.1.193-192.168.1.206,廣播地址192.168.1.207

第一個掩碼對應的廣播域有254個可用ip,第二個掩碼對應的同一網段可用ip只有62個。第三個掩碼則只有14個。

假設目的地址是192.168.1.100,本機和對端都使用前面的24位掩碼,二者在一個廣播域里,直接通訊就可以了。本機和對端都使用後面的26位掩碼,二者必須通過路由器進行轉發才能通訊。

如果二者本應在同一廣播域里,掩碼本應該都設置為24位,但是誤將其中一個設置為26位,這種情況下,如果二者都正確配置了默認網關,並且默認網關正常運行,二者就可以通訊。

ensp模擬器實測通過。


1. 不經計算,直接從IP地址讀出網路號、主機號是有類網路的功能。

2. 有類網路並不能使用 255.255.255.192子網掩碼。

3. 有類網路已被淘汰,幾乎不再使用了。

4. 至於無類網路下/24和/26的關係,你可以自己計算一下,看看什麼情況才會跨越子網。

CIDR  VLSM

/24   255.255.255.0

/26   255.255.255.192

簡單歸類:

長度固定的掩碼 -&> 有類網路

IP地址分A/B/C/D/E類 -&> 有類網路

3種掩碼對應A/B/C類IP地址 -&> 有類網路

長度可變的子網掩碼 -&> 無類網路

IP地址沒有分類 -&> 無類網路

CIDR 地址表示 -&> 無類網路

VLSM 子網掩碼 -&> 無類網路

延伸閱讀:

路由和交換基礎


子網掩碼里的192是什麼意思呢?這個數字跟ip沒半毛錢關係!你把他想像成一個指令 這個指令就是指將256個地址劃成了四塊!ip地址0到63是一塊 64到127是二塊 128到191是三塊 192到255是四塊 所以當你看到192.168.1.199 255.255.255.192 是什麼意思呢?就是說你的地址是192.168.1.199而且你是在第四塊里!啥?你問我在這塊里又怎麼了?那我就告訴你!同一個塊里的地址可以互相通信!厲害吧??

至於你說在同一個區域網里不同掩碼能不能通訊 這個問題我借用林沛滿先生所著—wireshark網路分析就是這麼簡單 一書里開篇的例子給你解釋!

(此出省略對林先生的仰慕之情一萬字)

假設主機A

ip:192.168.1.3

掩碼255.255.255.0

網關192.168.1.1

主機B

ip192.168.1.200

掩碼255.255.255.0

網關192.168.1.1

此時通信沒有問題

然後

我很犯賤的把A的掩碼改成了255.255.255.128!

我就問你賤不賤!

先下班 有空再回答

突然發現這裡還有個問題沒回答完 那就回答完吧

A的掩碼修改完後 我通過A來pingB 會有啥後果??能通嗎?BpingA能通嗎?兩者有啥區別?

先說ApingB

A通過對比本地ip 目的ip和本地掩碼得出結論 B和自己不屬於一個網段

怎麼對比出來的?A的掩碼告訴A:和你屬於同一個網段的地址只有192.168.1.1到192.168.1.127這128個地址 其他地址都不和你一個網段

所以A會把數據包發給網關 通過網關轉給B

B收到數據包準備回包了 目的地址是192.168.1.3 此時B的子網掩碼告訴B:A是跟你一個網段的 你直接發arp包查找A的二層地址就可以了!於是B就直接發包給A了

結論:A給B發包需要網關轉發 B給A發包可以直接送達給A


子網掩碼是為了區分網路位和主機位。把IP地址比作一個人的名字,那麼子網掩碼可以讓你知道什麼是名,什麼是姓。

假設給你個名字,萊昂納多迪卡普里奧。你並不知道這九個字名和姓是從何處分開的。那麼現在給你一串數字111100000,告訴你這九個二進位數字分別對應名字的九個字,1和0的分界處就是名和姓的分界。

再舉個栗子。有一個網段是192.168.1.0 ,咱們把它比作一個村子,叫做司馬村。此網段的有一個主機地址是192.168.1.5,咱們叫他司馬光。另又有網段是192.168.0.0,叫做司村,村裡面同樣有個人叫做司馬光,主機位同樣是192.168.1.5。

這個時候給你司馬光(192.168.1.5IP地址)這個名字你如何區分他是哪個村子的?就需要子網掩碼了,司馬村的子網掩碼是255.255.255.0 ,而司村的子網掩碼就是255.255.0.0,這個時候你就能知道司馬光是哪個村子裡的。

192.168.1.5對應的二進位數是

11000000.10101000.00000001.00000101

而255.255.255.0對應的二進位數是

11111111.11111111.11111111.00000000

255.255.0.0的二進位數是

11111111.11111111.00000000.00000000

因為子網掩碼為1時對應的就是主網網段,也就是姓。為0對應的是主機位,也就是名。

把255.255.255.0對應的網段取出來就是192.168.1.0

255.255.0.0對應的網段取出來就是192.168.0.0

給你198.168.1.5是,只要憑子網掩碼就可以知道他是哪個網段的。

即就知道司馬光到底是姓司馬還是姓司,同時也知道他住在那個村子了。

看了一圈,感覺我的回答還是比較通俗易懂的!!!


用IC設計的知識來舉例的話,所謂子網掩碼就是好像是SOC系統里模塊地址段的分段掩碼,假設有一個32位系統,處理器可識別的系統內部空間地址段為0x00000000-0xFFFFFFFF,如果系統里有16個模塊,那麼平均分配的辦法(實際上不可能這樣分配)就是第一個模塊分到0x00000000-0x0FFFFFFF,第二個模塊分到0x10000000-0x1FFFFFFF,以此類推。所謂的地址分段掩碼,就是0xF0000000,這個掩碼可以把每個模塊的區塊地址進行區分,而將模塊內部的偏移地址進行屏蔽,在進行匯流排設計的時候,模塊介面處只需要把被訪問的地址和該掩碼相與,如果發現它等於分配給自己的地址段首地址的話,則對訪問進行相應。假設被訪問地址為0x12345678,通過0xF0000000 0x12345678操作得到0x10000000,那麼第二個模塊就知道該地址訪問的是自己,就可以進行響應了。


計算機物理層只懂通電 斷電也就是1和0,只能用二進位給它信號,子網掩碼是用來確定一個IP背後的網路位和主機位的,是一個32位的數字。

一個IP地址如192.168.1.1,只是一組點分十進位數字,沒有net mask是無法賦值的(網路號 廣播號 網路大小)。

00000000.00000000.00000000.00000000=0.0.0.0

11111111.11111111.11111111.11111111=255.255.255.255

11111111.00000000.00000000.00000000=255.0.0.0=/8

11111111.10000000.00000000.00000000=255.128.0.0=/9

……

255.255.0.0=/16

255.255.255.0=/24

1的位數決定了子網數,0的位數決定了每個子網裡的主機數。

如/8掩碼,子網數=2的8次方個,每個子網有2的24次方個主機地址。

每個子網第一個IP是網路ID,最後一個IP是廣播ID。

換句話說子網掩碼可以把網路塊變大變小,同廣播地址的網路才能本地通訊。


子網掩碼是用來識別目的主機是否和源主機在同一個子網中的。

源主機使用子網掩碼和目的ip地址做與運算,子網掩碼和源主機ip地址與運算,這兩個結果作比較,如果想等,表示在同一子網中,直接投遞到目的主機。

如果不相等嗎,表示不同子網,所以扔給路由器。

如果子網掩碼設置的1長了(就是比如全都是1)那麼不影響通信,只是本來內網通信可以直接扔給目標主機,但是由於子網掩碼判斷為不同子網的主機,所以都會扔給路由器。路由器再送給目的主機。

但是如果1短了 (比如,一個B類地址,其子網掩碼使16個1的),那麼根據子網掩碼的判斷,只要ip網路部分相同,都會被認為是在同一子網中(因為與運算的結果都一樣),然後直接送到目的主機,不經過路由器。

這時候arp中肯定沒有目的主機的物理地址緩存,所以,發送arp請求。

但是目的主機不在同一子網中,arp不能誇路由。所以,最終卡死在arp上。

這就是子網掩碼的作用。

是和子網配套使用的。


以下只針對IPv4。首先,把四位十進位數的掩碼轉成32位二進位數,如果不是左邊連續的1右邊連續的0,那麼就不是正確的子網掩碼。例如: 1111 1111 1111 1111 1111 1111 0000 0000。

其次,掩碼是用來區分IP address里的network address 和 user address的。通過把轉換成二進位的IP address和 Subnet mask按位與,可以得到network address。剩下的就是user address。

如果在一個網路里,那麼兩個用戶的network address應該是一樣的,掩碼肯定也是一樣的,並且此時的報文傳輸可以不用路由。

如果不在一個網路里,那麼兩個用戶的network address不會是一樣的,但是 subnet mask可以是一樣,也可以是不一樣,畢竟它只是決定了IP address的左側多少位是network address。此時的報文傳輸為: 用戶所在的兩個子網外用network address來走路由協議,子網內用user address,此時不用路由。


個人理解子網掩碼就是為了把一個子網劃分為多個子網用的

當ip地址為192.168.1.199時,如果子網掩碼為26位的話就相當於把192.168.1.0這個網段劃分了子網,把192.168.1.199和255.255.255.192轉化成二進位做「與」運算,就得出了子網號為192.168.1.192,很明顯和192.168.1.199/24不是同一個子網,因為192.168.1.199與255.255.255.0做與運算得到的網路號是192.168.1.0

在同一個區域網中出現這兩個子網用路由器就可以通信了

非計算機網路專業,特別喜歡這個,關注@車小胖很久了,希望得到指正,么么噠敬上


VLSM 可變長子網掩碼。 子網掩碼作用是確定網路位的,還有計算網路地址。最後說一句自己實驗行不行很容易。


掩碼(mask)在計算機裡面,一般都是用來操作二進位串的某位、某些位,或判斷某位上是0還是1的。至於子網嘛,根據其字面含義,結合ABCD這四類網路的劃分,子網就是對這四類網路的子網路(好像跟沒說似的)。那劃分標準呢?就是靠掩碼,也就是子網掩碼。根據子網掩碼,一般都是連續的1和連續的0組成的。根據掩碼的語義或規則,它不就是把ip中,從高位往低位「數」N位(N為掩碼中連續1的個數),這N位就是子網路的標識了。

說簡單點,就是把網路再細分的一種手段。


ip地址分網路位和主機位,初學者理解掩碼最好從二進位角度,其實就是用來表示ip地址從左起有多少位是網路位,把ip地址和掩碼轉換成二進位按位進行與操作就得到網路地址,想知道兩個ip地址是不是在一個網段,分別各自與掩碼進行與操作,結果一樣就在同一網段,不一樣就在不同網段


把所有點分十進位,轉換成2進位。

IP地址和子網掩碼都是一個子網掩碼都是一個32位的二進位數。

子網掩碼有個非常明顯的特徵,就是前面是連續的1,後面是連續的0。一定是這樣。

然後和IP地址的二進位數對齊。1對應的就是網路號段,0對應的就是網內主機號段。

光看我的答案沒有用,再找本書多看幾次。輔助理解


減少發送範圍用的,目的是為了降低網路損耗。


不請自來,這東西,如果有台switch你可以自己去動動手練習練習就都能明白了。沒有條件,又看不明白破書上一堆堆的術語,那麼最好找視頻教學,就入門來說要比視頻容易理解一些


推薦閱讀:

http, keepalive用來複用連接,這樣不就是串列的了么,瀏覽器會並行的多個請求發出,keepalive怎麼體現作用?
NoHttp 與 OKHttp 異同?以及兩者的發展前景?
如何理解華為公有雲中提到的全動態BGP?
小米路由器是外包做的嗎?

TAG:計算機網路 | 計算機科學 |