前往
大廳
主題

【填坑系列01】IP位址計算 (IPv4 適用)

冰抹茶拿鐵 | 2022-03-06 02:11:44 | 巴幣 208 | 人氣 3553

大二修企業資料通訊(BDC)時,對於IP位址的計算一竅不通,上網看教學影片、文章仍然無法學會,後來到圖書館借書時,偶然翻到網路概論的書,才讓我學會如何計算XD。

IP 位址是用來幹嘛的?


在網路上的所有裝置都要有一個獨一無二的IP位址,作為傳送和接收資料的地址。在現實生活中,IP位址的功用就像是郵件上都會有的收件人地址和寄件人地址,收件人地址讓信件可以被正確送達,寄件人地址則讓收到信的人可以回信。




IP 位址的表示方式


IP 位址是由 32 bits的二進位數字表示,也就是由32個0或1組成 :

01111111000000000000000000000001

上面那一串數字真的讓人霧煞煞,所以我們可以透過下列方式做轉換 :

1.將 32 bits 的 IP 位址每 8 bits 切成一段 :
        01111111 00000000 00000000 00000001
    
2.將每一段的二進位數字轉回十進位,再以.隔開每一段 :
         127.0.0.1

這樣就能比較容易看懂。



IP 位址的結構


IP 位址可以劃分為兩個部分 : 網路位址、主機位址

  • 網路位址
    • 識別所屬的網路
  • 主機位址
    • 識別所屬網路的裝置

舉例來說,某天拿到192.168.117.x的網段,前面的192.168.117就是用來辨別所屬網路的網路位址(24 bits),後面的x則對應到可以分配的主機位址,x的長度總共有8 bits,所以可能的排列組合有256種(2的8次方),換句話說總共有256個主機位址可以分配給256個裝置使用。

將這個概念做延伸,不難發現前面的網路位址越短,可以分配的主機位址就會越多,為了滿足不同規模的網路需求,又依據網路位址的長度區分出不同的 IP 位址等級。

(實際上的長度劃分不一定是這樣,這邊僅是舉例)



IP 位址的等級


當初設計 IP 時,將 IP 位址分成五個等級(Class A、B、C、D、E)

一般常用的是 Class A、B、C 這三種等級的 IP 位址,分別適用在大、中、小型網路,負責管理IP位址的機構,可以依照申請者所需要的網路規模,賦予不同等級的IP位址。

  • Class A
    網路位址為 8 bits,第1個 bit(前導位元)必須是0。
    網路位址從00000000~01111111,總共有128(2的7次方)個可以運用的網路位址(2的7次方)。主機位址為 24 bits,可以運用的位址總數為16777216個(2的24次方)。目前大部分的 Class A 都已經分配給過去有參與 ARPANET(Internet的前身) 實驗的政府機關、學術單位等等,所以現在無法取得 Class A 的IP位址。


  • Class B
    網路位址為 16 bits,前2個 bits(前導位元)必須是 10。Class B的 IP 位址必定介於128.0.0.0~191.255.255.255。主機位址為 16 bits,可以運用的位址總數為65536個(2的16次方)。大部分的 Class B 都被分配給大企業或ISP使用。


  • Class C
    網路位址為 24 bits,前3個 bits(前導位元)必須是 110。Class C 的 IP 位址必定介於192.0.0.0~223.255.255.255。主機位址為 8 bits,可以運用的位址總數為256個(2的8次方)。Class C 通常都被分配給小企業使用。


特殊的IP位址


  • 主機位址全為0
    用來代表這個網路,以 Class C為例,196.67.208.0用來代表該 Class C 網路。
  • 主機位址全為1
    代表網路中的所有位址,主要是用在廣播上面。假設有電腦送出目的地為196.67.208.255的封包,則代表對196.67.208.0這個網路的所有裝置進行廣播(所有裝置都會收到封包)。

段落重點整理


從 IP 位址的第一段我們就能看出它所屬的 IP 位址等級。例如: 168.0.0.1可以從 168 判斷它是一個 Class B 的 IP 位址,IP 位址的前 16 bits 為網路位址,後 16 bits 為主機位址。

  • Class A : 0.0.0.0~127.255.255.255
  • Class B : 128.0.0.0~191.255.255.255
  • Class C : 192.0.0.0~223.255.255.255



子網路


IP 位址等級的切割固然方便,但彈性卻略顯不足。假設有人拿到 Class B 的 IP 位址,實際上只連接數十台電腦,那這樣不是會有很多位址被浪費掉嗎?

要解決這個問題可以透過將網路切割成更小的子網路來避免 IP 位址浪費的同時,增加原本3種 IP 位址等級的彈性。而在切割子網路前,務必要先思考需要多少個子網路,以及每個子網路需要連結多少台主機。

切割子網路的原理


簡單來說切割子網路就是向 IP位址 中的主機位址借前幾個位元作為子網路位址。

假設拿到的 Class B IP 位址是這樣 :


借主機位址的前 3 bits 作為子網路位址:


子網路位址與原有的網路位址合計共佔 19 bits,可以被視為是一個新的網路位址,用來識別該子網路。原先 16 bits 的網路位址是不可更動的,但子網路位址是可以自由分配的,在範例中從主機位址借用 3 bits,產生了8(2的3次方)個子網路。

範例中,原先 Class B 總共有 65536(2的16次方) 個可分配的主機位址,經過切割後每個子網路(共8個)則有 8192(2的13次方) 個可分配的主機位址,理論上從主機位址借到 15 bits 可以形成 32768 (2的15次方) 個子網路,而每個子網路有2個可分配的主機位址,但不幸的是主機位址不能全為0或1,所以上述的主機位址通通都要扣2,也就是說最多只能從主機位址身上借到前 14 bits。


子網路遮罩


在切割完子網路後,可以發現不論原先是哪一等級的 IP 位址,網路位址都不會再是原來的長度(8、16、24 bits),那要怎麼確認切割後,現在網路位址的長度呢? 答案是我們可以用子網路遮罩來確認借用幾 bit 的主機位址。

  • 子網路遮罩的結構
    • 長度為 32 bits 與 IP 位址對應
    • 必須由連續一串的1再和連續一串的0組合而成
    • 可以用十進位表示(和 IP 位址相同)


轉成十進位表示 :
11111111 11111111 11111111 00000000 => 255.255.255.0

子網路遮罩一定要與 IP 位址搭配使用,單獨存在沒有意義。把 IP 位址和子網路遮罩擺在一起看時,子網路遮罩 1 的長度範圍對應到的是這組 IP 位址的網路位址,0 的長度範圍則對應到這組 IP 位址的主機位址。

以下用圖來說明會比較清楚 :

子網路遮罩由21個連續的1和11個連續的0組成,對應到 IP 位址(Class B)代表最前面的 21 bits 是網路位址,剩下的 11 bits 則是主機位址。

另外,也可以將範例的168.95.192.1套用子網路遮罩後簡寫成168.95.192.1/21/21代表網路位址有 21 bits,同時也是子網路遮罩有21個連續的1的意思。


  • 不進行子網路切割則各等級 IP 位址的子網路遮罩如下 :


以上就大致交代完 IP 位址的基礎了,當然還有蠻多東西沒有講,不過就讓我用一些應用題目結束這回合吧!



應用問題


以下都是蒐集來的題目 :

  • 某主機的 IP 位址為 192.168.1.134,子網路遮罩為 255.255.255.248,則該主機的"網路位址"為何?

      從第一段的數字192可以看出是 Class C 的 IP 位址,然後將 IP 位址中的最後一個數字134轉成二進制並和子網路遮罩比對 :

      

      可以發現這組 IP 位址落在 10000 這個子網路裡面,轉成十進位後,此子網路的網路位址為 192.168.1.128。

  • 在 Class C 等級網路中若要分出至少13個子網路,則子網路遮罩為何?

      向主機位址借 4 bits 就可以切出 16(2的四次方) 個子網路,故子網路遮罩為 11111111 11111111 11111111 11110000 (255.255.255.240)。

  • 255.255.252.0 這個子網路遮罩最多可以將 132.114.0.0 這個網路分成幾個有效的子網路? 每個子網路最多可以有幾台主機?

      

      由 IP 位址第一個數字132,可以確認它是 Class B 的 IP 位址,經比對之後發現向主機位址借用 6 bits 作為子網路位址,所以最多可分出 64 (2的6次方) 個子網路,每個子網路可以容納 1024-2 = 1022 (2的10次方減去主機位址全為0或1) 台主機。

之後有空應該會再寫其他填坑的文章~~~

創作回應

更多創作