--- creator: Zach tags: 計算機網路, IP created: 2021-11-03 --- # 網路是怎樣連接的(十二)IP地址怎麼看 ## 思考重點 - 如何看懂IP代表的意思 - 子網內的設備可以被直接訪問嗎 - 網路設定中的255.255.255.0是甚麼 - 公有IP與私有IP差別 - 固定IP與浮動IP區別 ## 架構圖  ## IP地址表示方法 IP地址相當於**電話號碼**的概念,想要與對方通訊必須要知道對方的電話號碼才行 在網際網路中,相應主機之間是透過IP地址進行溝通,也就是說使用TCP/IP網路互相溝通的主機一定要配置IP地址,因此IP地址可以說是網路傳輸中最基本的部分 IP地址總長度為4個bytes,每一個byte為一組,總共分成4組,通常用十進位制表示: | IPv4二進位制 | IPv4十進位制 | |:--------------------------------------:|:-------------:| | 11000000. 10101000. 00000000. 00000001 | 192.168.0.1 | | 11001011. 11001100. 00110000. 00111000 | 203.204.48.56 | | 10101100. 00010000. 00000000. 00001010 | 172.16.0.10 | 由於一個分組的長度是一個bytes的關係,分組的數值表示上限為255(8個bits全部為1),這也是為什麼你不會看到`256.0.0.1`這種表示方法 從IP地址的表現方式不難看出其實IP地址的數量**其實是非常有限的**,若是每個分組均有256種可能,那麼經過計算,IP地址總共會有256\*256\*256\*256=4294967296個,相信以現在的設備數量來說,一定是遠遠不夠的,因此我們會看到網際網路使用了非常多技術來降低IP地址的實際使用數量 你可能會覺得IP地址代表的是連線到網路的這台電腦,但其實IP地址是依據網卡來分配的。若是電腦只搭配一張網卡的話,我們可以說該IP地址代表這台電腦,但若是同時配備兩張以上的網卡,主機就會擁有多個IP地址,你可以試著在終端中輸入`ipconfig/all`來查看IP地址的配置,由於我的電腦址搭配一張網卡,所以只會有一個IPv4地址  </br> 若路由器同時擁有兩個網卡,他可以同時代表兩個不同的子網系統,例如下圖的路由器就代表`192.168.0.1`與`192.168.1.1`兩個子網  </br> ## IP地址等級 IP地址分為網路部分與主機部分,網路部分代表所處網域,而主機部分則代表該主機。以`192.168.0.12`為例,其中的`192.168.0`是網路部分,`12`代表這個主機,同一個網域中每台裝置的網路部分相同,但**主機部分必須互不相同** 依照網路的用途與子網主機數量要求,IP地址為了有效分配IP給不同層級的客戶,引進了IP等級制度。網路部分長度越小,代表可以分配的主機數量越少,但相對的它可以容納更多的子網主機數量,這種類型的IP地址就非常適合分配給大機構與政府機關 相反的網路部分越長,主機部分越短,它能夠容納的主機號越少,這種等級的地址數量眾多,但子網主機數量少,適合分配給家庭、學校等小單位  </br> 簡單來說IP地址等級是利用第1位元到第4位元的組合來進行等級地劃分,每個IP等級可以分配的數量與對應關係如表: | 等級 | 對象 | IP範圍 | 子網遮罩 | 網路部分容納數量 | 主機部分容納數量 | |:----:|:----------------------------:|:--------------------------:|:---------------:|:----------------:|:----------------:| | A | 大型企業、國家機構、研究機構 | 0.0.0.0\~127.255.255.255 | 255.0.0.0 | 128 | 16777214 | | B | 中型企業 | 128.0.0.0\~191.255.255.255 | 255.255.0.0 | 16384 | 65534 | | C | 電信商業者、小型企業 | 192.0.0.0\~223.255.255.255 | 255.255.255.0 | 2097152 | 254 | | D | 群播地址 | 224.0.0.0\~239.255.255.255 | 255.255.255.255 | --- | --- | | E | 保留 | 240.0.0.0\~255.255.255.255 | --- | --- | --- | **A級地址** A級地址第一個位元固定為0,IP地址的前8個位元為網路部分,範圍落在00000000\~011111111,換算成10進位置就是0~127。後24位元為主機部分,總共有256\*256\*256=16777216個主機號,但主機號部分不能同時為0或同時為1,所以主機部分容納數量為166777216-2=16777214 **B級地址** B級地址的第一個位元為1,第二個位元為0,IP地址的前16個位元為網路部分,範圍落在10000000\~10111111,換算成10進位就是128\~191。後16位元為主機部分,總共有256\*256=16386個主機號,減去兩個特殊IP地址,主機部分容納數量為16386-2=16384 **C級地址** C級地址的第一個位元為1,第二個位元為1,第三個位元為0,IP地址的前24個位元為網路部分,範圍落在11000000\~11011111,換算成10進位就是192\~223。後8位元為主機部分,總共有256個主機號,減去兩個特殊IP地址,主機部分容納數量為256-2=254 **D級地址** D級地址的前四個位元分別是1110,整個IP地址的都是網路部分,範圍落在11100000\~11101111,換算成10進位就是224\~239。D級地址主要用於群播用途(*Multicast*),它並沒有分配主機號 **E級地址** E級地址的為保留未使用的IP地址 從上面的介紹中可以發現使用等級制度可以使得IP地使用更有效率 試想不使用等級制度的狀況下,所有的設備均使用一樣的主機數量,有些大型機構一定會不夠用,所以勢必要使用更多IP地址,另一方面家庭則可以會有太多主機號未使用,一來一往之下,IP的使用效率一定不高 但IP等級制度的缺點很明顯,一旦分配特定等級的IP地址後,主機號的分配數量就固定了 比如說我申請一個C級地址,主機號最多就是254個,將來想要申請超過254台主機號就需要轉換成更高等級的B級地址,不過B級地址的主機號又太多,這之間的變化太大,反而會造成IP地址的浪費 > **你能想像不使用網路部分與主機部分區隔IP地址的狀況嗎?** > 這種情況下就沒有所謂的區域網路概念,所有設備都直接與網路核心相連,而且每個設備都需要IP地址,這種狀況下IP地址很快就會被消耗殆盡 > **為什麼主機部分數量要減2?** > 主機號全為0的狀況代表該網路區段,例如在C級地址`192.168.0.12`中`192.168.0.0`,或B級地址`172.16.10.1`中`172.16.0.0`都代表該子網網域,所以IP在分配主機號時候盡量避免使用全0的地址,以免發生衝突。主機號全為1的狀況為廣播模式,後面會做介紹,簡單來說IP主機號為255時為特殊保留字,應該避免,例如`192.168.0.255` > **IP等級的另類好處: 快速分類** > 我們前面有提到IP等級是依據前1到4個比特位進行分類,假如IP地址的第一個比特位為0,我們馬上就可以得知它是一個A級地址,並能快速分析出網路部分與主機部分 ## 子網遮罩 為了解決IP等級產生的缺點,我們需要更精確的定義IP地址,因此子網遮罩的目的就是如何更有效的區分出網路部分。子網遮罩的出現使得IP分割不再受到IP等級的限制,可以將不同IP等級再切分成更小網路單位 使用子網路遮罩必須準備一組掩碼長度,來判斷網路部分長度。舉例來說`178.15.50.9`這個B級地址,使用掩碼長度26,所以1\~26比特位要設置成1,27\~32要設置成0,經過運算後可以得到網路遮造`255.255.255.192` 將計算出來的網路遮罩與原本IP地址進行AND運算就可以得到網路部分,詳細運算如下表所示: | IP (十進位) | 178.15.50.9 | |:------------------:|:------------------------------------:| | IP(二進位) | 10110010.00001111.00110010. 00001001 | | 子網路遮罩(十進位) | 255.255.255.192 | | 子網路遮罩(二進位) | 11111111.11111111.11111111.11000000 | | IP網路部分(十進位) | 178.15.50.0 | | IP網路部分(二進位) | 10110010.00001111.00110010.00000000 | 你看這樣是不是就解決IP等級下的浪費了呢,透過將IP分成更細的子網,每個區域網路下包含的設備數量恰到好處,而不會為了提升效率免強塞進一堆設備,增加封包傳遞時的衝突 你可以想想下列哪一個場景更具有效率優勢: 1. 將所有的車流導向同一條一級快速道路上 2. 將有特定目的的車流分別引導到不同的二級快速道路上,雖然二級快速道路不如一級來得寬敞,但都恰好可以處理車流 另外網路遮罩還具有讓傳送封包更有效率的功能。我們之前提到過,IP封包頭部會包含發送端IP與接收端IP,這時只要使用子網遮罩就可以得知目的地主機是不是和自己處於相同的網域下,如果是的話就直接發送,不是的話再交給路由器轉發  </br> 在cmd中輸入`route print`指令來查看路由表,我當前電腦的IP為`192.168.0.12`,若目的地IP地址與*網路遮罩*欄位AND運算後等於*網路目的地*欄位中的地址,則將封包發往對應的*閘道*欄位 例如目的地IP為`168.15.56.1`,經過網路遮罩`0.0.0.0`AND運算後得到`0.0.0.0`,所以必須先將封包傳到路由器地址`192.168.0.1` 若*閘道*欄位顯示"在連結上",代表目的地IP與當前IP在同一個區域網路中,可以直接傳送封包而不用透過路由器轉發 > **路由表的優先級判斷** > 上述的例子可能有些朋友會疑惑,路由表中的網路遮罩這麼多,該怎麼判斷查找的優先順序呢?其實在查找過程中會先判斷前綴(*prefix*),符合越多項的優先比對,且前綴必須是連續相同的。例如目的地IP`192.168.0.9`的前3個bytes具有相同的前綴(均為`192.168.0`),因此優先使用`255.255.255.0`這組網路遮罩,以此類推,`0.0.0.0`是最後的一個比對遮罩 > **子網路遮罩表示方法** > 上面的例子我們將子網路遮罩長度設定成26,我們可以將IP地址寫成`178.15.50.9/26`,這樣就可以清楚知道網路部分是從第1個比特位到第幾個為止 ## 廣播 廣播的目的是將訊息傳給**該區域網路中**的所有設備。IP地址將主機號全部設置成1判定為廣播地址,有點難懂吧,剛好前面學過子網遮罩的概念,就順便舉個小例子練練手! **案例** 使用現有的IP地址、子網路遮罩來求廣播地址 | IP地址 | 192.168.56.205 | |:----------:|:---------------:| | 子網路遮罩 | 255.255.255.224 | | 廣播地址 | ??? | 首先我們需要將IP地址與子網路遮罩分別都轉換成二進位,轉換後發現子網路遮罩的長度為27,這代表IP其實可以寫成`192.168.56.205/27`,網路部分佔27bits,主機部分佔5bits 均轉換成二進位後,將兩個IP地址做AND運算得出IP的網路部分。`11000000.1010100.00111000.11000000`轉換成十進位就是`192.168.56.192` 因為子網路遮罩只到第27比特位,剩下的的比特位都是主機號,所以將得到的IP網路部分的末5碼比特位都設置成1,得到`11000000.1010100.00111000.11011111`,轉換成十進位就是`192.168.56.223` 把這一系列的運算整理成如下的表格: | IP地址(二進位) | 11000000. 10101000. 00111000.11001101 | |:----------------------:|:-------------------------------------:| | 子網路遮罩(二進位) | 11111111.11111111.11111111.11100000 | | IP地址網路部分(二進位) | 11000000.1010100.00111000.11000000 | | IP廣播地址(二進位) | 11000000.1010100.00111000.11011111 | | IP廣播地址(十進位) | 192.168.56.223 | 了解廣播IP的配置方法後,我們可以看看廣播地址對應的MAC地址是甚麼。手動打開cmd,輸入`arp -a`指令來看看[[網路是怎樣連接的(十一) 初探IP協議#ARP表|ARP表的內容]],發現廣播地址對應的MAC地址是`ff-ff-ff-ff-ff-ff`  </br> `ff-ff-ff-ff-ff-ff`為特別保留的MAC地址,只要交換設備發現封包的MAC地址為`ff-ff-ff-ff-ff-ff`,就會自動將該封包轉發給相同網域中除了發送方以外的設備,一般來說接收到廣播的設備不用做任何回應 一般來說若設備收到的MAC頭部地址與自己不同會直接丟棄封包,不過`ff-ff-ff-ff-ff-ff`除外,它代表網路中的所有設備都要接收它 ## 公有地址與私有地址 公有地址與私有地址的概念很簡單,但凡可以讓**全球範圍內的人可以直接訪問**的IP地址就稱為公有IP 例如連接外部網路的路由器、伺服器、Google首頁、Amazon官網、或有註冊全球IP地址的[部落格](https://zach-lin.com/)等,公有IP具有**唯一性**。相對的只有在區域內的人員才能夠互相通訊的的稱為私有IP,不同區域網路內的**私有IP可以重複,但同一個網域內的不能**,例如學校、公司、家庭或組織內部人員使用的就是私有IP 提出公私有IP的目的很簡單,就是為了減少全球範圍的公有IP的使用,假如所有設備都配置一個公有IP,那麼很顯然IP地址很快就會被消耗殆盡 話又說回來私有IP又是怎麼分配的呢? 其實IP地址有專門分配給組地址給私有IP使用,其分布如下表所示,超過這個範圍的就是公有IP: | 等級 | 私有地址範圍 | 網路數量 | |:----:|:----------------------------:|:--------:| | A | 10.0.0.0\~10.255.255.255 | 1 | | B | 172.16.0.0\~172.31.255.255 | 16 | | C | 192.168.0.0\~192.168.255.255 | 256 | 實際操作很重要,讓我們在一次打開cmd輸入`ipconfig/all`指令來看看電腦的IP地址是公有還是私有IP  </br> 嗯,很明顯是C級私有地址,然後我去查了一下,家裡使用的路由器品牌是D-Link~~不是工商時間~~,預設路由器IP是`192.168.0.1`,網路部分是`192.168.0` 然後看看cmd中的`預設閘道`消息,`192.168.0.1`就是路由器IP,不同路由器品牌分配的子網IP會有些不同,不過常見的就是`192.168.0.1`, `192.168.1.1`, `192.168.31.1`等 大家到這裡可能會有些疑惑,既然私有IP的目的是減少公有IP的使用,使用範圍是同一個子網內的設備,那假如我要與其他區域網路的設備通訊怎怎麼辦?在IP頭部中填入私有IP嗎?不對阿,不同網域可能會有相同的私有IP,到底私有IP跟公有IP之間存在甚麼關係? 從`ipconfig/all`指令中我得知了當前電腦的私有IP為`192.168.0.12`,這是同一個子網路中的設備互相辨識用的IP,那我們來看看瀏覽網頁時對方判定的IP又是多少 首先到[Google搜尋頁面](www.google.com),打上`what is my ip`,按下搜尋即可顯示你的公有IP地址(你也可以到[百度](https://www.baidu.com/)搜尋`我的IP`)  </br> 結果顯示`203.204.48.56`是我的公有IP地址,其實這個IP是由路由器分配給我的,假如我現在要訪問全球範圍內的網路,就分配給我一個公有IP 分配?這又是怎麼一回事... ## 固定IP與浮動IP 其實固定IP與浮動IP都是公有IP,只是分配的形式不同而已。你可以它當成商業化下的產物,也就是ISP業者向使用者提通的不同形式服務 固定IP顧名思義,它的IP地址不會隨著時間改變,更不會因為你重新開機或者重新連線而不同。因為這種特性,固定IP通常用於IP不允許變動的使用場景,例如辨公室裡的印表機、網路上註冊的部落格、商業用途的官方網站等等 **優點:** - 方便遠端連線協作 - 便於其他使用者直接造訪 - 更快的連網速度(不需要重新配置IP) **缺點:** - 更高的費用 - 需要手動配置固定IP(較為複雜) - 容易成為駭客攻擊目標 使用浮動IP的設備有可能因為時間、重開機或電信業者重新分配而改變IP地址,也可能不會改變。這種特性使得浮動IP可以分配給多台設備共用,有需要連線的設備在透過具有NAT功能的主機或路由器分配一個浮動IP就好 **優點:** - 相對便宜的費用 - 自動配置IP,設定較為簡單 - 僅需要一條Cable或ADSL就可以讓多名用戶上網 **缺點:** - 連網速度較慢(需要重新配置IP) - 對於有架網站需求的使用者來說,較為麻煩 先來簡單介紹一下DHCP與NAT之間的關係。當設備有上網的需求時,ISP電信商就會**動態**分配一個可以上網的公有IP地址,這種技術就稱為DHCP。而子網域內的私有IP是無法上網的,因此NAT的責任就是讓子網內多台設備共用一個DHCP分配的公有IP。這個分配到的IP我們就稱為浮動IP,所以假如你的DHCP功能是顯示開啟,那代表你的設備是使用浮動IP的方式進行上網 </br>  </br> 我們一樣在cmd中輸入`ipconfig/all`指令,假如DHCP功能被啟用則表示當前使用的是浮動IP,否則就是使用固定IP。 下圖顯示我的電腦的DHCP配置為*啟用*,也就是說我們在Google上搜尋`What is my IP`的結果(`203.204.48.56`)其實是電信業者使用DHCP分配給路由器的一組浮動IP,路由器再使用NAT功能使我可以用這組IP上網  </br> > **不使用DHCP** > 若使用者不使用DHCP功能,那麼每次上網時都需要手動輸入IP地址(固定IP)、網路遮罩、預設路由等等,非常麻煩,相反的有設定DHCP的設備,只要簡單設定DHCP伺服器,就可以達到隨插即用的作用 --- 好啦,今天的文章就到這裡,希望會對各位有幫助,有任何想法也歡迎留言告訴我,畢竟你的反饋是我寫作的最大動力!
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.