github
本系列文章旨在向程式設計師分享一些網路基本知識,讓程式設計師具備基本的網路常識,以便與網路工程師溝通。本系列文章不會涉及如何組建網路、如何配置交換機/路由器等硬體相關的內容,所以不適合想考ccna/hcna證書的人士。
在ip位址一文中我們提到了a、b、c三類ip位址,也提到了ip位址中包含了network id和host資訊,那麼你知道這3類位址分別能夠容納多少臺host嗎?
以乙個c類位址192.168.1.***/24
為例,因為子網掩碼的1占用了24位,剩餘的0都是用來給host用的——有8位,所以block size=2 ^ 8=256,又因按約定乙個block中的第乙個值被留作network id(192.168.1.0
),最後乙個值被留作 broadcast addr(192.168.1.255
),所以實際host的數量=256 - 2=254。
同理乙個b類位址128.10.***.***/16
的host數量=2 ^ 16-2=65,534個,乙個a類位址10.***.***.***/8
的host數量=2 ^ 24-2=16,777,214個。
看到問題沒有,當你在使用乙個a或b類位址的時候會發現host數量太過巨大,那麼現實生活中組建如此巨大的網路是不現實的,因此我們需要劃分子網。
給乙個有型別ip位址劃分子網的方式很簡單,在子網掩碼中借用後面的0把它們變成1,比如將乙個c類位址的子網掩碼1的位數變成25:192.168.1.0/25
,它比c類位址的/24
多了乙個bit,這種形式稱為無類別域間路由(cidr),它的子網掩碼就是255.255.255.128
,這樣一來就將原本192.168.1.0/24
分割稱了兩個子網。
下面這張表列出了借用bit數與分割子網數的關係:
borrowed bits12
3456
mask value
128192
224240
248252
subnets24
8163264
block size
12864
321684
hosts
12662
301462
為何沒有列出借用7、8個bit的情況,因為如果借用7個bit則host數量=0。如果借用8個bit則block size=1,host數量=-1,顯然不夠用。
如果借用的bit數超過8會怎樣,比如乙個a類位址10.10.1.1/8
變成10.10.1.1/18
會怎樣呢?我們這個ip位址和子網掩碼變成二進位制觀察一下:
ip addr(dec) : 10 . 10 . 1 . 1
ip addr(bin) : 00001010 . 00001010 . 00000001 . 00000001
subnet mask(bin) : 11111111 . 11111111 . 11000000 . 00000000
subnet mask(dec) : 255 . 255 . 192 . 0
可以看到子網掩碼的1擴充套件到了第三個位元組且占用了第三個位元組的2個bit,因此分割子網數=2 ^ 2=4,block size=256 / 4 = 64。
到這裡你會發現子網數、block size、host數都比較好算,mask value不太好算,下表總結了乙個計算方式:將綠色連線的兩個數字相加就能夠得到紅色箭頭所指格仔裡的數字:
現在我們來計算一下192.168.1.0/25
的每個子網的network id、 broadcast addr、block size、host數量、mask value:
那麼每個子網的network id和 broadcast addr是什麼呢?其實可以根據block size來計算:
subnet
0128
first host
1129
last host
126254
broadcast addr
127255
前面講的是如何分割c類位址的子網,因為乙個c類位址的前3個位元組總是固定的,所以計算network id總是發生在第4個位元組上。所以對於a類位址來講,分割子網的cidr是/8+
,b類位址是/16+
,c類位址是24+
。
問題來了,如果對乙個a類位址比如10.10.0.0/18
分割字網,那麼該如何計算呢?
在這裡我們得先講一下ip位址「進製」的方式。當你對第n個位元組做加法,加到256的時候,則第n個位元組清0,第n-1個位元組加1,比如我們對10.10.0.0
的第3個位元組不斷的加128:
10 . 10 . 0 . 0
10 . 10 . 128 . 0
10 . 11 . 0 . 0
10 . 11 . 128 . 0
這很重要,因為當看到乙個cidr時,我們要知道它的子網掩碼延伸到第幾個位元組,然後在這個位元組上不斷的加block size,從而得到每個子網的network id,然後計算broadcast addr、host範圍等。
舉個例子,10.10.0.0/18
的掩碼延伸到了第3個位元組,占用了2個bit,block size=64,所以:
subnet1: network id=10.10.0.0 broadcast addr=10.10.63.255
subnet2: network id=10.10.64.0 broadcast addr=10.10.127.255
subnet3: network id=10.10.128.0 broadcast addr=10.10.191.255
subnet4: network id=10.10.192.0 broadcast addr=10.10.255.255
subnet5: network id=10.11.0.0 broadcast addr=10.11.63.255
subnet6: network id=10.11.64.0 broadcast addr=10.11.127.255
...
注意看broadcast addr,subnet 1的broadcast addr=subnet 2 network id - 1=10.10.64.0 - 1,因為ip位址是乙個「進製」系統,所以得到10.10.63.255。
上面我們已經了解如何進行子網分割,雖然我們避免了ip位址的浪費,但是依然還會有問題。比如乙個公司有三個部門,pc數量分別是100臺、53臺、50臺,現在有乙個c類位址192.168.1.0
,我們怎麼分割子網呢——要求是每個部門有自己的子網?
如果我們這樣192.168.1.0/25
,則只能分割2個子網,如果192.168.1.0/26
,能夠分割4個子網,但是每個子網的host數量=62,而有乙個部門的pc有100臺,容納不了。那該怎麼辦呢?
這裡我們要引入乙個工具:變長子網掩碼vlsm(variable length subnet mask),它允許網管可以使用長度不同的子網掩碼分割乙個網路。
回到上面的例子,我們會這樣分割:
192.168.1.0 /26
192.168.1.64 /26
192.168.1.128 /25
使用vlsm需要很多技巧,本文就不在做詳述了。 物件導向的基本知識
物件導向的三個基本特徵是 封裝 繼承 多型。封裝最好理解了。封裝是物件導向的特徵之一,是物件和類概念的主要特性。封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。物件導向程式設計 oop 語言的乙個主要功能就是 繼承 繼承是指這樣一種...
ABAP物件導向(oo)的基本知識
oo基礎 物件導向 oo 物件 包含了資料並且可以提供服務的程式 屬性 物件中的 資料 部分由屬性定義 方法 物件中的 提供服務 物件的屬性必須通過物件提供的方法才能被外部使用者操作。三大特徵 封裝,繼承,多型 類的建立分為 全域性定義 和 區域性定義 全域性定義 1.首先在se24建立已zcl 開...
程式設計師的知識管理
什麼是知識管理 為什麼要管理知識 如何管理知識 什麼是知識管理 個人知識管理 personal knowledge management 一般指個人通過工具建立知識體系並不斷完善,進行知識的收集 消化吸收和創新的過程。知識管理的範圍很廣,一般的知識管理方法可以參考這篇文章 個人知識管理的方法 為什麼...