zoukankan      html  css  js  c++  java
  • 簡易網路基礎架構(转)

    最近更新日期:2002/09/26

    關於網路基礎
    淺談網路網路是什麼, 網路功能, 網路運作模式, OSI 七層協定,
    基礎網路佈線模式Internet, LAN, WAN, Intranet, Extranet,
    網路媒體的運作方式網路媒體, 什麼是物理廣播, 封包碰撞, 軟體位址到硬體位址, TCP/IP 流程,
      網路媒體的選擇網路線的等級, 平行線與跳線, hub 與 Switch, 傳輸單位,
      網路卡與驅動程式驅動程式, MAC, 選購要點,
      IP 觀念IP, network, netmask, broadcast, gateway, ARP協定, 保留 IP 與內部迴圈網路,
      TCP 封包概念埠口對應檔案 /etc/services, 防火牆, TCP_Wrappers,
    Gateway 與 Router
    其他討論:何為實體 IP, 保留 IP, 浮動式 IP, 與動態 IP ?
    特別感謝


    關於網路基礎之注意事項:

    在 Linux 中的最大優勢就是在 Network 的功能啦!包括他的高效能網路傳輸與高穩定度系統資源分配,以及較為安全的網路防備能力!然而,由於這些優點同時也是缺點,因為一旦被 Cracker (網路怪客) 入侵的話,嘿嘿嘿嘿!怎麼吃上官司的都不知道!所以囉,上網之前,請先注意:我的網路做好安全防護了嗎?再者,由於 Linux 的設定上面常常比較不人性化,畢竟當初他是由一群工程師發展出來的 Unix 的下一代,所以依舊具有相當麻煩的設定工作需要作!這個時候,如果沒有較為基礎的 網路基礎 認知的話,那麼在 Linux 上面設定網路或者是網路除錯將是您一生當中最大的夢魘......,所以,這裡有幾件事情要請您好好的來參考一下:
    • 花幾晚的時間將網路基礎看一看: 這一篇短文旨在引導新鮮人快速進入網路的世界,所以寫的比較淺顯一些些,基本上,還有一堆網路硬體與通訊協定並沒有被包含在這篇短文裡頭。如果您的求知慾已經高過本篇短文,那麼請前往 Study-Area 裡面的 網路基礎 取經去吧!尤其是 IP 基礎 那一篇,對於您的網路概念,將有『長足』的進步呢!此外,如果您對於本篇短文有不苟同之處,請千萬與小弟聯絡,以提供小弟修改的空間!感謝感謝!
    • 再度熟悉 Linux 操作與 Linux 基礎:還是要一再地強調,如果您確定您只是想要『會使用 Linux 就好』那一類型的使用者,那麼真的不要再往下看了,因為問題會很大,倒不如花個小錢,請個專家來幫你搞定即可!而如果您確定您是『想要更瞭解 Linux 的使用者,並且想要熟悉架設網站』,那麼請不要再在網路上詢問:『為何我不能使用 FTP 傳送資料到主機上?』或者是『為何我不能建立個人網頁』之類的傻問題,因為這僅僅牽涉到『檔案權限與屬性』的概念而已,而這些概念都是 Linux 基礎裡頭相當重要的功課!此外,由於遠端操控 Linux 主機時,幾乎都是使用文字界面來工作,所以,不懂 bash shell ?哈哈!那麼想要幹嘛都碼不可能!
    • 隨時掌握主機資訊: 這是最麻煩的一點啦!因為大家還是常常認為『我的網站這麼小,沒有人會注意的啦!』唉!說過若干次了,就是因為有這種心裡存在,我們才會常常聽到『奇怪!我在早上剛安裝完畢,怎麼下午就無法以 root 的身份登入了!』請隨時注意您主機的資訊,好好的愛護他吧!
    無論如何, netman 大哥寫的 網路基礎 請千萬不要忘了前往一觀!拜託拜託!否則您後來的網路學習腳步會很慢很慢...

    淺談網路:

    網路是什麼
    網路是什麼呢?簡單的說,只要是兩部以上的電腦,透過網路線或者是其他的網路媒體(例如無線網卡、專線、Cable纜線等等)連接在一起,以進行檔案傳輸、訊息傳遞等等功能,那就形成一個『網路世界』啦!那麼網路有沒有大小之分呢?基本上,如果您的網路是在您的研究室內幾部電腦,或者是大樓內的所有幾百部電腦連接起來的,那麼就可以視為一個小型的 LAN ( Local Area Network ),透過 LAN 的再延伸,例如整個城市或國家,就可以稱做為 WAN ( Wide Area Network ) ,而這些無數個的 LAN 與 WAN 都連接在一起,那就是 Internet啦!您可以想像成, Internet 僅是將所有的 LAN 與 WAN 連接在一起的一個介面,所以,任何地方的電腦,只要連接上 Internet 之後,就沒有什麼太大的差異了,也就是說,在地球的另一端的電腦,與在您身旁的電腦,在 Internet 上面,事實上是差不多的!(只不過流量有點限制就是了 ^_^)!此外,需要注意的是, Internet 並沒有專人在維護的,所以他是完全沒有王法的地方,您可以在 Internet 上面進行任何的事情!哇!好像很可怕的樣子!是這樣沒錯! Internet 確實是『相當的可怕!』 ^_^,就是因為太可怕了,所以我們得要來聊一聊網路的基礎呀!
    網路的功能
    好了,對於所謂的網路有一點認識之後,要來談一談:網路有什麼功能呢?說穿了,網路真的是很日常生活化的一項工具了!!例如您使用的電腦上 WWW 去瀏覽時,使用的就是網路功能了;您的公司內部的『網路上的芳鄰』分享的檔案、印表機,那就是網路功能之一;上網下載軟體,使用的 FTP 也是網路功能之一!呵呵!夠生活化了吧!我想,目前的生活中,很難有人不去奇摩雅虎看一看奇摩即時新聞的吧!?還有股票啦、電子資訊郵件啦、上網玩網路連線遊戲咯等等,哇!好多功能呦!這都是網路幫您達成的呦!當然啦!網路的功能來不止於此,您可以再更深入的研究呦!
    網路的運作模式
    好啦,網路就是幾部電腦連接在一起,並且可以互相進行資料與訊息及硬體周邊分享的一個咚咚,他可以達到的功能相當的多,但是這裡就牽涉出來了一個問題,那就是『網路是如何運作的呢?』,我們以目前最常見的 ADSL 撥接制的情況稍做說明好了。當您需要連線網路時,那麼就必須要有:
    1. 網路卡網路線:在網路的世界裡,其實真正工作的應該就是電子訊號啦!而這些電子訊號需要藉由硬體做為媒體來傳輸,這就是最底層的網路硬體啦!我們這裡是以 ADSL 來進行說明的,當然還有所謂的光纖、無線網路等等。無論如何,要連接到 Internet 上面去,首先,就是必須要有『連接的媒體』這個媒體一般就是 RJ-45 的網路線與網路卡啦!當然啦,每一種媒體都有其規格與負載量,所以選擇的時候就需要多加的小心囉!
    2. 支援網路媒體的作業系統:有了網路媒體之後,但是沒有能夠跟媒體溝通的作業系統來操控硬體,那硬體當然沒有辦法工作啦!
    3. 合法的網路位址:就跟門牌一樣,沒有門牌,那麼您要如何到達目的地或者別人如何到達你家?此外,在網路位址的訂定方面,還會定義出『路徑』(route,路由),就是要如何到達目的地的地圖啦!
    4. 資料傳輸的方法:好了,現在硬體都沒有問題了,接著下來就是需要瞭解『我的資料是怎麼傳送出去的?!』哇!好麻煩,還要理解資料『封包』的咚咚呀!呵呵!基本上,不用擔心,目前的網路已經幫我們定義好很多協定了!所以我們只要瞭解他的一些基礎原理即可!其他的就不需要太擔心啦!!
    OK!OK!那麼假設一個狀態好了,如果你要瀏覽 奇摩新聞 的話,您是怎樣取得上面網頁的資料的呢?
    1. 首先,您要取得奇摩雅虎上面的資料,就必須向對方傳送一個要求,不然對方怎麼知道您要的資料是什麼呢?呵呵!那麼這個要求的『封包』會先在你的系統上面被『打包』;
    2. 『打包』完成之後,當然就是要開始來傳送咯,傳送當然是藉由網路卡來傳送囉,所以資料這個時候會被送到網路卡上;
    3. 而在網路卡將打包的封包傳送出去之前,會先監聽一下在這個傳送的時間點上面,是否有其他的 PC 同時在傳送,如果沒有的話,封包才可以送出去,否則就無法傳送,需要再等下一次的監聽之後才能傳送!
    4. 好了,那麼開始傳送之後,就需要藉助於 route tables 的規則,才能經由一個一個的節點(nodes)來送達目的地!
    5. 到達目的地之後,再來則是對方的主機將封包收下來,並經過作業系統的解開封包,得到您所要求的資料,然後在依據要求的內容來給予回應!而這個給予的回應又需要上面的這樣一個流程了!這個時候就會變成對方將資料打包->網路卡->網路傳送->....到達你的螢幕前面!
    OSI 網路七層協定
    而依據上面的流程來看,我們就不難瞭解到 OSI ( Reference Model for Open System Interconnection ) 的一個模式(model),稱為 OSI 七層協定的一個模式囉!這個七層協定可以簡單的分為兩大群組,一個用在網路的基礎(硬體協定與網路位址)方面,主要規定了一堆硬體的相關協定;另一個則是使用者部分的協定,使用者可以利用這四個協定來設定自己的應用程式!分別可以這樣看:
    • 網路基礎:實體層、資料連接層、網路層
    • 使用者方面:傳輸、會談、表現及應用層
    我們可以簡單的用下表來稍微瞭解一下這七層分別在幹嘛?請特別留意,下表請由下往上看,亦即由實體層看到應用層呦!
     
    OSI 七層協定的名稱 該層負責的工作
    應用層
    • 表現層是將資料轉換成 PC 的資料格式,而應用層則是跟應用程式有關的轉換了!例如您的瀏覽器若只認識 BMP 的圖檔,那麼在應用層就會將來自 JPG 或 GIF 的檔案轉成 BMP 囉!
    表現層
    • 當接受了會談層傳送來的資料之後,當然,我們必須要針對各個不同的資料與字元進行解碼與轉換的工作!例如 ASCII 與 EDCDIC 之轉換,及資料的加密與與壓縮等等功能!
    會談層
  • 資料是藉由傳送層傳送來的,而這一層則是將來自傳送層傳來的資料進行回應的工作!舉個例子來說:假設 client 端為節點 A 而 Server 端為節點 B。
    •  
      1. 當節點 A 要對 B 要求建立連線時,A 會先發出『連線請求』的訊息,該訊息上面帶有 SYN 的符號;
      2. 節點 B 收到訊息之後,如果確定接受 A 的連線要求,那麼就會回應一個『確認請求』的訊息給 A ,該訊息上面則帶有 SYN/ACK 符號;
      3. 然後節點 A 再度回應給 B 一個『確認連線』的訊息,帶有 ACK 的符號,這個時候就進入了資料傳送的階段了!
      4. 當節點 A 資料傳送完畢之後, A 會發送一個『終止連線』的訊息,則在得到 B 回應的『確認終止』訊息之後,就結束了該次連線!
    • 上面即是有名的『三向交握, Three-Way Handshack』的工作原理啦!那就是在這一層裡面達成的哩!所以我們可以說,在會談層裡面可以提供穩定的可靠的連線渠道!
    傳送層
    • 我們在底下的網路功能三層協定之中,知道資料傳送是以封包 ( packet )來傳遞的,而打包的工作就是在這一層裡面完成的啦!在這一層裡面,最常見到的協定就是 TCP 封包啦!他可以記錄目標及來源的 port 與 IP ,讓資料封包可以順利的藉由底下的網路層來達到傳送的目的!
    • 所以,在這一層裡面,主要負責的工作就是『由上面來的資料需要打包,由下面來的封包則是拆封』咯!而且他也會依據不同的協定( ftp, http, smtp... )在同一位址上面來進行追蹤與分析呢!
    網路層
    • 在真實的世界裡面,我們在寄出郵件的時候,需要知道的是『我們的門牌及對方的門牌』對吧!?那麼在網路的世界裡,我們的資料封包記錄的來源與目的『位址』 ( 目前最流行的 IPv4 這種 IP 的規定 ),就是在這一層當中定義出來的!
    • 此外,不要忘記了,資料要能夠流通,還得需要藉由『路途』來決定,在網路的世界裡面,就是我們的 route table 囉!這東西很重要!沒有他的話,資料就送不出去囉~
    資料連接層
    • 我們的資料要透過實體層的網路卡及網路媒體(如網路線)進行傳輸的時候,需要將資料打包(打包成為 packet, 打包的步驟是在傳送層裡面完成的 ),那麼一個封包的大小與格式及所含的內容就在這一層當中規定!
    • 通常一個打包的資料封包是不可以太大的(所以才會有規定呀!)這是因為要避免某部主機一直佔著網路媒體不放的緣故!所以如果你的檔案很大時,那麼該檔案就會被分成很多的打包後的資料封包來傳送呦!
    • 再來,如果發生了同一個傳送時間點上面有兩個或以上的主機同時提出傳送的需求時,那麼該次傳送將會失敗( collision ),此時,該封包再等待下一次傳送的時間間隔也在這一層內規定!
    實體層
    • 前面說過了,真的在進行網路工作的其實是電子訊號及傳遞電子訊號的硬體設備。而包括各個網路媒體之定義啦、還有網路的連接型態啦!都是在這個層級當中規定的!例如我們的 ethernet 網路卡還有 RJ-45 網路線等等!
    • 當然啦,如果你有興趣想要發展網路媒體硬體的話,那麼你的硬體就需要符合這個層級的規定啦!不然做出來的硬體可就無法與其他的規格品溝通囉!
    請特別留意, OSI 僅定義出大略的模式而已,更詳細的定義則需要再參考各項層級當中的規定!!例如網路層在目前最流行的是 IPv4 的協定,但是未來的 IPv6 協定也可以適用呦!
    所以,每次進行網路工作的時候,你的資料就會由上(應用層)而下(實體層)的進行資料的打包、標籤與傳送,而到達目的地的時候,你的資料就會被由下(實體層)而上(應用層)的解開與運用啦!用郵局的郵件傳送來解說一下好了:你要寄信的時候是怎樣寄出去的呢?
    1. 將你所想要寄出的資料進行打包進入資料袋的工作:這裡面包含了你所想要做的工作的判斷,包括是否需要將你的文件資料進行加密呀?等等的(這些包含了應用層、表現層與對談層);
    2. 接著下來,你必須要在資料袋上面填寫你的地址與對方的地址,並且還要註明收信者呦(這部份就屬於傳送層的階段了);
    3. 然後你將這封信放入郵筒裡面去,等待郵差車來運載(這部份可以想像成網路層);
    4. 郵差來收了這封信之後,會先載運到地區的大型郵件集散地,並依據信封上面的地址進行包裹的分類,以進行下一步的傳遞工作;
    5. 然後分類之後的大型貨櫃或包裹,經過空運或海運或者是貨運進行傳輸(有點像在 Internet 上面呦!),送到對方的大型郵件集散地;
    6. 對方的大型郵件集散地將貨櫃打開之後,依據各包裹的地址進行分類,
    7. 由郵差將分類過後的信件運載到正確的地址去;
    8. 收信人收到該信件之後,打開包裹,得到資料之後,再進行進一步的回應!!
    因此,我們可以這樣看,如果您的網路要能夠運作的話,那麼就需要底下的幾件東西:
    1. 網路線:這可有的選擇的了!不同等級的網路線能夠進行的最大傳輸量與能支援的網路佈線類型並不一樣,所以要仔細的給他選擇一下呦!目前的主流是以 RJ-45 的 Cat5 等級網路線為主體!
    2. 網路卡:網路卡的學問是很大,不過我們這種小站,嗯!普通一點的 10/100 網卡即可啦!
    3. 核心支援的驅動程式:還記得在 核心編譯 裡面提到的吧!對了,除非你的作業系統能夠跟你的硬體溝通,否則永遠都是個『屁!』
    4. 合法的 IP :對啦!網路世界的『門牌』啦!必須要是『合法的』呦!那麼什麼是『私有的?』後面繼續會提到的啦!
    5. 正確的 route table :要讓各家『門牌』可以正確的顯示出來,就需要『路徑圖』啦!好讓我們的資料封包可以『按圖索驥』呀!呵呵!這個時候, route table 可是不可或缺的喔!
    好了,底下我們先以一個實際的網路佈線情況來加以說明上面的理論囉!然後在一個一個的拆開來進行說明啦!

    基礎網路佈線模式

    談完了一些基本的觀念之後,接著下來當然就是實作的部分囉!首先,要讓網路能通,自然就需要將所有的電腦以『網路的連線媒體』連接起來,這裡指的媒體就是『網路線、集線器或交換器( Hub 或 Switch )、網路卡』等等的硬體配備啦!當然啦,由於選擇的媒體不同,佈線情況也會有所差異!這裡 VBird 以目前最常見於一般小型企業或家庭 LAN 裡面的佈線『星形連線』來進行說明。這種架構基本上就是以一個 Hub 或者是 Switch 為中心,進而將所有的電腦連接起來,以提供各個電腦的網路功能!這種架構的最大優點在於除錯較容易!我們底下列出一個很簡單的家庭星形架構的連線: 
    基本元件:
    • 工作站與伺服器( workstation, server ):簡單的來說,上面的 Windows PC1, Windows PC2, Linux PC3 這個沒有對外開放網路服務的機器就可以稱為 工作站( workstation ) 啦!而上面的 Linux之Proxy,NAT伺服器由於對外提供網路服務,可以允許用戶端 ( Client ) 連接上來,就稱為 伺服器( Server ) 啦!而 host 指的是一部電腦啦!不論是上面的 workstation 或 server 的哪一部,都是 host 說!
    • 節點:那麼 node 是什麼呢?就是節點啦,在網路媒體上面的每一個 host (主機) 都可以看做一個 node 囉!例如上面的圖示當中, 集線器、 Linux 伺服器、數據機、ISP大型主機.... 都是一個『節點』,因為我們的資料封包都是會經過該裝置才一個一個的傳送出去!
    基本架構說明
    簡單的說,『網路就是一群通過一定形式連接起來的電腦』!
    • LAN:一個網路可以由兩台電腦組成,也可以擁有在同一大樓裡面的上千台電腦和使用者。我們通常指這樣的網路為區域網路 ( LAN、Local Area Network ),如同上面的圖示,我們可以簡單的認定在數據機以內( 即左邊 )的 PC1, PC2, PC3, Linux 主機等設備即為 我們的 LAN 的部分了。因為我們最常使用的還是LAN,( 即使我們從家中連上 Internet,其實也是先連上 ISP 的 LAN ),所以這裡我們主要討論的還是以LAN為主。
    • WAN:由 LAN 再延伸出去更大的範圍,比如整個城市甚至整個國家,這樣的網路我們稱為廣域網 (WAN、Wide Area Network ),所以,簡單的說,很多的這樣的架構的 LAN 湊在一起,就稱為廣域網路啦!
    • Internet:就如同上面提到的,Internet 是將所有 WAN 與 LAN 連結起來的一個介面而已!由於沒有專人維護,所以說,  Internet 是一個最沒有王法的地方了,你可以在 Internet 上面連線到任何地方去或進行任何事情!
    • Intranet:最早出現的名詞是 Internet,然後人們將 Internet 的概念和技巧引入到內部的私人網路,可以是獨立的一個 LAN 也可以是專屬的 WAN ,於是就稱為 Intranet 了。它們之間的最大分別是:開放性。Internet 是開放的,不屬於任何人,只要能連接得到您就屬於其中一員,也就能獲得上面開放的資源。相對而言,Intranet 則是專屬的、非開放的,它往往存在於於私有網路之上,只是其結構和服務方式和設計都參考 Internet 的模式而已。 所以,簡單的說,我們那個小小的 LAN 也可以視作是一個小型的 Intranet 呢!
    • Extranet:Extranet 算得上是針對 Intranet 而延伸出來的概念。既然 Intranet 是指內網路部而言,那麼 Extranet 則指外部的網路了。Extranet 通常是企業和 Internet 連接以向公共提供服務的網路。不過﹐這並非是單純根據物理或邏輯位置來定義,主要是以連接的形式和功能來區分。例如某個外部網路,如果單純的透過網路來連接我們的 Extranet 或 Intranet ,那它只是一個毫不相關的外部個體而已。但是,如果我們用 VPN 或其它信任形式將對方連接起來,那麼對方也可以屬於 Extranet 或 Internet 的部份。
      關於 Internet/Intranet/Extranet 的觀念,我們再引用 ZMAN 兄的話:『舉例來說,假設我的公司有台北台中高雄上海等分公司 ,將這些公司連在一起然後屬於我公司內部使用的網路,就叫 INTRANET !我的觀念是不一定非用INTERNET(VPN)連用X.25或FRAME RELAY或專線應該都算在內,重點在於屬於我公司內部使用的網路服務的對象是公司內部員工,如果我的上游供應商或下游協力廠商甚至是客戶需要進來我的INTRANET存取資料,連線的方式當然很多(撥接,專線,INTERNET) ,認證及安全性也很重要 ,這樣子的網路我們叫它EXTRANET ,重點在於服務特定外部對象進來INTRANET ,而INTERNET的服務對象就是無限定的,譬如說你無法預估誰會來看你的網站或寄MAIL給你
    連線方向:
    那麼現在來想一想,我們是怎樣由內部的 Intranet 連上 Internet 的呢?!如同上面的圖示一般,如果我們目前在 Linux PC3 這部工作站上面,那麼我們的資料怎樣經由網路傳送出去呢?基本上,需要有這些步驟才行:
    1. Linux 核心必須有支援網路卡
      由於 linux 系統本身就有相當強大的網路支援度,所以我們上面提到的 OSI 模式上面使用者功能的四層在這裡都不成問題!接著下來我們應該要探討的就是『硬體』部分了。還記得我們在 編譯核心 的時候有提到,真正在進行工作的是什麼嗎?!沒錯!就是『硬體』!而要讓硬體正確的工作時,就需要核心的支援啦!因此,在一個打包好的資料封包想要進行網路傳輸時,最重要的工作就是讓你的核心支援網路卡啦!
       
      如果你的網路卡預設並沒有被核心支援,那麼就必須要編譯網路卡的驅動程式,並且在 /etc/modules.conf 寫入驅動程式的模組,這樣才能在一開機的時候被驅動呢!好了!那麼我們的作業系統怎麼知道網路卡這個硬體呢?嘿嘿!這就需要所謂的 Media Access Control ( MAC ) 這個東西啦!基本上,每一塊網路卡都有獨一無二的自己的網路位址,那個東西跟我們常講的 IP ( 軟體位址 )不一樣呢!那稱為 Hareware Address (硬體位址),是由 六組16進位的數字組成的!例如我家裡的網路卡位址為:『00:50:FC:22:9C:57』,這個硬體位址是在網路卡出廠的時候就已經被銲死在網路卡上面了!你沒有辦法修改的!這個東西在 Switch 及 DHCP 的時候很有用呢!你可以想像一下,這個東西就有點像是門牌號碼啦!
    2. 網路卡必須具有合法的 IP ( 軟體位址, software address )
      再來,由於我們目前的網路基礎是由 IP ( Internet Protocol )進行溝通的( 由於這個 IP 是經由作業系統的軟體給的,所以又稱為 軟體位址( software address ) ,跟剛剛上面提到的硬體位址並不相同,請特別留意!),什麼是 IP 呢?就是由四組 8 bits 的數字組成的,例如 tw.yahoo.com 的 IP 位址為:202.1.237.21,這就是所謂的 IP 啦!那麼還有所謂的保留 IP (或稱為私有 IP ) ,這個是原先在規劃 IP 的規則的時候就先預留的 IP 囉!這些 IP 並不能直接跟外界之 Internet 進行溝通!最常使用的就是 192.168.0.1 ~ 192.168.0.255 這一個 C Class 的網段囉!好了!既然要溝通的話,那麼自然就有所謂的 network 網段內囉(我們常提到的『同一個網段』的概念)!那個 192.168.0 就是 network ,由於是 C class 的關係,( 注意,其 netmask 為 255.255.255.0 ),而起始段為 192.168.0.0 到最末段為 192.168.0.255 ,而這個最後一個末段的 IP 就稱為 broadcast !這四個東西: IP, network, broadcast, netmask 在規劃一個網路卡的時候是相當重要的參數!千萬不能設定錯誤呢!
    3. 資料封包打包送出( TCP )
      好了,也有了 合法 IP 位址之後,那麼我們的資料就已經可以定位了,這個時候,當你要將你的資料傳出去的時候,你的資料就需要經過打包,所以我們就會稱為是『資料封包』,那麼這個傳輸你的資料封包的協定我們稱為 Transmission Control Protocol ( TCP ) 囉!這個 TCP 的內容除了你的資料之外,最重要的就是紀錄了這個資料的來源 IP 與埠口 ( source, port ) 還有目的地的 IP 與 埠口 ( destination, port ),這樣我們的資料就可以去尋找 IP 給他丟出去囉!
    4. 經過節點、 Router 或 Gateway 主機
      好了,由於我們是經由 Hub/Switch 進行連接的,所以我們的資料一定會經過這個節點才會傳送出去!這個時候不禁要想一想, Hub 好還是 Switch 好?這兩者有什麼不同呢?其實最大的不同來自於『共享網路媒體』與『網路媒體對應』的架構上面!這點我們在後面會再提及。
       
      還有,當我們的 TCP 封包已經打包好了準備送出的時候,網路怎麼知道如何傳送這個資料封包呢?其實,就像我們去到陌生的國家需要有『地圖』才能夠『按圖索驥』一般!在網路的世界裡,必須要藉由 route table (路由表) 來取得 gateway 或 router 的位址,進而將資料傳送到 router 上面去啦,其他的工作就是 router 那邊的事情囉!而 router 接收了封包之後,就會再藉由 router 自己的 route table 來判斷下一個該去的 router 主機~~一直重複這個動作,最後就可以到達目的地啦!( 請注意,如果兩部互相傳輸的電腦是在同一個網域之內,由於同一個網域的主機均可以直接透過監聽與溝通的動作來達到資料傳輸的目的,所以主機可以直接與主機相互溝通,而不需要 router 囉!當然你也可以想成你的主機就是你的 router 啦! ^_^ )
    5. 到達目的地
      好了,藉由這麼多的節點的傳送,我們的資料封包由於 TCP 裡頭的目的地 IP 的規定,所以找到了正確的主機囉!這個時候這個主機就會將 TCP 封包解開,並且將資料讀取出來!嘿嘿!完成傳送囉!
    所以,基本上我們在傳送一個資料的時候,他的機制是挺複雜的,不過也可以想得很簡單!就是:
    1. 作業系統先依據軟體給的 IP 來將資料打包成為待傳送的封包,例如 TCP 封包,上面並記錄了來源與目的的 IP 與 port;
    2. 根據封包上面的目的地 IP 資料,並經由 本機上面的 route table 來取得下一個 router 的資訊( 若在同一網域內,則 router 可視為本機的網路卡 ),然後將資料送到 router 上面去;
    3. 重複 router 的行為,最後送到目的地端的 PC,而對方主機接收你的 TCP 封包!
    基本上就是這樣,底下我們分別來談一談,那麼上面這些基礎步驟所需要注意的地方為何,其中最重要的就是 IP 的概念!這點請特別留意呢!

    網路媒體的運作方式:

    開始來談一談網路的運作方式吧!底下我們以基本的 Bus (直線型匯流排) 連線模式來進行說明,如下面圖示所示,雖然一般家庭網路最常見的連線模式為星形模式,不過基本原理上面還是與 Bus 佈線模式相同的!而由於 Bus 模式較容易記憶與說明,所以我們底下選用比較好理解的 Bus 來進行說明吧!

    網路媒體
    先來談一下什麼是『網路媒體』,說穿了,最基礎的網路媒體就是『網路線』囉,因為我們都是透過網路線來進行電子訊號的交流的嘛 ( 再次請您留意,這裡是以網路線為例,當然網路媒體還有相當多的樣式的!),好了,請注意的是,當所有的電腦要進行資料傳遞的時候,就是需要使用到這個所謂的網路媒體,而由於所有的電腦都連接在這個網路媒體上面,您可以將這個 Bus 的網路線當成是一個『共享媒體』囉!並且,這個共享媒體的傳輸限制為『單一時間點上面,只能有一部機器使用這個共享媒體』。
    什麼是物理廣播(physical broadcast)
    好了,我們已經知道訊號是藉由網路媒體來進行傳遞的,而這個媒體在單一時間點上面僅能讓一個機器使用!(1)那麼各電腦怎麼知道該時間點上面有沒有其他的機器在使用呢?(2)還有,如果 PC1 與 PC2 要相互溝通的話,他們的訊號是怎樣傳輸的,也就是說, PC1 怎麼知道該訊號是要送到 PC2 呢?(3)此外,如果同一個時間裡面有兩部電腦以上同時使用這個媒體,會產生什麼情況?底下我們就來談一談囉:
    • 由於這個媒體 ( 就是網路線呦! ) 每個時間點上面僅能讓一部機器使用 ( 這個時間可能是幾千到幾萬分之一秒,很短的啦!),所以,為了確認當時在這個媒體上面沒有其他的機器在使用,因此 PC1 會先發送一個信號到這個媒體上面去,假設當時 PC2 ~ PC5 都沒有要使用這個媒體,那麼 PC1 在知道沒有人使用之後,就可以來順利的使用網路媒體傳送資料,這就是所謂最底層的『物理廣播』了;
    • 再來,如果 PC1 與 PC 3 同時都想要使用網路媒體呢?呵呵!這個時候,就要看是誰先傳送出廣播信息的,當然是先搶先贏,例如當 PC1 比 PC3 早送出物理廣播信息,那麼 PC3 就會先停頓,等 PC1 該次工作完畢之後,才會發送廣播信息了!這個地方就要再次的強調了!由於先搶先贏,那麼如果 PC1 的封包太大的時候,那其他的 PC 豈不是永遠無法使用網路媒體來傳輸資料囉?因此,才會在 OSI 的資料連接層裡面定義每個封包的大小及格式呀,如此一來,媒體的使用權才會比較平均一些啦!
    • 上面的情況都還可以接受,但是如果萬一真的不幸發生了 PC1 與 PC3 同時進行物理廣播信息呢?那也不用太擔心,因為既然這次發生了同時廣播的狀態,那麼這兩部機器均將不會進行資料傳送,會等待一段時間之後才再次廣播!而在等待的時間上面,是『在一段時間裡面隨機取一個時間點』來再次廣播,由於是隨機取樣的,因此應該不太容易再造成同時進行物理廣播的現象。萬一真的不幸又同時物理廣播,那麼又會等待下一次....依序下去,好像超過 16 次以後,如果還真的很不幸(因為機率真的太低了)再次同時進行物理廣播,那麼就抱歉啦!您的網路媒體將癱瘓掉!不過也別擔心,重新 reset 就好啦! ^_^""
    • OK!那麼有沒有同時發送封包的狀況?當然有啦!現在你假設 PC1 到 PC5 的距離是很遠(假設 100m 好了),那麼當 PC1 與 PC5 發送出物理廣播,提醒大家說要傳送資訊的時候,由於 PC1 與 PC5 的距離太遠了,因此回應的時間比較長,那麼這個時候可能就會造成誤判,認為當時媒體上面沒有任何的機器在傳送資料,造成 PC1 與 PC5 同時傳送出資料在媒體上面,這個時候就會發生所謂的『封包碰撞, collision』的情況了!因為網路媒體上面單一時間內僅能允許一個機器使用的嘛!封包碰撞可能會造成資料的損毀現象呢!比較麻煩啦!而為了避免封包碰撞的問題,所以目前網路上面都會使用一種稱為 CSMS/CD ( Carire Sense Multiple-Access / Collision Detect ) 的技術來避免因封包碰撞造成資料損毀的問題!不過,由於選擇的媒體不同,所以還是很有可能會造成碰撞的啦!
    • 好了,那麼假設 PC1 也經過物理廣播了,也順利的將封包丟出來到媒體上面傳送了,那麼他怎麼知道資料要丟到 PC2 上面去呢?這就需要藉由 MAC 與 ARP 等等的咚咚來幫助達成了!ARP 我們等一下再提,而 MAC 剛剛已經提過了,就是網路卡的硬體位址,由於網路卡出廠的時候就有所謂的硬體位址,因此,只要硬體位址與軟體位址能夠相互配合,讓封包可以知道要傳送到哪一個硬體位址上面去,喝!那麼封包就可以成功的送到 PC2 上頭去囉!
    軟體位址到硬體位址
    好了,知道了網路媒體的定義,也知道網路媒體的使用方式了,那麼再來自然就要提到網路世界裡面常常提到的 IP 也就是軟體位址這個玩意兒了!軟體位址是我們使用軟體來給予的一個定位的咚咚,而這個所謂的 IP 是在 OSI 的第三層,也就是網路層裡面的定義。而我們也知道在網路媒體上面資料的傳遞主要還會查看所謂的 MAC 這個硬體位址,好啦!那麼軟體位址跟硬體位址怎麼對應起來呀?!既然實際上是使用 MAC 來接收資料,但是我們又是以 IP 來做為門牌號碼,呵呵,所以就需要一個對應的協定啦,好溝通這兩個玩意兒!那就是 ARP ( Address Resolution Protocol ) 囉!幾乎作業系統裡面都會有個 ARP table ,用以記錄 IP 與 MAC 的對應情況!
    • 在首次進行資料傳輸的時候,由於 ARP table 當中沒有相關的資料,這個時候您的主機就會對『同一網域的全部電腦進行邏輯廣播( logical broadcast )』,(關於什麼是『同一網域』的定義,等一下我們在 IP 基礎內會再次提及) 請注意呦!
    •  
      • 剛剛的『物理廣播主要是針對在同一個物理網段內的共享網路媒體之動作』;
      • 而『邏輯廣播主要是針對網路層的軟體位址而言來進行的動作!』
      那麼如果查詢到了主機所需要的軟體位址之後,主機的 ARP 表就會自動的學習起來,將軟體位址( IP ) 與硬體位址( MAC )之對應給他寫入 ARP 當中!
    • 而在後續的資料傳輸的時候,主機就會先去尋找 ARP 表中的資料:
    •  
      • 如果 ARP 有紀錄的話,那麼資料就會直接的傳送到該目的地去,而不會進行『邏輯廣播』;
      • 如果 ARP 沒有紀錄的話,那麼主機就又會對全部的同一網域內的電腦進行『邏輯廣播』了!
    • 這裡就有一點很奇怪啦,既然說『物理廣播』是針對 MAC ( 第一、二層 )而『邏輯廣播』是針對軟體位址( 第三層 ),偏偏真正在進行網路工作的是網路媒體還有 MAC 這個咚咚,怪了!那麼當進行邏輯廣播的時候,底下的層級都不需要動嗎?好像跟 OSI 協定裡面不太一樣呦!呵呵!其實是這樣的!當進行邏輯廣播時,主機發送出去的信息中的會含有目的地的 MAC 是 FF:FF:FF:FF:FF:FF ,也就是所有的網路卡都會接受該封包啦!而當其他主機接受該封包之後,會進入第三層去分析軟體位址的要求,如果該要求的軟體位址不是自己的,就會將該封包丟棄,如果是自己的,那麼就會回應該封包,以將自己的 MAC 傳送給原來發送信息的主機啦!
    • 要知道目前的您的主機的 ARP 紀錄,可以使用 arp -a 來查看呦!
    TCP/IP 流程
    基本上,在 OSI 最底下的三層網路功能的傳輸行為,大概都已經定義好了,我們的網路媒體與 MAC 及軟體位址之間都可以正確的去工作!因此倒是不用太去擔心!呵呵!所以我們只要知道其原理就好了。接著下來的 TCP 封包最主要的也只要知道 IP, port, messages( ACK, SYN... ) 這樣即可!這樣一來, TCP 可以整合來自上層的各個協定,而 IP 用來決定路由與傳送的途徑,呵呵!就可以知道能不能到達目的地啦!

    網路媒體的選擇:

    網路線的等級
    嗯!現在我們知道網路媒體是很重要的!那麼如何來選擇一個好的網路媒體呢?先來看一看最常用的到 RJ-45 網路線好了!目前 RJ-45 網路的線等級,對於一般家庭或小型企業使用者而言,可以到達 CAT5 這個等級就很好了!嗯!?網路線也有等級之分?是呀!剛剛不是說過了嗎?那個網路媒體是很重要的,而由於網路媒體中跑的訊號其實就是電子啦!由於電子訊號在行進的時候會產生一些電磁效應( 這裡指的是 cross talk ),這些 cross talk 就會影響整個傳輸的效能!為了避免 cross talk 的干擾,人們想出了很多的方法來解決他!有所謂的『雙絞線, Twisted Pair』、或提供屏閉『Shielded, STP』等功能,來讓網路線的 cross talk 干擾降低,並提升整體的網路傳輸速度負載量!而依據給予的不同的屏閉等級來將網路線分級!目前最常見的應該就是 CAT5 這一級啦!最大的傳輸量可以到達 100 Mbps 呢!所以,請注意『在選擇網路線的時候,至少您的網路線等級要達到 CAT5 才行!』,否則即使您的網路卡可以到達的傳輸量為 100 Mbps ,但是網路線只有 10 Mbps 時,呵呵!那麼最大的傳輸量將會僅成為 10 Mbps 呦!
    平行線與跳線
    談完了網路線的等級之後,接著下來我們來談一談所謂的『平行線』與『跳線』吧!剛剛提到了,在網路媒體當中跑得是電子訊號,由於電子訊號需要是一個迴路才能通(例如正極接負極),所以說這些訊號自然就需要成對囉!好了,那麼由於設備的不同,因此網路線的接腳也會跟著不同的!舉個例子來說,在 Hub 與 網路卡 之間的網路線(不談 UpLink 孔時),使用的是常見的平行線,但是在網路卡與網路卡直接相連時,就需要使用不同接腳的『跳線』啦!由於具有兩種接頭,一般而言,我們將他分成 568A 及 568B 兩種接頭,這兩種接頭的 8 條纜線排列順序為:
     
    接頭名稱   1   2    3    4    5    6    7    8
    568A 白綠 綠  白橙  藍 白藍  橙  白棕  棕
    568B 白橙 橙  白綠  藍 白藍  綠  白棕  棕

    如果同一種接頭( 不論是 568A 或 568B )接在一條網路線上面,就稱為平行線,而兩種接頭同時接在同一條網路線上面,那就稱為『跳線』啦!

    Hub 與 Switch
    在前面我們提到了網路媒體的型態,使用的是 Bus 的型態,那麼如果是星形模式的話,就需要 Hub 或 Switch (中文稱的集線器與交換器)這種網路媒體了!Hub 還比較好理解,基本上,他僅是將所有的網路線給他連接在一起,並沒有考慮到其他的因素!因此,每部電腦只要連上 Hub 之後,感覺上就好像連上 Bus 一樣啦!那麼『瞎米係』 Switch 呀!?為什麼 Switch 通常比 Hub 要貴上非常的多呢?他們的功能有哪裡不同?我們先不提較高階的不同點,最基礎的不同在於 Switch 多了一個可以記錄 MAC 與 port 的 table 啦!那是什麼呢?這樣說好了,當您的網域之中有一部電腦在進行物理廣播的時候(請注意,物理廣播主要是以 MAC 為傳遞的對象):
    • 如果使用的連結器是 Hub 的時候,那麼所有連接到這部 Hub 上面的主機都會接到該廣播的封包;
    • 而如果使用的是 Switch 時,由於上面的 table 已經記錄了 MAC 對應 Port 的資料,所以該封包將會『直接』經由該 port 來送出去給目的地主機!
    由於這樣的關係,因此在進行物理廣播的時候,就已經去除了可能產生封包碰撞的狀態了!因此上, Switch 與 Hub 所能承受的流量或許相同,但是 Switch 卻可以達到比較好的傳輸功能,用在大型的網域當中,嘿嘿!當然是 Switch 比較棒啦!這也是為什麼 Switch 會比較貴的原因呀!更簡單的來說, Hub 仍然屬於『共享媒體』的一種,然而 Switch 幾乎可以看做是『非共享媒體』了!更詳細的 Hub 與 Switch 功能的討論可以在 這裡 找到。不過如果是只有小貓兩三隻的我們這種家庭式的內部網路呢?呵呵!簡易型的 Hub 就很夠了啦!不需要買到這個高檔的 Switch 說 ( 純粹個人觀點啦!)。
    傳輸單位
    談個輕鬆一點的!那麼 10/100 Mbps ( Mega- bits per second )是什麼東西呢?怎麼大家都說我的網路卡是 100 Mbps ,但是我只能以最高約 12 MBytes 的速度在 Intranet 當中工作!?嘿嘿!別緊張,那麼 100 Mbps 是 Mbits !還記得網路的資料量計算嗎?不曉得也沒有關係,可以直接告訴你:
      1byte = 8bits
    瞭解了嗎?沒錯,由於網路的速度在計算的時候主要是依照訊號來設計的,而電子訊號只有 0 跟 1 呀!所以自然就選用最簡單的 bit 來計算了!因此,目前在廣告這些網路的速度的時候,都是以 bits 來計算的,但是我們在硬碟的計算方面則是以 bytes 來計算的,呵呵~千萬記得,不要被迷惑了呢!因此,那個標榜 512/64 Kbps的網路速度,呵呵,最大的實際 byts 為: 64/8 KBytes 囉!這是理論最大速度啦,所以正常的速度約在 45~50 KBytes 之間囉!瞭解了嗎?!

    網路卡與驅動程式

    結束了網路媒體的選擇之後,接著下來自然就是網路卡的選擇囉!網路卡需要注意什麼事項呢?
    • 驅動程式:
      還記得我們在 編譯核心 的時候有提到,真正在進行工作的是什麼嗎?!沒錯!就是『硬體』!而要讓硬體正確的工作時,就需要核心的支援啦!因此,在一個電腦想要連上網路時,最重要的就是你的網路卡 ( Network Interface Card, NIC ) 是否被正確的啟動了呢?!好了,那麼一個網路卡要被正確的啟動時,需要幹嘛?沒錯!就是需要載入適當的驅動程式囉!目前 Linux 預設的核心當中已經編譯好了相當多的網路卡模組了,你可以到 /lib/modules/`uname -r`/kernel/drivers/net 底下去看一看即可知道有沒有你的網路卡的模組啦!好啦!那麼如果你的網路卡並沒有被正確的啟動呢?!怎麼辦!?沒關係,還可以使用模組掛載呀!可以寫入 /etc/modules.conf 裡頭!這樣一來就可以讓你的網路卡正確的被啟動囉!
    • Media Access Control, MAC:
      前面就提過了,在網路卡出廠的時候,其實就已經銲上了一個獨一無二的 address 了!這個即是所謂的 Hardware Address 囉!而在我們的系統上面, Linux 就由這個 Hardware Address 與下一單元我們要強力介紹的 IP 進行資料的傳遞與轉換,讓整個網路卡硬體可以正確無誤的工作啦!這個硬體位址就是所謂的 Media Access Control ( MAC ) 這個東西啦!他是由 六組16進位的數字組成的!例如我家裡的網路卡位址為:『00:50:FC:22:9C:57』,這就是我的網路卡 Address 囉!千萬不要小看這個東西,他在 Switch 及 DHCP 的時候很有用呢!如果稍具有一點想像力,你可以想像一下,這個東西就有點像是門牌號碼啦!無論如何,在網路卡這一個地方,你需要特別留意這個 MAC 的視察方式,與驅動程式的載入方式!!
    • 網路卡選購要點:
      基本上,網路卡的選購只要『不要太麻煩的晶片組』就可以啦!盡量選擇目前新的 PCI 界面的網路卡,而且強烈的建議使用螃蟹卡即可,但是仍然是有例外的:
    •  
      1. 預計大型網站的架設:如果你是想要使用你的 Linux 來幫你架設大型主機的話,例如每天即時上線人數都可達到上百人的大型網站,這個時候就得要好一點的卡啦!因為好的網路卡在資源的分配以及其他的資源配比方面會比較完善,不容易造成網路當機或者是死亡!所以買一塊好一點的 10/100 Mbps 的 3Com or Intel 之類的網路卡,是千萬省不得的!
    •  
      1. 一般家用或者是小流量的網站:如果你的野心沒有這麼大,而是希望可以好好的學習 Linux 而已,並且使用的是 512 Kbps 的 ADSL 撥接系統,呵呵!那麼太好的網路卡對你一點幫助也沒有啦!這個時候便宜的 200~300 塊的網路卡( 即是所謂的螃蟹卡 )就可以用得很開心啦!我目前也都是使用螃蟹卡在我的宿網上面呢!

    IP 觀念: IP, network, netmask, broadcast, gateway, ARP協定,

    接著下來要跟大家介紹的是 IP 這個東西,這的東西真是讓人要愛又怕呀!因為沒有了他,所有的網路都是沒有用的咚咚!嗯!通過了網路卡的安裝與驅動程式的載入之後,你的系統已經可以取得 MAC 並且也可以啟動 NIC ( 網路卡 ) 了,好了,那麼接著下來自然就是要讓你的電腦的門牌號碼被 Internet 上面其他的門牌號碼認識囉!這個時候就必須要有所謂的 Internet Protocol, IP 這個咚咚了!這個 IP 是所有網路基礎裡面最基礎的東西,如果沒有了他,那麼網路將不再是網路了!
    • IP 的組成
      眾所皆知的,IP 是由四組 8 bits 的數字所組成的,最小是 0.0.0.0 ,最大是 255.255.255.255 ,可以這樣來看:
       
      IP 的表示式:
      00000000.00000000.00000000.00000000 ==>0.0.0.0
      11111111.11111111.11111111.11111111 ==>255.255.255.255

      就是這樣的一個模樣!由於原本是二進位的方式來計算的,為了適應人類的思考方式,所以經過十進位的表示之後,自然就是由 0 ~ 255 囉!好啦!從剛剛前面我們提到的『廣播』的觀念來看,假設您的環境是『網路媒體共享』的環境且整個網域之中都以 IP 直接互相連接的話,那麼在第一次執行『軟體廣播』、或是因為主機找不到 ARP 表對應的 MAC 而執行的『軟體廣播』、抑或者是在『物理廣播』的傳送與監聽接段,哈哈!『ㄟ西郎!』因為每發出一個封包可能需要 255x255x255x255 部電腦同時回應!那麼很可能就會造成嚴重的封包碰撞或者是網路停頓的狀態!因此,設定 IP 的朋友們很聰明的將整個 IP 段分成 Network + Host ( 網域 + 主機 ),在同一個 Network 當中,每一個 Host 都必須是獨一無二的!何解?我們來以一個 C Class 的例子來談一談好了!假設是 192.168.0.0 ~ 192.168.0.255 這個例子來談:

      C Class 的說明:
      192.168.0.00000000
      192.168.0.11111111
      |network-|--host-|

      前面的三組數字稱為 network ,而最後面的一組數字就被稱為是 host 囉!他有什麼特異功能呢?還記得軟體廣播與 ARP 表的說明嗎?對啦!當你的主機發出要求訊息到你的網路媒體上面時,由於是網路層的要求了,因此在訊息當中顯示的目標 MAC 為 FF:FF:FF:FF:FF:FF,所以其他主機會先接收該封包,並且檢驗裡面的 IP 要求,如果不是在同一個網段內的,就會將封包給他丟棄啦!而如果是同一網段內的話,就會給予回應!也就是說『如果在同一個網段之內,所有的 IP 將不需要透過 router 而可以互相直接溝通!』在上面的例子當中,當我們以 192.168.0.0 ~ 192.168.0.255 的 IP 的電腦連在一起時,他們將可以直接進行資料傳送!所以呢,呵呵!當然就是很方便囉!( 請注意,在這個系統當中, network 不可變,而 host 則是不可相同!否則相同的那兩個 IP 將無法無法連線 ) !那麼目前我們將整個 IP 簡單的方類成為三個網段,分別設定為所謂的 A, B, C class :

      Network 第一個數字的定義:
      A Class : 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==>開頭是 0 
           |network|---------host------------|
      B Class : 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==>開頭是 10
           |----network-----|------host------|
      C Class : 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ==>開頭是 110
           |---------network---------|-host--|

      發現了嗎?對啦! A Class 開頭是0,所以起始的數字就是 0~126, B Class 是 10 開頭,所以就是由 128-191,同理得:

      Network 第一個數字的範圍:
      A Class :   1 ~ 126
      B Class : 128 ~ 191
      C Class : 192 ~ 223

      因此,我們剛剛那個 192.168.0.0 ~ 192.168.0.255 就是 C Class 囉!

    • Netmask  :
      在所有的 IP 訊息當中,最不容易搞懂得就是 netmask 啦!為了不造成大家學習上面的困擾,這裡我們僅提出簡單的『理解想法』來提供 Netmask 的用途,至於更詳細的理論,請務必前往 Study Area 取經呦!
      就如同剛剛我們提到的,既然 A Class 前面一個數字是固定死的,後面三個數字是可變動的,那麼也就可以想成是,前面一個數字已經被用光了 ( 全部為 1 ) ,而後面的數字還保留者 ( 全部為 0 ),所以就有點像這樣:
       
      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

      好了,所以簡單的來說,當使用 A Class 時,我們怎麼知道他是 A Class 呢?當然要配合 netmask 的說明囉!那麼假設 10.0.0.0 這個網段好了,他就可以想成是:10.0.0.0/255.0.0.0這樣的表示方式,也就是 IP/Netmask 的表示方式!好了,那麼剛剛提到的 C Class 的 192.168.0.0 呢?我們要設定他是 C Class的話,呵呵!那麼自然就是 192.168.0.0/255.255.255.0這樣的表示方式囉!好啦!那麼由於 A Class 是由八個 1 所組成的,而 C Class 的前面 24 的數字也都是 1 ,為了省麻煩,我們還有另一種表示的方法: 192.168.0.0/24 !嘿嘿!很好記吧!反正前面 24 個數字是固定的嘛!就這樣,所以 A Class 就是 10.0.0.0/8 囉!很容易記憶吧!

    • Network 與 Broadcast :
      好了,剛剛我們也提到要分辨是否為同一個網段 ( network ) 還需要 netmask 的幫忙,那麼記錄了 netmask 有什麼好處呢?!還記得剛剛我們提過了吧,在『同一個網段當中,各主機將可以直接進行資料溝通』對吧!假設在一個具有『共享媒體』的環境中,當我的電腦有資料要傳送出來的時候,我就會在『同一個網段』的電腦傳送一個訊息,說『喂!我有資料要送出來囉!你們停下來聽一聽,等我送出去之後你們再繼續你們的工作!』呵呵!沒錯,這就是所謂的『硬體廣播』方式傳遞啦!而如果您常常需要使用到『軟體廣播』時,那麼這個 netmask 假如是 255.255.255.0 這個 C Class ,而我們依舊是使用 192.168.0.0 這個東西當作例子的話,那麼不難想像的到,我的封包要傳送出去,就得向 255 個電腦查詢並等待回應,光是這個查詢的時間可能就要造成這兩百多部電腦停頓下來聽你的封包的結果,唉~速度太慢了吧!!尤其是如果是 B Class 的環境呢?嘿嘿!就有 255*255 部電腦要停頓下來監聽你的需求.... 哇!這樣怎麼可能造成高效率的網路環境呢?!所以囉『網路佈線模式(媒體共享與否)』與『netmask 的設定』就成了重要的課題了!
    •  
        network  :同一個網段裡面,HOSTID 都為零的位址;
        broadcast :同一個網段裡面,HOSTID 都為 1 的位址!
    • 這裡請特別留意: 基本上,如果是便於記憶的話,您可以想像一下, network 就是同一網段的第一個 IP 位址(因為 hostid 都為 0 ), Broadcast 則是最後一個 IP 位址(因為 hostid 都為 1 )。
    •  
        11111111.11111111.11111000
    • 那麼為了解決一下『軟體廣播』的範圍,( 由於如果軟體廣播的回應數量變少了,所以網路效能會變的比較好一些!) 我們可以再進行 Subnet 的切割呀!好了,假設我要將剛剛我的 192.168.0.0 在切成兩個子網域呢?可行嗎?當然可行囉!剛剛不是說過嗎?我們的 netmask 可以作為切割網域時候的確認用途,嗯!這個時候如果將已將佔用了 24 個 bits 的 network 在加一個 bit 的話,成為 25 bits ,那麼會變成什麼呢?
       
      C Class 在細分為兩個子網域的示意法:
      IP   :   192.   168.    0. 0 ( 128 ) 
      netmask : 11111111.11111111.11111111.10000000 ==> 255.255.255.128
      表示式 : |-------network------------|-host-|

      這樣一來,由於多花費了一個 bit 給 network 了,所以 network 分別是 192.168.0.0 及 192.168.0.128 這兩個

      C Class 在細分為兩個子網域的示意法:
      192.168.0.0   這個子網域的最末一位數範圍:00000000 ~ 01111111
      192.168.0.128 這個子網域的最末一位數範圍:10000000 ~ 11111111

      192.168.0.0 這個子網域的參數:
      network: 192.168.0.0
      broadcast:192.168.0.127
      netmask: 255.255.255.128 (將 100000000 這個二進位轉成 十進位 的結果)
      示意法:  192.168.0.0/255.255.255.128 ==> 192.168.0.0/25

      呵呵!那麼一來,當您的主機要進行『軟體廣播』的時候,接受該訊息的電腦數將可減少一倍!哈哈!這樣子一來區域內的網路流量就更棒囉!OK!這個觀念給他用在實際的社會上,我們的 ISP 不是常常在說『固定制 IP 的給八個固定的 IP 』嗎?呵呵!那個就是在細分成最後面的三個 host 啦!也就是 netmask 是 29 囉

      因此 host 最大就是 111 最小就是 000 ,轉成十進位就是 8 個啦!( 0 ~ 7 )這樣說不知道您了不了呢?
    • Gateway:
      再來又要頭痛了!那麼什麼是 gateway 呀!?說的簡單一點:在同一個 network 底下,各 IP 可以直接進行溝通,但是在不同的 network 底下,則需要藉由 gateway 來進行資料的傳遞!因此,當您的主機發現該封包的 IP 不在同一個網域內時,就會自動的將封包傳送到 gateway 上面去啦!而由於你的主機與 gateway 是可以直接進行溝通的,所以 gateway 與 你的主機『一定需要在同一個 network 當中』,這個就沒有問題了吧!!
    • 預留 IP ==> 保留 IP 與內部迴圈網路:
      還有一點也是眾所皆知的,就是目前的網路的 IP 網段越來越少了!那怎麼辦?!呵呵!別擔心,當初規劃的時候為了預防這個問題,已經有規劃出幾個網段來作為『內部網路的預留 IP 』之用,那麼這些 IP 網段有哪些呢?依舊分成三個 Class ,分別是:
    •  
      • 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 來『直接上網』囉!所以相當適合一些尚未具有實體 IP 的企業內部用來規劃其網路之設定之用!否則當你隨便指定一些可能是實體 IP 的位置來設計你的企業內部的網路設定時,萬一哪一天真的連上 Internet 了,那麼啟不是可能會造成跟 Internet 上面的 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 呀! ^_^... )
    好啦!那麼說來的話,一組成功的網路設定需要哪些資料呢?呵呵!就是:
    1. IP;
    2. network;
    3. netmask;
    4. broadcast;
    5. gateway
    沒錯!就是這些資料!如果是 ADSL 撥接的話,這些資料都是由 ISP 直接給你的,那你大可放心的直接使用,但是如果是固定制(如學術網路)的話,那麼就得使用上面的設定囉!缺一不可呢!以 192.168.0.0 這個 C Class 為例的話,那麼就是:
    1. 192.168.0.1~254;
    2. 192.168.0.0;
    3. 255.255.255.0;
    4. 192.168.0.255;
    5. 自訂(依你的區網設定而異)

    TCP 封包概念: 防火牆, TCP_Wrappers,

    • TCP 封包:
      說完了 IP 之後,自然就不能不提 TCP/IP 這個架構底下的 TCP 封包囉!這個 TCP 是 Transmission Control Protocol 的意思,字面上的意思就是傳輸控制協定啦!嗯!還真是不錯的字眼!這個 TCP 就是實際在『傳送資料封包』的協定啦!剛剛我們有提到了 IP 這個東西嘛!那麼我們怎麼將資料寄到其他的地方去呢?很簡單,就是系統先將我們的資料打包,然後在這個包裹的上面寫上了『來源 IP 與 埠口』及『目的地 IP 與 埠口』,有了這個 IP 門牌,及 埠口 樓層,我們就可以將資料封包正確無誤的寄到目的地啦!所以囉,要有 TCP 自然就必須要有 IP (因為 TCP 上面需要記錄 IP 來源與目的地啊!)而要有 IP 就必須要有網路卡(必須要有這個東西才行嘛!)然後要網路卡正確的工作又需要正確的驅動網路卡!這樣一層一層的下來,嘿嘿!就不難解決我們的網路問題啦!(當然囉, TCP 並不是這麼簡單的東西,不過我們這裡又不是再開班授徒!所以就講得很簡單啦!有興趣的趕緊買本書來看先!
    • 埠口 ( port ):
      咦!剛剛提到了 TCP 裡面怎麼有個陌生的名詞?『埠口』?呵呵!其實說穿了,也沒有什麼了不起的,你可以想像成 IP 就是某家銀行,而埠口就是銀行裡面的各個窗口啦!所以當 TCP 的封包進入到目的地 IP 主機之後,還要視當初送出這個 TCP 封包的時候,我們需要這個 TCP 封包送到那個埠口去!這是因為每個埠口的功能都不一樣!最常見到的埠口有這些:
    •  
        21-20:FTP
        22   :SSH
        23   :Telnet
        25   :SMTP ( e-mail )
        80   :WWW
        110  :POP3 ( e-mail )
      所以啦,當我們將資料丟到目的地主機上面的時候,我們的資料並不是亂丟的啦!而是要丟給實際在負責該封包解析的窗口(埠口)才是呢!那麼這些服務對應的埠口在哪裡可以查到呢?嘿嘿!你的主機裡頭就有檔案可以負責翻譯啦!那就是鼎鼎大名的: /etc/services 這個檔案啦!馬上給他使用 vi 進入看一下(像不像在上課! ^_^""),當我們啟動一個服務的時候,有可能該服務是直接以 port 來啟動的,也有可能是經由 /etc/services 對應的 port 號與服務名稱來比對的!這個可能依照寫作之作者的不同而異!無論如何,我們要查詢一個服務的基本埠口時,就可以藉由查詢此一檔案來簡單的得知囉!
    • 防火牆概念:
      好啦!那麼提到了 TCP 就不能不稍微聊一聊甚麼是『 Firewall 』呢?簡單的來說,最簡易的 firewall 就是藉由『析 TCP 封包,並經由一些既定規則,來將不想讓某些 IP 或者是某些埠口的封包踢掉!』舉個例子來說,我們都知道 Telnet 似乎不怎麼安全,而由上面的埠口看到, telnet 是 port (埠口) 23,那麼只要有任何的 TCP 封包帶有 port 23 的要求時,你就將他擋到門外!嘿嘿!這就可以稱作是防火牆啦!這個部分我們會在後頭的 iptables 在詳細的說明一下!
    • TCP_Wrappers:
      除了 TCP 分析的 iptables 軟體之外,我們還可以藉由相當簡單的 TCP_Wrappers 來分析 TCP封包呢!這個功能就更簡單啦!單純的使用 /etc/hosts.allow 及 /etc/hosts.deny 這兩個檔案的設定值來解析 TCP 封包的規則,並將其設定抵擋原則,嘿嘿!馬上就具有最簡易的防火牆機制囉!這部份我們也會在後續繼續提及!

    Gateway 與 Router

    Gateway 與 Router 也是節點當中相當重要的一環,他的主要工作是:
    • 將兩個不同的網域 ( network ) 進行轉譯的功能;
    • 製作路由 ( route ) 的功能。
    剛剛在上頭我們知道在同一個 network 當中,資料可以在兩個 IP 之間直接溝通,那麼如果不在同一個 network 呢?舉個例子來說,如果在上面的圖示當中,那個 PC1 的 IP 是 192.168.0.1 而 PC2 的 IP 是 192.168.1.1 的話,而且兩者之間並沒有使用一些通訊協定,單純只以 TCP/IP 來溝通時,由於位在不同的網段,所以正常狀態下『兩者之間是無法直接連線的』,這個時候就必須要透過轉譯器 ( Router ) 的協助啦!這個轉譯器的功能其實不只如此,他還可以轉譯不同的作業系統的通訊協定等等的,不過這裡我們僅簡單的討論一下他的功能之一而已,Router 就是負責溝通兩個或者是多個不同的網段的封包連接啦!所以,如果你的網路切的很細時,由於主機與 router 需要在同一個網域裡面,呵呵,這個時候就得需要很多的 router 來進行不同 network 之間的連接了,否則不同的 network 怎麼連接~? Linux 目前也可以用來作為 Router 呦!這個在後續我們提到 Router 的時候再來說明!
    好了,知道不同的 network 之外,來討論一下,什麼是『路由』呢?路由就是『讓你的資料封包可以經由 route table 找到下一個要去的 IP 位址』。簡單的以我們系上的網路架構來進行說明,我的工作機假設 IP 是 140.116.44.125 好了,那麼我的封包如果是要傳送給 140.116.44.202 時,由於我們系上是一個 C Class 的網域,所以 125 <--> 202 可以直接傳遞!但如果我的資料封包是要送到 tw.yahoo.com ( 202.1.237.21 ) 去呢?這個時候我的 125 就會先判斷我的 路由表 ( route table ) 看看預設的網關 ( gateway ) 是哪一部電腦,然後他會將 資料封包傳送到該 gateway 主機上去,而 gateway 主機在經由判斷他自己的路由表,來判斷這個資料封包下一個節點要傳送到哪裡去!?這一傳再傳最後才能到達 tw.yahoo.com 這部機器上!
    因此, route table 是相當重要的,你的 gateway 就相當的重要囉!因為你的所有的非 network 的封包都是經由 gateway 送出去的,萬一你設定 gateway 錯誤時,嘿嘿!那麼自然就無法將你的資料封包 正確的傳導出去囉!這是目前在設定 網路參數 當中最容易被搞錯的地方囉!

    其他討論:何為實體 IP, 保留 IP, 浮動式 IP, 與動態 IP

    • 實體 IP:就如同前面的 IP 觀念裡頭提到的,在網路的世界裡,為了要辨識每一部電腦的位置,因此有了電腦 IP 位址的定義。一個 IP 就好似一個門牌!例如,你要去微軟的網站的話,就要去『 207.46.197.101 』這個 IP 位置!這些可以直接在網際網路上溝通的 IP 就被稱為『實體 IP 』了。
    • 保留 IP:不過,眾所皆知的,IP 位址僅為 xxx.xxx.xxx.xxx 的資料型態,其中, xxx 為 1-255 間的整數,由於近來電腦的成長速度太快,實體的 IP 已經有點不足了,好在早在規劃 IP 時就已經預留了三個網段的 IP 做為內部網域的保留 IP 之用。這三個預留的 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
      不過,由於是內部的保留 IP ,所以當您使用這些地址的時候,當然是有所限制的,限制如下:
    •  
      • 私有位址的路由資訊不能對外散播
      • 使用私有位址作為來源或目的地址的封包,不能透過Internet來轉送
      • 關於私有位址的參考紀錄(如DNS),只能限于內部網路使用
      由以上的限制我們可以知道,保留 IP 僅能使用於內部網路(或者說是區域網路內),而無法直接與外部的 Internet 進行資料的流通。如果需要連上 Internet 時,就必須要使用一部具有 NAT 功能的主機(或者是 IP 分享器)來作為封包溝通的轉換站了。不過,這也給我們架設IP網路造成很大的方便,比如:即使您目前的公司還沒有連上Internet﹐但不保證將來不會啊。如果使用公共IP的話,如果沒經過註冊,等到以後真正要連上網路的時候,就很可能和別人衝突了。也正如前面所分析的,到時候再重新規劃IP的話,將是件非常頭痛的問題。這時候,我們可以先利用私有位址(保留 IP )來架設網路,等到真要連上intetnet的時候,我們可以使用IP轉換協定,如NAT (Network Addresss Translation)等技術,配合新註冊的IP就可以了(不過這可需要大學問喔)。
    • 固定 IP 、動態 IP 與浮動式 IP:基本上,這兩個東西是由於近來網路公司大量的成長下的產物,例如,你如果向中華電信申請一個商業型態的 ADSL 專線,那他會給你一個固定的實體 IP ,這個實體 IP 就被通稱為『固定 IP 』了,因為你每次藉由這一個 ADSL 上網時,你的 IP 是不變的。而若你是申請計時制的 ADSL ,那由於你的 IP 可能是由數十人輪流使用,因此你每次重新開機上網時,你這部電腦的 IP 都不會是固定的!於是就被稱為『動態 IP』或者是『浮動式IP』。基本上,這兩個都是『實體IP』,只是網路公司用來分配給用戶的方法不同而產生不同的名稱而已!(註:如 Giga 的撥接式固定 IP 並不是固定制的 IP 呦!還是屬於浮動式類型的 IP 啦!只是每次分配的 IP 都是同一個而已!

    特別感謝:

    本文在發出之後,收到相當多朋友的關心,也發現了自己已經誤會得相當離譜的網路基礎理論,真的感謝好朋友 ZMAN 兄 及 netman 兄的指導!由於對於自己在網路基礎的認知沒有信心,加上小站的目的僅是在於協助朋友們建立一個小型的區域網路,所以上面的文章已經稍微修改過部分的內容,並且取消了部分可能會誤導讀者的內容,特此聲明,感謝大家! ^_^
  • 相关阅读:
    LG4377 「USACO2018OPEN」Talent Show 分数规划+背包
    LG4111/LOJ2122 「HEOI2015」小Z的房间 矩阵树定理
    LG5104 红包发红包 概率与期望
    LG2375/LOJ2246 「NOI2014」动物园 KMP改造
    LG4824 「USACO2015FEB」(Silver)Censoring KMP+栈
    20191004 「HZOJ NOIP2019 Round #9」20191004模拟
    LG5357 「模板」AC自动机(二次加强版) AC自动机+fail树
    LG3812 「模板」线性基 线性基
    数据结构
    git
  • 原文地址:https://www.cnblogs.com/BloodAndBone/p/1855731.html
Copyright © 2011-2022 走看看