0分配不到地址_前端学习计算机网络——IP地址的划分及其分类
本文是該系列文章的第二篇,將了解Internet中使用的網絡層地址,又稱IP地址。每個設備都至少需要一個IP地址,其可以作為我們設備的標識,就跟我們的電話號碼一樣,知道了電話號碼就能找到我們,所以每個IP地址都是唯一的,所以在給每臺設備分配IP時,會根據一套編號方案進行,本篇文章我們就來詳細地了解一下它。
一、IP地址的表示
IP作用于OSI參考模型中的網絡層,在終端通信中作為唯一標識,便于確定數據的傳遞目標。
IP地址分為:IPv4 、IPv6
大多數用戶熟悉并且流行的IP地址是IPv4,其是用點分四組十進制的表示方法展示的,例如 165.195.130.107 、197.101.0.0 等,每一組的數字都是非負的整數,范圍在 [0, 255] 之間。
IPv4還有種寫法是用二進制表示的,例如:
| 0.0.0.0 | 00000000 00000000 00000000 00000000 |
| 1.2.3.4 | 00000001 00000010 00000011 00000100 |
| 10.0.0.255 | 00001010 00000000 00000000 11111111 |
| 165.195.130.107 | 10100101 11000011 10000010 01101011 |
| 255.255.255.255 | 11111111 11111111 11111111 11111111 |
因此稱IPv4是32位的。而IPv6的位數就比較大了,是128位的,長度是IPv4的4倍,并且其表示方式是分塊的八組四個十六進制數,例如:5f05:2000:80ad:5800:0058:0800:2023:1d71,每個塊兒之間都是用 : 隔開的。
IPv6看著特別得長,所以它的簡化表示法已經有一套標準,規則如下:
當然IPv6也是可以用二進制表示的,表示結果如下:
| 5f05:2000:80ad:5800:0058:0800:2023:1d71 | 0101111100000101 0010000000000000 1000000010101101 0101100000000000 0000000001011000 0000100000000000 0010000000100011 0001110101110001 |
| ::1 | 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000001 |
如果把IPv6和端口號一起使用的話,可能會出現這樣的情況:http://2001:0db8:85a3:08d3:1319:8a2e:0370:7344:443/,該URL中,最后一個 :443 其實表示的是端口號,但與IPv6一起使用時看起來好像也成為了一個塊兒部分,因此我們需要用 [] 符號將IPv6部分包裹起來,結果如下:http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:443/
二、IP地址結構
上面提到,IP是作為終端的唯一表示,因此只有當保證每個IP都不同時,才能保證IP的唯一性。其中,IPv4地址的長度為32位,因此就有 種可能的地址,那么同理,IPv6地址的長度為128位,因此就有 種可能的地址。
這些地址就是作為數據包發送的目的地址,當然每個地址都會有它們各自的含義,例如單播 、組播 、廣播等,當然還有一些地址是會被保留用于實驗的
- 單播可以理解為一臺主機發送單一的數據包給另一臺主機;
- 組播可以理解為一臺主機發送單一的數據包給多臺主機;
- 廣播可以理解為一個節點向其它所有的節點發送數據包;
IPv4中大多數的的地址都為單播
(1)分類尋址
那么IP地址既然是作為識別特定主機的唯一標識,那么到底是如何被識別的呢?其實在長度為32位的IPv4地址中,有一段連續位稱為網絡號,還有一段連續位稱為主機號。
因為有時在同一個網絡中,可能會有多臺主機,就例如一個電子計算機教室看成一個網絡,教室中有60臺電腦,那么這60臺電腦都屬于這一個教室所處的網絡,而每臺電腦又需要在該網絡下單獨分配一個唯一的標識
因此,在識別IP地址時,就是先通過識別IP地址中的網絡號來確認目的地址處于哪個網絡區域,然后再識別主機號,來確認這個網絡中特定的主機。
我們將IPv4地址用二進制表示,一段地址的網絡號和主機號分類可以分為5類:A類 、B類 、C類 、D類 、E類,區別如下圖:
IPv4地址分類- A類: 網絡號共8位,首位固定為 0,接下來連續的7位可以自由設定;主機號為24位
- B類: 網絡號共16位,前兩位固定為 1 0,接下來連續的14位可以自由設定;主機號為16位
- C類: 網絡號共24位,前三位固定為 1 1 0,接下來連續的21位可以自由設定;主機號為8位
- D類: 為組播地址,共32位,前四位固定為 1 1 1 0
- E類: 為保留地址,共32位,前四位固定為 1 1 1 1
其中A 、B 、C類地址大多都是單播地址,因此它們可用于接口分配。舉個例子,A類地址網絡號共8位,其中首位固定為 0,那么還有7位可以自由設定,那么就共有 個網絡數;主機號共24位,那么就共有 個主機數。(同樣的,我們可以推出其它類別的地址的網絡數和主機數)因此我們可以理解為,用A類地址一共可以為 個電子計算機教室分配使用,每個教室可以容納 臺主機
IPv4地址的范圍在 0.0.0.0 ~ 255.255.255.255 之間,那么我們來看看這五類地址各自的地址范圍是如何的吧~
A類地址首位固定為 0,因此A類地址用二進制表示為 0XXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX,因此A類地址用十進制表示時,第一組最小為0,其余三組最小也為0,即 0.0.0.0;
B類地址前兩位固定為 1 0,因此B類地址用二進制表示為 10XXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX,因此B類地址為十進制表示時,第一組最小為128,其余三組最小為0,即 128.0.0.0,那么A類地址的范圍就可以確定為 0.0.0.0 ~ 127.255.255.255
C類地址前兩位固定為 1 1 0,因此B類地址用二進制表示為 110XXXXXX XXXXXXXX XXXXXXXX XXXXXXXX,因此C類地址為十進制表示時,第一組最小為192,其余三組最小為0,即 192.0.0.0,那么B類地址的范圍就可以確定為 128.0.0.0 ~ 191.255.255.255
以此類推,即可推出D 、E類的地址范圍
我們將IPv4地址的空間劃分情況總結在了下表中:
| A | 0.0.0.0 ~ ?127.255.255.255 | 27 | 224 |
| B | 128.0.0.0 ~ 191.255.255.255 | 214 | 216 |
| C | 192.0.0.0 ~ 223.255.255.255 | 221 | 28 |
| D | 224.0.0.0 ~ 239.255.255.255 | / | / |
| E | 240.0.0.0 ~ 255.255.255 | / | / |
上面有提到,A、B、C類地址中大多都是單播,那么也有幾個地址不作為單播地址使用,一般都是地址塊兒中的第一個地址和最后一個地址不使用,所以假設分配得到的地址塊兒為 127.0.0.0,那么實際能分配的單播地址數就為
(2)子網尋址
查看上述的A類地址,它可使用的主機數有 個,那么當分配了A類IP地址后,卻發現并沒有那么多的主機,這樣就造成了剩余可用主機數的浪費;或者說被分配了C類地址后,卻發現有上萬臺主機,而C類地址可用的主機數只有 個,因此只能給其多分配幾個C類地址,那么C類地址就很容易被消耗完
為了解決上述辦法,又采用了一種叫做子網尋址的方法,即假設當一個站點被分配了B類地址,那么該站點的管理員可以將B類地址的主機號部分繼續分成兩部分,分別為 子網號 和 主機號,這兩者所占的位數可以根據實際需求自由分配,例如分配給子網號8位,分配給主機號8位,即平分,結果如下圖:
子網尋址此時的站點可以支持 個子網,每個子網中最多可支持 臺主機(每個子網的第一個地址和最后一個地址不會被使用)
這樣在站點內,路由器就可以根據子網號和主機號監測到不同子網的流量了,如下圖所示:
上圖中,該站點被分配了一個B類地址 128.32.x.x,而管理員此時選擇將其繼續劃分為多個子網,如圖中的子網1和子網2,它們分別是開始于 128.32.1 和 128.32.2,并且左右兩臺主機都分別屬于各自的子網。
那么路由器是如何在地址中尋找子網號的呢?這就要設置一個名為子網掩碼的參數了
(3)子網掩碼
子網掩碼是由一臺主機或路由器使用的分配位,用以確定如何從一臺主機對應的IP地址中獲得網絡和子網信息,更通俗點說,通過它可以確定一個IP地址的網絡/子網部分的結束和主機部分的開始。
子網掩碼跟IP地址的長度相等(IPv4為32位,IPv6為128位),對于IPv4來說,子網掩碼也是用點分四組十進制來表示的。當子網掩碼用二進制表示時,結構非常簡單且容易記憶,從左邊開始由一段連續的1組成,緊接著又一段連續的0組成直到最后。其中連續的1的長度稱為前綴長度,用 /長度 來表示
舉例各種類型的子網掩碼:
| 128.0.0.0 | /1 | 10000000 00000000 00000000 00000000 |
| 255.0.0.0 | /8 | 11111111 ?00000000 00000000 00000000 |
| 255.192.0.0 | /10 | 11111111 ?11000000 00000000 00000000 |
| 255.255.0.0 | /16 | 11111111 ?11111111 ?00000000 00000000 |
| 255.255.254.0 | /23 | 11111111 ?11111111 ?11111110 ?00000000 |
| 255.255.255.224 | /27 | 11111111 ?11111111 ?11111111 ?11100000 |
| 255.255.255.255 | /32 | 11111111 ?11111111 ?11111111 ?11111111 |
接下來說說子網掩碼是如何使用的,其二進制位1對應IP地址的網絡/子網部分;相反,0對應IP地址的主機號部分。換個說法就是子網掩碼第一個0所對應IP地址的位為主機號的第一位;也可以借用前綴長度來判斷,即前綴長度后一位對應的也是IP地址主機號的第一位。
例如剛才舉的例子,站點管理員將B類地址 128.32.x.x 的主機位劃分為8位的子網號和8位的主機號,那么他就會提前設置好一個長度為 的子網掩碼,即 255.255.255.0,表示前24位是網絡/子網部分,那么路由器在處理圖中的IPv4地址 128.32.1.14時,會先查看一下子網掩碼,此時將IP地址和子網掩碼對應的位進行與運算即可獲得該IP所處的是哪個子網,運算過程如下圖:
結果中的 128.32.1.0 就是IP地址 128.32.1.14 所屬的子網
但此時有沒有發現一個問題?雖然給地址劃分了子網號和主機號,但是每個子網號所對應子網的主機數就固定死了,而且每個子網所支持的主機數都是一樣的,這一定是不合理的,因為實際應用中,可能這個區域只需要支持10臺主機,而另一個區域需要支持100臺主機,那么我們此時在劃分子網號和主機號的時候,至少要讓每個子網支持的主機數大于100臺,那只需要支持10臺主機的區域分配到了一個子網,豈不是至少浪費了其中的90個空間么?面對這樣的問題,我們又該如何解決呢?
(4)可變長度的子網掩碼
上個部分剛說過,路由器在尋找子網號時,是通過我們設置的子網掩碼來查找的,那么我們不妨根據不同的需求設置多個子網掩碼,來達到子網號和主機號分配比例不唯一的需求,這就是VLSM(Variable Length Subnet Mask,可變長度的子網掩碼)的實現
比如,我們上面舉得例子,當前站點被分配到了一個B類地址,該站點的某個區域需要支持100臺主機,那么我們可以給這個區域分配一個子網號,同時設置其子網掩碼為 255.255.255.128,其前綴長度為 25,因此留給主機位的位數還有 位,則該子網支持主機數為 臺,可以滿足該區域的需求;再來看另一個區域,它們需要支持的主機臺數為10,那么我們可以給該區域分配另一個子網號,同時設置子網掩碼為 255.255.255.240,其前綴長度為 28,因此留給主機的位數還有 位,則該子網支持的主機數為 臺,同樣可以滿足該區域的需求。
(5)廣播地址
在每個IPv4的子網中,都會有一個特殊的地址被保留作為子網的廣播地址,那如何獲取它呢?我們只需要將子網掩碼的所有位都取反,即0變1,1變0,然后將取反后的子網掩碼與子網內的IP地址進行或運算即可得到廣播地址
仍然延用上面的例子,子網內的IP地址為 128.32.1.14,子網掩碼為 255.255.255.0,則比較過程如下圖:
圖中獲得的結果 128.32.1.255 即為子網 128.32.1.0 中的廣播地址,前面說過,每個子網中的頭尾兩個地址一般是不被使用的,所以該子網中可用的單播地址范圍就是 128.32.1.1 ~ 128.32.1.254
(6)總結
簡單總結一下子網掩碼的作用:
?【JS面試題】數組去重(6種方法)震驚面試官
???建議收藏 | 最全的JavaScript常見的操作數組的函數方法寶典
? ?多圖生動詳解瀏覽器與Node環境下的Event Loop
? ?HTML5新特性drag API 實現拖放功能
? ?ES6新特性實現面向對象編程,詳解class語法定義類
???????END???????
?支持三連
1.看到這里了就點個在看支持下吧,你的「在看」是我創作的動力。
2.關注公眾號前端印象,「一起交流進步」!
3.關注公眾號回復【加群】,拉你進技術交流群一起玩轉前端。
總結
以上是生活随笔為你收集整理的0分配不到地址_前端学习计算机网络——IP地址的划分及其分类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lombok null字段不显示 继承_
- 下一篇: 2017年html5行业报告,云适配发布