伺服器架設篇 - RedHat 9

第二章、簡易網路基礎架構

簡單的介紹網路基礎的資料而已

最近更新時間: 2004/03/16

本文資料主要針對 RedHat 9 的系統進行說明,要注意的是,RedHat 9 與 Red Hat Enterprise Linux (RHEL) 是完全不同的東西!RedHat 9 在 2003 年推出,在 2004 年就不再維護了!這部份網站更新到 2005 年,也沒有再維護過! 因此,建議您前往本站查詢最新版本的 Linux distribution 文章來閱讀,比較不會浪費時間。那為何還需要編輯 RedHat 9 的資料呢? 鳥哥只想要做個自己曾經撰寫過的文件內容保存而已囉! ^_^!最新文章請前往鳥站首頁查閱囉!
由前一章節『架站前的技巧分析』當中,我們已經知道網路基礎是很重要的呢!在這個章節當中,我們主要針對網路基礎來進行比較深入的談論。當然啦,光是網路基礎裡面的 OSI 七層協定,就可以寫了滿滿的一大本書了,我們的目的僅是讓大家對於網路基礎有點認識就是了!因此,在這個章節中,我試圖以較為簡單的方式介紹網路的基礎概念,這裡面包括了 IP, route, TCP, 以及類似三向交握等等的網路基礎,希望能夠讓大家早一點進入狀況喔! ^_^

關於網路:

    Linux 這個作業系統的最大優勢就是在網路功能 ( Network ) 啦!這包含他的高穩定度系統資源分配,以及較為安全的網路防備能力!所以很多人都喜歡拿他來進行網路伺服器的架設。然而,這些網路功能的優點卻同時也是缺點,怎麼說呢?因為 Linux 網路功能太強了,所以一旦被 Cracker (網路怪客) 入侵的話,嘿嘿嘿嘿!怎麼吃上官司的都不知道!所以囉,上網之前,請先注意:『我的網路做好安全防護了嗎?』再者,由於 Linux 的設定上面通常使用者比較需要花費多一點心力,畢竟當初他是由一群工程師由於本身興趣而設計出來的,所以依舊具有相當麻煩的設定工作需要作!這個時候,如果沒有較為基礎的 網路基礎 認知的話,那麼在 Linux 上面設定網路或者是進行網路除錯將是您一生當中最大的夢魘......,所以,這裡有幾件事情要請您好好的來參考一下:
     
    • 熟悉 Linux 操作與 Linux 基礎:還是要一再地不斷強調,如果您確定您只是想要『會使用 Linux 就好』那一類型的使用者,那麼真的不要再往下看了,因為主機後續的維護問題會很大,倒不如花個小錢,請個專家來幫您搞定即可!而如果您確定您是『想要更瞭解 Linux 的使用者,並且想要熟悉架設網站』,那麼請不要再在網路上詢問:『為何我不能使用 FTP 傳送資料到主機上?』或者是『為何我不能建立個人網頁』之類的傻問題,因為這僅僅牽涉到『檔案權限與屬性』的概念而已,而這些概念都是 Linux 基礎裡頭相當重要的功課!此外,由於遠端操控 Linux 主機時,幾乎都是使用文字界面來工作,所以,不懂 bash shell ?哈哈!那麼想要幹嘛都碼不可能!
     
    • 花幾晚的時間將網路基礎看一看:這一個章節旨在引導網路新鮮人快速進入網路的世界,所以寫的比較淺顯一些些,基本上,還有一堆網路硬體與通訊協定並沒有被包含在這篇短文裡頭。如果您的求知慾已經高過本章節,那麼請自行到書局尋找適合您自己的書籍來閱讀!當然,您也可以在網際網路上面找到您所需要的資料,例如 Study Area 就是一個很好的網路基礎入門網站:http://www.study-area.org/network/network.htm,尤其是 IP 基礎那一篇:http://www.study-area.org/network/network_ipadd.htm,相當適合入門級新手參考之用!反正,無論如何,在進行伺服器架設之前,您都必須要對 Network 有一定的認知啦!
     
    • 隨時掌握主機資訊: 這是最麻煩的一點了!因為大家還是常常認為『我的網站這麼小,沒有人會注意的啦!』唉!說過若干次了,就是因為有這種心理存在,我們才會常常聽到『奇怪!我在早上剛安裝完畢,怎麼下午就無法以 root 的身份登入了!』請隨時注意您主機的資訊,好好的愛護他吧!
     
    反正無論如何,不論是 Linux 還是 Windows 的伺服器,瞭解網路基礎為進入伺服器架設的第一課,底下的文章請好好的,慢慢的讀完!對於未來的學習是很有幫助的!
     

    網路是什麼:
     
    網路是什麼呢?簡單的說,只要是兩部以上的電腦,透過網路線或者是其他的網路媒體(例如無線網卡、專線、Cable纜線等等)連接在一起,以進行檔案傳輸、訊息傳遞等等功能,那就形成一個『網路世界』啦!那麼網路有沒有大小之分呢?基本上,如果您的網路是在您的研究室內幾部電腦,或者是大樓內的所有幾百部電腦連接起來的,那麼就可以視為一個小型的區域網路 ( Local Area Network, LAN, 也有翻譯成文『局網路』 ),透過 LAN 的再延伸,例如整個城市或國家,就可以稱做為廣域網路 ( Wide Area Network, WAN ) ,而這些無數個的 LAN 與 WAN 都連接在一起,那就是網際網路 ( Internet ) 啦!您可以想像成, Internet 僅是將所有的 LAN 與 WAN 連接在一起的一個介面,所以,任何地方的電腦,只要連接上 Internet 之後,就沒有什麼太大的差異了,也就是說,在地球的另一端的電腦,與在您身旁的電腦,在 Internet 上面,事實上是差不多的!(只不過流量有點限制就是了 ^_^)!此外,需要注意的是, Internet 並沒有專人在維護的,所以他是完全沒有王法的地方,您可以在 Internet 上面進行任何的事情!哇!好像很可怕的樣子!是這樣沒錯! Internet 確實是『相當的可怕!』 ^_^,就是因為太可怕了,所以我們得要來聊一聊網路的基礎呀!
     

    網路的功能
     
    好了,對於所謂的網路有一點認識之後,要來談一談:網路有什麼功能呢?說穿了,網路真的是很日常生活化的一項工具了!!例如您使用的電腦上 WWW 去瀏覽時,使用的就是網路功能了;您的公司內部的『網路上的芳鄰』分享的檔案、印表機,那就是網路功能之一;上網下載軟體,使用的 FTP 也是網路功能之一!呵呵!夠生活化了吧!我想,目前的生活中,很難有人不去奇摩雅虎看一看奇摩即時新聞的吧!?還有股票啦、電子資訊郵件啦、尤其是現在讓很多人流連忘返的線上網路連線遊戲咯等等,哇!好多功能呦!這都是網路幫您達成的呦!當然啦!網路的功能來不止於此,您可以再更深入的研究呦!
     

    網路的一般運作流程:
     
    好啦,網路就是幾部電腦連接在一起,並且可以互相進行資料與訊息及硬體周邊分享(例如分享印表機給他人使用)的一個咚咚,他可以達到的功能相當的多,但是這裡就牽涉出來了一個問題,那就是『網路是如何運作的呢?』簡單的說,就是我們連上 Internet 時,資料是如何傳遞的呢?底下我們以目前最常見的 ADSL 撥接制的情況稍做說明好了。當您需要連線網路時,那麼您的電腦主機就必須要有:
     
    1. 網路卡網路線:在網路的世界裡,其實真正工作的應該就是電子訊號啦!而這些電子訊號需要藉由硬體做為媒體來傳輸,這就是最底層的網路硬體啦!我們這裡是以 ADSL 來進行說明的,當然還有所謂的光纖、無線網路等等。無論如何,要連接到 Internet 上面去,首先,就是必須要有『連接的媒體』,這個媒體在目前最常見的就是 RJ-45 接頭的網路線與網路卡啦!當然啦,每一種媒體都有其規格與負載量,所以選擇的時候就需要多加的小心囉!

    2.  
    3. 支援網路媒體的作業系統:還記得我們在 Linux 基礎裡面提到的 Linux kernel 嗎?沒錯!空有硬體,但是作業系統核心不支援,那麼也是英雄無用武之地的啦!所以,有了網路媒體之後,還需要有可以跟媒體溝通的作業系統來操控硬體才行!目前主流的作業系統 Windows 與 Linux 都能夠支援一大堆的網路媒體呢!

    4.  
    5. 合法的網路位址:就跟門牌一樣,如果家裡沒有門牌,那麼您的郵件包裹如何送達自己的家裡?目前 Internet 主要還是以 IPv4 這個協定的 IP 作為位址的標準,網際網路只會認得 IP 的喔!除此之外,要將資料正確無誤的送達該 IP 就需要有所謂的『路標』才行,這個資料傳輸的路標就是我們所謂的『路由, route』!

    6.  
    7. 資料傳輸的方法:好了,現在硬體都沒有問題了,接著下來就是需要瞭解『我的資料是怎麼傳送出去的?!』哇!好麻煩,還要理解資料『封包』的咚咚呀!呵呵!基本上,不用擔心,目前的網路已經幫我們定義好很多協定了!所以我們只要瞭解他的一些基礎原理即可!其他的就不需要太擔心啦!!
     
    所以,簡單的說,您想要瀏覽 Internet 上面的資料,就需要有網路卡、並且安裝了合適的作業系統,還得要驅動網路卡才行!然後,使用 ADSL 撥接到您的 ISP 去取得合法的 IP 位址之後,這樣就可以瀏覽網路上面的網站資料了。OK!OK!我們來假設一個狀態好了,如果您要瀏覽 奇摩新聞 的話,您是怎樣取得上面網頁的資料的呢?
     
    1. 首先,您要取得奇摩雅虎上面的資料,就必須向對方提出一個要求,不然對方怎麼知道您要的資料是什麼呢?呵呵!那麼這個要求的『封包』會先在您的系統上面被『打包』;
    2. 『打包』完成之後,當然就是要開始來傳送咯,傳送當然是藉由網路卡來傳送囉,所以資料這個時候會被送到網路卡上;
    3. 而在網路卡將打包的封包傳送出去之前,會先監聽一下在這個傳送的時間點上面,是否有其他的 PC 同時在傳送,如果沒有的話,封包才可以送出去,否則就無法傳送,需要再等下一次的監聽之後才能傳送!
    4. 好了,那麼開始傳送之後,就需要藉助於 route tables 的規則,這個 route table 就有點像是路標,我們的封包就是經過一層又一層的節點(nodes)來送達到目的地!
    5. 到達目的地之後,再來則是對方的主機將封包收下來,並經過作業系統的解開封包,得到您所要求的資料,然後在依據要求的內容來給予回應!而這個給予的回應又需要上面的這樣一個流程了!這個時候就會變成對方將資料打包->網路卡->網路傳送->....到達您的螢幕前面!
     
    當然,這只是很簡單的一個流程例子,但其實裡面包含了很多的資訊,例如路由(route)、封包概念(TCP packet)、網路位址(IP)、網路共享媒體的硬體廣播等等的一堆基礎的咚咚需要理解~底下我們先介紹一下 OSI 七層協定之後,再一個一個分項來介紹各個層階所需要知道的內容喔!
     

    TCP/IP 與 OSI 網路七層協定:
     
    根據上面說明的網路資料運作的流程方式,我們就不難知道,想要進行網路的傳輸,就必須要有硬體,而且還需要其他網路相關功能的運作之後,才能夠連上 Internet 。然而您必須要瞭解的是,網路相關的硬體開發商可不是只有一家啊,並且,可以運作的作業系統也不是只有一種啊!如果大家都獨自玩自己的網路架構,那麼可能就會造成 W 牌的作業系統與 L 牌的作業系統之間資料無法進行傳輸的問題啦!那不就傷腦筋了~呵呵!是啊!所以,為了規範所有的硬體開發商開發出來的產品是可以互容的,也為了讓不同的作業平台都可以兼容於 Internet 的傳輸方式,因此大家所發展的軟硬體就得要符合 TCP/IP 這個協定啊!
     
    其實現今網路的原型最早是在大約 1970 年代的美國政府委託 Advanced Research Project Agency (ARPA) 所發展的 ARPANET 網路架構,後來該網路架構經過各大專院校、研究人員的採用,並且將之用於 Unix 系統上。因為這個架構相當的具有實用性,尤其是他的設計是公開的,並非專屬於某個私有單位,所以就有越來越多的單位投入 TCP/IP 的使用之中。關於 TCP/IP 的種種技術文件,是由 Internet Network Information Center (INTERNIC) 所統一整理與維護的,至於 TCP/IP 的標準則主要以 Request For Comment (RFC) 技術報告的形式公開,您可以在 ftp://nic.merit.edu/internet/documents/rfc/ 下載所有的 RFC 文件喔!
     
    TCP/IP 的全名是 Transmission Control Protocol / Internet Protocol (TCP/IP),可以分為兩部分來說明,亦即 TCP 與 IP ,IP 的工作是在網路層,這個就是我們常常看到的四組 0-255 的十進位數字並以小數點『.』隔開的數據,例如 192.168.100.100 這樣的組合,就構成了 IP 。要在網際網路上面將資料由這部電腦傳輸到另一部電腦,就得需要 IP 到 IP 的傳輸了。至於 TCP 則更為複雜,上面說的由 IP 傳送到另一個 IP 就是透過 TCP 協定的參與了!關於 TCP/IP 我們將在後面的章節更詳細的說明。
     
    除了 TCP/IP 這個基礎協定之外,為了讓所有的軟硬體開發者都能夠基於同一基準,因此就有 OSI ( Reference Model for Open System Interconnetction ) 的產生了。說起來, OSI 只是一個模式 (model) ,他並沒有硬性的規範軟硬體一定要如何如何,而是提出一個指引的依據而已!這個 OSI 將整個網路運作由最底層的實體層到最上層的資料應用層共分為七大部分,所以我們一般通稱為 OSI 七層協定,分別規定最底層的實體層到最上層的資料應用層所需要符合的相關依據。如下所示:

    圖一、OSI 網路七層協定
     
    並且,在這七層協定當中,又粗分為兩大群組,一個用在網路的基礎(硬體協定與網路位址)方面,主要規定了硬體與網路的最底層相關協定;另一個則是與使用者比較有關的協定,使用者與軟體開發者可以這些協定來設計自己的應用程式!大致上就如同底下說的:
     
    • 網路基礎:實體層、資料連接層、網路層
    • 使用者方面:傳輸、會談、表現及應用層
     
    我們可以簡單的用下表來稍微瞭解一下所謂的 OSI 七層協定分別負責什麼?
     
    表一、OSI 七層協定內每層負責的工作
    OSI 七層協定的名稱
    該層負責的工作
    實體層
    既然網路工作實際的運作者是電子訊號以及傳遞電子訊號的硬體設備,那麼所有的網路媒體就必須要理解相關的電子訊號了!當然這些硬體配備就需要進行規範,好讓所有的媒體都能夠具有理解電壓、波長、以及不同網路線規格的相關規範。所以這個層級就規範了包括各個網路媒體之定義、還有網路的連接型態,例如 ethernet 網路卡還有 RJ-45 網路線等等。當然啦,如果您有興趣想要發展網路媒體硬體的話,那麼您的硬體就需要符合這個層級的規定啦!不然做出來的硬體可就無法與其他的規格品溝通囉!
    資料連接層
    由於傳送資料的網路媒體是以是電子訊號進行傳送,所以我們的資料要使用這樣的訊號傳送時,就需要制訂各種網路型態的框包(Frame)了,才能確保資料可以在不同的網路媒體進行傳送的動作。所以,在這一層當中就制訂了 frame 的格式以及通過網路的方式。
     
    事實上,每個 frame 都會具有一個 Media Access Control (MAC, 共有 6 bytes 的位址) 的位址,這個位址是來自於網路媒體,簡單的來說,就是網路卡的卡號啦!每一張網路卡在出廠的時候就已經具有一個獨特而且不會重複的卡號,那就是 MAC (一般也會稱為 Hardware Address, 硬體位址),而 frame 要傳送的來源與目的地,就是依據這個 MAC 來進行傳送的。至於傳送過程當中的框包遺失、重新發送框包、封包的確認等等,也都是在這個層級當中被定義的吶!
     
    在這個層級當中,有個重要的協定,那就是 Address Resolution Protocol (ARP) ,這個 ARP 協定主要就是用來對應 MAC 與 IP 的重要工作喔!後續我們會仔細的說明。
    網路層
    剛剛我們在上面提到的 TCP/IP 協定當中,那個 IP 就是網路層這個層級的重要內容了。網路層的主要功能就是要讓封包 (packet) 可以在不同的網路之間進行傳遞!請注意,實際上在進行電子訊號傳遞的是較底層的 MAC 與 frame ,而這個網路層的 packet 則是用來處理網路定址的。
     
    在這個 packet 被發送之前,在發送端的電腦會為這個封包建立表頭(header),Header 裡面的資訊包含了來源與目的端的位址,還有資料傳送的方法與流程等,以作為這個 packet 在網路或者是子網路之間進行路由 ( route )的依據。我們常常在設定的網路 IP 以及 route table 都是這一層的規定喔。
    傳送層
    就像我們要寄信時一樣,總是得把資料放入信封再封起來吧。這個傳送層的工作之一就是將電腦資料『打包』成為封包(packet)的狀態,以提供網路層去進行表頭的建立!在這個層級當中,同時會設定控制節點之間的資料傳遞以及錯誤檢測和修正的方法。
     
    由於物理機制上的限制,所以在一次資料的傳遞中,通常只有數千 byte 的資料量。為了確保不論多大或者多小的資料都可以正確的到達目的地,因此資料就會在這個層級當中被打包,如果資料太大,就會被拆成數個小封包來傳送,並且同時利用一個檢測的手段來使資料正確的到達目的地。而如果資料封包有破損,也能夠進行重新發送的工作。
    會談層
    在這個層級當中,定義了兩個位址之間的通道連接與掛斷,也就是電腦與電腦之間的溝通模式。舉例來說, Client 為節點 A 而 Server 為節點 B,那麼當資料要在 A 與 B 之間進行傳送時,兩部電腦會先進行會談,以確認是否可以進行傳送的動作。會談的過程如下:
    1. 當節點 A 要對 B 要求建立連線時,A 會先發出『連線請求』的訊息封包,該訊息上面帶有 SYN 的符號;
    2. 節點 B 收到訊息之後,如果確定接受 A 的連線要求,那麼就會回應一個『確認請求』的訊息封包給 A ,該訊息上面則帶有 SYN/ACK 符號;
    3. 然後節點 A 再度回應給 B 一個『確認連線』的訊息封包,帶有 ACK 的符號,這個時候就進入了資料傳送的階段了!
    4. 當節點 A 資料傳送完畢之後, A 會發送一個『終止連線』的訊息封包,則在得到 B 回應的『確認終止』訊息之後,就結束了該次連線!
    上面即是有名的『三向交握, Three-Way Handshack』的工作原理啦!那就是在這一層裡面達成的哩!所以我們可以說,在會談層裡面可以提供穩定的可靠的連線渠道!
    表現層
    我們在應用程式上面所製作出來的資料格式不一定符合網路傳輸的標準編碼格式的!所以,在這個層級當中,主要的動作就是:將來自本地端應用程式的資料格式轉換(或者是重新編碼)成為網路的標準格式,然後再交給底下傳送層等的協定來進行處理。當然啦,如果是來自遠端的資料,那麼這個層級也會將網路的標準編碼轉換成為應用程式所需的格式,再交給應用程式處理。也就是說,這個層級當中定義了數據的語法以及格式,當應用程式的語法與格式不符時,還可以進行翻譯(重新編碼)的工作。
    應用層
    表現層的工作是將來自應用程式的資料轉成網路傳輸的標準格式,至於應用層則是完全與應用程式有關。
     
    由上面的說明,我們不難理解 OSI 七層協定當中,每一層之間是具有相關性的,並且底層要完備之後,才有辦法進行上一層的工作。例如要進行 IP 的設定來說好了,如果沒有網路介面,怎麼進行 IP 的設定?而如果都沒有網路媒體了,怎麼進行資料傳送?!另外,在每一層的協定中,都僅與該層相對應。目前到這裡先說個簡單的概念,後續請您繼續看完之後,就能大略的瞭解了!
     
    在下一節裡面,我們將針對 OSI 七層協定裡面的每一層進行說明,以讓大家更容易瞭解整個網路的架構喔!

網路層的相關協定

    在 OSI 七層協定中,最底層的三層被定位為網路層,這三層是最基本的網路架構了!雖然這三層通常已經被整合在作業系統與硬體裡面了,所以我們根本不需要擔心這三層的協定,不過,如果能夠知道這些基礎概念,對於未來在進行網路追蹤時,幫助是很大的!底下我們就分別來談一談這三層的主要內容吧!不過,在開始之前,我們得先來談一談整個網路傳輸單位的定義說~
     

    傳輸單位
     
    想一想,如果沒有電的話,我們的網路是否能夠通行無阻?!當然不行!因為網路其實就是電子訊號的傳送啊!如果沒有電,當然就沒有辦法傳送訊息了。而電子訊號只有 0 跟 1 啊,所以在網路單位的計算上,一般通常是以二進位的 bit 為單位的。那麼這個 bit 與我們通常用來計算檔案大小的單位 bytes 有什麼關連性?其實:
     
      1byte = 8bits
     
    所以啦,一般來說,我們看到的網路提供者 (Internet Services Provide, ISP) 所宣稱他們的 ADSL 傳輸速度可以達到 下行/上行 512/64 Kbps ( Kbits per second) 時,那個 Kb 指的可不是 bytes 而是 bits 喔!所以 512/64 Kbps 在實際的檔案大小傳輸速度上面,最大理論的傳輸為 64/8 KBps(KBytes per second),所以正常下載的速度約在每秒 45~50 KBytes 之間吶!同樣的道理,在網路卡或者是一些網路媒體的廣告上面,他們都會宣稱自己的產品可以自動辨識傳輸速度為 10/100 Mbps ( Mega-bits per second),呵呵!該數值還是得再除以 8 才是我們一般常用的檔案容量計算的單位 bytes 喔!這樣可以瞭解傳輸單位的意義了嗎?!
     

    實體層
     
    既然網路是由硬體來進行訊號傳遞的,所以在這裡我們就先來談一談網路媒體的運作方式吧!不過網路媒體的連接方式有相當多的類型,例如近來比較常見的『星形連線』以及較早期的直線型匯流排 (bus) ,以及以基地台為基準的無線網路等等類型,不同的類型在訊號的傳遞上是不太一樣的。不過,由於 Bus 類型的連線模式是比較容易理解的一種連線模式,所以底下我們以基本的 Bus 連線模式來進行說明。如下面圖示所示: ( 雖然一般家庭網路最常見的連線模式為星形模式,不過基本原理上面還是與 Bus 佈線模式相同的 )
     

    圖二、以 bus 串連電腦示意圖
     
    所有的電腦都經過同一個網路媒體(就是中間橫向的那一條主要纜線)來進行連接。這個網路媒體上面有什麼需要注意的地方呢?
     
    • 網路媒體

    • 什麼是『網路媒體』說穿了,最基礎的網路媒體就是『網路線』囉,因為我們都是透過網路線來進行電子訊號的交流的嘛 ( 再次請您留意,這裡是以網路線為例,當然網路媒體還有相當多的樣式的!)。好了,請注意的是,當所有的電腦要進行資料傳遞的時候,就是需要使用到這個所謂的網路媒體,而由於所有的電腦都連接在這個網路媒體上面,您可以將這個 Bus 的網路線當成是一個『共享媒體』囉!並且,這個共享媒體的傳輸限制為『單一時間點上面,只能有一部機器使用這個共享媒體』,這個概念相當的重要,先記下來吧!
     
    現在我們知道訊號是藉由網路媒體來進行傳遞的,而這個媒體在單一時間點上面僅能讓一個機器使用!果真如此的話,底下的問題該如何解決呢?
     
    1. 各電腦怎麼知道該時間點上面有沒有其他的機器在使用呢?
    2. 如果 PC1 與 PC2 要相互溝通的話,他們的訊號是怎樣傳輸的,也就是說, PC1 怎麼知道該訊號是要送到 PC2 呢?
    3. 如果同一個時間裡面有兩部電腦以上同時使用這個媒體,會產生什麼情況?
     
    底下就需要針對上面的問題來說明一下咯:
     
    • 由於這個網路共享媒體在每個時間點上面僅能讓一部機器使用 ( 這個時間可能是幾千到幾萬分之一秒,很短的啦!),因此,如果 PC 1 這部電腦想要利用這個媒體發送資料出去時,他就必須要確認當時在這個媒體上面沒有其他的機器在使用。這個時候 PC1 就會先發送一個訊息封包到這個媒體上面去,告訴這個媒體上面的所有電腦主機說『喂!我要使用這個媒體了』!而其他的 PC2 ~ PC5 在接到這樣的訊息封包後,就會暫時停頓自己的網路工作,讓 PC1 可以順利的使用網路媒體傳送資料(這個停頓也是很短的啦!您感覺不出來的 ^_^ )。PC 1 發送訊息封包的這個行為就是所謂的『物理廣播』(Physical Broadcast) 了,而這個動作也是最底層的動作吶!
     
    • 知道了物理廣播 ( Physical broadcast ) 的動作之後,再來,如果 PC1 與 PC 3 同時都想要使用網路媒體呢?呵呵!這個時候,就要看是誰先傳送出廣播信息的,當然是先搶先贏!例如:當 PC1 比 PC3 早一步向網路共享媒體送出物理廣播信息,那麼 PC3 就會先停頓,直到等到 PC1 將該次工作完畢之後,才會發送物理廣播信息了。咦!您有沒有發現這個地方很奇怪啊?!既然 PC 1 已經先搶先贏,萬一 PC 1 要傳送的資料高達 100 MB ,那麼 PC 3 不是等到捉狂了? 呵呵!回到剛剛我們提到的 OSI 七層協定裡面的『傳送層』的地方,裡面說到了:由於網路物理機制的關係 ( 網路線的負荷啦、所有的網路周邊啦等等的物理機器 ) ,每次進行網路傳輸時,該次的『封包大小』是有限制的!所以,如果 PC 1 的資料真的高達 100 MB 時,他也無法一次就將 100 MB 的資料打包成為一個 packet 的,網路媒體沒有辦法傳輸那麼大的封包,所以當然就得將 100 MB拆開成為數個小 packet 再一次一次的傳送出去啦!而每次的 physical broadcast 僅針對該次的 packet 發送而已,如果這個 packet 發送完,得再繼續進行一次 physical broadcast 才能夠再發送下一個 packet 喔!因此,這個 100MB 的傳送得要 PC1 在這個共享媒體上面發送多次的 physical broadcast 才行哩!所以啦,如上面的例子來看,假設 PC1 要傳輸 100MB 而 PC3 要傳輸 10MB 時,他們是可以同時進行傳輸的,只是在網路媒體的使用上面,就會不斷的進行物理廣播,PC1 與 PC3 兩個搶來搶去的,持續的將一個一個 packet 發送出去!這個時候網路媒體就很忙啦!
     
    • 持續上面的例子,那麼 PC1 與 PC3 可不可能『剛好』同時發出物理廣播訊息呢?!當然可能啦!在一個很繁忙的共享網路媒體當中,由於可能使用者眾多,加上使用者可能正在大量的傳送檔案資料,這個時候就容易發生同時發送物理廣播信息的問題了!當發生在同一個網路媒體上面有兩部主機以上同時發送物理廣播的訊息時,兩部主機該次的物理廣播訊息就會無效,兩部主機將不會進行資料的傳送。不過也不需要太擔心這樣的情況,因為兩部主機均會等待一段時間之後才再次進行物理廣播的動作!而在等待的時間上面,是『在一段時間裡面隨機取一個時間點』來再次進行物理廣播,(例如在千分之一秒的時間內,兩部主機均隨機取一個時間點,一部主機可能剛好選五千分之一秒,另一部選三千分之一秒,這樣就避過再次同時發出物理廣播訊息的問題 )由於是隨機取樣的,因此應該不太容易再造成同時進行物理廣播的現象。萬一真的不幸又同時物理廣播,那麼又會等待下一次....依序下去,好像超過 16 次以後,如果還真的很不幸(因為機率真的太低了)再次同時進行物理廣播,那麼就抱歉啦!您的網路媒體將癱瘓掉!不過也別擔心,重新 reset ( 整個網路給他關機再開機 ) 就好啦! ^_^""
     
    • 由上面的情況來看,網路媒體上面似乎在某一個時間點時只會有一個封包在進行傳送喔,那麼有沒有可能發生一個網路共享媒體上面同時發送封包的狀況呢?當然有啦!現在您假設 PC1 到 PC5 的距離是很遠(假設 50 m 好了),那麼當 PC1 與 PC5 發送出物理廣播,提醒大家說要傳送資訊的時候,由於 PC1 與 PC5 的距離太遠了,因此回應的時間比較長,那麼這個時候可能就會造成主機的誤判,認為當時媒體上面沒有任何的機器在傳送資料,所以就造成 PC1 與 PC5 同時傳送出資料在媒體上面,這個時候就會發生所謂的『封包碰撞 ( collision )』的情況了!因為網路媒體上面單一時間內僅能允許一個機器使用的嘛!所以封包碰撞就會造成該封包的損毀現象呢!比較麻煩啦!因為封包損毀了,所以 PC1 與 PC5 又得再次將該次的 packet 重新發送一次,又得要物理廣播.....而為了避免封包碰撞的問題,所以目前網路上面都會使用一種稱為 CSMA/CD ( Carrier Sense Multiple-Access / Collision Detect ) 的技術來避免因封包碰撞造成資料損毀的問題!不過,由於選擇的媒體不同,所以還是很有可能會造成碰撞的啦!

    •  
    上面提到的幾個說明點,全部都是針對硬體的設計,您當然不需要知道硬體是怎麼設計的,但是最好還是需要知道上述的這些原理,以後才會知道如果出了問題,要如何去解決!
     
    在談完了網路共享媒體之後,再來談一談目前最常見的網路配備,那就是乙太網路的網路卡 ( Ethernet ) 。目前我們在電腦主機後面看到的類似電話線接頭,但是比較大一點的,裡頭具有八條線的插槽,那就是乙太網路卡。這個網路卡最大的特色是他具有一個銲死在上面的位址 ( 某些 Notebook 上面 PCMCIA 的網路卡是可調的 ) ,那就是 Media Access Control (MAC) ,也常常被我們稱為硬體位址 ( Hardware Address )。讓我們翻回到 OSI 七層協定裡面的資料連接層,在該層級中說明,每個框包 ( frame ) 要傳送出去,必須要以硬體位址為傳輸的來源與目標,這就是網路卡與網路卡之間資料傳輸的最底層資訊了。例如同樣上面的圖示,假設 PC 1 要將資料傳送到 PC 2 上面去時,那麼資料封包就必須要先取得 PC 2 主機的網路卡的 MAC 之後,才能夠將資料傳送給 PC2 呢!這個部分就需要在資料連接層來進行說明了。
      

    資料連接層
     
    在 TCP/IP 與 OSI 七層協定那個小節當中,我們知道網路世界上面使用來辨識電腦主機的是 IP ,這個 IP 是在 OSI 的第三層,也就是網路層的東西。而由上面的實體層的介紹,我們也可以知道其實資料封包由這個主機到下一個主機,使用的是 MAC 這個網路卡卡號 ( Hardware address ) 來進行傳送的,那麼 IP 與 MAC 有什麼關係啊?!舉個例子來說,同樣的以上面圖二為例好了,假設 PC 1 的 IP 是 192.168.1.1 而 PC2 的 IP 是 192.168.1.2 ,那麼資料要由 PC 1 傳送到 PC 2 的時後,到底是怎麼進行傳送的?其實也不難啦!因為資料要傳送就得知道網路卡卡號,因此 PC1 必須要先知道 PC2 的 Hardware Address 之後,才能將資料由 PC1 的網路卡傳送給 PC2 的網路卡上。也就是說, IP 必須要與 MAC ( 就是 Hardware address 啦 ) 對應起來才行!這個時候,就需要使用到 Address Resolution Protocol (ARP) 協定了。底下我們就介紹一下 MAC 的格式,以及 ARP 的內容。
     
    • 關於 MAC:

    • 在目前我們使用的乙太網路卡上面,其實在出廠的時後就已經銲死一個網路卡的卡號在上面了,因為這個卡號是跟隨著硬體的,所以一般我們也稱為硬體位址 (Hardware address),而且每一張網路卡上面的卡號都不會重複!事實上,他是被稱為 Media Access Control, MAC 的啦!MAC 的格式是六組 16 進位 (bytes) 的數據組合起來的,所以他共佔掉 6 bytes ,基本的格式為:
        aa:bb:cc:dd:ee:ff
      MAC 是乙太網路當中,資料傳輸的重要依據喔!此外,MAC 在未來架設防火牆的時後,用來管制某張特定的網路卡是否能夠通過封包過濾規則的重要設定內容!所以,請先對 MAC 有一個完整的瞭解吶。那麼在 Linux 與 Windows 2000 底下,要怎麼知道我的網路卡 MAC 呢?
      1. 在 Linux 底下:
      [root@test root]# ifconfig
      eth0      Link encap:Ethernet  HWaddr 00:05:D3:43:E4:80
                inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
                UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      .....
       
      2. 在 Windows 2000 底下:
      C:\> ipconfig /all

      Windows 2000 IP Configuration
      .....
              Physical Address. . . . . . . . . : 00-05-D3-43-E4-80
      .....

      如同上面所示,在 Linux 底下,主要的格式是以『:』隔開的,在 Windows 底下,則是以『-』來隔開!無論如何,反正記得他是六組16進位的數據組成的就是了!使用的觀察方式可以直接以 ifconfig 以及 ipconfig 來下達指令。
       
    • 關於 Address Resolution Protocol, ARP:

    • 現今最常用的網路傳輸是使用 TCP/IP 來進行的,所以每一部主機當然要有一個 IP 才行!然而我們知道資料其實是使用 MAC 在不同的網路卡之間互相傳遞,因此,必須要設定一個 IP 與 MAC 對應的方法才行,此時就有 ARP 協定的產生了。ARP 這個協定在目前主要的作業系統裡面都存在著,例如 Linux 主機裡面就有一個 ARP table 來紀錄 IP 與 MAC 的對應資訊。所以,當前面圖二中, PC 1 (192.168.1.1) 要將資料傳送到 PC2(192.168.1.2) ,那麼 PC1 就會參考自己本身系統內的 arp table ,找到 192.168.1.2 對應的 MAC 之後,再將資料傳送到那個 MAC 去!
       
    ARP table 主要記錄的是 IP 與 MAC 的對應,那麼 ARP 表格是怎麼產生的呢?這就需要討論到邏輯廣播 ( logical broadcast ) 的動作了!請注意,邏輯廣播與 Physical broadcast ( 物理廣播 ) 是不一樣的, Physical broadcast 是主機想要在網路共享媒體上面傳送資料時,用來確認網路媒體是否可以利用的一個動作,而邏輯廣播的動作之一則是在找到 IP 與 MAC 的對應,也就是說『物理廣播主要是針對在同一個物理網段內的共享網路媒體之動作,邏輯廣播主要是針對網路層的軟體位址而言來進行的動作』,不樣將兩者搞混了。好了,那麼主機是怎麼建立 ARP table 的呢?我們同樣以 PC 1 ( 192.168.1.1 ) 要傳送資料給 PC 2 (192.168.1.2 ) 為例好了:
     
    1. 在 PC1 首次進行資料傳輸的時候,由於 ARP table 當中沒有相關的資料 ( 因為剛剛連上網路嘛! ) ,所以 PC 1 不知道 192.168.1.2 這個 IP 對應的是那個 MAC ,當然也就無法傳遞資料了。這個時候 PC 1 就會對『同一網域的全部電腦進行邏輯廣播( logical broadcast )』,此時 PC 1 會發送一個帶有本身的 MAC 與目標 IP (在這個例子中,也就是 192.168.1.2 ) 的邏輯廣播封包給網域內的全部電腦( 在圖二的例子中,包括 PC 2 ~ PC 5 均會收到這個邏輯廣播封包 ) ;

    2.  
    3. 在 PC 2 ~ PC 5 接到這個邏輯廣播封包之後,由於這個邏輯廣播封包的要求回應是 192.168.1.2 ,因為 PC 3 ~ PC 5 並不是這個 IP 的所有人,因此就會將這個邏輯廣播封包丟棄不理。而 PC 2 收到這個邏輯廣播封包時發現該封包要求的 IP 是自己的,此時他就會發送一個回應封包 ( 該回應封包裡面就含有 PC2 自己的 MAC ) 給 PC 1  ;

    4.  
    5. PC 1 在收到這個回應封包之後,就知道了 PC2 這個 192.168.1.2 IP 對應的 MAC 了,此時 PC 1 這部主機的 ARP table 就會主動的將 IP 與 MAC 的對應給他寫入表格中啦!而既然已經知道了 IP 對應 MAC 了,因此 PC1 就可以開始將資料傳送給 PC 2 了!

    6.  
    7. 未來,當 PC 1 要將資料再傳給 PC 2 時,他會先由自己本身的 ARP table 裡面去找尋是否有該主機的 IP 對應的 MAC 資訊,如果找到了 PC 2 (192.168.1.2) 對應的 MAC ,那麼 PC 1 將不會發送邏輯廣播封包,而是直接依據 ARP table 裡面的資訊來將資料直接傳送給 PC 2 的網路卡呢!也就是說:
      • 如果 ARP table 有紀錄的話,那麼資料就會直接的傳送到該目的地去,而不會進行『邏輯廣播』;
      • 如果 ARP table 沒有紀錄的話,那麼主機就又會對全部的同一網域內的電腦進行『邏輯廣播』。
       
    此外,請特別注意,ARP table 是動態的資訊,他會隨時隨著您的網域裡面電腦的 IP 更動而變化,所以,即使您常常更動您的電腦 IP,不要擔心,因為 ARP table 會自動的重新對應 IP 與 MAC 的表格內容!( 所以每次重新開機,原先 ARP table 的內容就不見去囉! )那麼我怎麼查出來目前我的 Linux 主機裡面的 ARP table 的紀錄呢?呵呵!可以使用 arp 這個指令喔!
    [root@test root]# arp [-and] hostname
    [root@test root]# arp -s hostname(IP) Hardware_address
    參數說明:
    -a :顯示出目前主機所有的 IP 對應 MAC 狀態
    -n :將主機名稱以 IP 的型態顯示
    -d :將 hostname 的 hardware_address 由 ARP table 當中刪除掉
    -s :設定某個 IP 或 hostname 的 MAC 到 ARP table 當中
    範例:
    [root@test root]# arp
    Address          HWtype  HWaddress           Flags Mask         Iface
    localhost        ether   08:00:20:C5:89:4D   C                  eth0
    [root@test root]# arp -n
    Address          HWtype  HWaddress           Flags Mask         Iface
    192.168.1.1      ether   08:00:20:C5:89:4D   C                  eth0
    [root@test root]# arp -s 192.168.1.100   01:00:2D:23:A1:0E
    一般來說,使用 arp 這個指令就可以查到您的 Linux 主機上面的 arp 表了!善用 Linux 的指令吧!當然, Windows 2000 裡面也同時存在一個 arp 的指令,可以嘗試看看喔!
     
    在談完了 OSI 七層協定裡面的實體層與資料連接層之後,接下來就是最重要的網路層了!不過,因為網路層裡面的 IP 實在太重要了,所以我們將他獨立出一個小節來繼續介紹。當然,底下就獨立的來介紹與 IP 相關的一些概念,包含了 Netmask, Broadcast, Gateway 以及網域的概念等等。

Internet Protocol, IP 概念

    認識了最底層的網路共享媒體與資料連結層的 ARP 及 MAC 概念之後,接下來要跟大家介紹的就是那個可愛又可恨的網路門牌『Internet Protocol, IP』了,IP 是所有網路的基礎,沒有了他,您的網路將只是一堆廢鐵啊!趕緊來認識一下吧!
     

    IP 的組成:
     
    我們目前在網路上使用的 IP 協定是第四版,也就是被稱為 IPv4 的一個協定。在這個協定當中,最重要的就是 IP 的組成了。IP 主要是由 32 bits 的資料所組成的一組數據,也就是 32 組 0 跟 1 所組成的數據資料,因為只有零跟一,所以 IP 的組成當然就是電腦認識的二進位的表示方式了。不過,因為人類對於二進位實在是不怎麼熟悉,所以為了順應人們對於十進位的依賴性,因此,就將 32 bits 的 IP 分成四小段,每段含有 8 個 bits ,將 8 個 bits 計算成為十進位,並且每一段中間以小數點隔開,那就成了目前大家所熟悉的 IP 的書寫模樣了。如下所示:
     
    IP 的表示式:
    00000000.00000000.00000000.00000000 ==>0.0.0.0
    11111111.11111111.11111111.11111111 ==>255.255.255.255
     
    所以 IP 最小可以由 0.0.0.0 一直到 255.255.255.255 哩!事實上, IP 的組成當中,除了以 32 bits 的組成方式來說明外,還具有所謂的『網域』的概念存在。底下就來談一談什麼是網域吧!
     

    網域的概念
     
    事實上 IP 的 32 bits 資料中,可以分為 HOST_ID 與 Net_ID 兩部份,我們先以 192.168.0.0 ~ 192.168.0.255 這個 C Class 的網域當作例子來說明好了:
     
    192.168.0.0~192.168.0.255 這個 C Class 的說明:
    11000000.10101000.00000000.00000000
    11000000.10101000.00000000.11111111
    |----------Net_ID---------|-host--|
     
    在 C Class 的範例當中,前面三組數字 (192.168.0) 稱為 Net_ID,最後面一組數字則稱為 Host_ID。同一個網域當中的定義是『在同一個物理網段內,主機的 IP 具有相同的 Net_ID ,並且具有獨特的 Host_ID』,那麼這些 IP 群就是同一個網域內的 IP 網段啦! ( 註:什麼物理網段呢?舉例來說,上圖二所有的主機都是使用同一個網路媒體串在一起,這個時候這些主機在實體裝置上面其實是連線在一起的,那麼就可以稱為這些主機在同一個物理網段內了!同時並請注意,同一個物理網段之內,可以依據不同的 IP 的設定,而設定成多個『IP 網段』喔!  ) 例如上面例子當中的 192.168.0.1, 192.168.0.2, ...., 192.168.0.255 這些 IP 就是同一個網域內的 IP 群(同一個網域也稱為同一個網段!),請注意,同一個 Net_ID 內,不能具有相同的 Host_ID ,例如上圖二當中, PC 1 與 PC 5 不能同時具有 192.168.0.1 這個 IP ,否則就會發生 IP 衝突,可能會造成兩部主機都沒有辦法使用網路的問題!那麼同一個網域該怎麼設定,與將 IP 設定在同一個網域之內有什麼好處呢?
     
    • 在同一個網段內,Net_ID 是不變的,而 Host_ID 則是不可重複,此外, Host_ID 在二進位的表示法當中,不可同時為 0 也不可同時為 1 ,例如上面的例子當中, 192.168.0.0 ( Host_ID 全部為 0 )以及 192.168.0.255 ( Host_ID 全部為 1 ) 不可用來作為網段內主機的 IP 設定,也就是說,這個網段內可用來設定主機的 IP 是由 192.168.0.1 到 192.168.0.254;
    • 在同一個網域之內,每一部主機都可以藉由邏輯廣播 ( logical broadcast ) 取得網域內其他主機的 MAC 對應 IP;
    • 由上面的邏輯廣播動作取得 MAC 之後(亦即 ARP 協定),在同一個網域之內,主機的資料可以直接透過彼此的 NIC ( Network Interface Card, 網路卡 ) 進行傳送;
    • 在同一個物理網段之內,如果兩部主機設定成不同的 IP 網段,則兩部主機無法直接以邏輯廣播進行資料的傳遞 ( 在沒有設定特殊 route 規則的情況下 )。
     
    所以說,我們家裡的所有電腦當然都設定在同一個網域內是最方便的,因為如此一來每一部電腦都可以直接進行資料的交流,而不必經由 Router ( 路由器 ) 來進行封包的溝通呢!( Router 這部份在後續才會提及! )。好了,剛剛我們上面說的是 C Class 的網域,那麼有沒有其他 Class 的網域呢?而且他們又是怎麼區分的呢?目前 Internet 將整個 IP 簡單的方類成為三個網段,分別設定為所謂的 A, B, C 三個 Class ,他們的分類原則如下:
     
    以二進位說明 Network 第一個數字的定義:
    A Class : 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==>開頭是 0 
         |--net--|---------host------------|
    B Class : 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==>開頭是 10
         |------net-------|------host------|
    C Class : 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==>開頭是 110
         |-----------net-----------|-host--|
     
    以十進位說明 Network 的定義:
    A Class :   0.xx.xx.xx ~ 126.xx.xx.xx
    B Class : 128.xx.xx.xx ~ 191.xx.xx.xx
    C Class : 192.xx.xx.xx ~ 223.xx.xx.xx
     
    在上表中,可能您會覺得很奇怪,咦!那個 127.xx.xx.xx 怎麼不見了?!他應該也是 A Class 的一段吧?!沒錯,是不見了,因為這個網段被拿去給作業系統做為內部迴圈網路 ( loopback ) 之用了!在各個作業系統當中,不管該主機的硬體有沒有網路卡,為了讓作業確認自己的網路沒有問題,所以將 127.xx.xx.xx 這個 A Class 的網段拿到作業系統當中,來做為內部的回路測試!所以啦,這個 127.0.0.1 就不可以用來做為網路網域的設定了。
     

    Netmask 的用途 (效能) 與子網路的切分
     
    在上一小節當中提到的 A, B, C 三個層級的網域是由 IP 協定預設分配的,在這樣的層級當中,我們可以發現 A Class 可以用於設定電腦主機的 IP 數量 ( Host ) 真的是很多,在同一個 A Class 的網域內,主機的數量可以達到『 256 X 256 X 256 - 2(HostID全為0或1) = 16777214』,不過,這樣的設定情況對於一般網路的效能卻是不太好的!為什麼呢?讓我們回到 OSI 七層協定裡面的共享媒體上面,還記得共享媒體上面主機 A 要發送資料出去的時後,需要先進行『物理廣播』來確認媒體上面沒有人在使用吧?而其他的主機在接收到這樣的物理廣播封包之後,就得要先將手邊關於網路的工作停頓下來等主機 A 將動作做完之後,其他的主機才能進行下一次的物理廣播。所以如果我們是以 A Class 的架構來架設我們的網路的話,那麼當一部主機要傳送資料時,其他的所有主機都得要停頓的吶!而且,如此大型的網域內,肯定更容易發生封包碰撞 ( Collision ) 的問題,而且在進行邏輯廣播的時後,回應的電腦主機數量也實在是太多了!如此一來,整個網路的效能將會變的很糟糕!所以,一般來說,我們最多都僅設定 C Class 做為整個區域網路的架構,其實就連 C Class 也都太大了!不過不打緊,只要記得一個網域內不要超過 30 部以上的主機數量,那樣網路的效能就會比較好一點~
     
    其實,除了 C Class 之外,我們還是可以繼續將網路切的更細的!上個章節我們提到 IP 分為 Net_ID 與 Host_ID,其中 C Class 的 Net_ID 佔了 24 bits ,而其實我們還可以將這樣的網域切的更細,就是讓第一個 Host_ID 被拿來作為 Net_ID ,所以,整個 Net_ID 就有 25 bits ,至於 Host_ID 則減少為 7 bits 。在這樣的情況下,原來的一個 C Class 的網域就可以被切分為兩個子網域,而每個子網域就有『 256/2 - 2 = 126 』個可用的 IP 了!這樣一來,在這個網域當中的主機在進行邏輯廣播時,回應的主機數量就少了一半,當然對於網路的效能多多少少有點好處的啦!
     
    好了,知道了子網路切分的大致情況後,現在要談的是,那麼到底是什麼參數來達成子網路的切分呢?呵呵!那就是 Netmask ( 子網路遮罩 ) 的用途啦!這個 Netmask 是用來定義出網域的最重要的一個參數了!不過他也最難理解了~ @_@。為了幫助大家比較容易記憶住 Netmask 的設定依據,底下我們介紹一個比較容易記憶的方法。同樣以 192.168.0.0~192.168.0.255 這個網域為範例好了,如下所示,這個 IP 網段可以分為 Net_ID 與 Host_ID,既然 Net_ID 是不可變的,那就假設他所佔據的 bits 已經被用光了 ( 全部為 1 ),而 Host_ID 是可變的,就將他想成是保留著 ( 全部為 0 ),所以, Netmask 的表示就成為:
     
    192.168.0.0~192.168.0.255 這個 C Class 的說明:
    11000000.10101000.00000000.00000000
    11000000.10101000.00000000.11111111
    |----------Net_ID---------|-host--|
    11111111.11111111.11111111.00000000  <== Netmask 二進位
      255   .  255   .  255   .   0      <== Netmask 十進位
     
    將他轉成十進位的話,就成為『255.255.255.0』啦!這樣記憶簡單多了吧!照這樣的記憶方法,那麼 A, B, C Class 的 Netmask 表示就成為這樣:
     
    Netmask 表示方式:
    A Class : 11111111.00000000.00000000.00000000 ==> 255.  0.  0.  0
    B Class : 11111111.11111111.00000000.00000000 ==> 255.255.  0.  0
    C Class : 11111111.11111111.11111111.00000000 ==> 255.255.255.  0
     
    所以說, 192.168.0.0~192.168.0.255 這個 C Class 的網域中,他的 Netmask 就是 255.255.255.0 了!再來,我們剛剛提到了當 Host_ID 全部為 0 以及全部為 1 的時後該 IP 是不可以使用的,因為 Host_ID 全部為 0 的時後,表示 IP 是該網段的 Network ,至於全部為 1 的時後就表示該網段最後一個 IP ,也稱為 Broadcast ,所以說,在 192.168.0.0 ~ 192.168.0.255 這個 IP 網段裡面的相關網路參數就有:
     
    Netmask:   255.255.255.0   <==網域定義中,最重要的參數
    Network:   192.168.0.0     <==第一個 IP
    Broadcast: 192.168.0.255   <==最後一個 IP
    可用的 IP 數:
    192.168.0.1 ~ 192.168.0.254
     
    一般來說,如果我們知道了 Network 以及 Netmask 之後,就可以定義出該網域的所有 IP 了!因為由 Netmask 就可以推算出來 Broadcast 的 IP 啊!因此,我們常常會以 Network 以及 Netmask 來表示一個網域,例如這樣的寫法:
     
    Network/Netmask
    192.168.0.0/255.255.255.0
    192.168.0.0/24
     
    另外,既然 Netmask 裡面的 Net_ID 都是 1 ,那麼 C Class 共有 24 bits 的 Net_ID ,所以啦,就有類似上面 192.168.0.0/24 這樣的寫法囉!這就是一般網域的表示方法。好了,剛剛提到 C Class 還可以繼續進行子網域 ( Subnet ) 的切分啊,以 192.168.0.0/24 這個情況為例,他要如何再細分為兩個子網域呢?我們已經知道 Host_ID 可以拿來當作 Net_ID,那麼 Net_ID 使用了 25 bits 時,就會如下所示:
     
    原本的 C Class:
    11000000.10101000.00000000.00000000
    11000000.10101000.00000000.11111111
    |----------Net_ID---------|-host--|
     
    切成兩個子網路
    子網路一:
    11000000.10101000.00000000.00000000  <==Network
    11000000.10101000.00000000.01111111  <==Broadcast
    |----------Net_ID----------|-host-|
    11111111.11111111.11111111.10000000 <==Netmask 二進位
      255   .  255   .  255   .  128  <==Netmask 十進位
    所有 IP 與網域表示式:
    192.168.0.0 ~ 192.168.0.127
    192.168.0.0/25 192.168.0.0/255.255.255.128
     
    子網路二:
    11000000.10101000.00000000.10000000  <==Network
    11000000.10101000.00000000.11111111  <==Broadcast
    |----------Net_ID----------|-host-|
    11111111.11111111.11111111.10000000  <==Netmask 二進位
      255   .  255   .  255   .  128  <==Netmask 十進位
    所有 IP 與網域表示式:
    192.168.0.128 ~ 192.168.0.255
    192.168.0.128/25 192.168.0.128/255.255.255.128
     
    所以說,當再細分下去時,就會得到兩個子網域,而兩個子網域還可以再細分下去喔 (Net_ID 用掉 26 bits ....)。呵呵!如果您真的能夠理解 IP, Network, Broadcast, Netmask 的話,恭喜您,未來的伺服器學習之路已經順暢了一半啦! ^_^
     

    IP 的種類與 IP 的取得方式
     
    接下來要跟大家談一談也是很容易造成大家困擾的一個部分,那就是 IP 的種類!很多朋友常常聽到什麼『真實IP, 實體 IP, 虛擬 IP, 假的 IP....』煩都煩死了~其實不要太緊張啦!實際上,在 IPv4 裡面就只有兩種 IP 的種類,一種稱為 Public IP ,翻譯成為公共的或者是公開的 IP,另一種則是 Private IP,翻譯成為『私有 IP』或者是『內部保留 IP』。那麼這兩種 IP 要怎麼分呢?很簡單,只要『能夠直接而不必透過其他機制就能與 Internet 上面的主機進行溝通的,那就是 public IP;無法直接與 Internet 上面溝通的,那就是 Private IP』。這是一個很簡單的分辨方法啦!
     
    早在 IPv4 規劃的時候就擔心 IP 會有不足的情況,而且為了應付某些私有網路的網路設定,於是就有了私有 IP ( Private IP ) 的產生了。私有 IP 也分別在 A, B, C 三個 Class 當中各保留一段作為私有 IP 網段,那就是:
     
    • A Class:10.0.0.0    - 10.255.255.255
    • B Class:172.16.0.0  - 172.31.255.255
    • C Class:192.168.0.0 - 192.168.255.255
     
    由於這三個 Class 的 IP 是預留使用的,所以並不能直接作為 Internet 上面的連接之用,不然的話,到處都有相同的 IP 囉!那怎麼行!網路豈不混亂?所以囉,這三個 IP 網段就只做為內部私有網域的 IP 溝通之用,也就是說,他有底下的幾個限制:
     
    • 私有位址的路由資訊不能對外散播 (就是內部網路咯);
    • 使用私有位址作為來源或目的地址的封包,不能透過 Internet 來轉送 (呵呵!當然囉!不然網路會混亂);
    • 關於私有位址的參考紀錄(如DNS),只能限于內部網路使用(一樣的原理啦!)
     
    這個私有 IP 有什麼好處呢?呵呵!由於他的私有路由不能對外直接提供資訊,所以呢,的虛擬網路將不會直接被 Internet 上面的 Cracker 所攻擊但是,當然囉,也就無法以私有 IP 來『直接上網』囉!所以相當適合一些尚未具有 Public IP 的企業內部用來規劃其網路之設定之用!否則當隨便指定一些可能是 Public IP 的網段來規劃的企業內部的網路設定時,萬一哪一天真的連上 Internet 了,那麼啟不是可能會造成跟 Internet 上面的 Public IP 相同了嗎?!這可不是鬧著玩的,要將原先規劃的 IP 網段整個重新調整過呢!哈哈!累死了!那麼萬一又要將這些私有 IP 送上 Internet 呢?呵呵!這個簡單,設定一個簡單的防火牆加上 NAT ( Network Address Transfer ) 主機設定,就可以透過 IP 偽裝(不要急,這個在後面也會提到!)來使的私有 IP 的電腦也可以連上 Internet 囉(雖然不是真的直接,但是很像『直接上網』呢!)
     
    好了,那麼除了這個預留的 IP 網段的問題之外,還有沒有什麼其他的怪東西呢?呵呵!當然是有啦!不然我幹嘛花時間來唬 XX 呢!?沒錯,還有一個奇怪的 A Class 的網域,那就是 lo 這個奇怪的網域啦 ( 注意:是小寫的 o 而不是零喔! )這個 lo 的網路是當初被用來作為測試作業系統內部迴圈所用的一個網域!簡單的說,如果沒有安裝網路卡在的機器上面,但是又希望可以測試一下在的機器上面設定的資料到底可不可以被執行,這個時候怎麼辦,嘿嘿!就是利用這個所謂的內部迴圈網路啦!這個網段在 127.0.0.0/8 這個 A Class ,而且預設的主機 ( localhost ) 的 IP 是 127.0.0.1 呦!所以囉,當啟動了的 WWW 伺服器,然後在的主機的 X-Window 上面執行 http://localhost 就可以直接看到的主頁囉!而且不需要安裝網路卡呢!測試很方便吧!此外,的內部使用的 mail 怎麼運送郵件呢?例如的主機系統如何 mail 給 root 這個人呢?嘿嘿!也就是使用這一個內部迴圈啦!當要測試的 TCP/IP 封包與狀態是否正常時,可以使用這個呦!( 所以哪一天有人問:嘿!的主機上面沒有網路卡,那麼可以測試的 WWW 伺服器設定是否正確嗎?這個時候可得回答:當然可以囉!使用 127.0.0.1 這個 Address 呀! ^_^... )
     
    理解了 IP 的種類之後,我們已經知道了要連上 Internet 就得要取得 Public IP 才可以,至於 private IP 則是用在內部的私有網路之用的!那麼該如何取得 Public IP 呢?目前在台灣地區有幾個可取得 Public IP 的方法:
     
    • 固定制手動設定:我們可以取得固定的 Public IP ,取得的管道可以是學術網路、或者是向 ISP 註冊固定的 Public IP。不過,在使用固定的 Public IP 時,您必須要手動的在您的作業系統設定好網路參數;
    • 浮動式撥接:除了上述的方法之外,傳統的以數據機撥接,以及目前很流行的 ADSL 撥接,都是另一個取得 Public IP 的方法,只不過由於這種撥接的方法中,取得的 IP 是由 ISP 隨機提供的,因此每次撥接到 ISP 後取得的 IP 可能都不是固定的,所以也有人稱這種取得 IP 的方式為浮動式;
    • 纜線, Cable modem:利用單向或者是雙向 Cable 也可以向 ISP 註冊取得 Public IP;
     
    請記得,IP 就只有 Public 與 Private IP 這兩種,而由於取得 IP 的方法不同,可能又有人喜歡宣稱浮動式、固定制、動態等等的 IP ,這很容易造成剛剛接觸網路的朋友們的困擾!所以這裡僅告訴大家記得『Public 與 Private IP』而已!您只要記得他就對了!其他的,以後自然就會理解的啦! ^_^

路由 ( route ) 的概念


    什麼是路由 ( Route )
     
    在前面關於資料傳送的所有介紹都是在『同一個網域』裡面的情況,我們都是以圖二的案例來說明的。那麼萬一我們的資料需要跨網域時,資料是怎麼傳送的呢?這個時候就需要討論到路由 ( route ) 的概念了。例如下面的圖例所示,Network A 與 Network B 是分開的兩個網域,而他們是藉由 Server A 那部主機來進行硬體的連結。當 Network A 的 PC 01 要跟 Network B 的 PC 11 進行資料的傳輸時,他需要什麼樣的傳輸方式呢?
     

    圖三、簡易的路由示意圖
     
    由上面的圖示中,我們可以知道 Network A 為 192.168.0.0/24 這個網域,而 Network B 為 192.168.1.0/24 這個網域,這兩個網域是不能直接相通的!所以 PC 01 可以透過邏輯廣播以及 ARP table 來與 PC 02 傳輸資料,不過 PC 01 卻無法直接與 PC 11 相互溝通的,因為這兩部主機在不同的網域裡面啊!那麼就無法以 broadcast 的方式來達到傳送訊息封包了。
     
    事實上,兩部主機之間能不能進行資料的傳輸,除了 MAC 、 ARP 以及 IP 等參數是否正確之外,還需要很重要的一個參數,那就是路由 ( route )!目前的作業系統都很親切的,已經將同一個網段的網域建立的基本的路由了,所以當我們在同一個網段內時,就無須考慮路由,而可以直接藉由 ARP 的對應,而直接以網路卡 (NIC) 進行資料的傳輸。但是,萬一發生了類似上面的架構當中的 PC 01 與 PC 11 的狀況時,那麼 PC 01 就需要藉由一部路由器 (Router) 來幫他達成資料的傳送了!
     
    • Gateway / Router :網關/路由器的功能就是在負責不同網域之間的封包轉遞 ( IP Forwarder ),由於路由器具有 IP Forwarder 的功能,並且具有管理路由的能力,所以可以將來自不同網域之間的封包進行轉遞的功能。
     
    以 PC 01 要將資料傳送到 PC 11 的案例來說明:
     
    1. 當 PC 01 的資料被打包之後,其封包資料上面就至少具有來源地與目的地的 IP 位址;
    2. 首先, PC 01 會先分析該封包的目的地 IP 位址是否在同一個網域當中,如果該封包是在同一個網域當中,則 PC 01 可以藉由他本身的 ARP 表以及邏輯廣播來取得目的地 IP 的 MAC ,並進一步來進行該封包的傳送;
    3. 不過在這個例子當中,因為 PC 11 並不在 PC 01 所在的網域之內,此時 PC 01 會找自己本身的路由表 ( Route table ),看看 PC 11 在不在自己的路由表之內的某個規則中,若有,則依照該規則傳送到下一個主機去(通常就是 Router 啦!);
    4. 在我們這個例子當中,並沒有給予 PC 01 特殊的路由規則,所以 PC 01 是找不到 PC 11 所在的網域的路由規則的,此時 PC 01 將會把該封包資料直接丟給在 PC01 本身路由規則當中的『預設路由器, default gateway』主機,也就是 192.168.0.254 那部 Gateway (GW) 上面去,由於 Server A 的 192.168.0.254 介面與 PC 01 是在同一個網域之內,所以 PC 01 是可以直接與 Server A 傳送資料的 (註:也就是說, Gateway 與您的主機之間,必須要在同一個網段之內才行!);
    5. Server A 的 192.168.0.254 收到該封包之後,會依照 Server A 自己本身的路由表找到 192.168.1.1 這部主機的路由規則!剛好在自己的另一個介面 192.168.1.254 的同一個網段內,所以透過 IP Forwarder 的功能,將該封包由 192.168.1.254 傳送到 192.168.1.1 那部 PC 11 上面去!
     
    大致的情況就是這樣,所以啦,每一部主機裡面都會存在著一個路由表 ( Route table ),資料的傳遞將依據這個路由表進行傳送!而一旦封包已經經由路由表的規則傳送出去後,那麼主機本身就已經不再管封包的流向了,因為該封包的流向將是下一個主機 (也就是那部 Router )來進行傳送,而 Router 在傳送時,也是依據 Router 自己的路由表來判斷該封包應該經由哪裡傳送出去的!例如底下的圖例:
     

    圖四、路由的概念
     
    PC 01 要將資料送到 Server Bingo 去,則依據自己的路由表,將該封包送到 Server A 去,Server A 再繼續送到 Server B ,然後在一個一個的接力給他送下去,最後總是可以到達 Server Bingo 的。
     
    當然,上面的案例是一個很簡單的路由概念,事實上, Internet 上面的路由協定與變化是相當複雜的,因為 Internet 上面的路由並不是靜態的,他可以隨時因為環境的變化而修訂每個封包的傳送方向。舉例來說,數年前在新竹因為土木施工導致台灣西部整個網路纜線的中斷。不過南北的網路竟然還是能通,為什麼呢?因為路由已經判斷出西部纜線的終止,因此他自動的導向台灣東部的花蓮路線,雖然如此一來繞了一大圈,而且造成網路的大塞車,不過封包還是能通就是了!這個例子僅是想告訴大家,我們上面提的路由僅是一個很簡單的靜態路由情況,如果想要更深入的瞭解 route ,請自行參考相關書籍喔! ^_^ 。
     

    觀察主機的路由
     
    既然路由是這麼的重要,而且『路由一旦設定錯誤,將會造成某些封包完全無法正確的送出去!』所以我們當然需要好好的來觀察一下我們主機的路由表啦!還是請再注意一下,每一部主機都有自己的路由表喔!觀察路由表的指令很簡單,就是 route ,這個指令挺難的,我們在後面章節再繼續的介紹,這裡僅說明一些比較簡單的用法:
     
    [root@test root]# route [-n]
    參數說明:
    -n :將主機名稱以 IP 的方式顯示
    範例:
    [root@test root]# route
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref  Use Iface
    192.168.0.0     *               255.255.255.0   U     0      0      0 eth0
    127.0.0.0       *               255.0.0.0       U     0      0      0 lo
    default         192.168.0.254   0.0.0.0         UG    0      0      0 eth0
     
    [root@test root]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref  Use Iface
    192.168.0.0     0.0.0.0         255.255.255.0   U     0      0      0 eth0
    127.0.0.0       0.0.0.0         255.0.0.0       U     0      0      0 lo
    0.0.0.0         192.168.0.254   0.0.0.0         UG    0      0      0 eth0
     
    在上面的例子當中,我們以 PC 01 的狀態來進行說明。由於 PC 01 為 192.168.0.0/24 這個網域,所以主機已經建立了這個網域的路由了,那就是『 192.168.0.0 * 255.255.255.0 ... 』那一行所顯示的訊息!當您下達 route 時,螢幕上說明了這部機器上面共有三個路由規則,第一欄為『目的地的網域』,例如 192.168.0.0 就是一個網域咯,最後一欄顯示的是『要去到這個目的地要使用哪一個網路介面!』例如 eth0 就是網路卡的裝置代號啦。如果我們要傳送的封包在路由規則裡面的 192.168.0.0/255.255.255.0 或者 127.0.0.0/255.0.0.0 裡面時,因為第二欄 Gateway 為 * ,所以就會直接以後面的網路介面來傳送出去,而不透過 Gateway 咯!
     
    萬一我們要傳送的封包目的地 IP 不在路由規則裡面,那麼就會將封包傳送到『default』所在的那個路由規則去,也就是 192.168.0.254 那個 Gateway 喔!所以,幾乎每一部主機都會有一個 default gateway 來幫他們負責所有非網域內的封包轉遞!這是很重要的概念喔!^_^!關於更多的路由功能與設定方法,我們在後面的『簡易 Router 架設』當中會再次的提及呢!
     

    一組網路設定需要的參數
     
    由上面的介紹中,我們知道一部主機要能夠使用網路,必須要有 IP ,而 IP 的設定當中,就必須要有 IP, Network, Broadcast, Netmask 等參數,此外,還需要考慮到路由裡面的 Default Gateway 才能夠正確的將非同網域的封包給他傳送出去,所以說,一組合理的網路設定需要哪些資料呢?呵呵!就是:
     
    1. IP;
    2. network;
    3. netmask;
    4. broadcast;
    5. gateway
     
    沒錯!就是這些資料!如果您是使用 ADSL 撥接來上網的話,上面這些資料都是由 ISP 直接給您的,那您只要使用撥接程式進行撥接到 ISP 的工作之後,這些資料就自動的在您的主機上面設定完成了!但是如果是固定制 ( 如學術網路 ) 的話,那麼就得自行使用上面的參數來設定您的主機囉!缺一不可呢!以 192.168.0.0 這個 C Class 為例的話,那麼您就必須要在您的主機上面設定好底下的參數:
     
    1. IP:由 192.168.0.1~254
    2. Network:192.168.0.0
    3. Netmask:255.255.255.0
    4. Broadcast:192.168.0.255
    5. Gateway :每個人的設定都不同,請詢問您的網路管理員!呵呵!就是自己啦!

封包的格式

    終於給他來到了封包格式的地方了!上面的咚咚大多是在網路最底層的基礎知識,得自行好好的理解理解!第一次看不懂沒關係,多看幾次,並且實際配合實做,就比較容易進入狀況了!假設您已經知道了網路最底層的 IP 以及相關的參數的意義,那麼應該知道的是,網路層的協定只是提供路由的判斷,以確定封包的傳送路徑,但是這些協定並沒有管理可能由於網路媒體的損壞問題,或者是網路的負荷過重以及其他不可預期的情況,而造成封包損毀或者被丟棄的狀態。為了使封包的傳送過程中更具有穩定性與可靠性,我們就得提供一套機制來讓資料可以沒有錯誤的到達到目的地。
     
    在 TCP/IP 這個協定組合當中,TCP ( Transmission Control Protocol ) 就是用來做為傳送的一個協定,當然啦,還有一個 UDP 的協定呢!在 TCP 這個協定當中,他提供了較為穩定而且可靠的連線狀態,至於 UDP 則是一個比較沒有這麼可靠的連線型態了。底下我們就來談一談吧!
     

    通訊埠口與 Socket pair
     
    在開始說明 TCP 封包之前,我們先來瞭解一些常見的資訊吧!首先提到的是通訊埠口 ( Port ) 這個玩意兒。通訊埠口的產生都是來自於作業系統的某些程式 ( 您也可以想成是程序, process ) 的執行結果。舉例來說,當我們想要連上奇摩雅虎這個網站來瀏覽 WWW 的資訊時,那麼我們的瀏覽器 (Netscap 還是 IE 都好啦! ) 就需要在我們的電腦上面隨機開啟一個大於 1024 以上的通訊埠口來進行該次的連線,當然啦,在奇摩雅虎的 WWW 主機上面,因為要啟動 WWW 的服務,不然怎麼讓 Client 端連進來?所以,他就會啟動 WWW 伺服器軟體,而這個 WWW 伺服器軟體就會在奇摩雅虎的主機上面開啟一個埠口來等待 Client 端的連接,這個埠口此時就稱為在監聽 ( LISTEN ) 了!而當兩個埠口連接上並且正確的建立起連線之後,那麼資料就可以開始在這兩個埠口之間進行傳送了!
     
    或許您會覺得很奇怪,怎麼上面提到的在 Client 端的埠口需要隨機選取一個大於 1024 以上的埠口來進行這次的連線呢?這是因為小於 1023 以內的埠口大多已經預留給特殊的服務 ( Services ) 來進行該服務的啟動了,例如上面提到的 WWW 伺服器,預設的監聽埠口就是 80 這個埠號。目前有相當多的常見 ( Well Known ) 的埠口就是保留給系統特定的伺服器軟體用的,而這些埠號與服務的名稱對應在 Linux 系統當中,都是寫在 /etc/services 裡面,底下列出一些常見的 Services 與埠號的對應:
     
    • 21-20:FTP ( ftp-data )
    • 22   :SSH
    • 23   :Telnet
    • 25   :SMTP ( e-mail )
    • 80   :WWW
    • 110  :POP3 ( e-mail )
     
    另外一點比較值得注意的是,小於 1023 以下的埠口要啟動時,啟動者的身份必須要是 root 才行!這個限制挺重要的,大家不要忘記了喔!
     
    曾經有一個朋友問過我說:『一部主機上面這麼多服務,那我們跟這部主機進行連線時,該主機怎麼知道我們要的資料是 WWW 還是 FTP 啊?!』呵呵!這就是 port 的不同的結果啦!因為每種 Client 軟體他們所需要的資料都不相同,例如上面提到的 Netscape 以及 IE 他們所需要的資料是 WWW ,所以該軟體預設就會向主機的 80 port 索求資料;而如果您是使用 cuteftp 來進行與主機的 FTP 資料索求時, cuteftp 這個 Client 軟體當然預設就是向主機的 FTP 相關埠口 ( 預設就是 port 21 ) 進行連接的動作啦!所以當然就可以正確無誤的取得 Client 端所需要的資料了。
     
    舉個例子來說,一部主機就好像是一間多功能銀行,該銀行內的每個負責不同業務的窗口就好像是通訊埠口,而我們民眾就好像是 Client 端來的封包。當您進入銀行想要繳納信用卡帳單時,一到門口服務人員就會指示您直接到該窗口去繳納,當然,如果您是要領錢,服務人員就會請您到領錢的窗口去填寫資料,您是不會跑錯的對吧! ^_^。萬一跑錯了怎麼辦?呵呵!當然該窗口就會告訴『我不負責這個業務,您請回去!』,呵呵!所以該次的連線就會『無法成功』咯!
     
    談過了通訊埠口後,再來聊一聊每個封包的基本內容有哪些資料呢?這就得要談論到 Socket Pair ( 成對的承口 )了!當本機發送出封包時,主機是根據 IP 來判別來源與目的地的行進路線,並且,也需要 port number 來告知 Client 與 Server 是以哪一個埠口來進行連線的對吧!所以呢,一個連線封包就必須至少會包含底下四個資訊:
     
    • 來源 IP ( Source Address )
    • 目的 IP ( Destination Address )
    • 來源埠口 ( Source Port )
    • 目的埠口 ( Destination Port )
     
    這四個封包的基本資訊是相當重要的!您得必須要瞭解喔!
     

    封包的傳送
     
    知道了幾個重要的埠口與相關的資訊後,先來瞭解一下什麼是封包呢?封包上面有哪些資訊呢?其實封包就很像我們在郵寄信件的時候那個郵件的模樣了!信紙總是得放入信封吧?而信封上面總是得寫上發信人住址,受信人住址與姓名啊!所以,一封郵件主要會有兩個部分,分別是:『信封表面的資訊部分、與信封內部的信件內容!』。同樣的,網路的資訊封包主要也是分為兩個部分,一個是表頭 ( Header ) 的部分,另一個則是內容 ( messages ) 的部分啦!而一個封包要傳送到哪裡去,都是藉由 Header 的訊息部分來進行分析而傳送的啦!那麼 Header 有哪些重要的資訊呢?主要就如同上面提到的,至少會有來源與目標 IP 、來源與目標 Port等等!
     
    好了,假設網際網路與您的主機網路的設定都沒有問題了,也解決了路由的問題了,那麼請問真正的封包是怎麼在兩部主機之間進行傳送的呢?事實上,封包的傳送是相當複雜的,而且封包的狀態不同 (TCP/UDP) 也會有不一樣的傳送機制。這裡我們僅舉一個『相對比較可靠的封包傳送方式』來介紹。如下圖所示:
     

    圖五、較可靠的封包傳送狀態
     
    當發送封包者發送出一個封包給接受者後,接受者在『正確的接到』這個封包之後,會回覆一個回應封包 ( Acknowledgment ) 給發送者,告訴他接受者已經收到了!當發送端收到這個回應封包後,才會繼續發送下一個封包出去,否則就會將剛剛的封包重新發送一次!這種封包的傳遞方式因為考慮到對方接到的封包的狀態,所以算是比較可靠的一種方式。目前網際網路上面常見的封包是 TCP 與 UDP ,其中 TCP 的連線方式中,會考慮到較多的參數,他是一種連線模式(Connection Oriented)的可靠傳輸,至於 UDP 則省略了圖五當中那個回應封包的步驟,所以是一種非連線導向的非可靠傳輸。在一個 TCP 封包的傳送過程中,因為至少需要傳送與回應等封包來確定傳送出去的資料沒有問題,所以他是相當可靠的一種傳輸方式,不過就是傳輸與回應之間的時間可能會拖比較久一點。至於 UDP 封包就因為少了那個確認的動作,所以雖然他是較不可靠一點,但是速度上就比 TCP 封包要來的快了!底下我們將繼續介紹 TCP, UDP 以及 ICMP 等封包資訊的內容喔!
     

    TCP, 三向交握,
     
    好了,瞭解了連線步驟之後,也知道 TCP 與 UDP 封包的建立是有差異存在的!在這個小節當中,我們先就 TCP 封包 Header 的內容作個簡單的介紹吧! TCP 封包的 Header 內容主要如下:
     
    表二、TCP 封包的 Header 資訊
    Source Port(16) Destination Port(16)
    Sequence Number(32)
    Acknowledgment Number(32)
    Data Offset(4) Reserved(6) U
    G
    R
    A
    C
    K
    P
    S
    H
    R
    S
    T
    S
    Y
    N
    F
    I
    N
    Window(16)
    Checksum(16) Urgent Pointer(16)
    Options
    Data
    ......
    Message
     
    上面的資訊都相當的重要,稍微瞭解一下各個資料:
     
    • Source Port & Destination Port ( 來源埠口 & 目標埠口 ):來源與目標的埠口,這個容易瞭解吧!上面才剛剛提過那個埠口的觀念呢!再次的給他強調一下, Linux 的 daemon 名稱對應 Port number 是記錄在 /etc/services 裡面的喔!而且,小於 1024 以下的 Port 只有 root 身份才能啟用,至於一般 Client 發起的連線,通常是使用大於 1024 以上的埠口!

    •  
    • Sequence Number ( 封包序號 ):在前面的 OSI 七層協定裡面提到過,由於種種的限制,所以一次傳送的封包大小大約僅有數千 bytes ,但是我們的資料可能大於這個封包所可以允許的最大容量,所以就得要將我們的資料給他拆成數個封包來進行傳送到目的地主機的動作了。那麼對方主機怎麼知道這些封包是有關連性的呢?就得藉由這個 Sequence Number 來輔助了。當發送端要發送封包時,會為這個封包設定一個序號,然後再依據要傳送的資料長度,依序的增加序號。也就是說,我們可以使用遞增的值來替下一個封包做為他序號的設定!

    •  
    • Acknowledgment Number ( 回應序號 ) :由剛剛圖五的封包傳輸過程中,我們知道在接受端接收了封包之後,會回應發送端一個回應封包,那個回應的資訊就是在這裡啦!當接收端收到 TCP 封包並且通過檢驗確認接收該封包後,就會依照原 TCP 封包的發送序號再加上資料長度以產生一個回應的序號,而附在回應給發送端的回應封包上面,這樣發送端就可以知道接收端已經正確的接收成功該 TCP 封包了!所以說, Sequence 與 Acknowledgment number 是 TCP 封包之所以可靠的保證啊!因為他可以用來檢測封包是否正確的被接受者所接收呢!

    •  
    • Data Offset (資料補償):這是用來記錄表頭長度用的一個欄位。

    •  
    • Reserved (保留):未使用的保留欄位。

    •  
    • Control Flag (控制標誌碼):控制標誌碼在 TCP 封包的連線過程當中,是相當重要的一個標誌,先來說一說這六個控制碼,然後再來討論吧:
      • Urgent data :如果 URG 為 1 時,表示這是一個緊急的封包資料,接收端應該優先處理;
      • Acknowledge field significant :剛剛上面不是說到那個 Acknowledgment 嗎?當 ACK 這個 Flag 為 1 時,表示這個封包的 Acknowledge Number 是有效的,也就是我們上面提到的那個回應封包咯。
      • Push function :如果 PSH 為 1 的時候,該封包連同傳送緩衝區的其它封包應立即進行傳送,而無需等待緩衝區滿了才送。接收端必須儘快將此資料交給程式處理。
      • Reset :如果 RST 為 1 的時候,表示連線會被馬上結束,而無需等待終止確認手續。
      • Synchronize sequence number :這就是 SYN 標誌啦!當 SYN 為 1 時,那就表示發送端要求雙方進行同步處理,也就是要求建立連線的意思,這個 SYN 是相當重要的一個 Flag 喔!
      • No more data fro sender (Finish) :如果封包的 FIN 為 1 的時候,就表示傳送結束,然後雙方發出結束回應,進而正式進入 TCP 傳送的終止流程。
       
    • Window (滑動視窗):與接收者的緩衝區大小有關的一個參數。

    •  
    • Checksum(確認):當資料要由發送端送出前,會進行一個檢驗的動作,並將該動作的檢驗值標注在這個欄位上;而接收者收到這個封包之後,會再次的對封包進行驗證,並且比對原發送的 Checksum 值是否相符,如果相符就接受,若不符就會假設該封包已經損毀,進而要求對方重新發送此封包!

    •  
    • Urgent Pointer:指示緊急資料所在位置的欄位。

    •  
    • Option:當需要 client 與 Server 同步動作的程式,例如 Telnet ,那麼要處理好兩端的交互模式,就會用到這個欄位來指定資料封包的大小咯,不過,這個欄位還是比較少用的!
     
    瞭解了 TCP 封包的格式之後,再來我們談一談裡面幾個重要的資訊吧!事實上,TCP 之所以被稱為連線導向的可靠傳輸,其實是靠上面提到的 Control Flag 來控制封包的旗標,以使 Client 與 Server 端建立起連線的機制。以下圖為例:
     

    圖六、TCP 封包的三向交握
     
    在上圖中,SYN 與 ACK 就是 Control Flag 的開關來讓 TCP 封包含有的相關資訊!Client 端與 Server 端在經過了要求主動建立、回覆確認封包、再次確認,最後建立起兩邊的相關埠口的連線,由於為了建立起最終的連線,需要進行三次封包的要求與確認,因此我們也稱這個建立連線前的步驟為『三向交握, Three-way handshake』了。這個動作在建立連線以及防火牆的設定裡面是相當重要的喔!
     

    UDP
     
    UDP 的全名是:『User Datagram Protocol, 用戶資料流協定』,UDP 與 TCP 不一樣, UDP 不提供可靠的傳輸模式,因為他不是連線導向的一個機制,這是因為在 UDP 的傳送過程中,例如圖五當中,接受端在接受到封包之後,不會回覆回應封包 ( ACK ) 給發送端,所以封包並沒有像 TCP 封包有較為嚴密的驗證機制。至於 UDP 的表頭資料如下表所示:
     
    表三、UDP 封包的 Header 資訊
    UDP Source Port(16) UDP Destination Port(16)
    Message Length(16) UDP checksum(16)
    Data
    ......
    Message
     
    如上所示,UDP 封包僅提供 UDP 使用的埠口(port),表頭所佔用的資訊要比 TCP 少很多,由於每個封包的大小是有限制的,所以一個 UDP 封包,基本上來說,他所能容納的資料 (Data/Message) 就會比 TCP 封包來的多一些。此外,由於 UDP 封包不需要等待回應封包 (ACK) ,所以傳輸速度上比較快一點。快雖快,畢竟 UDP 封包比較不夠可靠,因此他適用於可靠性要求不高的場合,比如等一下要談的 DNS 傳送當中。
     
    TCP 與 UDP 在傳輸可靠性、傳輸量以及傳輸速度上是各有其優缺點的,所以各有其適用的場合!
     

    ICMP
     
    ICMP 的全稱是『 Internet Control Message Protocol 』。基本上,ICMP 是一個錯誤偵測與回報的機制,最大的功能就是可以確保我們網路的連線狀態,與連線的正確性!不過 ICMP 本身並沒有傳送的能力,需要藉由 IP 來進行傳送。ICMP 有相當多的類別可以偵測與回報,底下是比較常見的幾個 ICMP 的類別 (Type):
     
    表四、ICMP 的各項類別所代表的意義
    類別代號
    類別名稱
    意義
    0 Echo Reply 代表一個回應信息
    3 Distination Unreachable 表示目的地不可到達
    4 Source Quench 當 router 的負載過時,這個類別碼可以用來讓發送端停止繼續發送訊息
    5 Redirect 用來重新導向路由路徑的資訊
    8 Echo Request 請求回應訊息
    11 Time Exceeded for a Datagram 當資料封包在某些路由傳送的現象中造成逾時狀態,此類別碼可告知來源該封包已被忽略的訊息
    12 Parameter Problem on a Datagram 當一個 ICMP 封包重複之前的錯誤時,會回覆來源主機關於參數錯誤的訊息
    13 Timestamp Request 要求對方送出時間訊息,用以計算路由時間的差異,以滿足同步性協定的要求
    14 Timestamp Replay 此訊息純粹是回應 Timestamp Request 用的
    15 Information Request 在 RARP 協定應用之前,此訊息是用來在開機時取得網路信息
    16 Information Reply  用以回應 Infromation Request 訊息
    17 Address Mask Request 這訊息是用來查詢子網路 mask 設定信息
    18 Address Mask Reply 回應子網路 mask 查詢訊息的
     
    在 ICMP 的應用當中,比較有名的就是 pingtraceroute 了,這兩個指令可以用來讓我們檢查整個網路的問題點呢!關於指令的詳細用法,我們在後面章節的『Linux 網路常用指令』當中再繼續的介紹。
     

    封包過濾的防火牆概念
     
    由上面的說明當中,我們知道資料的傳送其實就是封包的發出與接受的動作啦!並且不同的封包上面都有不一樣的表頭 ( header ),此外,封包上面通常都會具有四個基本的資訊,那就是 socket pair 裡面提到的『來源與目的的 IP 以及來源與目的端的 port number』 。當然啦,如果是可靠性連線的 TCP 封包,還包含 Control Flag 裡面的 SYN/ACK 等等重要的資訊呢!好了,開始動一動腦筋,有沒有想到『網路防火牆』的字眼啊?!網路防火牆可以抵擋掉一些可能有問題的封包,那麼在 Linux 系統上面是怎麼擋掉封包的呢?其實說來也是很簡單,既然封包的表頭上面已經有這麼多的重要資訊,那麼我就利用一些防火牆機制與軟體來進行封包表頭的分析,並且設定分析的規則,當發現某些特定的 IP 、特定的埠口或者是特定的封包資訊(SYN/ACK等等),那麼就將該封包給他丟棄,那就是最基本的防火牆原理了!
     
    舉例來說,大家都知道 Telnet 這個伺服器是挺危險的,而 Telnet 使用的 port number 為 23 ,所以,當我們使用軟體去分析要送進我們主機的封包時,只要發現該封包的目的地是我們主機的 port 23 ,就將該封包丟掉去!那就是最基本的防火牆案例啦!更多的防火牆資訊我們會在後頭的『簡易防火牆』與『認識網路安全』當中進行更多的說明喔!

DNS 的基礎觀念

除了上面提到的最基本的網路基礎概念之外,這裡還必須要先談一個基本的觀念,否則後續的主機名稱查詢設定挺難說明白的!好了,我們知道電腦在網路上面要找尋主機的時後,是利用 IP 來定址,而以 TCP/UDP/ICMP 等資料來進行傳送的,並且傳送的過程中還會去檢驗封包的資訊。總歸一句話,網路是靠 TCP/IP 家族來達成的,所以必須要知道 IP 之後,電腦才能夠連上網路以及傳送資料。
 
問題是,電腦網路是依據人類的需要來建立的,不過人類對於 IP 這一類的數字並不具有敏感性,即使 IP 已經被簡化為十進位了,但是人類就是對數字沒有辦法啊!怎麼辦?!沒關係,反正電腦都有主機名稱嘛!那麼我就將主機名稱與他的 IP 對應起來,未來要連接上該電腦時,只要知道該電腦的主機名稱就好了,因為 IP 已經對應到主機名稱了嘛!所以人類也容易記憶文字類的主機名稱,電腦也可以藉由對應來找到他必須要知道的 IP ,啊!真是皆大歡喜啊!
 
這個主機名稱 (Hostname) 對應 IP 的系統,就是鼎鼎有名的 Domain Name System (DNS) 咯!也就是說, DNS 這個服務的最大功能就是在進行『主機名稱與該主機的 IP 的對應』的一項協定。DNS 在網路環境當中是相當常被使用到的一項協定喔!舉個例子來說,像鳥哥我常常會連到奇摩雅虎的 WWW 網站去看最新的新聞,那麼我一定需要將奇摩雅虎的 WWW 網站的 IP 背下來嗎?!天吶,鳥哥的忘性這麼好,怎麼可能將 IP 背下來?!不過,如果是要將奇摩站的主機名稱背下來的話,那就容易的多了!不就是 http://tw.yahoo.com 嗎?!而既然電腦主機只認識 IP 而已,因此當我在瀏覽器上面輸入了『http://tw.yahoo.com』的時後,我的電腦首先就會藉由向 DNS 主機查詢 tw.yahoo.com 的 IP 後,再將查詢到的 IP 結果回應給我的瀏覽器,那麼我的瀏覽器就可以藉由該 IP 來連接上主機啦!
 
發現了嗎?我的電腦必須要向 DNS 主機查詢 Hostname 對應 IP 的資訊喔!那麼那部 DNS 主機的 IP 就必須要在我的電腦裡面設定好才行,並且必須要是輸入 IP 喔,不然我的電腦怎麼連到 DNS 主機去要求資料呢?呵呵!在 Linux 裡面,DNS 主機 IP 的設定就是在 /etc/resolv.conf 這個檔案裡面啦!
 
目前各大 ISP 都有提供他們的 DNS 主機 IP 給他們的用戶,好設定客戶自己電腦的 DNS 查詢主機,不過,如果您忘記了或者是您使用的環境中並沒有提供 DNS 主機呢?呵呵!沒有關係,那就設定中華電信那個最大的 DNS 主機吧! IP 是 168.95.1.1 咯!要設定好 DNS 之後,未來上網瀏覽時,才能使用主機名稱喔!不然就得一定需要使用 IP 才能上網呢!DNS 是很重要的,他的原理也頂複雜的,更詳細的原理我們在後面的『DNS 伺服器架設』裡面進行更多更詳細的說明喔!這裡僅提個大綱!

網路佈線模式

    呀!真累人的網路基礎啊!談完了一些基本的觀念之後,接著下來就是實作的部分囉!首先,要讓網路能通,自然就需要將所有的電腦以『網路的連線媒體』連接起來,這裡指的媒體就是『網路線、集線器或交換器( Hub 或 Switch )、網路卡』等等的硬體配備啦!當然啦,由於選擇的媒體不同,佈線情況也會有所差異!這裡 VBird 以目前最常見於一般小型企業或家庭 LAN 裡面的佈線『星形連線』來進行說明。這種架構基本上『就是以一個 Hub 或者是 Switch 為中心,進而將所有的電腦連接起來』,以提供各個電腦的網路功能!這種架構的最大優點在於除錯較容易!我們底下列出一個很簡單的家庭星形架構的連線:
     

    圖七、星形網路連線的概要
     

    基本元件
     
    在圖七裡面,有哪些基本的網路元件呢?我們先來談一談定義吧! ^_^
     
    • Host ( 主機 ):只要是連接在網路上面的主要設備,幾乎都可以稱為主機 (HOST) 。例如伺服器 (server), 路由器 ( Router ), 網路印表機, 終端機以及工作站, 還有其他相關的連線控制器材等等,都可以被稱為是 Host 哩。
     
    • Node ( 節點 ):連接在網路上的所有非網路線部分的設備,都可以稱為節點,例如上面圖七的 PC, ISP 主機,數據機, 交換器, 等等,全部都算是 node 喔!當我們要成功的完成 client 與 Server 的連線時,那麼在這條連線上的所有 node 都必須沒有問題才行!例如交換器要能正確的工作,Server 要能提供正常的服務等等。當我們在進行網路除錯時,就是由一個一個的 Node 來著手測試的!

    •  
    • Client ( 用戶端 ):向伺服器發送出資料索求封包的 host 就可以稱為是 Client 了!舉例來說,當 Linux PC 3 向其他伺服器要求資料時,那麼這部電腦就是 client 啦!而當 Linux NAT 伺服器,向 ISP 大型主機要求資料時,在當時的行為他也算是 Client 喔!所以他的身份是很複雜的,不但提供 Client 服務,同時如果他向其他主機要求資料,他就成為 Client 咯!
     
    • Interface ( 網路介面 ):網路介面不一定是網路卡喔!舉例來說,當我們使用 ADSL 撥接到 ISP 後,會取得一個額外的網路介面 ( ppp0 ),該介面實際上是沒有硬體的 ( 其實是架構在網路卡上面的啦! ),此外,如果架設一個網路卡多個 IP 的設定時 ( IP aliases ),也會在一張網路卡上面產生多個網路介面的喔!
     
    • Network adapter, Network Interface Card, NIC ( 網路卡 ):呵呵!這個指的就是實際的硬體咯!

    •  
    • Server ( 伺服器 ):當主機有對網路提供服務時,例如 WWW, FTP... ,那麼該 host 就可以稱為 Server 了!

    •  
    • Workstation ( 工作站 ):簡單的來說,只要沒有對網路提供服務的,就可以稱為工作站了!例如 Windows PC1, Windows PC2...,不過,事實上工作站對於某些環境來說,還是有差別的。例如某些提供很強大的運算能力的主機,偶而也會被稱為『工作站』,即時他仍然有提供網路服務!
     

    連線基本要求
     
    好了,如果硬體連線都已經建立了起來,那麼我的電腦要經過 Internet 連線到遠端的主機時,至少需要哪些正確的網路設定之後,才能夠進行連線呢?之前的幾個小節都是提到網路基礎的設定,這裡要稍微介紹的則是主機設定時需要注意的事項:
     
    1. Linux 核心必須有支援網路卡:

    2. 我們在之前的『鳥哥的 Linux 私房菜 -- 基礎學習篇』提過了,要讓硬體正確無誤的工作,您的核心 (Kernel) 就必須要支援該硬體才行,也就是說,需要硬體的驅動程式啦!所以囉,請先確定您購買的網路卡是被 Linux 所支援的,不然的話,您就得向廠商要求驅動程式,然後在自己的 Linux 系統上面編譯好才行!
       
    3. 網路卡必須具有合法的 IP 以及正確的網路參數設定:

    4. 再來,由於我們目前的網路基礎是由 IP ( Internet Protocol ) 進行溝通的 ( 由於這個 IP 是經由作業系統的軟體給的,所以又稱為 軟體位址( software address ) ,而由前面的基礎介紹後,我們也知道要成功的連上網路,就需要五個主要的參數才行:IP, Network, Netmask, Broadcast, Gateway,這些資料都必須要能正確的設定在您的系統上;
       
    5. 資料封包的傳送:

    6. 嗯!終於連上網路了,不過要能真正的傳輸資料得需要瞭解到剛剛上面才提到的『封包格式』內容啦!封包的傳送需要將正確的連線建立起來,而連線的建立與 Socket pair 有關,所以我們必須在 Client 端安裝正確的 Client 軟體,如果是 Server 的話,就得要啟動正確的服務,以開啟所需要的連線埠口,以用來建立連線並且進行資料的傳輸囉!
       
    7. 經過節點、 Router 或 Gateway 主機:

    8. 好了,由於我們是經由 Hub/Switch 進行連接的,所以我們的封包資料一定會經過這個節點才會傳送出去!這個時候不禁要想一想, Hub 好還是 Switch 好?這兩者有什麼不同呢?其實最大的不同來自於『共享網路媒體』與『網路媒體對應』的架構上面!然後由於封包本身記錄的 socket pair 讓我們的封包就可以藉由一個又一個的 router 傳送到目的地!
       
    所以,基本上我們在傳送一個資料的時候,他的機制是挺複雜的,不過也可以想得很簡單!就是:
     
    1. 作業系統先依據軟體給的 IP 來將資料打包成為待傳送的封包,例如 TCP 封包,上面並記錄了來源與目的的 IP 與 port;
    2. 根據封包上面的目的地 IP 資料,並經由 本機上面的 route table 來取得下一個 router 的資訊( 若在同一網域內,則 router 可視為本機的網路卡 ),然後將資料送到 router 上面去;
    3. 重複 router 的行為,最後送到目的地端的 PC,而對方主機接收的 TCP 封包!

網路媒體的選擇:

    終於可以來談一談硬體的選擇部分了!網路媒體的選擇不簡單啊,因為必須要依據您的網路特色與負荷來進行選擇才好!底下談一些比較簡單的注意事項吧!
     
    • 網路線的類別與等級:

    • 最常見的網路媒體當然就是網路線啦!目前主流的網路線應該是 RJ-45 接頭的網路線了,至於早期的網路線則以同軸電纜線為主。因為同軸電纜線最大的傳輸速度僅達 10Mbps ,所以已經較少見了,因此底下我們僅針對 RJ-45 的網路線來說明。RJ-45 網路線如下所示:
      RJ-45網路線是有等級的,而對於一般家庭或小型企業使用者而言,應該選擇 CAT5 這個等級才好!嗯!?網路線也有等級之分?是呀!剛剛不是說過了嗎?那個網路媒體是很重要的,而由於網路媒體中跑的訊號其實就是電子啦!由於電子訊號在行進的時候會產生一些電磁效應( 這裡指的是 cross talk ),這些 cross talk 就會影響整個傳輸的效能!為了避免 cross talk 的干擾,人們想出了很多的方法來解決他!有所謂的『雙絞線, Twisted Pair』、或提供屏蔽『Shielded, STP』等功能,來讓網路線的 cross talk 干擾降低,並提升整體的網路傳輸速度負載量! 而依據給予的不同的屏閉等級來將網路線分級!目前最常見的應該就是 CAT5 這一級啦!最大的傳輸量可以到達 100 Mbps 而最大傳輸距離可達 91m 呢!所以,請注意『在選擇網路線的時候,至少您的網路線等級要達到 CAT5 才行!』,否則即使您的網路卡可以到達的傳輸量為 100 Mbps ,但是網路線只有 10 Mbps 時,呵呵!那麼最大的傳輸量將會僅成為 10 Mbps 呦!
       
      • RJ-45 網路線的種類(平行線與跳線):

      • RJ-45 網路線內部共有 8 條線路,根據線路排列順序的不同而將 RJ-45 分成兩種接頭的格式,這兩種接頭的 8 條纜線排列順序分別如下所示:
         
        接頭名稱
         1  2  3  4  5  6  7  8
        568A
        白綠 綠 白橙 藍 白藍 橙 白棕 棕
        568B
        白橙 橙 白綠 藍 白藍 綠 白棕 棕
         
        在網路媒體當中跑的是電子訊號,由於電子訊號需要是一個迴路才能通(例如正極接負極),所以說這些訊號自然就需要成對囉!好了,那麼由於設備的不同,因此網路線的接腳也會跟著不同的,所以就有這兩種接頭的製作了。當一條網路線的兩端使用同一種接頭(同時為 568A 或同時為 568B)時,則稱該網路線為平行線,而如果網路線的兩端分別是 568A 與 568B 的話,那麼就稱該網路線為『跳線!』。一般來說,我們都使用『平行線』連接電腦主機與 Hub/Switch;不過,當電腦主機要與另一部電腦主機使用網路卡對網路卡的連接而不透過 Hub/Switch 時,那麼就需要使用跳線才行喔!這挺重要的!
       
    • 網路卡的選購依據:

    • 網路卡的選購依據當然是『Linux 能夠支援的網路卡晶片』為第一優先啦!要不然的話您還得自行編譯網路卡的驅動模組,很傷腦筋的。另外,目前的主流網路卡流量為『可以自動分辨 10/100 Mbps 的流量』,除此之外,如果您的主機是預計要用來架設 Server 的,並且網路流量還不小的話,那麼網路卡的好壞還是需要留意的呢!您要考慮的是:
       
      1. 預計大型網站的架設:如果您是想要使用您的 Linux 來幫您架設大型主機的話,例如每天即時上線人數都可達到上百人的大型網站,這個時候就得要好一點的卡啦!因為好的網路卡可以節省 CPU 的利用率,並且在系統資源的分配以及其他的網路相關資源配比方面會比較完善,不容易造成網路當機或者是死亡!所以買一塊好一點的 10/100 Mbps 的 3Com or Intel 之類的網路卡,是千萬省不得的!

      2.  
      3. 一般家用或者是小流量的網站:如果您的野心沒有這麼大,而是希望可以好好的學習 Linux 而已,並且使用的是 512 Kbps 的 ADSL 撥接系統,呵呵!那麼太好的網路卡對您的幫助就沒有那樣重要啦!這個時候便宜的 200~300 塊的網路卡( 盡量買所謂的螃蟹卡 ) 就可以用得很開心啦!我目前也都是使用螃蟹卡在我的宿網上面呢!
       
      為什麼稱為螃蟹卡呢?這是因為該晶片組是 RealTek 出品的商品,該晶片組的 Mark 長的有點像螃蟹,所以就被通稱為螃蟹卡了! ^_^在 Linux 裡面,螃蟹卡的模組是 8139 呢!我們在後面的章節會持續介紹喔!
       
    • Switch 還是 Hub :

    • 好了,剛剛上面星形連線的圖示當中,也提到了現在多半以 Hub/Switch 做為網路媒體,那麼這兩者之間有何差異呢? Hub/Switch 中文翻譯成為『集線器/交換器』。Hub 還比較好理解,基本上,他僅是將所有的網路線給他連接在一起,並沒有考慮到其他的因素!因此,每部電腦只要連上 Hub 之後,感覺上就好像連上 Bus 一樣啦,所以 Hub 是一個『網路共享媒體』喔!!那麼『瞎米係』 Switch 呀!?為什麼 Switch 通常比 Hub 要貴上非常的多呢?他們的功能有哪裡不同?最基礎的不同在於 Switch 內部多了一個可以記錄插上 Switch 的主機的網路卡的 MAC 與 switch port 對應的記憶資料區( table )啦!也就是說, switch 會記錄他的 port 與該 port 連接的主機那塊網路卡的 MAC 哩,這樣有什麼好處呢?這樣說好了,當您的星形連線的網域之中有一部電腦在進行物理廣播的時候(請注意,物理廣播主要是以 MAC 為傳遞的對象):
       
      • 如果使用的中間連結媒體是 Hub 的時候,那麼所有連接到這部 Hub 上面的主機都會接到該廣播封包;
      • 而如果使用的連結媒體是 Switch 時,由於上面的 table 已經記錄了 MAC 對應 Port 的資料,所以該封包將會『直接』經由該 port 來送出去給目的地主機!
       
      由於這樣的關係,因此在進行物理廣播的時候,就已經去除了可能產生封包碰撞的狀態了!所以說, Switch 其實已經不是一個『共享媒體』了喔!因此上, Switch 與 Hub 所能承受的流量或許相同,但是 Switch 卻可以達到比較好的傳輸功能,用在大型的網域當中,嘿嘿!當然是 Switch 比較棒啦!這也是為什麼 Switch 會比較貴的原因呀!再強調一次, Hub 仍然屬於『共享媒體』的一種,然而 Switch 幾乎可以看做是『非共享媒體』了!現在的 Switch 有的還包含了 Auto MDI/MDIX 的自動判別網路線的功能,所以由 Switch 連接到主機網路卡的網路線,不論使用平行線或跳線,具有 Auto MDI/MDIX 的 Switch 都可以自動辨別,省卻了使用者要購買網路線時候的困擾呢!所以說,如果不考慮價格(其實現在便宜一點的 Switch 也都低於 1000 大洋以內了!)購買 Switch 是一個不錯的方案喔!
       
    • 整體流量的考量:

    • 特別留意一件事情,那就是在您的網路裡面,網路流量的限制是在『流量最小的那個裝置』所控制的,而不是所有裝置的平均流量喔!所以在您購買網路線、網路卡、Switch/Hub 等等的網路設備時,是需要一併考量所有的配備的,最好還能夠與自己的網路環境相配合,這樣才能達到比較好的搭配!

重點回顧:

  • OSI 七層協定為一個網路模型 ( model ) ,並非硬性規定。這七層協定可以協助軟硬體開發有一個基本的準則;
  • 現今的網路基礎是架構在 TCP/IP 這個通訊協定上面;
  • 資料連接層裡重要的資訊為 MAC (Media Access Control),亦可稱為硬體位址,而 ARP Table 可以用來對應 MAC 與軟體位址 ( IP ) ;
  • 網路的傳輸單位使用 bit 而不是 byte ;
  • 在網路媒體方面, Hub 為共享媒體,因此可能會有封包碰撞的問題,至於 Switch 由於加入了 port 與 MAC 的對應,因此已經克服了封包碰撞的問題,也就是說,Switch 並不是共享媒體;
  • Physical broadcast 與 Logical broadcast 功能不並相同,物體廣播在偵測網路媒體, Logical broadcast 則主要針對網路層的軟體位址進行廣播;
  • IP 為 32 bits 所組成的,為了適應人類的記憶,因此轉成四組十進位的數據;
  • IP 主要分為 Host ID 與 Net ID 兩部份,加上 Netmask 這個參數後,可以設定『網域』的概念;
  • IP 只有兩種,就是 Public IP 與 Private IP ,中文應該翻譯為 公共 IP 與 私有(或保留) IP,私有 IP 與私有路由不可以直接連接到 Internet 上;
  • 每一部主機都有自己的路由表,這個路由表規定了封包的傳送途徑,在路由表當中,最重要者為預設的通訊閘 ( Gateway/Router );
  • 一般來說,一部主機裡面的網路參數應該具備有:IP, Netmask, Network, Broadcast, Gateway 等;
  • 目前常見的資料封包格式有 TCP/UDP/ICMP 等,TCP 為較準確的封包格式,透過多種確認手段來使封包可以準確的到達目的地,至於 UDP 則略過這些確認手續,因此傳送速度較快。
  • 在主機的 port 當中,只有 root 可以啟用小於 1023 以下的 port ;
  • DNS 主要的目的在於進行 Hostname 對應 IP 的功能;
  • RJ-45 網路線依據接頭線路的排列,可分為平行線與跳線;

課後練習:

  • 請簡述 OSI 網路七層協定每一層的功能;
  • 在 ISP 提供的網路服務中,他們提到傳輸速度為 1.5M/382K ,請問這個數據的單位為何?
  • 什麼是 MAC ( Media Access Control ) ,MAC 主要的功能是什麼?
  • 請解釋什麼是物理廣播 ( Physical Broadcast ) ,他與邏輯廣播 ( Logical Broadcast ) 有什麼不同?
  • 什麼是封包碰撞?為什麼會發生封包碰撞?
  • ARP Table 的作用為何?如何在我的 Linux 察看我的 ARP 表格?
  • 簡略說明 Netmask 的作用與優點;
  • 我有一組網域為: 192.168.0.0/28 ,請問這個網域的 Network, Netmask, Broadcast 各為多少?而可以使用的 IP 數量與範圍各是多少?
  • 承上題,如果網域是 192.168.0.128/29 呢?
  • 我要將 192.168.100.0/24 這個 C Class 的網域分為 4 個子網域,請問這四個子網域要如何表示?
  • 如何觀察 Linux 主機上面的路由資訊 ( route table )?
  • TCP 封包上面的 SYN 與 ACK 標誌代表的意義為何?
  • 什麼是三向交握?在哪一種封包格式上面才會有三向交握?

  • 前往參考用解答

特別感謝:

本文在 2002/07 發出之後,收到相當多朋友的關心,也從而發現了自己誤會的一些基礎的網路理論,真的是感謝好朋友 Netman 兄與 ZMAN 兄的指導!這篇短文在 2003/08/03 做了相當大幅度的修訂,與原來的文章 ( 上次更新日期 2002/09 ) 已經有一定程度的差異了,希望網友們如果有時間的話,能夠再次的閱讀,以釐清一些基本概念喔!

參考資料

修改歷史:
2002/07/18:第一次完成日期!
2002/09/26:修改了部分可能引起誤解的文章部分!
2003/08/03:重新編排版面,並且重新檢視文章內容,修訂文章!
2003/08/20:增加重點回顧與課後練習
2003/09/06:加入參考用解答
2004/03/16:修訂 N-Way 的錯誤,訂正為 Auto MDI/MDIX 的功能!
https://linux.vbird.org is designed by VBird during 2001~2022.