淺談網路-Part 2:網路定址模式
作者:常世勳
PS: 此篇只討論IPV4之定址模式...IPV6留待之後再討論.
寄信時, 信封上要附收件人的住址;打電話時, 要撥對方的號碼。想在網路上通訊, 也總得先知道對方在 cyberspace 當中位於何處, 網路系統才能把你的訊息傳遞到對 方手上。
網路世界裡, 有著不同層次的位址。「OSI 參考模型」最底層的 「實體層」與「鏈結層」來說, 每片乙太網路卡在出廠時, 都燒錄著獨一無二的「硬 體位址」(又稱「MAC 位址」) , 這個位址就像身份證號碼一樣, 用來在網路世界裡 獨一無二的識別各個乙太網路終端設備。
因此, 在乙太網路的訊框裡, 就有兩個 48 位元的欄位, 分別記錄發送端及接收端的硬體位址。同樣的, 記號環網路卡也有屬於 它自己的硬體位址, 佔 16 或 48 位元。
再往上看看「網路層」吧。每個以 IP 為網路層通訊協定的通訊界面, 都有一個 「Internet 位址」(又稱「IP 位址」) , 供對等通訊端(peer) 彼此識別之用。
因 此, 在現行版本的 IP 封包表頭裡頭, 也有兩個 32 位元的欄位, 分別記錄發送端及 接收端的 IP 位址(在下一代 IP 協定: IPv6 當中, 則分別為 48 位元) 。
再往上 看, 「傳輸層」的 TCP 和 UDP 資料當中的通訊埠號碼, 也具有類似的作用。
註: 一台主機可能擁有不只一個 IP 位址。所以文中我不用「主機」一詞, 而用「通訊界面」。
在 Internet 世界裡, 我們接觸的都是 TCP/IP, 所以, 我將針對 IP 以上的定址問題 做進一步的探討。 IP 位址 現行版本的 IP 位址共占 32 位元。以微觀的角度來看, IP 封包裡頭真正存放的資 料, 當然都是二進位的型式;不過在口語上和書面上, 為了便於溝通, 通常都以十進 位來表示, 每隔 8 位元再以英文的句點做為間隔。
譬如說, 台灣網路資訊中心的 WWW 伺服主機的 IP 位址為 10001100011011110000000100000010, 我們常唸成、 寫成 140.111.1.2。
你看, 這樣是不是方便多了? 幅員廣大的國家, 為了便於管理, 通常都會畫分行政區, 再予以分界、分層負責。
除 了行政因素外, 單就通訊而言, 畫分行政區還有一個好處: 有效地傳遞訊息。
譬如 說, 位於台北市城中區的郵局, 看到一封由住在台北市重慶南路一段的人寄往台北市 重慶南路二段的信, 就不必把這封信轉交給城中區以外的郵局去, 它自己就能處理; 假使這封信的收件人是住在新竹市大學路, 郵局才需要把它運送到新竹市的郵局去。
我們可以看到, 行政區的觀念, 讓郵件傳遞更加有效率。 網路系統也是一樣。 現行的 IP 位址空間共有 232 個位址, 面對這麼大的空間, 分配管理是一大麻煩。
此外, IP 是屬於 OSI 參考模型當中的網路層, 必須處理路徑選擇問題;位址分配得 宜, 會減輕許多路徑演算法的負擔, 網路系統的效能也會增加。
IP 位址可分成兩部份, 第一部份(netid) 代表該通訊界面所隸屬的網路編號, 第二 部份(hostid) 代表該通訊界面本身。我們再根據網路規模的不同, 把這兩部份所佔 的比例區分成五個等級。 理論上A級的範圍是從 0.0.0.0 到 127.255.255.255, 主要是分配給「自己人」的 單位, 也就是早期對測試發展 TCP/IP 有功的單位。
因為這一級的 netid 部份只有 7 個位元, 只夠分配給 27 = 128 個單位, 所以格外珍貴, 現在已經很難申請得到。 像麻省理工學院的 WWW 主機 web.mit.edu, 它的 IP 位址是 18.69.0.27, 很明顯 的, 是屬於A級的。
理論上B級的範圍是從 128.0.0.0 到 191.255.255.255, 因為這一級的 hostid 最 多可容納 216 = 65536 個位址, 很適合大型單位使用。像交大資科 BBS 的 140.113.23.3, 就是隸屬於交大所分配到的B級網路之中。
理論上C級的範圍是從 192.0.0.0 到 223.255.255.255, 因為 hostid 最多只夠 28 = 256 個位址, 所以小型單位及撥接用戶, 多半 都是申請C級的。
理論上D級的範圍是從 224.0.0.0 到 239.255.255.255, 用來做群播(multicast) 之用。至於E級, 目前仍屬實驗階段。 為什麼我要說是「理論上」呢? 因為有些 IP 位址另有特殊用途。譬如說, A級範圍 內, 127.*.*.* 是用來做 loopback 的(習慣上, 大部份系統都指定 127.0.0.1 為 loopback 位址) , 所以實際上能用的A級位址就減少了。
其他常見的特殊位址還 有: 255.255.255.255 是做有限廣播(limited broadcast) 的, 若 hostid 的位元 全設為 1, 則只在該子網中做廣播。
IP 是網路層的協定, IP 位址是供同屬網路層的對等通訊端來彼此識別的。
所以, 當 應用軟體要向 140.111.1.2 主機索取資料時, IP 層的系統軟體會自動把本機的 IP 位址及對方的 IP 位址(140.111.1.2) 填到 IP 封包(packet) 中, 再往下交給鏈 結層系統及實體層系統遞送出去。
當鏈結層收到上層遞交過來的 IP 封包, 就得把它組織成合法的鏈結層訊框(frame ) , 才遞交給實體層傳輸出去。就拿乙太網路為例, 它的訊框裡, 有兩個 48 位元的欄位, 分別記錄發送端及接收端的硬體位址;所以, 要組成完整的訊框, 得先填好這兩個欄位。
問題是: 該填什麼? 我們自己(發送端) 當然知道自己的硬體 位址, 但我們要如何得知對方(接收端) 的呢?
關於對方, 我們只知道 IP 位址, 其 餘則是一無所知呀! 為了解決這問題, TCP/IP 提供一個位址解析協定 ARP(Address Resolution Protocol) , 負責把給定的 IP 位址轉換成相對應的硬體位址 , 這樣一來, 就能得知對方的硬體位址, 鏈結層訊框所需要的資訊就能順利滿足。
註: 事實上, 因為 TCP/IP 的網路層仍位於 OSI 參考模型的網路層, 也就是子網路 (subnet) 範圍之內, 所以一般主機(假設它叫做A) 無法用 ARP 來取得子網路 樊籬之外的主機(假設它叫做B) 的硬體位址。
當A要與B通訊時, 雖然A送出 的 IP 封包內的「接收端 IP 位址」一欄仍然是B的 IP 位址, 但 TCP/IP 系統會 根據 IP 分級架構與 netmask 的資訊, 看出這個封包應該要先送給本地的路由器 (路由器會負責尋找最適路徑並傳遞出去) 。
所以A的 TCP/IP 系統會自動把該訊 框的「接收端硬體位址」填成路由器的硬體位址。
關於 IP 位址, 我要再強調一次, 像「140.111.1.2」這樣的表示法, 只是便於人類 讀寫之用。
真正在幕後做事的 IP 協定是不認得這種表示法的;它只認得二進位的型 式。
而且, IP 協定並不是像「140.111.1.2」這樣以 8 位元的間隔來看待 IP 位址 的;它是以ABCDE五個等級, 以及 netmask 的設定來分隔 IP 位址的。
沒有留言:
張貼留言