tft每日頭條

 > 生活

 > ip地址和子網掩碼邏輯與算法

ip地址和子網掩碼邏輯與算法

生活 更新时间:2025-02-08 12:05:08

ip地址和子網掩碼邏輯與算法(隻有32位的)1

ip地址和子網掩碼邏輯與算法(隻有32位的)2

一、前言

我一直在強調,打好基礎怎麼變都不慌,但是一直也沒有重點分享過這些基礎技術。正好 2019 年了,決定再挖個大的新坑,準備開始寫一些那些多年不變的基礎技術,算法、數據結構、網絡協議、設計模式、操作系統有時間都會寫。先挖坑,挖完慢慢填,我盡量寫的有趣一些,希望大家能夠看下去。

今天就來先講講網絡協議中的 CIDR(無類型域間選路),先來說說 CIDR 的背景。

二、CIDR 的背景

2.1 IPv4 和 IPv6

現存所有的網絡設備硬件中,網卡是設備上網必備的硬件條件,網卡雖然有唯一(相對唯一)的 Mac 地址去标識,但是依然需要分配一個 IP 地址。有了 IP 地址,才能讓世界知道你的位置。

簡單來說,IP 地址是一個網卡在網絡世界的通訊地址,這就相當于現實世界中,我們在網購時填的收貨地址。可以幫助别人,從世界的任何位置,找到我們。

現存的 IP 協議有兩套,就是我們常說的 IPv4IPv6。IPv4 由于最初設計的"缺陷",長度隻有 32 位,大約隻能提供 40 億個地址。早期設計時,可能也想不到互聯網會發展到現在這個地步,随便一個設備都需要聯網。

這就造成了 IPv4 地址很快就不夠用了,尤其是這樣 32 位地址中,還被分為了 A、B、C、D、E 這五類地址,抛開一些特殊的 IP 地址,可供使用的就更少了。由此可見 IPv4 在當初設計時,是有多麼奢侈。

ip地址和子網掩碼邏輯與算法(隻有32位的)3

随後 IPv6 就被設計出來。我們知道當容量不夠的時候,擴容是一條短期正确,但是長期來看依然是存在隐患的事情,無論擴大到多少,如果沒有合理的規劃,用完其實也是遲早的事情。

IPv6 的長度增加到 128 位,可以提供更多的地址,但是 IPv4 和 IPv6 相互之間并不兼容,導緻遷移困難。如今 IPv6 已經慢慢在被一些大廠所使用,例如在淘寶 App 的啟動頁底部,就可以看到 IPv6 的标識。即便如此,在未來很長的一段時間内,依然會保持兩個協議并行支持。

IPv6 并不是本文的重點,再說回到 IPv4 的地址過少這個硬傷上。雖然地址确實不夠用,但是設備需要聯網确實是強需求,這也是必須要解決的問題,聯網就需要 IP 地址,是不是感覺進入死循環了。

IPv4 這種 A、B、C 類為主要的分類的 IP 數量,到底少到什麼地步呢?這裡看一張表就知道了。

ip地址和子網掩碼邏輯與算法(隻有32位的)4

能夠感受到 IPv4 的尴尬了嗎?C 類地址能夠包含的最大主機數量,是在太少了,現在随便一個網吧可能就不夠用了,而 B 類地址包含的最大主機數量又太多了,大量用不到的地址,很容易造成地址的浪費。有句老話怎麼說的,旱的旱死,澇的澇死。

于是就出現了一個折中的方案,那就是我們本文要聊的 CIDR,中文名為無類型域間選路

2.2 子網的劃分

現在還不到說 CIDR 的時候(就是不愛寫這種基礎技術,想寫清楚會發現有太多需要前置交代)。在說 CIDR 之前,還有個背景需要交代,那就是子網

互聯網這個大網,中間被分割成一個個子網,而子網下又被進一步分割。

從我們上面的 IP 分類圖中,可以看出,一個 IP 地址的 32 位中,還被分為兩類,分别是網絡号主機号,将主機号都置為 0,得到的就是網絡地址

ip地址和子網掩碼邏輯與算法(隻有32位的)5

可以看出,這樣很明顯的兩級劃分,也被稱為兩級 IP 地址。而 IP 地址的利用率有時很低,這種兩級劃分的方式就顯得不那麼靈活,于是就出現了子網。

ip地址和子網掩碼邏輯與算法(隻有32位的)6

子網其實就在之前的兩級 IP 地址中,又加了一層子網号,将其變成三級結構。雖然增加了子網号,但是 IP 地址的長度依然是 32 位,網絡号肯定是無法變更的,所以這裡的子網就隻能從主機号想辦法。此時的子網号,其實就是從主機号中借位,這樣就等于是減少了主機數,将其分割到不同的子網中。

涉及到子網,還有一個重要的概念,就是子網掩碼。子網掩碼,就是為了區分識别對 IP 地址劃分的子網的。子網掩碼很簡單,它就是将網絡号和子網号,對應的位全部置為 1,将主機号對應的位都置為 0,這就是子網掩碼了。

這三個信息中,隻要知道 IP 地址和子網掩碼,自然就可以推算出對應的網絡地址。這也正是我們前面說的子網的概念,其實是将一個大的網絡,在其内部分割成一個個小的子網,但是在網 絡的外層來看,還是一個大的網絡,他們都是通過網絡地址來通信的。

例子一:

ip地址和子網掩碼邏輯與算法(隻有32位的)7

例子二:

ip地址和子網掩碼邏輯與算法(隻有32位的)8

從上面的兩個例子中,可以看出,相同的 IP 地址,不同的子網掩碼,可以得出相同的網絡地址,但是他們卻是被劃分在不同的子網當中的。

三、無類型域間選路(CIDR)

3.1 什麼是 CIDR

通過子網掩碼去劃分的子網,是借走的主機号,這是有損耗的。例如借走兩位主機号,原則上可以劃分四個子網(11、10、01、00),但是其中全 0 和全 1 是不使用的,所以就隻剩下兩個了。使用 CIDR 是沒有這個問題的,它可以使用全 0 和全 1,不會造成浪費。

終于可以說到 CIDR 了。

CIDR 中文全稱是無分類域間路由,是英文 Classless Inter-Domain Routing 的縮寫。CIDR 打破了原先設計的 A、B、C 類地址的概念,将 32 位 IP 地址保持兩分的結構,就是依然保持前面是網絡号,後面是主機号。

這樣如何區分呢?CIDR 會在 IP 地址的後面,用斜線分割一個網絡前綴占位數的标識。

ip地址和子網掩碼邏輯與算法(隻有32位的)6

例如:10.100.120.2/24,斜線後面有一個數字 24,這種地址的表示形式,就是 CIDR。這裡的 24 表示,32 位的 IP 地址中,前 24 位是網絡号,後 8 位是主機号。

這一組 CIDR,包含的信息可就多了,還是拿 10.100.120.2/24 來舉例。

  • 将主機号,所有的位都置為 1,就是廣播地址,例如:10.100.120.255,如果發送這個地址,10.100.120 網絡裡面的機器都可以收到。
  • 将 24 位網絡号都置為 1,8 位主機号置為 0,得到的就是子網掩碼,255.255.255.0。
  • CIDR 除了表示一個 IP 地址,還相當于給出了一個 CIDR 子網的地址範圍。将主機号,從全 0 到全 1 的範圍,就是當前子網的所能包含的最大地址數

3.2 容易算錯的 CIDR

再來回憶一下 IP 地址的格式,32 位中以 8 位為一個單位,用 . 進行分割。所以比較常見的 /24、/16 這種就比較容易區分,不需要将十進制轉換成二進制,就可以明顯看出來,那些是網路号,那些是主機号,

家庭 WiFi 中,一般不會超過 256 個設備,所以 /24 也就夠用了,例如 192.168.1.117/24。

ip地址和子網掩碼邏輯與算法(隻有32位的)10

如果遇上不是 8 的整數倍 CIDR,有時候我們就容易算錯。

我們來看一下 16.158.165.20/22 這個 CIDR,求一下這個網絡的起始 IP 地址、子網掩碼和廣播地址。

你要是上來就寫 16.158.165.1、255.255.255.0、16.158.165.255,那你就錯了。

首先看到 /22 不是 8 的整數倍,肉眼不好區分,我們轉成二進制就清晰了。

ip地址和子網掩碼邏輯與算法(隻有32位的)11

遇到不好算的 CIDR,換成二進制再看看,一切都清晰了。

3.3 CIDR 應用

前面說到,互聯網就是被切分成一個個子網下存在的,一個個子網往下還可以繼續切分,但是對外就是一個整體。所以 CIDR 這種方式,/x 這個數值越小,說明當前子網下的主機數量越多。反之可以通過增加 /x 來繼續進行子網的劃分。

例如從 /16 變為 /20,右移了四位,等于又切分出來 16 個子網。

舉個例子,有一個 CIDR 地址塊,201.0.68.0/22,然後我們可以怎麼切分?拆分成二進制就清晰了。

ip地址和子網掩碼邏輯與算法(隻有32位的)12

要是有心,我們還可以繼續往下切分,但是正常我們為了保證子網可用,一般也會保持一個子網下的主機數不會太少。

四、小結時刻

CIDR 這種分割子網的規則,其實設計的很巧妙,隻要向右移位網絡前綴所占的位數,就可以繼續分割子網。就算以後全面升級了 IPv6 後,我個人認為應該也不會抛棄 CIDR 這種方式。

CIDR 這種分割子網的計算方法,你明白了嗎?自己随便寫一個 CIDR 地址,例如:16.158.165.20/20,看看能計算出子網掩碼、最小地址、廣播地址嗎?再嘗試将其劃分成幾個子網試試。

本文對你有幫助嗎?留言、點贊、轉發是最大的支持,謝謝!


在頭條号私信我。我會送你一些我整理的學習資料,包含:Android反編譯、算法、設計模式、虛拟機、Linux、Kotlin、Python、爬蟲、Web項目源碼。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved