為什麼每台電腦都要設置子網掩碼?

既然子網掩碼是為了讓路由器能夠決定一個數據包在區域網內發送還是發到公網,那麼按道理只有路由器需要知道子網掩碼,為什麼在固定IP時每台計算機都需要單獨設置子網掩碼?有沒有什麼情況同一區域網內各計算機所設置的子網掩碼有不同的?

原問題在這:為什麼每台電腦都要設置子網掩碼_百度知道


那先順著題主的意思來,電腦不用網路掩碼,我現在給你三個IP:

A:10.1.1.2
B:10.1.1.3
還有互聯網上的一台伺服器D:8.8.8.8
電腦連在交換機上,它們可以通信嗎?

A與B通信應該沒有問題,A可以通過ARP廣播發現B的MAC地址,B也可以發現A的MAC地址,這沒有問題。

那A如何通過ARP廣播發現D的MAC呢?
沒有辦法!因為ARP廣播會在本地網關終結(Termination),無法進入Internet。

那我們日常生活中,是如何解決這個問題的?
網路掩碼!

網路掩碼
A:10.1.1.2/24
網關:10.1.1.1/24
D:8.8.8.8

當A試圖訪問D時,用24位掩碼來按位於8.8.8.8,得到網段是8.8.8,和自己的網段10.1.1不相同,就會知道,需要自己的網關(代理)介入,把發給8.8.8.8包先發給網關,網關會有辦法把8.8.8.8的IP包送達目的地。

於是A通過24位掩碼,計算網關的網段是10.1.1,和自己的網段一樣,既然一樣就可以發送ARP廣播發現網關的MAC地址了(為什麼?沒有為什麼,協議就是這麼規定的),然後二層目的地MAC = 網關的MAC,目的IP = 8.8.8.8,這好像有點滑稽,二層與三層指示的目的地址並不一致,這就是三層代理的原理。

然後網關就可以依據8.8.8.8來查詢路由表,將包發到上游的Internet路由器上,最終到達目的地。

關於代理更多內容,請參考:https://www.zhihu.com/lives/917034736428404736


一個網路訪問有源地址跟目標地址。

路由器只知道計算機的源地址屬於自己,因為這些計算機在物理上接入自己,但如果不設子網掩碼,路由器就不知道計算機訪問的目標地址是在外網還是內網。

不過我還是試圖猜測一下題主的意思:既然幾乎一個路由器內的計算機,子網掩碼都是 24,為什麼還要在計算機單獨設置,而不從路由器層面設定「接到這個路由器內網的所有計算機都是24子網掩碼」?

我覺得這個比較好解釋,你只要考慮這個路由器的上一級路由器就好了,因為上一級路由器連接的終端就可能是16也可能是24掩碼,這一級路由器下的設備就必然可能出現不同的子網掩碼,因此,子網掩碼還是得在設備上設定,而不能僅僅在路由器設定了。


在配錯了的情況下,可能出現同一區域網內某些計算機所設置的子網掩碼有不同的。


因為電腦其實也是一台路由器,一台簡單功能的路由器,如果你linux用的熟,我還可以跑BGP呢!

所以你要給他設個子網掩碼,因為它本來就不是一個傻終端。


並不是決定了路由器是否發出去,而是決定了你自己是把這個包直接填上對方mac地址發給對方

還是填上路由器的地址把這個包交給路由器發出去。

在同一個子網下發包並不需要路由器幫忙轉發

在現在大部分都是交換型乙太網下,路由器甚至不知道網內兩個主機間有直接通信行為


子網掩碼主要是用於給你自己的計算機指示傳輸路徑的,因為內網通信和外網通信在你發出報文的第一步操作就是不一樣的。我們都知道IP地址是網路中每個設備的身份標識,那麼如何確保其唯一性呢?答案是在前面加上一個範圍標識。IP地址如果以人來比喻,它相當於三年二班周杰倫。這樣就不會和三年一班的周杰倫重複了。那麼問題又來了,IP地址中沒有分隔符,如何正確指示地址和姓名?如何讓計算機明白你說的是三年級二班的周杰倫,還是三年級的「二班周杰倫」(假設這個姓名合法)?所以就有了子網掩碼。它的全1位指示了IP地址的網路號,即「三年二班」,全零位指示了IP地址的主機號,即「周杰倫」。
現在你要給三年二班周杰倫發一個紙條。通過子網掩碼的計算,你發現他在隔壁的班級,你們不能直接發紙條的。所以你不得不讓班主任代為轉交,收件人是三年二班周杰倫(目的IP),但是第一步是發給了你的班主任(網關)。
假設你倆就在同一個班級,那情況就簡單多啦。你直接把紙條扔給他就好了(單播)。
在這中間其實還有一步。如果你連周杰倫的具體位置都不知道,你丟紙條也不知道往哪個方位丟對不對?所以你需要拿個大喇叭在教室里喊一聲周杰倫你丫的座位在哪裡(廣播)?然後他會給你發個紙條告訴你座位號(Mac地址)。這個過程就是rarp。然後你就可以把紙條丟過去了。
綜上所述,子網掩碼的作用是讓發送消息的設備判斷目標與自己是否處於同一個網路,從而採取對應的操作。所以,每個計算機都必須要設置子網掩碼。當然了,路由器要進行網路數據包的轉發,也需要設置子網掩碼。


題主困惑的是因為用的家用路由器吧,這種路由器是比較傻瓜的,路由和交換功能是集成在一個設備里的,所以數據不論傳到內網還是外網都要發送給傻瓜路由器。如果按照OSI模型TCP/IP協議詳細分析的話,題主的疑惑便可迎刃而解。

在正規的網路環境中,設備 如電腦等 是連接在交換機上的,交換機再往上接到路由器上。

子網掩碼用來判斷是否在一個網段這點答主清楚就很好解釋下面的了。

如果掩碼位相同,則判定為同一區域網,則直接將數據包發給交換機,通過MAC地址錶轉發就可以通信了。如果掩碼位不同,則判定不在同一區域網,需要路由出去,所以就需要把數據包發給網關,由 路由器根據路由錶轉發出去,進行外網路由通信。

所以每台設備上都要配子網掩碼,這樣設備通信的時候才知道這個數據包要發給路由器還是直接交換機就能處理。

同一個區域網內掩碼都是一樣的,只有一樣才是同一個區域網。這是協議機制。

______________________________________

#以下為更新內容

上面的描述方式是為廣大答友便於理解的白話解釋,仔細推敲的話並不嚴謹,所以下面遵循OSI模型來重新回答一下。

設A:10.1.1.10 /24

B:10.1.1.20 /24

C:50.1.1.80 /24

AB在同一區域網,C位於外網。

三個表:

ARP表:主機維護,存放IP地址和MAC地址對應關係。

MAC地址表:交換機維護,存放MAC地址和交換機埠對應關係。

路由表:路由器維護,存放IP地址和路由器埠對應關係。

首先AB通信,例如A要給B發送一個數據包,目前A知道B的IP地址,根據掩碼規則判定B和自己在同一個區域網,同一個廣播域。接下來A通過廣播方式獲取B的MAC地址,添加到自己的ARP表中。然後把要發送的包封裝,然後發送給交換機,交換機收到數據包後解封裝得到B的MAC地址,根據MAC地址錶轉發到B所連接的交換機埠,完成發送。

如果A要和C通信,發送一個包給C的話,也只知道C的IP地址,然後A根據掩碼規則發現C和自己不是同一個區域網的,廣播不到C,所以A只能把數據包發給網關,由網關發出去給到C。A同樣通過廣播方式獲取網關的MAC地址,然後把C的IP地址和網關的MAC地址封裝到數據包後發給交換機,交換機解封裝後對比MAC地址表,發現是發給網關的包,就轉發到網關即路由器所在的交換機埠。路由器收到包之後再解封裝,得到C的IP地址,然後根據自己的路由錶轉發到相應的埠。完成通信。

所以如果計算機上不設置子網掩碼,從第一步就不能完成,下面就更不能繼續了。

如果同一個廣播域里有機器設置不同的子網掩碼,依然能夠通信,只不過有的內網包需要到網關繞一圈。外網包的話只要網關設置對了就沒問題。


思考一個問題:子網掩碼是如何讓一個主機能夠決定一個數據包在區域網內發送還是發到公網的

搞清楚這個,你就不會有這個問題了


網卡並不知道上層的協議是什麼,它並不知道自己的IP地址是多少,它只知道自己的mac地址。所以網卡收到數據是就兩個狀態:誒這個mac地址是我,我把數據傳到上一層;或者這mac地址不是我,什麼垃圾信息,扔掉扔掉。

也許你會問,為什麼不讓網卡也識別一下IP地址,這樣就可以僅僅有IP地址就能傳輸了?

因為還存在這種情況,網卡收到了一個數據包,mac地址是自己的,但IP地址不是自己的,比如路由器就會遇到這種情況,但是它任然需要把信息傳遞到上層,再由上層根據這個IP地址,決定用哪個介面,發給哪個和它連在一起的網卡(mac地址),這個就是路由的過程,具體的有多種路由協議。

所以數據包在乙太網(802.3或者802.11)中傳輸的時候不僅需要有IP地址,還需要知道mac地址,也就是數據鏈路層的地址

So,計算機發送數據幀的時候也要知道是發到內網還是外網,如果目的地IP在同一個子網下,那麼mac層的地址就填當前緩存的ARP表中對應的mac地址,如果ARP緩存內沒有對應的IP的話就先發個ARP包問一下這個IP地址是誰的,有的話直接發給對應的mac地址就行。

發到外網的數據包才需要發給路由器,這是mac地址填的是路由器的。

也就是說電腦也需要知道這個包是發外網還是內網,才能填正確的數據鏈路層地址(MAC地址)


子網掩碼主要用於劃分網段,用二進位來表示就是32位的數字。C類網段一般情況是前面24位全是1,8位一組來表示的話,就是11111111.11111111.11111111.00000000,換算成10進位是255.255.255.0。

是不是很熟悉?對,一般路由器設置就是
網關192.168.0.1 子網掩碼255.255.255.0

關於子網掩碼的工作原理,這就涉及到計算機一個叫做"與"運算的東西。"與"運算的意義就是,當兩個輸入的數據都為"1"的時候,輸出"1"。

假如一個ip地址與子網掩碼進行"與"運算,由於子網掩碼最後的幾位都是0,"與"運算的結果就能將網段和計算機在這個網段的位置給識別出來。

當你的計算機要發送數據給一個ip時,他會拿這個ip和你分配到的ip與設置的子網掩碼分別進行"與"運算,當得出的結果不一致的時候,電腦就會認為這個ip與你不在同一個區域網,需要通過網關進行轉發,否則就是直接發送。

我們普通人用路由器自帶的設置就可以了。除非你的網路環境複雜的時候,比如電腦雙網卡的情況(如同時接入了內網和外網;或者開了vpn又不想所有流量都走vpn的時候),你就需要用route命令來對路由協議進行設置實現同時使用,如果不懂子網掩碼,就沒法劃分網段,也就沒法定義數據包的路由。

Ps:好久沒弄網關這些事了,希望自己沒記錯。


問題描述里的這句話「子網掩碼是為了讓路由器能夠決定一個數據包在區域網內發送還是發到公網」我覺得是有問題的。

最先決定一個數據包在區域網內發送還是發到公網的,不是路由器,而是設備(聯網的計算機)自身。

- 區域網內發送,不需要經過路由器,直接交付即可;

- 發到公網,路由器才參與進來。

究竟是發到區域網還是公網(要不要路由器幫忙),怎麼判斷?本機子網掩碼的作用就體現出來了。

當然,我這裡說的路由器,不是家用的無線路由器;電腦也可以做路由器使,情況很複雜,語言很貧乏,懂大概意思就好。

兩台電腦:

- 電腦 A

- 電腦 B

電腦 A 要發個東西給電腦 B ,電腦 A 首先要乾的是啥?是判斷,是決策。

電腦 A 首先要判斷這個東西,直接在子網發,還是要通過路由器間接地發。這個決定首先不是你路由器做的,而是電腦 A 自己做的。

怎麼做這個判斷?靠的就是子網掩碼,設置在電腦 A 上的子網掩碼。這個判斷過程,和路由器沒有任何關係,路由器路由表裡的子網掩碼和這一步也沒有任何關係。

電腦 A 通過自己所在子網的子網掩碼,判斷電腦 B 是否和自己在同一個子網上。

- 如果 A 和 B 在同一個子網,直接交付即可,不需要路由器轉發;

- 如果 A 和 B 不在同一個子網,必須由子網上的路由器進行轉發。

請注意,電腦 A 判斷電腦 B 是否和自己在同一個子網上,這個過程是電腦 A 在做,不是路由器在干!所以電腦 A 上必須設置子網掩碼,不然這活兒沒法干啊。

假如電腦 A 和電腦 B 在同一子網,那麼它倆可以直接勾搭,不需要路由器這第三者攙和。

假如電腦 A 和電腦 B 不在同一子網,電腦 A 想和電腦 B 交流,思前想後,通過子網掩碼運算後的結果,不在同一子網啊,怎麼辦啊?發給路由器,讓路由器轉發咯。這時候路由器路由表裡的子網掩碼才有用武之地。

至於說同一區域網內各計算機所設置的子網掩碼不同,我的理解是,不同子網的子網掩碼可以相同,但是同一子網內個計算機的子網掩碼肯定是必須相同,不然怎麼叫同一子網?


不邀自來。

首先明確:

1、計算機在同一區域網 ≠ 計算機連接到了同一路由器;

2、同一區域網內的各個計算機的子網掩碼是相同的;

3、路由器下當然會存在多個子網段。

答題:

就按照題主的設想來,假設有一台電腦沒有設置子網掩碼,或者說這台電腦壓根沒有子網掩碼這種概念,那麼請問題主,這台電腦在剛接入一個區域網內的時候,路由表為空,該如何與其它電腦通信?

就拿車總說的例子,A就是這台電腦,它要和B,D通信,A,B在同一區域網下,D在互聯網上。那麼A只有通過ARP廣播才能去發現B,D,然後才能與它們通信吧。包含B的IP地址的ARP廣播包會在整個區域網中傳播,直到發現B的MAC地址,同時B也知曉了A的MAC地址,它們之間可以通信了。

包含D的IP地址的ARP廣播包呢?無法找到目的IP,從而被丟棄。

那麼找不到地址的包丟給網關可不可以呢?我認為當然可以,但是因為你這個包是不具有子網掩碼的,我認為網關的做法是丟棄你這個不具有子網掩碼的包,即使假設網關是可以接收這個包的,但是當網關解析地址時,無法知曉這個地址屬於哪個網段,所以網關無法處理這個包,不知道這個包該發給誰,因此這個包被丟棄。你可以說本地網關不知道,可以傳給上層網關,可是上層網關也不知道怎麼辦呢?以此類推。

給你舉個不恰當的例子,比如說你要寄信,寫地址時,XX省,XX市,XX區什麼都不寫,只寫了XX路,例如「南京路22號」(隨便瞎寫的,如有冒犯請見諒)。或者更符合這個問題的場景應該是:你其實寫了XX省XX市XX區南京路22號,把這封信給了郵局,而郵局只能識別出最後的「南京路22號」(路由器只知道IP地址,不知道哪一部分是網段),你想郵局要怎麼寄?全國很多省都有南京路22號,郵局要怎麼知道發給哪個南京路22號?因此郵局只能把這封信退回給你了。

另一種方式,像你說的,直接到郵局,告知郵局這個南京路22號的具體地址(人為,顯示的方式在路由器中加入D的地址,以及D的掩碼),那麼我們就需要告知郵局這是哪兒的地址,假設一個人一條,100個人就有100條通告,地方郵局有100條,那麼整個市,整個省呢?郵局光查地址都來不及,整個郵局系統估計都得癱瘓了。

反過來,如果每個人都把地址寫的清晰而具體呢?清晰到郵局可識別呢,那麼郵局會輕鬆很多。

綜上所述,每台電腦都要設置子網掩碼。

P.S.其中:

1、A是否只能通過ARP廣播通告的方式尋找B,D?

2、(網關)路由器壓根不接收子網掩碼缺失的包?還是拿到這條沒有掩碼信息的包,是會直接丟棄?還是會查詢路由表後丟棄?還是會繼續向上轉發?

以上兩條我還存疑,待我繼續學習後補完,也希望大家能幫忙解決。

此條答案本來是對車總 @車小胖 回答的評論,感覺放不下了就生成了答案,也希望車總能幫我解答其中的一些疑問。

歡迎與大家討論,如有錯誤,請不吝指正,回復不及時也請諒解。如需被摺疊,請隨意。


所謂的子網掩碼是什麼?子網掩碼應用在網路層,在主機與主機之間傳送數據報的時候能夠通過已經知曉的某個目的主機的IP地址,找到其對應的網路地址,從而將相應的數據報文傳輸給對應的路由器。所以子網掩碼是為了在數據報文傳輸的過程中更加高效率的找到網路地址進而傳輸給相應的路由器。子網掩碼的規定其實非常簡單,通常將一個網路中的網路號或者子網號的部分全部寫為1,而將主機號的部分寫為0。用子網掩碼的每一位和ip地址的每一位相與,即可得到這個ip地址對應的網路地址。本人知識有限,回答不好的地方敬請大家批評指正。


大神很多

我講的粗俗些,IPv4協議就是這麼規定的,IP地址加上子網掩碼,才是完整的地址

否則別人怎麼知道你叫楚中天還是林蛋大


一直理解子網掩碼是用來分組,網關是組長


不對請糾正啊~


我覺得題主的問題是為什麼不能讓所有IP地址都劃分在同一個子網內?答案是不能。簡單來說子網劃分的目的就是不讓所有地址都隨隨便便的互相訪問,一來時便於管理,二來是可以隔離故障。舉兩個例子,比如公司內部員工工作區跟伺服器區需要隔離開來,我們就可以劃分VLAN,定義訪問控制策略或者防火牆來起到隔離的作用。如果所有設備都在同一子網中,我們就沒有辦法阻止他們的訪問。第二個例子,隔離故障,子網的劃分可以很大程度上把問題控制在一個相對小的區域,便於排查以及解決。如果全世界的設備都在同一子網內,一個廣播風暴不是全世界網路都癱瘓了。


為什麼計算機也要設置子網掩碼?我想了一下,子網掩碼規定了網關和普通計算機之間的許可權。答主最早有許可權這個概念的時候是在上資料庫的時候,不同的級別有不同的許可權。
我們不妨設想一下,其實一個計算機網路就好像是一個人類社會,社會是由一個個的社區構成的,一個社區就要有一個「族長」。

這個想法來源於我們的一次期末考試——

成為社區中的一員。(註:這不是廣告,只是為了更好的回答)
好。言歸正傳,那計算機上網為什麼要有ip地址,子網掩碼,網關。
第一,每個人都需要一個名字,這就是為什麼要ip地址。
第二,每個人在碰到自己能解決的問題時自己解決,自己解決不了的問題都要去找族長。
第三,什麼是自己能解決的呢?就是和同一個社區的人通訊,同一個社區的人就是自己的ip地址被子網掩碼遮掩之後的這些人,所以普通計算機的許可權就在自己ip地址的後幾位。。。。。。那什麼是自己不能解決的呢?和其他社區的人通訊就要族長親自出面和對方社區族長洽談,對方社區族長再找你要通訊的人′???`


不請自來,都在回答你的第一個問題我回答後一個吧有沒有一個區域網存在不同的子網掩碼,答案是有,舉個栗子,你學校的校園網,是一個區域網,教師登錄和教務處登錄和你宿舍肯定是屬於不同的子網,這種時候你們雖然同屬一個區域網可是子網掩碼不出意外肯定是不同的(除非你們教務處的機子數量和老師還有你們學生一樣多,我個人認為不存在)子網掩碼是用來劃分網路主機數的,因為私有地址數量有限,多個部門不可能不劃分子網,你們是看不到財務部的數據的。。。感覺有點亂,這麼說吧如果你們學校內網有十個不同的部門,私有的默認網段只有三個 10,172,192,那麼他們的資料是可以互相讀取的,這種時候就要做子網劃分,子網掩碼(netmask)代表你的網路號,用來劃分網路,可以實現內部通信環境的時候可以在交換機或路由器做出相應配置拒絕網段訪問,不然一個個主機號打網管會累死的。。。手機敲字好累,有什麼說錯的歡迎各位指正


這是把菜刀啊!一刀下去分出內外,對電腦來說也一樣需要知道誰是外,誰是內,以路由器為邊界


基於5元組的互相訪問不需要知道子網 補充:相訪問不需要知道子網

某些情況下光靠ip無法判斷出該ip處於哪個子網。(區域網管理不便)

子網分割衝突域,更優化分配ip地址,及保障同一衝突域內報文數量不會太多,造成某些問題。

子網掩碼轉換成點分二進位後,

255.255.192.0 (11111111.11111111.11000000.00000000)

ip的點分二進位第17 18 為子網位 (可改變為00,01,10,11 從而劃分成4個網段)

ip的點分二進位第17 18位與子網位逐位相同

舉例:

詳見

計算機網路第6、7版 pdf//本科教材

or

計算機網路實用技術 pdf//高職教材


推薦閱讀:

一區域網內有 5 台電腦,其中一台是固定 IP,經常會上不去網,這是為什麼?
黑客攻擊某台機器時,隱藏自己的IP的方法有幾種?相比較哪種更難以追蹤?
如何正確理解通配符掩碼?
虛擬機使用NAT連接網路,數據流量是否會攜帶物理機的信息?
為什麼沒有 IPv5 ?

TAG:科技 | 計算機網路 | 計算機科學 | IP地址 |