2010年2月26日 星期五

淺談網路-Part 2:網路定址模式

淺談網路-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 位址的。

淺談網路-Part 1:TCP/IP

淺談網路-Part 1:TCP/IP

作者:常世勳

1.TCP/IP簡介 :
TCP/IP實際上是由一組通訊協定所組成的協定名稱。
在這些協定當中, 有兩個協定是其他大部份協定的基礎, 這兩個協定分別是:
●傳輸控制協定(Transmission Control Protocol, 簡稱TCP): 一個可靠的串流式服務協定, 也就是TCP可確保所有送至 某個系統的資料能正確無誤地到達該系統。
●網際網路協定(Internet Protocol, 簡稱IP): 制定了所有在網路上流通的封包( peacket)資料格式與規則。
TCP是架在IP上, 完整的TCP/IP就是由這兩個主要的協定 與其他協定所構成, 若以多層式模型描述TCP/IP, 則較廣為採用的是如 圖1所示的架構。
圖1 TCP/IP多層模型架構:
┌───────────────────────---------------┐
│ 應用層(Application Layer) │
│ 包含網路的應用程式與程序。 │
├──────────────────────────--------┤
│ 端對端傳輸層(Host-to-Host Transport Layer) │
│ 提供端對端的資料傳送服務。 │
├──────────────────────────--------┤
│ 網際網路層(Internet Layer) │
│ 定義傳送資料的格式與資料遞送的規則。 │
├──────────────────────────--------┤
│ 網路存取層(Network Layer) │
│ 包含實體網路的遞送與存取。 │
└──────────────────────────--------┘
在圖1所示的架構中, 資料的流向通常是由應用層往下傳達, 途中經過端對端傳輸層、網際網路層, 最後由網路存取層透過傳輸媒介送至 目標電腦的網路存取層, 再由下而上, 傳至其應用層。 TCP/IP協定允許不同類型的主機透過網路相互「交談」,它所提供的 服務幾乎已能滿足大部份使用者的要求, 並且TCP/IP尚具前瞻性 , 新的服務項目也正逐漸擴充當中。
TCP/IP目前已成為電腦網路通訊的標準之一, 透過它即可連結不同類型 的網路與電腦系統, 目前幾乎所有的電腦系統皆支援TCP/IP協定的軟體, 例如IBM主機、PC、MAC、Amiga、Ataris等系統。
對於TCP/IP細節有興趣的讀者, 可 進一步參考有關Internet的書籍。

2.TCP/IP服務項目 :
所有支援TCP/IP協定的軟體皆提供本節介紹的全部或大部份功能 , 這類軟體提供的TCP/IP服務包括:
●電子郵件 (E-mail) 投遞服務。
●檔案傳輸服務。
●遠程終端機模擬服務。
●資料庫服務。
●電子會議服務。
●多媒體資料傳輸服務。
●遠程計算與模擬服務。
由於TCP/IP具備在多工環境運作的條件, 因此, 有些支援TCP/IP協定 的軟體本身即可「同時」提供全部或部份上述的服務。
例如PC的網路作業 系統 (Net work Operating System、簡稱NOS) 即允許使用者同時進行最多10件 的工作, 使用者可利用鍵盤和另一端主機的使用者交談, 啟動終端通訊 功能與其他主機連線, 或至其他主機下傳檔案, 而當這些工作都在進行的 同時, NOS還會暗中將電子郵件傳至其他主機, 或接受其他使用者的連線。
簡單地介紹幾個TCP/IP協定中, 較常見的服務或協定:
TELNET: 終端模擬程式。
在實際的網路環境, TELNET允許使用者 由某部主機存取另一部主機的資源, 令使用者端的主機 像是直接與另一部主機相連的終端機。
FTP: 檔案傳輸協定 (File Transfer Protocol)。
此程式允許 使用者在兩部主機之間傳遞文書檔與二進位檔案。
SMTP: 簡易郵件傳輸協定 (Simple Mail Transfer Protocol), 主機可以藉此自動將電子郵件由一部主機傳至另一部, 使用者通常不會察覺它的存在。若您在自己的電腦中寫了新的 郵件, 則SMTP會自動嘗試將這些郵件送至目標主機。 POP: 郵件遞事務協定 (Post Office Protocol), SMTP雖然很自動化, 但主機必須是全天開啟的, 對於非全天候開啟的主機, POP可 允許所有內送的郵件暫時存放在郵件服務器 (mail server), 等使用者開機時, 其主機將自動要求郵件服務器送出該使用者 的郵件。
PING: 封包網際探索器 (Packet InterNet Groper), 這個程式以送出 一個封包的方式來探索某部指定的主機, 若該主機收到該封包, 會即刻回應另一個封包, 而PING將顯示來回封包所花的時間。 FINGER: 此命令可列出主機上所有的使用者, 或列出某個特定使用者的 相關資訊。
ARP: 位址解析協定 (Address Resolution Protocol)。為了使封包 能正確送到目的站, IP位址須與正確的硬體位址匹配, 通常軟體 並不知道給定IP位址的硬體位址為何, 當它需要知道時 , 即可利用ARP送出一段廣播訊息 (broadcast message), 而遠端 的機器若收到該訊息, 即會回應它的硬體位址。
目前, Internet上已有越來越多新的工具程式架設在上述各類協定 上, 這些程式的發展方向大都朝向整合性功能以及與使用者更親近的操作 介面方向發展, 這些就留待以後再介紹了。