如何形象生動的解釋ip地址、子網掩碼、網關等概念?


謝邀。

這些概念可以用傳統電話網路來比喻,比如你在公司里,你的分機號是6666(主機地址),而你們公司電信局分配的局號是2222(網路地址),那麼你的號碼就是2222 6666 (IP 地址),本地電信局用來分辨各個局(分布在全市的程式控制交換機)採用的掩碼是11110000(IP 掩碼),比如2222 6666與掩碼1111 0000 做按位與操作,得到2222,於是電信局就把22226666這個電話轉到連接你公司電話的程式控制交換機,再轉給你公司的程式控制交換機,你們公司交換機不要看2222,於是把2222去掉,只剩下6666來進行查詢對應哪個埠,然後把電話轉到對應的線路,完成。

採用掩碼可以節省查詢的時間,比如2222 6666,用掩碼1111,最多需要查10000次,而不用掩碼需要查100000000次,很顯然前者更優。

網關就相當於你公司的程式控制交換機,你如果撥打2223 5555,公司的交換機知道這不是本公司號碼,於是發給自己自己上游的電信交換機, 局端交換機可能只要在查自己的轉發表就可以轉發。而如果是3333 5555呢,可能還要往上一級的總局交換機才可以完成交換。

全球IP地址相當於你電話號碼的全部顯示方式,那你的號碼就是 86 21 2222 6666

86 國家號
21 地區號
2222 電信局號,對應最靠近你公司的交換機機房
6666 你的分機號

你可以把6666 看作私有IP地址。


你可以看出電話交換機網路是採用分層的方式,國家號只要查詢3位就可以確定國家號(086),查詢4位就可以確定地區號(0510),這樣會大大節省查詢時間,加快交換的速度。

對應於IP世界,也是採用分層的方式,採用網路掩碼也是為了減小不必要的查詢,加快IP包的轉發效率。


多老的問題了為什麼還要邀請我……最高票的的確挺形象的但是要點不太清晰,大致整理下
網路模型被OSI分成七層,TCP/IP協議大致對應了2、3、4、7層,分別是數據鏈路層、網路層、傳輸層、應用層,IP協議處於網路層上,它的工作原理說白了並不複雜:

  1. 整個互聯網上所有的機器都有唯一一個IP地址對應。這並沒有什麼稀奇的,MAC地址也是唯一的,稀奇的在後面
  2. 機器的IP地址按照連接順序進行了一定程度的分組,這樣一個連續的IP段大致都在相同的路線上,這樣路由器尋找特定IP地址的時候就方便多了,把整個地址空間分成若干個可能重疊的大段,每個大段一般這樣表示:A.B.C.D/n,表示32位IP地址的前n位與A.B.C.D的前n位相同。比如192.168.1.0/24,所有前24位與192.168.1.0相同的都是這個網段的IP,由於IP地址8位一分組,24位就是前三段,也就是192.168.1.x。符合規範的這段連續的IP段就叫做一個子網。這種子網的表示方法叫做CIDR。
  3. 這種表示方法對人來說比較直觀,但是計算機有另一種更快速的計算方法,對於A.B.C.D/n,我們構造一個前n位都是1、後面其他位都是0的IP地址,這個32位IP地址和A.B.C.D按位與的結果,就是前n位與A.B.C.D相同而後面其他位都是0的IP地址;如果這個32位IP地址和另一個IP地址與的結果,剛好與A.B.C.D與的結果相等,就說明這個IP地址和A.B.C.D的前n位相等,就說明新IP地址在CIDR範圍內。我們把前n位都是1、後面其他位是0的地址也用IP地址的形式表示出來,那麼192.168.1.0/24對應的就是255.255.255.0,這個就叫做子網掩碼,掩碼也就是mask,mask在計算機用語當中表示按位與的操作數,用來從目標數中取出特定的二進位位。也就是說IP+子網掩碼是CIDR的另一種表示形式。


對於任意一台計算機或者路由器來說,它首先會有一些本地的鏈路,這些鏈路的IP地址都在各自特定的CIDR當中,這個子網叫做鏈路子網,鏈路子網中的IP地址都可以通過鏈路層協議直接訪問,具體的訪問方法與IP協議無關,在乙太網當中是靠ARP,但是如果是WLAN,或者令牌環網,或者PPPoE,又會有所不同。比如子網是192.168.1.0/24,那麼範圍內所有IP地址都會直接調用鏈路層協議訪問。表現在路由表中,就是這樣一項:

192.168.1.0/24 -&> link local, ifindex = XXX

即「192.168.1.0/24範圍的IP通過XXX網卡的鏈路層協議直接訪問」

如果還有其他鏈路,也會有相應的表項,比如說還有一個網卡上面的鏈路子網是111.222.1.0/24,那麼就有另一項:

111.222.1.0/24 -&> link local, ifindex = YYY

特別的,每個網卡上都會有一個IP地址,是本機的IP地址。當數據包發到這個IP地址的時候,設備就會正確理解「這個數據包是發給我自己的」,否則會理解為「這個數據包需要我代為轉發」。這些本機的IP地址一定在鏈路層子網當中,比如說192.168.1.0/24中本機的IP地址是192.168.1.1,111.222.1.0/24中的IP地址是111.222.1.15,那麼就有兩個表項:

192.168.1.1/32 -&> local

111.222.1.15/32 -&> local

到local表示交給本機的更高層的協議棧,比如TCP/UDP去處理。否則會轉發到其他機器。

我們注意到這些表項和剛才的表項有重疊的部分,比如說192.168.1.1/32其實包含在192.168.1.0/24裡面。路由表的不同表項有不同的優先順序,子網越小的越優先,也就是後面n越大的越優先,這樣192.168.1.1/32就比192.168.1.0/24優先。


除了這些IP地址以外,其他的IP地址顯然是無法直接訪問的,需要由其他設備進行轉發。不同網段的IP地址可能需要不同的設備進行轉發。我們必須在路由表當中記住某段IP具體由哪個設備轉發,記錄的方法是記住需要轉發的IP段CIDR,和需要發往的設備的IP地址,像這樣:

100.101.1.0/24 -&> via 192.168.1.17

這個via後面的地址,192.168.1.17,這個設備有進一步將數據包轉發到目的網段的能力,比如說上面有一個鏈路層子網就是100.101.1.0/24,或者有另一條路由信息表明這個網段應該進一步發給其他的某個設備。這個設備在IP協議當中就叫做Gateway(網關),因為所有發到目的網段的流量都會從這個設備上經過,這個設備像個門一樣,把兩個網段連接了起來。

大多數情況下,這個IP地址位於某個鏈路層子網中,這樣本機可以直接通過鏈路層協議將IP報文發送到網關。一部分設備(主要是硬體路由器)支持遞歸的路由表配置,這個時候網關地址可以不是本地鏈路層子網中的地址,當需要將IP報文發送到這個網關時,設備會遞歸查找網關的路由信息,直到查找到可以直接發送的地址為止。


互聯網上的網段太多了,而且天天都在變,我們不可能給每個設備都配上互聯網上所有的網段。幸好,對於大部分設備來說,除了特定的少數幾個網段以外,大部分IP地址都有相同的網關,於是我們可以通過配置一個包含整個IP空間的CIDR來指定大部分IP地址的共同的網關:

0.0.0.0/0 -&> via 111.222.1.254

由於前面說的原則,子網越小越優先,這條規則的優先度最低,而且能匹配所有的IP地址,因此可以理解為無法匹配到其他子網網段時使用的默認規則,因此這個網關一般叫做默認網關。

一個設備可能有多個網關,但是一般最多只有一個默認網關(不考慮等價路由、策略路由等複雜的情況)。也有可能沒有默認網關,比如說骨幹網上的路由器通過BGP協議交換路由信息,一般路由表就由非常多的CIDR組成,這些CIDR合起來能覆蓋互聯網上所有的公網IP。


最後說下鏈路層地址與IP地址。許多鏈路層協議也有自己的地址,一般是MAC地址,比如最常用的乙太網。鏈路層地址在鏈路層協議中使用,表明這個鏈路層報文會被發給誰;而IP地址在IP層協議中使用,表明這個報文最終要發給誰。可以分為兩種情況:

1. 直接通過鏈路層發送:

鏈路層地址: (源MAC地址) (目的MAC地址)

IP地址: (源IP地址) (目的IP地址)

2. 經過網關轉發

從本機出發發往網關時,鏈路層的目的是網關而IP層的目的不是網關:

鏈路層地址: (本機源MAC地址) (網關MAC地址)

IP地址: (本機IP地址) (目的IP地址)

網關轉發到其他網關:

鏈路層地址: (網關MAC地址) (下一跳網關MAC地址)

IP地址: (本機IP地址) (目的IP地址)

最後一個網關轉發到目標:

鏈路層地址: (最後一個網關MAC地址) (目的MAC地址)

IP地址: (本機IP地址) (目的IP地址)

在轉發過程中,IP報文的源和目的保持不變,鏈路層地址則只和這一跳的雙方有關,甚至如果中間經過了不一樣的鏈路層,還會更換二層數據包的格式。


從人人上看到的一篇找不到出處了
很不錯的文章,形象地闡釋了網路里的抽象概念。

計算機主機網關的作用是什麼?
假設你的名字叫小不點,你住在一個大院子里,你的鄰居有很多小夥伴,在門口傳達室還有個看大門的李大爺,李大爺就是你的網關。當你想跟院子里的某個小夥伴玩,只要你在院子里大喊一聲他的名字,他聽到了就會回應你,並且跑出來跟你玩。
但是你不被允許走出大門,你想與外界發生的一切聯繫,都必須由門口的李大爺(網關)用電話幫助你聯繫。假如你想找你的同學小明聊天,小明家住在很遠的另外一個院子里,他家的院子里也有一個看門的王大爺(小明的網關)。但是你不知道小明家的電話號碼,不過你的班主任老師有一份你們班全體同學的名單和電話號碼對照表,你的老師就是你的DNS伺服器。於是你在家裡撥通了門口李大爺的電話,有了下面的對話:
小不點:李大爺,我想找班主任查一下小明的電話號碼行嗎?
李大爺:好,你等著。(接著李大爺給你的班主任掛了一個電話,問清楚
了小明的電話)問到了,他家的號碼是211.99.99.99
小不點:太好了!李大爺,我想找小明,你再幫我聯繫一下小明吧。
李大爺:沒問題。(接著李大爺向電話局發出了請求接通小明家電話的請
求,最後一關當然是被轉接到了小明家那個院子的王大爺那裡,然後王大
爺把電話給轉到小明家)
就這樣你和小明取得了聯繫。
至於DHCP伺服器嘛,可以這樣比喻
你家院子里的居民越來越多了,傳達室李大爺那裡的電話交換機已經不能滿足這麼多居民的需求了,所以只好採用了一種新技術叫做DHCP,居民們開機的時候隨機得到一個電話號碼,每一次得到的號碼都可能會不同。
你家門口的李大爺:就是你的網關
你的班主任:就是你的DNS伺服器
傳達室的電話交換機:就是你的DHCP伺服器
同上,李大爺和王大爺之間的對話就叫做路由。
另:如果還有個小朋友叫做小暗,他住的院子看門的是孫大爺,因為小暗的院子剛蓋好,孫大爺剛來不久,他沒有李大爺和王大爺辦公室的電話(李大爺和王大爺當然也沒有他的電話),這時會有兩種情況:
1、居委會的趙大媽告訴了孫大爺關於李、王兩位大爺的電話(同時趙大媽也告訴了李、王關於孫的電話),這就叫靜態設定路由
2、趙大媽病了,孫大爺自己到處打電話,見人就說:「我是小暗他們院子管電話的」,結果被李、王二位聽到了,就記在了他們的通訊錄上,然後李、王就給孫大爺回了個電話說:「我是小明(小不點)他們院子管電話的」,這就叫動態設定路由
然後有一天小不點要找小暗,結果自然是小不點給李大爺打電話說:「大爺,我找小暗」(這裡省略了李大爺去查小暗電話的過程,假設他知道小暗的電話),李大爺一找通訊錄:「哦,小暗的院子的電話是孫大爺管著的,要找小暗自然先要通知孫大爺,我可以通知王大爺讓他去找孫大爺,也可以自己直接找孫,那當然是自己直接找孫方便了」,於是李大爺給孫大爺打了電話,然後孫大爺又把電話轉到了小暗家。
這裡李大爺的通訊錄叫做路由表。
李大爺選擇是自己直接找孫大爺還是讓王大爺幫忙轉接叫做路由選擇。
李大爺之所以選擇直接找孫大爺是有依據的,因為他直接找孫大爺就能一步到位,如果要王大爺轉接就需要兩步才能完成,這裡的「步」叫做「跳數」,李大爺的選擇遵循的是最少步驟(跳數)原則(如果他不遵守這個原則,小不點可能就會多等些時間才能找到小暗,最終結果可能導致李大爺因工作不力被炒魷魚,這叫做「延時太長,選路原則不合理,換了一個路由器」)
當然,事情總是變化的,小不點和小明吵架了,這些天小不點老是給小暗打電話,小明心裡想:「操,他是不是在說我壞話啊?」於是小明決定偷聽小不點和小暗的通話,但是他又不能出院子,怎麼辦呢?小明做了這樣一個決定:
首先他告訴自己院里管電話的王大爺說:「你給李大爺打個電話說小暗搬到咱們院子了,以後凡是打給他的電話我來接」,王大爺沒反映過來(畢竟年紀大了啊!)就給李大爺打了電話,說:「現在我來管理小暗的電話了,孫已經不管了」,結果李大爺就把他的通訊錄改了,這叫做路由欺騙。
以後小不點再找小暗,李大爺就轉給王大爺了(其實應該轉給孫大爺的),王大爺收到了這個電話就轉給了小明(因為他之前已經和小明說好了),小明收到這個電話就假裝小暗和小不點通信。因為小明作賊心虛,害怕明天小不點和小暗見面後當面問他,於是通信斷了之後,又自己以小不點的名義給小暗通了個電話複述了一遍剛才的話,有這就叫數據竊聽
再後來,小不點還是不斷的和小暗聯繫,而零落了小明,小明心裡嘀咕啊:「我不能總是這樣以小暗的身份和小不點通話啊,外一有一天露餡了怎麼辦!」於是他想了一個更陰險的招數:「乾脆我也不偷聽你們的電話了,你小不點不是不給我打電話嗎!那我讓你也給小暗打不了,哼哼!」,他怎麼做的呢?我們來看:
他聯繫了一批狐朋狗友,和他們串通好,每天固定一個時間大家一起給小暗院子傳達室打電話,內容什麼都有,只要傳達室的孫爺爺接電話,就會聽到「打雷啦,下雨收衣服啊!」、「人是人他媽生的,妖是妖他媽生的」、「你媽貴姓」等等,聽的腦袋都大了,不聽又不行,電話不停的響啊!終於有一天,孫爺爺忍不住了,大喊一聲:「我受不了拉!!!!」,於是上吊自殺了!
這就是最簡單的DDOS攻擊,孫爺爺心理承受能力弱的現象叫做「數據報處理模塊有BUG」,孫爺爺的自殺叫做「路由器癱瘓」。如果是我,就會微笑著和他們拉家常,例如告訴他們「我早就聽了天氣預報,衣服10分鐘前已經收好了」或者「那你媽是人還是妖」或者「和你奶奶一個姓」等等,我這種健全的心理叫做「健壯的數據報處理,能夠抵禦任何攻擊」
孫爺爺癱了之後,小不點終於不再給小暗打電話了,因為無論他怎麼打對方都是忙音,這種現象叫做「拒絕服務」,所以小明的做法還有一個名字叫做「拒絕服務攻擊」。
小明終於安靜了幾天,...
幾天後,小明的院子來了一個美麗的女孩,名字叫做小麗,小明很喜歡她(小小年紀玩什麼早戀!)可是小麗有個很帥的男朋友,小明乾瞪眼沒辦法。當然這裡還是要遵循上面的原則:小麗是不能出院子的。那個男的想泡小麗自然只能打電話,於是小明又蠢蠢欲動了:
還記得王爺爺是院子的電話總管嗎?他之所以能管理電話是因為他有一個通訊錄,因為同一個院子可能有2個孩子都叫小明,靠名字無法區分,所以通訊錄上每一行只有兩項:
門牌電話
一號門 1234567 (這個是小明的)
二號門 7654321 (這個是小麗的)
......
王爺爺記性不好,但這總不會錯了吧(同一個院子不會有2個「二號門」吧)?每次打電話人家都要說出要找的電話號碼,然後通過通訊錄去院子裡面敲門,比如人家說我找「1234567」,於是王爺爺一比較,哦,是一號門的,他就去敲一號門「聽電話」,如果是找「7654321」,那他就找二號門「聽電話」。
這裡的電話號碼就是傳說中的「IP地址」
這裡的門牌號就是傳說中的網卡的』MAC『地址(每一塊網卡的MAC地址都是不一樣的,這是網卡的製造商寫死在網卡的晶元中的)
小明心裡想「奶奶的,老子泡不到你也別想泡」,於是他打起了王爺爺通訊錄的主意,經過細心的觀察,周密的準備,他終於發現王爺爺有尿頻的毛病(畢竟是老人啊...),終於在一個月黑風高的白天,王爺爺去上廁所了,小明偷偷的摸進傳達室,小心翼翼的改了王爺爺的通訊錄......
過了幾天,小麗的男朋友又給小麗打來了電話,對方報的電話是「7654321」,王爺爺一看通訊錄,靠:
門牌電話
一號門 1234567 (這個是小明的)
一號門 7654321 (注意:這個原來是小麗的,但是被小明改了)
......
王爺爺不知道改了啊,於是就去找一號門的小明了,小明心裡這個美啊,他以小麗父親的口吻嚴厲的教訓了那個男的和小麗之間不正當的男女關係,結果那個男的恭恭敬敬的掛了電話。當然小麗並不知道整個事情的發生...
這裡小明的行為叫做「ARP欺騙」(因為在實際的網路上是通過發送ARP數據包來實現的,所以叫做「ARP欺騙」),王爺爺的通訊錄叫做「ARP表」
這裡要注意:王爺爺現在有兩個通訊錄了,一個是記錄每個院子傳達室電話的本本,叫做「路由表」,一個是現在說的記錄院子裡面詳細信息的本本,叫做「ARP表」。
有句命言是「人們總是在追求完美的,儘管永遠也做不到」(請記住這句話,因為這是一個大名人--也就是我,說的)
王爺爺的制度中有一條是這麼寫的「每個月要重新檢查一下門牌號和電話的對應本(也就是ARP表)」,這個動作叫做「刷新ARP表」,每個月的時間限制叫做「刷新ARP表的周期」。這樣小明為了讓那個男的永遠不能找到小麗,之後每個月都要偷偷改一次那個通訊錄,不過這樣也是不得不做的事啊!
補充一點,小明是很聰明的,如果通訊錄(ARP表)被改成了這樣:
門牌(MAC)電話(IP)
一號門 1234567 (這個是小明的)
二號門 1234567 (注意:這個被小明改了,但是他一時頭暈改錯了)
......
就會是計算機就會彈出一個對話框提示「出現重複的IP地址」,最終會導致王爺爺不知所措,於是通知一號門和二號門,你們的電話重複了。這樣小麗就知道有人在破壞她的好事,這個現象叫做「騙局被揭穿了」
小不點知道了小明偷聽他和小暗的電話,於是就和小暗約定好了密碼。小不點在家裡把要說的加密了之後告訴小暗。土豆-〉星期三,地瓜-〉請客,笨蛋-〉小不點家。於是小不點告訴小暗:土豆笨蛋地瓜。小明聽了???不懂。。。。鬱悶了。。。這是加密。
除此之外,小麗也知道了小明改他家的電話號碼了。於是王爺爺就登門一個一個把電話和門牌號記下來。並且藏起來不允許外人修改,只能自己有鑰匙(密碼)。這是ip地址和MAC地址綁定。當有人改了電話號碼的時候,就得找王爺爺改。麻煩是麻煩了,但是安全了。不過小明偷偷的把王爺爺的鑰匙偷配了一把(盜竊密碼成功),於是他還可以修改。這樣么,就這樣了。


你家在

上海浦東新區祖沖之路2277弄38號樓。這就你家ip。這是全球唯一的。
你給朋友說你在家,他知道你就是這個位置,這就是域名,方便表達與記憶。

你給別人說你是上海的,或者說上海浦東新區的,或者說上海浦東新區祖沖之路。這就是子網掩碼,幾個說法都對,幾個不同說法,就是可變長子網掩碼。但範圍越大(掩碼越短),用大喇叭喊著找你就越不方便。


你要坐高鐵,得去火車站,火車站就是網關。有虹橋,有火車站,都可以出去,但是倆火車站方向不一樣,這是雙網關。


這篇博客應該能幫到你

IP地址,子網掩碼,默認網關,DNS伺服器詳解 - wangtao169447 - 博客園


百度文庫上有個PPT講得很好,名詞解釋跟類比說明都很清晰

【圖文】快速理解抽象的網路基本概念_百度文庫


首先把互聯網看做一個「城市」,這個城市有很多交錯的「街道」,這些「街道」的名字就是互聯網中的一個網路。街道中的門牌號就是「IP地址」。「子網掩碼」決定了街道門牌號碼的多少。兩條街道的交點就是「網關」。因為你要從一條街道走向另外一條街道必須經過兩條街道的交點,當然這個「交點」對於交差的兩條街道來說都是「網關」,另外一條街道也可以和不止一條街道交差,同理一個網路也可以有不同的網關。


啊,搬運下資源好了.....
各位生動的文字各有所長,但如果是視頻的話,不知能否切到題主「形象生動」的含義呢?
(English)視頻由http://code.org和可汗學院提供https://www.khanacademy.org/computing/computer-science/internet-intro/internet-works-intro/v/the-internet-ip-addresses-and-dns
Youtube地址(可翻譯為中文):https://youtu.be/5o8CwafCxnU?list=PLzdnOPI1iJNfMRZm5DDxco3UdsFegvuB7
為方便,提供雲盤地址:請輸入提取碼 (提取碼:e65a)
我以為還是比較生動地介紹了IP地址和DNS的聯繫的。
是屬於可汗學院 How the internet works 課程的一部分


前兩個問題 要先深入理解「掩」這個字 佔位待答


推薦閱讀:

Python 爬蟲學到什麼樣就可以找工作了?
有關ospf協議的一個問題?
TCP 為什麼沒有基於 UDP 實現?
為什麼在不同網站查詢到自己的本機公網 IP 不一樣?
TCP連接中啟用和禁用TCP_NODELAY有什麼影響?

TAG:計算機系統 | 計算機網路 | 網路工程 |