面向程式設計師的網路基本知識 子網分割

2021-09-13 22:29:31 字數 3899 閱讀 8175

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 一般指個人通過工具建立知識體系並不斷完善,進行知識的收集 消化吸收和創新的過程。知識管理的範圍很廣,一般的知識管理方法可以參考這篇文章 個人知識管理的方法 為什麼...