最近更新日期:2007/10/21
1. 網路 (Network)
1.1 什麼是網路 1.2 乙太網路 1.3 OSI 七層協定 2. IP 與 MAC 2.1 傳輸單位與 MAC 2.2 IP 的組成 2.3 網域的概念與 IP 的分級 2.4 Netmask 的用途與子網路的切分 2.5 IP 的種類與取得方式 2.6 IP 封包的表頭 3. 網路層之路由概念 3.1 什麼是路由 3.2 觀察主機的路由 4. 常見的通訊協定 4.1 TCP 協定: 通訊埠口與 Socket, 封包的傳送, 三向交握 4.2 UDP 協定 4.3 ICMP 協定 4.4 MTU 的限制 4.5 封包過濾的防火牆概念 5. 連上 Internet 前的準備事項 5.1 什麼是主機名稱與 DNS 5.2 一組可以連上 Internet 的必要網路參數 6. 重點回顧 7. 課後練習 8. 參考資料 9. 針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=25884 網路(Network)
Linux 這個作業系統的優勢之一就是在 (Network) 功能啦!這包含他的高穩定度系統資源分配,
以及較為安全的網路防備能力!所以很多人都喜歡拿他來進行網路伺服器的架設。
然而,這些網路功能的優點卻同時也是缺點,怎麼說呢?因為 Linux 網路功能太強了,
所以一旦被 Cracker (網路怪客) 入侵的話,嘿嘿嘿嘿!會遇上什麼災難你可能也想像不到!
所以囉,上網之前,請先注意:『我的網路做好安全防護了嗎?』
再者,相對於視窗作業系統來說, Linux 的設定確實會讓使用者花費比較多的心力, 畢竟當初它是一群工程師由於本身興趣而設計出來的,所以依舊具有相當麻煩的設定工作需要作! 這個時候,如果沒有一些網路基礎方面的認知的話,那麼在 Linux 上面設定網路或者是進行網路除錯將是您一生當中最大的夢魘......。 所以,這裡有幾件事情要請您好好的來參考一下:
什麼是網路
我們都知道,網路就是幾部電腦主機或者是網路印表機之類的周邊設備,
透過網路線或者是無線網路的技術,將這些主機與設備連接起來,
使得資料可以透過網路媒體(網路線以及其他網路卡等硬體)來傳輸的一種方式。
請您想像一下,如果您家裡面只有電腦、印表機、傳真機等機器,卻沒有網路連接這些硬體,
那麼使用上會不會很麻煩?如果將這個場景移到需要工作的辦公室時,
電腦的資料無法使用網路連接到印表機來列印,那是否很傷腦筋呢?
對吧!光用想的就覺得很麻煩吧!不幸的是,這些麻煩事在 1970 年代以前,確實是存在的啊!
各自為政的『硬體與軟體』技術發展
在 1970 年代前後,為了解決這個煩人的資料傳輸問題,各主要資訊相關的公司都在研究獨自的網路連接技術,
以使自家的產品可以在辦公室的環境底下組織起來。其中比較有名的就是全錄公司的 Ethernet 技術,
以及 IBM 研發的 Token-Ring 技術了。但是這些技術有個很大的問題,那就是這些技術彼此不認識對方的網路技術,
也就是說,萬一你的辦公室購買了整合 Ethernet 技術的電腦主機,但是其他的電腦卻是使用 IBM 的機器時,
想要在這兩者之間進行資料的溝通,在早期來說那是不可能的。
以『軟體』技術將硬體整合
但是,這些硬體的技術出現之後,還是對企業造成一定程度的困擾,怎麼說呢?
因為一個公司不太可能僅會使用一家廠商所推出的資訊產品吧!所以囉,這麼多的硬體技術又該如何整合吶?
舉例來說, IBM 不可能不用自己的 Token-Ring 技術,當然也不會將該技術用在其他公司的硬體上面,
所以,這些廠商當然只會針對自家的硬體來進行網路傳輸軟體的撰寫囉。那麼當許多不同公司的產品在自己企業內時,
您該如何將這些咚咚整合在一起呢?傷腦筋是吧!
沒有任何王法的 Internet 所以在 1960 年代末期美國國防部就開始研究一個 可以在這些不同的網路硬體上面運作的軟體技術, 使得不同公司的電腦或資料可以透過這個軟體來達成資料溝通。這個研究由美國國防部尖端研究企畫署 ( Defense Advanced Research Project Agency, DARPA )負責,他們將該網路系統稱為 ARPANET, 這個咚咚就是目前熟知的 TCP/IP 技術的雛形了!在 1975 年左右, ARPANET 已可以在常見的 Ethernet 與 Token-Ring 等硬體平台底下互通資料了。DARPA 在 1980 年正式推出 TCP/IP 技術後, 由於想要推展此項技術,因此與柏克萊 (Berkeley) 大學合作,將 TCP/IP 植入著名的 BSD Unix 系統內, 由於大學乃是未來人才資料庫的培養處,所以, TCP/IP 這個技術便吸引越來越多使用者的投入, 而這種連接網路的技術也被稱之為 Internet 。
現在我們知道 Internet 就是使用 TCP/IP 的網路連接技術所串聯起來的一個網路世界,
而這個 Internet 在 1980 年代之後由於瀏覽器圖形介面的興起,因此快速的蔓延在電腦世界中。
但是, Internet 有沒有人在管理啊?呵呵!很不巧的是, Internet 是一個管理相當鬆散的所在。
只要你能夠使用任何支援 TCP/IP 技術的硬體與作業系統,並且實際連接上網路後,
你就進入 Internet 的世界了。在該世界當中,沒有任何王法的保護,您的實際資料如果接上 Internet ,
在任何時刻都需要自己保護自己,免得中了『流彈』而受傷啊!
軟硬體標準制定的成功帶來的影響為甚麼說 Internet 沒有王法呢?這是因為 Internet 僅是提供一個網路的連接介面, 所以您只要連接上 Internet 後,全世界都可以任你遨遊,不過也因為如此,『跨海』而來的攻擊就成了簡單的事件, 簡單說,台灣的法律僅適用台灣地區對吧?但是電腦怪客可以在國外透過 Internet 對你的主機進行攻擊, 我們的法律可管不到國外地區啊!雖然可以透過很多國際管道來尋求協助,不過,還是很難協助你緝拿兇手的啊。 因此囉,在你的主機要連上 Internet 之前,請先詢問自己,真的有需要連上 Internet 嗎?^_^
現在我們常常聽到『你要上網啊!?那你要去買網路卡喔!還得要連接到 Internet 才行啊!』
這個網路卡就是市面上隨處可見的一個介面卡而已,至於 Internet 則是去向 Hinet/Seed net 或
其他網路服務提供公司 (Internet Service Provider, ISP) 申請的帳號密碼。
問題是,是否就僅有網路卡與 Internet 才能上網啊?呵呵!當然不是!網路的硬體與軟體可多著那!
不過,最成功的卻是乙太網路 (Ethernet) 與 Internet ,這是為甚麼呢?這兩者的技術比較好嗎?
當然不是!這是因為這兩者都被『標準』所支援的緣故。
透過這些軟硬體的標準以及實際上很多公司的支援,讓現今的網路世界很容易就串接在一起。
而目前我們最常談到的就是上面提到的咚咚,硬體就屬『乙太網路』最為常見,
軟體當然就是 TCP/IP 這個 Internet 最通用的通訊協定囉。那麼乙太網路是啥?
為甚麼有高速乙太網路、超高速乙太網路? TCP/IP 是啥?
通訊協定是啥?瀏覽器又是啥?他們之間的關係是怎樣?這些東西我們就慢慢來了解一下囉。乙太網路最初是由全錄 (Xerox PARC) 所建構出來的,而後透過 DEC, Intel 與 Xerox 合作將乙太網路標準化。 再經由 IEEE (Institute of Electrical and Electronic Engineers) 這個國際著名的專業組織利用一個 802 的專案制定出標準,之後有 19 家公司宣佈支援 IEEE 所發布的 802.3 標準, 並且到了 1989 年國際標準組織 ISO (International Organization for Standard) 將乙太網路編入 IS88023 標準, 呵呵!這表示乙太網路已經是一項公認的標準介面了,如此一來,大家都可以依據這個標準來設定與開發自己的硬體, 只要硬體符合這個標準,理論上,他就能夠加入乙太網路的世界,所以,購買乙太網路時, 僅需要查看這個乙太網路卡支援哪些標準就能夠知道這個硬體的功能有哪些, 而不必知道這個乙太網路卡是由哪家公司所製造的吶。
除了硬體之外,TCP/IP 這個 Internet 的通訊協定也是有標準的,那就是底下的網站所提供的基本文件︰ 透過這些文件的輔助,任何人只要會寫程式語言的話,就有可能發展出自己的 TCP/IP 軟體, 並且連接上 Internet 。早期的 Linux 為了要連接上 Internet ,Linux 團隊就自己撰寫出 TCP/IP 的程式碼, 透過的就是這些基礎文件的標準依據啊!舉例來說︰ RFC1122 這個建議文件就指出一些基本需求, 讓人們可以了解啊! 乙太網路
在目前的網路社會當中,常見的網路硬體包括有最常見的乙太網路,當然還有速度算是最快的光纖網路,
別忘了還有藍芽無線技術以及 ATM (Asynchronous Transfer Mode, 可不是自動提款機啊!!)
等硬體。會有這麼多網路硬體的原因有很多,
只要是將各個網路硬體的使用場合分類吧!舉例來說,一般家庭使用的網路速度並不需要太高,
若使用光纖網路,貴的哩!用不起∼而企業場合如果僅使用乙太網路作為整合介面,
又可能造成頻寬的不足!所以囉,這些硬體各有其優缺點啦!
因此,在談乙太網路之前您必須要了解的是,整個網路世界並非僅有乙太網路這個硬體介面, 只是由於個人電腦的成功以及相關作業系統的支援度,加上乙太網路加入成為標準, 使得乙太網路成為目前最為熱門的網路硬體技術。 因此,我們當然得就乙太網路來聊一聊啦!事實上,整個乙太網路的發展建議您可以直接參考風信子與張民人先生翻譯的 『Switched & Fast 乙太網路』一書,該書內容相當的有趣,挺適合閱讀的吶。 底下我們僅做個簡單的介紹而已說。 就像前一小節提到的,乙太網路最早是由全錄這家公司為了自家的硬體設備而發展起來的, 經由發明者 Metcalfe 大力推動乙太網路成為業界的標準後, 再經由 3Com 發展大量的乙太網路硬體,配合越來越流行的相容於 IBM 的個人電腦, 以及支援網路的作業系統的流行,最後使得大家都參與乙太網路這個介面的發展吶, 也由於多數公司的量產,使得乙太網路設備越來越便宜。早期的一張 10/100 Mbps 的網路卡要價上千元, 目前最便宜的只要 150 台幣就能購買到了! 乙太網路的速度
前面說到,乙太網路的流行除了相關的硬體以及作業系統的流行之外,『標準』也是一個很重要的因素。
早先 IEEE 所制訂的乙太網路標準為 802.3 的 IEEE 10BASE5 ,
這個標準主要的定義是:『10 代表傳輸速度為 10Mbps,
BASE 表至採用基頻信號來進行傳輸,至於 5 則是指每個網路節點之間最長可達 500 公尺。』
網路的傳輸資訊就是 0 與 1 啊,因此,資料傳輸的單位為每秒多少 bit ,
亦即是 M bits/second, Mbps 的意思。那麼為何制訂成為 10Mbps 呢?
這是因為早期的網路線壓製的方法以及相關的製作方法,還有乙太網路卡製作的技術並不是很好,
加上當時的資料傳輸需求並沒有像現在這麼高,所以 10Mbps 已經可以符合大多數人的需求了。
乙太網路的網路線接頭當時的網路線使用的是舊式的同軸電纜線,這種線路在現在幾乎已經看不到了。 取而代之的是類似傳統電話線的雙絞線 (Twisted Pair Ethernet) , IEEE 並將這種線路的乙太網路傳輸方法制訂成為 10BASE-T 的標準。 10BASE-T 使用的是 10 Mbps 全速運作且採用無遮蔽式雙絞線 (UTP) 的網路線。此外, 10BASE-T 的 UTP 網路線可以使用星形連線(star), 也就是以一個集線器為中心來串連各網路設備的一個方法, 有點類似底下的圖示: 圖一、星形連線 (star) 簡易圖示 不同於早期以一條同軸電纜線連結所有的電腦的 bus 連線, 透過星形連線的幫助,我們可以很簡單的加裝其他的設備或者是移除其他設備, 而不會受到其他裝置的影響,這對網路設備的擴充性與除錯來說,都是一項相當棒的設計! 也因此 10BASE-T 讓乙太網路設備的銷售額大幅提昇啊! 後來 IEEE 更制訂了 802.3u 這個支援到 100Mbps 傳輸速度的 100BASE-T 標準,這個標準與 10BASE-T 差異不大, 只是雙絞線線材製作需要更精良,同時也已經支援使用了四對絞線的網路線了, 也就是目前很常見的八蕊網路線吶!這種網路線我們常稱為等級五 (Category 5, CAT5) 的網路線。 這種傳輸速度的乙太網路就被稱為 Fast ethernet 。至於目前我們常常聽到的 Gigabit 網路速度 1000 Mbps 又是什麼吶?那就是 Gigabit ethernet 哩!只是 Gigabit ethernet 的網路線就需要更加的精良。 為什麼每當傳輸速度增加時,網路線的要求就更嚴格呢? 這是因為當傳輸速度增加時,線材的電磁效應相互干擾會增強, 因此在網路線的製作時就得需要特別注意線材的質料以及內部線蕊心之間的纏繞情況配置等, 以使電子流之間的電磁干擾降到最小,才能使傳輸速度提升到應有的 Gigabit 。 所以說,在乙太網路世界當中,如果您想要提升原有的 fast ethernet 到 gigabit ethernet 的話, 除了網路卡 (Network Internet Card, NIC) 需要升級之外,主機與主機之間的網路線, 以及連接主機線路的集線器/交換器等,都必須要提升到可以支援 gigabit 速度等級的設備才行喔!
前面提到,網路的速度與線材是有一定程度的相關性的,那麼線材的接頭又是怎樣呢?
目前在乙太網路上最常見到的接頭就是 RJ-45 的網路接頭,共有八蕊的接頭,有點像是胖了的電話線接頭,
如下所示:
資料在乙太網路間的傳送 (MAC)圖二、RJ-45 接頭示意圖 而 RJ-45 接頭又因為每條蕊線的對應不同而分為 568A 與 568B 接頭, 這兩款接頭內的蕊線對應如下表:
事實上,雖然目前的乙太網路線有八蕊且兩兩成對,但實際使用的只有 1,2,3,6 蕊而已, 其他的則是某些特殊用途的場合才會使用到。但由於主機與主機的連線以及主機與集線器的連線時, 所使用的網路線腳位定義並不相同,因此由於接頭的不同網路線又可分為兩種:
接下來要談的是那麼乙太網路到底是如何傳輸資料的呢?
由於目前辦公室內部的乙太網路多是利用集線器以及交換器(Hub/Switch)做為中心,
利用星形連線達成網路環境的一種方式,因此網路線是一個很重要的媒體喔!
那麼網路線裡頭最多就是電子訊號在跑嘛(就是 0 與 1 啊)!而如果同時有兩部電腦要使用這個網路線時,
怎麼可能同時發出兩個電子訊號出來呢?這個時候是會發生訊號碰撞的問題的,
因此,網路共享媒體(包括網路線、集線器等)在單一時間點內,
僅能被一部主機所使用這個概念必須要先瞭解才行。
共不共享很重要,集線器還是交換器?為了杜絕這種訊號碰撞產生的問題,所以乙太網路在發展時就使用一種名為 CSMA/CD (Carrier-Sense Multiple Access with Collision Detection) 的技術。 這種技術的特點就是當節點想要在網路媒體上面傳輸資料時, 會先偵測該媒體上面是否有其他的節點正在使用,確定沒有其他節點在使用該媒體時,該節點才會開始傳送資料。 並且,當節點開始傳送資料時,節點也能夠同時偵測是否有發生碰撞的現象。 (註:任何一個具有 MAC 的網路媒體接在該網路上面,就稱為一個節點"node", 所以,一部主機就是一個 node !) 不過,事實上在這樣的共享媒體環境下,當網路相當忙碌時, 資料的碰撞 (collision) 還是會發生的啦! 再來,我們還是得要知道一下『那電子訊號由一部主機發出後,這個訊號怎麼知道要傳到哪裡去?』 既然有來源也有目標,那當然就得需要一個可以判別訊號來源與等待接受的主機的相關資訊囉? 沒錯!在乙太網路內,我們就是以 MAC (Media Access Control, 媒體存取控制)來管理資料傳送的。 而 MAC 其實就是一個訊框( frame ), 你可以把他想成是一個在網路線上面傳遞的包裹, 而這個包裹是整個網路硬體上面傳送資料的最小單位了。 也就是說,網路線可想成是一條『一次僅可通過一個人』的獨木橋, 而 MAC 就是在這個獨木橋上面動的人啦!那 MAC 又該如何判斷這獨木橋的兩端分別是何處呢? 這就得要看一看 MAC 這個訊框的內容了: 圖三、乙太網路的 MAC 訊框 在這個 MAC 當中,最重要的就是那個 6 Bytes 的目的與來源位址了! 事實上,在所有的乙太網路卡當中都有一個獨一無二的網路卡卡號, 那就是上頭的『目的與來源位址』,這個位址是硬體位址( hardware address ), 共有 6 bytes ,分別由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF, 這 6 bytes 當中,前 3bytes 為廠商的代碼,後 3bytes 則是該廠商自行設定的裝置碼了。 在 Linux 當中,你可以使用 ifconfig 這個指令來查閱你的網路卡卡號喔! 不過,由於 MAC 主要是與網路卡卡號有關,所以我們也常常將 MAC 作為網路卡卡號的代稱。 特別注意,在這個 MAC 的傳送中,他僅在區域網路內生效, 如果跨過不同的網域 (這個後面 IP 的部分時會介紹),那麼來源與目的的位址就會跟著改變了。 這是因為變成不同網路卡之間的交流了嘛!所以卡號當然不同了!如下所示: 圖四、在不同主機間持續傳送相同資料的 MAC 訊框變化 例如上面的圖示,我的資料要由電腦 A 通過 B 後才送達 C ,而 B 電腦有兩塊網路卡, 其中 MAC-2 與 A 電腦的 MAC-1 互通,至於 MAC-3 則與 C 電腦的 MAC-4 互通。 但是 MAC-1 不能與 MAC-3 與 MAC-4 互通,為啥?因為 MAC-1 這塊網路卡並沒有與 MAC-3 及 MAC-4 使用同樣的 switch/hub 相接嘛!所以,資料的流通會變成:
另外,這個 MAC 訊框可以容納多大的資料啊??在正規的乙太網路當中, 就如同上圖三所標示的,一個訊框標準容量最大可達 1500Bytes, 也就是說,在整條網路上面,一個訊框最大就僅能達到 1500bytes。 那如果我有 100M Bytes 的資料要傳送怎辦呢?那您的作業系統會主動的將該 100M bytes 的資料拆解成為多個 1500bytes 的訊框後,傳送到目的地,再重新組合成為原本 100Mbytes 的檔案! 這裡也就可以解釋,為什麼網路共享媒體一次只能有一部主機使用, 但是區域網路內的兩部電腦卻可以同時下載檔案?這是因為『每次要發出一個訊框時, 都需要進行 CSMA/CD 的監聽,而剛剛成功發出訊框的那部主機, 也需要再使用 CSMA/CD 來跟大家搶。』 所以囉,誰能搶到呢?有時後因為網路太忙碌,那麼 frame 與 frame 就可能會碰撞啦。 在早期 10/100 Mbps 的年代,這個 1500 bytes 的網路媒體傳輸數值還沒有多大的影響, 但到了 gigabit 的年代,如果使用的還是 1500 bytes 時,大型的檔案將會被拆解成多個 frame , 而多個 frame 就意味著主機需要進行多次資料的拆解,網路也需要進行多次的傳輸。 如果可以將這個 MAC 的資料存放處加大的話,那麼不就可以節省系統資源, 並且網路傳遞的次數也會降低,呵呵!沒錯∼在這樣的思考邏輯下,於是目前的 Gigabit Ethernet 通常都已經支援大的訊框架構,那就是 Jumbo Frame 囉∼ 一般來說,只要是 Gigabit 乙太網路卡都會支援 Jumbo frame 的 (請參考文末的參考文獻連結), 他的大小通常是定義在 9000 bytes 的, 不過其他的乙太網路媒體可就不一定了。由於網路媒體支援 Jumbo frame 後, 他的效能是會有所改善的,所以挑選乙太網路媒體時,記得查閱一下該媒體的說明喔!
剛剛我們上面提到了,當一個很忙碌的網路在運作時,網路共享媒體就可能會發生碰撞的情況,
這是因為 CSMA/CD 的緣故。那我們也知道在一個星形連線當中,
正中央的那個設備是集線器或交換器來連接各 PC 的。
那麼 Hub 與 Switch 有啥不同啊?其實,那個 Hub 就是網路共享媒體,
Hub 僅是將所有來自 PC 的 frame 再次送出去給所有的 PC 而已,所以他是個共享媒體。
一些常見的乙太網路技術Switch 則不然喔!Switch 內部具有微處理器以及記憶體,這個記憶體可以記錄每個 switch port 與其連接的 PC 的 MAC 位址,所以,當來自 switch 兩端的 PC 要互傳資料時, 每個 frame 將不會透過 CSMA/CD 的監聽,而是透過 switch 直接將該 frame 送到目標主機上頭去吶! 也就是說, switch 不是個共享媒體,且 switch 的每個埠口 (port) 都具有獨立的頻寬喔! 舉例來說,10/100 的 Hub 上連結 5 部主機,那麼整個 10/100Mbps 是分給這五部主機的, 所以這五部主機總共只能使用 10/100Mbps 而已。那如果是 switch 呢?由於『每個 port 都具有 10/100Mbps 的頻寬』, 所以就看您當時的傳輸行為是如何囉!舉例來說,如果是底下的狀況時,每個連線都是 10/100 Mbps 的。 圖五、Switch 的頻寬簡介 A 傳送到 D 與 B 傳送到 C 都獨自擁有 10/100Mbps 的頻寬,兩邊並不會互相影響! 不過,如果是 A 與 D 都傳給 C 時,由於 C port 就僅有 10/100Mbps ,等於 A 與 D 都需要搶 C 節點的 10/100Mbps 來用的意思。 總之,你就是得要記得的是,switch 已經克服了封包碰撞的問題,因為他有個 switch port 對應 MAC 的相關功能, 所以 switch 並非共享媒體喔!同時需要記得的是,現在的 switch 規格很多, 在選購的時候,千萬記得選購可以支援全雙工/半雙工,以及支援 Jumbo frame 的為佳! 那什麼是全雙工/半雙工(full-duplex, half-duplex)? 前面談到網路線時,我們知道八蕊的網路線實際上僅有兩對被使用,一對是用在傳送,另一對則是在接收。 如果兩端的 PC 同時支援全雙工時,那表示 Input/Output 均可達到 10/100Mbps, 亦即資料的傳送與接收同時均可達到 10/100bps 的意思,總頻寬則可達到 20/200Mbps 囉 (其實是有點語病的,因為 Input 可達 10/100Mbps, output 可達 10/100Mbps , 而不是 Input 可直接達到 20/200Mbps 喔!)如果您的網路環境想要達到全雙工時, 使用共享媒體的 Hub 是不可能的,因為網路線腳位的關係,無法使用共享媒體來達到全雙工的! 如果你的 switch 也支援全雙工模式,那麼在 switch 兩端的 PC 才能達到全雙工喔!
如果您常常在網路上搜尋一些硬體資訊時,或者是常常跑到資訊賣場去看看新鮮貨時,
應該會注意到一些網路硬體,尤其是越來越普及的 switch 這玩意兒的相關硬體資訊吧!
而且,我們知道網路線因為接頭的關係而有平行線與跳線,這兩種網路線使用的時機並不相同,
那麼你是否一定需要購買特殊的線段才能夠連結 PC 與 switch 呢?呵呵!不需要∼
因為現在的硬體實在太聰明了!底下的功能您應該都可以在新的硬體上面發現的!
訊號衰減造成的問題自動協調速度機制: 我們都知道現在的乙太網路卡是可以向下支援的,亦即是 Gigabit 網路卡可以與早期的 10/100Mbps 網路卡連結而不會發生問題。但是,此時的網路速度是怎樣判定呢? 早期的 switch/hub 必須要手動切換速度才行,新的 hub/switch 因為有支援 auto-negotiation 又稱為 N-Way 的功能,他可自動的協調出最高的傳輸速度來溝通喔!如果有 Gigabit 與 10/100Mbps 在 switch 上面, 則 N-Way 會先使用最高的速度 (gigabit) 測試是否能夠全部支援,如果不行的話,就降速到下一個等級亦即 100 Mbps 的速度來運作的! Auto MDI/MDIX: 那麼我們是否需要自行分辨平行線與跳線呢?不需要啦!因為 switch 若含有auto MDI/MDIX 的功能時, 會自動分辨網路線的腳位來調整連線的,所以您就不需要管你的網路線是跳線還是平行線囉!方便吧! ^_^
由於電子訊號是會衰減的,所以當網路線過長導致電子訊號衰減的情況嚴重時,
就會導致連線品質的不良了。因此,連結各個節點的網路線長度是有限制的喔!
不過,一般來說,現今的乙太網路 CAT5 等級的網路線大概都可以支援到 100 公尺的長度,
所以應該無庸擔心才是吶!
結構化佈線但是,造成訊號衰減的情況並非僅有網路線長度而已!如果您的網路線折得太嚴重(例如在門邊常常被門板壓,導致變形) ,或者是自行壓製網路線接頭,但是接頭部分的八蕊蕊線纏繞度不足導致電磁干擾嚴重, 或者是網路線放在戶外風吹日曬導致脆化的情況等等,都會導致電子訊號傳遞的不良而造成連線品質惡劣, 此時常常就會發現偶而可以連線、有時卻又無法連線的問題了!因此,當您需要針對企業內部來架設整體的網路時, 注意結構化佈線可是很重要的喔!
所謂的結構化佈線指的是將各個網路的元件分別拆開,分別安裝與布置到企業內部,
則未來想要提升網路硬體等級或者是移動某些網路設備時,只需要更動類似配線盤的機櫃處,
以及末端的牆上預留孔與主機設備的連線就能夠達到目的了。例如底下的圖示:
圖六、結構化佈線簡易圖示 在牆內的佈線需要很注意,因為可能一佈線完成後就使用 5-10 年以上喔! 那您需要注意的僅有末端牆上的預留孔以及配線端部分。 事實上,光是結構化佈線所需要選擇的網路媒體與網路線的等級, 還有機櫃、機架,以及美化與隱藏網路線的材料等等的挑選,以及實際施工所需要注意的事項, 還有所有硬體、施工所需要注意的標準規範等等, 已經可以寫滿厚厚一本書,而鳥哥這裡的文章旨在介紹一個中小企業內部主機數量較少的環境, 所以僅提到最簡單的以一個或兩個交換器 (swtich) 串接所有網路設備的小型星形連線狀態而已, 如果您有需要相關硬體結構化佈線的資訊,可以參考風信子兄翻譯的『Swtich and Fast 乙太網路』一書的後半段!至於網路上的高手嗎?您可以前往酷學園請教 ZMAN 大哥喔! OSI 七層協定
目前我們的主機只要能夠取得正確的 IP 與相關參數設定時,你就可以連上 Internet 了,
根本不管你的網路硬體是乙太網路還是光纖網路。而且,你主機的作業系統是啥, Internet 也是不管的!
這是為什麼呢?因為網路的傳輸是有分層架構的,每個分層 (layer) 是可以獨立的。
同時每個分層都有獨自的標準可供依循,例如在網路媒體的硬體部分就可以參考 IEEE 的 802.3 的標準!
如此一來,大家都可以在自己的分層當中找到相關的標準來設定自己的資料,如此網路連結就變的更容易了。
關於網路的分層我們最喜歡拿 OSI (Open system Interconnection)
七層協定來說明喔!
事實上, OSI 七層協定只是一個參考的模型 (model),不過,由於 OSI 所定義出來的七層協定相當良好,
所以拿來當作網路連線解釋真是太棒了!底下就來說說吧!
事實上,在上述的七層協定當中,前兩層(實體與資料連接層)主要就是由一些硬體標準所規範出來的, 像我們前一小節提到的乙太網路之 MAC 訊框相關的格式,以及一些類似乙太網路線接頭規範、 CSMA/CD 的技術等等,都是在前兩層進行規範的。 至於網路層與傳送層則與 TCP/IP 有關。我們知道目前的 Internet 相關的 IP 與 TCP 封包格式是由 Internet Network Information Center (INTERNIC) 所統一整理與維護的,至於 TCP/IP 的標準則主要以 Request For Comment (RFC) 技術報告的形式公開。 而會談、表現與應用層則主要與作業系統及應用程式有關了。 那麼這七層到底是如何運作的呢?我們以常見的 WWW 瀏覽器來進行說明好了。 假設你想要由奇摩雅虎(tw.yahoo.com)下載一個大於 10Mbytes 的檔案, 那麼你必須要由你的主機打開瀏覽器,並且輸入相關的網址列後才能開始下載,對吧! 不過,我們知道由於網路媒體的關係,標準乙太網路的硬體最大僅能支援 1500 bytes 的訊框大小, 而我要去奇摩雅虎時,必須要知道奇摩雅虎那部主機的 IP 才行,而我們的瀏覽器使用的是 TCP 的封包格式。這樣一層一層下來,你可以將各個分層想成是一個一個的大袋子, 而且每個袋子都必須要包含在下一個袋子內,例如 IP 的袋子必須要裝在 MAC 訊框的袋子內。
所以啊,這些分層可以使用底下的圖示來看: 圖七、OSI 七層協定的相關性
IP 與 MAC
我們現在知道要有網路的話,必須要有網路相關的硬體,而目前最常見的網路硬體介面為乙太網路,
包括網路線、網路卡、Hub/Switch 等等。而乙太網路上面的傳輸使用網路卡卡號為基準的 MAC 訊框,
配合 CSMA/CD 的監聽技術來傳送訊框,這是硬體部分。那麼在軟體部分,我們知道 Internet
其實就是 TCP/IP 這個通訊協定的通稱,Internet 是由 INTERNIC 所統一管理的,
但其實他僅是負責分配 Internet 上面的 IP 以及提供相關的 TCP/IP 技術文件而已,
另外,在 TCP/IP 上面還有很多的應用程式,包括 FTP, HTTP, EMAIL 等等的技術!
底下我們就先來談一談最底層的 MAC 與 IP 吧!
傳輸單位與 MAC
想一想,如果沒有電的話,我們的網路是否能夠通行無阻?當然不行!
因為網路其實就是電子訊號的傳送啊!如果沒有電,當然就沒有辦法傳送訊息了。而電子訊號只有
0 跟 1 啊,所以在網路單位的計算上,一般通常是以二進位的 bit 為單位的。那麼這個
bit 與我們通常用來計算檔案大小的單位 bytes 有什麼關連性?其實:
那麼 MAC 呢?MAC 是 Media Access Control (媒體存取控制),我們在前小節的 圖三已經介紹過該訊框的資料格式, 且 MAC 常用來做為硬體位址 (Hardware address) 的代稱。我們自己主機上面的 MAC 很好解決, 假設您的網路卡僅有一張,則 Linux 系統內網卡的代號預設由 eth0 開始編號, 因此當你輸入 ifconfig eth0 這個指令時,就會出現如下的訊息了:
當我們的主機想要找出目標 IP 時,就會對整個區域網路進行廣播封包(broadcast)的傳送, 這個廣播封包可以對所有區域網路內的電腦要求回報他的 IP 與 MAC , 當目標 IP 看到這個廣播封包時,就會回應您主機相關的 MAC 資訊,如果非目標主機接到這個封包, 就會主動的忽略!如此一來,你就可以取得目標主機的 MAC 囉! 而這個目標主機的 MAC 就會被記錄到你的主機內的 ARP table (ARP table 在記憶體中), 不過還是要再次的提醒, MAC 是不能跨路由的,請參考圖四的相關說明喔! 如果想要查閱你的 ARP 記錄,可以使用 arp 這個指令即可。
IP 的組成
好了,接下來可以開始介紹那個可愛的 TCP/IP 裡頭的 IP 啦!這個 IP 是
Internet Protocol 的縮寫,他的功能有點像是『門牌號碼』,主要是在網路層( Layer 3 )的功能,
那麼這個 IP 有哪些重要的地方需要瞭解的呢?底下我們就來談一談吧!
IP 是一種資料封包的格式,這個 IP 資料封包最大可以到達 65535 bytes , 然而就如同圖三乙太網路訊框的資料所示, 由於標準乙太網路訊框可包含的資料最大僅達 1500 bytes , 並且依照不同的網路媒體而有不同的 MAC 訊框大小,我們前面也談到的 OSI 七層協定當中, 由於 IP 封包必須要放到 MAC 訊框當中,因此 IP 封包在 Internet 上面應該是不可能達到 65535 bytes 這個值的(因為必須小於 MAC 訊框所能容許的最大值)。另外, 由於網路連線過程當中封包所經過的網路媒體各不相同,因此 MAC 訊框大小當然也不同, 而為了讓 IP 封包可以適用在所有的網路媒體訊框當中,因此, IP 封包是可以被『重組的』! 我們知道 MAC 訊框表頭 (將他想成是一個信封袋外面的記錄資料) 當中最重要的就是網路卡卡號 (hardware address) 這個咚咚!(參考圖三 ),那麼 IP 表頭最重要的是什麼呢?呵呵!那就是 IP 位址 (address) 了!目前我們在 Internet 上面使用的 IP 協定是第四版,通稱為 IPv4 ,這個版本的 IP 位址主要是由 32 bits 的資料所組成的一組數據,也就是 32 個 0 跟 1 所組成的數據資料,因為只有零跟一,所以 IP 的組成當然就是電腦認識的二進位的表示方式了。 不過,因為人類對於二進位實在是不怎麼熟悉,所以為了順應人們對於十進位的依賴性,因此,就將 32 bits 的 IP 分成四小段,每段含有 8 個 bits ,將 8 個 bits 計算成為十進位,並且每一段中間以小數點隔開,那就成了目前大家所熟悉的 IP 的書寫模樣了。如下所示:
網域的概念與 IP 的分級
事實上在 IP 的 32 bits 資料中,主要分為 HOST_ID 與 Net_ID 兩部份,我們先以
192.168.0.0 ~ 192.168.0.255 這個 C Class 的網域當作例子來說明好了:
IP 的分級
好了,現在我們知道 Net_ID 越大時,表示 Host_ID 越少,亦即網域內可以分配的 IP 數量就越少了!
咦!這表示 Net_ID 是有分級的喔!是啊!沒錯∼剛剛上面那個 192.168.0.0~192.168.0.255 稱為 Class C,
那還有哪些等級啊?目前 Internet 將 IP 簡單的分類成為三種常見的等級,亦即所謂的 A, B, C class,
他們代表的意義如下:
Netmask 的用途與子網路的切分
在上一小節當中提到的 A, B, C 三個層級的網域是由 IP 協定預設分配的,在這樣的層級當中,我們可以發現
A Class 可以用於設定電腦主機的 IP 數量 ( Host ) 真的是很多,在同一個 A
Class 的網域內,主機的數量可以達到『 256 X 256 X
256 - 2(Host_ID 全為 0 或 1 ) = 16777214』,不過,
這樣的設定情況對於一般網路的效能卻是不太好的!為什麼呢?
讓我們回到前面乙太網路的 MAC 運作模式那個小節,我們知道在共享媒體上面, 每當任何一部主機想要使用該網路媒體時,就得要利用 CSMA/CD 的方式去進行網路監聽的工作,此時對於這麼大的一個網路架構來說,每部主機要發出 MAC 訊框前要進行的這個 CSMA/CD 實在會造成系統上面很嚴重的停頓問題啊! 因為封包碰撞 (collision) 以及在進行 MAC 與 IP 對應的廣播 (broadcast) 時, 要回應的主機數量也真是太多了點吧! 如此一來,整個網路的效能將會變的很糟糕!所以,一般來說,我們最多都僅設定 C Class 做為整個區域網路的架構,其實就連 C Class 也都太大了!不過不打緊,只要記得一個網域內不要超過 30 部以上的主機數量,那樣網路的效能就會比較好一點∼ 其實,除了 C Class 之外,我們還是可以繼續將網路切的更細的!上個小節我們提到 IP 這個 32 bits 的數值中分為 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 的表示就成為:
IP 的種類與取得方式
接下來要跟大家談一談也是很容易造成大家困擾的一個部分,那就是 IP 的種類!很多朋友常常聽到什麼『真實IP,
實體 IP, 虛擬 IP, 假的 IP....』煩都煩死了∼其實不要太緊張啦!實際上,在
IPv4 裡面就只有兩種 IP 的類別,分別是:
那麼萬一你又要將這些私有 IP 送上 Internet 呢?呵呵!這個簡單,設定一個簡單的防火牆加上 NAT ( Network Address Transfer ) 主機設定,你就可以透過 IP 偽裝(不要急,這個在後面也會提到!)來使你的私有 IP 的電腦也可以連上 Internet 囉(雖然不是真的直接,但是很像『直接上網』呢!) 特殊的 loopback IP 網段
好了,那麼除了這個預留的 IP 網段的問題之外,還有沒有什麼其他的怪東西呢?呵呵!
當然是有啦!不然鳥哥幹嘛花時間來唬 XX 呢!?沒錯,還有一個奇怪的 A Class 的網域,那就是 lo
這個奇怪的網域啦( 注意:是小寫的 o 而不是零喔! )這個 lo
的網路是當初被用來作為測試作業系統內部迴圈所用的一個網域,
同時也能夠提供給系統內部原本就需要使用網路介面的服務(daemon)所使用。
IP 的取得方式簡單的說,如果你沒有安裝網路卡在的機器上面, 但是你又希望可以測試一下在你的機器上面設定的伺服器環境到底可不可以順利運作,這個時候怎麼辦, 嘿嘿!就是利用這個所謂的內部迴圈網路啦!這個網段在 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 的種類與等級還有相關的子網域概念後,接下來我們得來瞭解一下,那麼主機的 IP 是如何設定的呢?
基本上,主機的 IP 與相關網域的設定方式主要有:
IP 封包的表頭
現在我們知道 IP 這個資料封包 (packet) 是需要放置在 MAC 訊框裡面的,所以當然不能比 MAC
所能容許的最大資料量還大!但是 IP 封包其實可以到 65535 bytes 那麼大的吶!
那麼 IP 封包除了資料之外,他的表頭資料 (head) 是長怎樣呢?
在圖三的 MAC 訊框表頭裡面最重要的莫過於那個網路卡硬體位址,
那麼在 IP 表頭裡面當然就以來源與目標的 IP 位址為最重要囉!
除此之外, IP 表頭裡面還含有哪些重要資料呢?如底下所示:(下圖第一行為每個欄位的
bit 數)
在上面的圖示中有個地方要注意,那就是『每一行所佔用的位元數為 32 bits』, 也就是說, IP 封包的表頭資料是 32 bits 的倍數喔!那各個表頭的內容分別介紹如下:
網路層之路由概念
我們在前面兩個小節提到了乙太網路在物理網段內可以使用 MAC 的訊框資料直接在兩張網路卡之間傳遞資料,
那在前一節提到的 IP 相關概念裡面,也知道在 Internet 的環境中,同一個網域 (Net_ID 相同的網段)
內可以直接使用廣播的方式以 ARP 協定來取得 IP 與 MAC 的對應,好讓我們的資料可以在同一個網域內進行傳輸。
好了,那問題來了,如果我想要向非同一個網域的主機要求資料呢?這個時候封包要如何傳遞?
呵呵∼這可就需要路由(route)的幫忙啦!這個也是在網路層 (Layer 3) 裡面的重要概念喔!
什麼是路由
什麼是『非同一個網域』呢?剛剛上一小節提到的 IP 應該還沒有忘記吧?
所謂的非同一個網域就是 Network/Netmask 不在同一個位址,
也就是兩部主機間的 Net_ID 不相同的意思。例如參考底下的練習:
那麼萬一兩部不在同一個網段內的主機想要互通資訊時,該如何做? 此時就得要經過 IP 的路徑選擇 (routing) 功能啦!我們以下面圖示的例子來做說明。 下列圖示當中共有兩個不同的網段,分別是 Network A 與 Network B,這兩個網段是經由一部路由器 (Server A) 來進行資料轉遞的,好了,那麼當 PC01 這部主機想要傳送資料到 PC11 時, 他的 IP 封包該如何傳輸呢? 圖九、簡易的路由示意圖 我們知道 Network A(192.168.0.0/24) 與 Network B(192.168.1.0/24) 是不同網段, 所以 PC01 與 PC11 是不能互通資料的。不過, PC01 與 PC11 是如何知道他們兩個不在同一個網段內? 呵呵!這當然是透過 Net_ID 來發現的!那麼當主機想要傳送資料時,他主要的參考是啥? 很簡單!是『路由表 (route table)』,每部主機都有自己的路由表』, 讓我們來看一看預設的情況下, PC01 要如何將資料傳送到 PC02 呢?
大致的情況就是這樣,所以啦,每一部主機裡面都會存在著一個路由表 ( Route table ),資料的傳遞將依據這個路由表進行傳送!而一旦封包已經經由路由表的規則傳送出去後, 那麼主機本身就已經不再管封包的流向了,因為該封包的流向將是下一個主機 (也就是那部 Router )來進行傳送,而 Router 在傳送時,也是依據 Router 自己的路由表來判斷該封包應該經由哪裡傳送出去的!例如底下的圖例: 圖十、路由的概念 PC 01 要將資料送到 Server Bingo 去,則依據自己的路由表,將該封包送到 Server A 去,Server A 再繼續送到 Server B ,然後在一個一個的接力給他送下去,最後總是可以到達 Server Bingo 的。 當然,上面的案例是一個很簡單的路由概念,事實上, Internet 上面的路由協定與變化是相當複雜的,因為 Internet 上面的路由並不是靜態的,他可以隨時因為環境的變化而修訂每個封包的傳送方向。 舉例來說,數年前在新竹因為土木施工導致台灣西部整個網路纜線的中斷。 不過南北的網路竟然還是能通,為什麼呢?因為路由已經判斷出西部纜線的終止, 因此他自動的導向台灣東部的花蓮路線,雖然如此一來繞了一大圈,而且造成網路的大塞車, 不過封包還是能通就是了!這個例子僅是想告訴大家,我們上面提的路由僅是一個很簡單的靜態路由情況, 如果想要更深入的瞭解 route ,請自行參考相關書籍喔! ^_^ 。 此外,在屬於 Public 的 Internet 環境中,由於最早時的 IP 分配都已經配置妥當, 所以各單位的路由一經設定妥當後,上層的路由則無須擔心啊! IP 的分配可以參考底下的網頁: 觀察主機的路由
既然路由是這麼的重要,而且『路由一旦設定錯誤,
將會造成某些封包完全無法正確的送出去!』
所以我們當然需要好好的來觀察一下我們主機的路由表啦!還是請再注意一下,
每一部主機都有自己的路由表喔!觀察路由表的指令很簡單,就是
route ,這個指令挺難的,我們在後面章節再繼續的介紹,這裡僅說明一些比較簡單的用法:
萬一我們要傳送的封包目的地 IP 不在路由規則裡面,那麼就會將封包傳送到『default』所在的那個路由規則去,也就是 192.168.0.254 那個 Gateway 喔!所以,幾乎每一部主機都會有一個 default gateway 來幫他們負責所有非網域內的封包轉遞!這是很重要的概念喔!^_^! 關於更多的路由功能與設定方法,我們在後面的『簡易 Router 架設』 當中會再次的提及呢! 常見的通訊協定
終於給他來到了封包格式的地方了!上面的咚咚大多是在網路最底層的基礎知識,
得自行好好的理解理解!第一次看不懂沒關係,多看幾次,或者是未來有些網路經驗後再回來這個章節好好看一看!
假設您已經知道了網路最底層的 IP 以及相關的參數的意義,那麼應該知道的是,
網路層的協定只是提供路由的判斷以確定封包的傳送路徑,
但是這些協定並沒有管理可能由於網路媒體的損壞問題,或者是網路的負荷過重以及其他不可預期的情況,
而造成封包損毀或者被丟棄的狀態。為了使封包的傳送過程中更具有穩定性與可靠性,
我們就得提供一套機制來讓資料可以沒有錯誤的到達到目的地。
在 TCP/IP 這個協定組合當中,TCP ( Transmission Control Protocol ) 就是用來做為傳送的一個協定,當然啦,還有一個 UDP 的協定呢!在 TCP 這個協定當中, 他提供了較為穩定而且可靠的連線狀態,至於 UDP 則是一個比較沒有這麼可靠的連線型態了。 除了這個 TCP 與 UDP 之外,其他相關的網路協定請參考前一小節 IP 封包內的 Protocol 說明。 底下我們就來分別談一談重要的 TCP/UDP/ICMP 吧! TCP 協定
在前幾個小節內談到的 IP 與路由的相關說明中,我們知道 IP 與路由僅能將資料封包傳送到正確的目標而已,
但是這個目的地是否真的能夠收下來這個封包?那可就不一定了。要確認該資料能否正確的被目的端所接收,
就必須要在資料封包上面多加一些參數來判斷才行。
在前面的 OSI 七層協定當中,在網路層的 IP 之上則是傳送層,而傳送層的資料打包成什麼? 最常見的就是 TCP 封包了。這個 TCP 封包資料必須要能夠放到 IP 的資料袋當中才行喔! 所以,我們可以將 MAC, IP 與 TCP 的封包資料這樣看: 圖十一、各封包之間的相關性 所以說,IP 除了表頭之外的 Data 內容其實就是 TCP 封包的表頭與內容;而 MAC 的 Data 內容, 就是一個完整的 IP 封包資料!這也是我們上頭提到的,最終還是得以 MAC 能夠支援的最大容許容量, 才能夠決定 IP 與 TCP 封包是否需要再進行分段的工作。那麼既然 MAC 與 IP 都有表頭資料, 想當然爾,TCP 也有表頭資料來記錄該封包的相關資訊囉??沒錯啦∼ TCP 封包的表頭是長這個樣子的:
上圖就是一個 TCP 封包的表頭資料,各個項目以 Source Port, Destination Port 及 Code 算是比較重要的項目,底下我們就分別來談一談各個表頭資料的內容吧!
通訊埠口與 Socket
在剛剛上頭提到的 TCP 表頭資料後,您大概也清楚了要建立一個 TCP
封包時所需要檢驗的相關參數可不少啊!其中最重要的就屬通訊埠口 (port) 了。
這個 port 主要是由主機的程式所觸發的,網路上面的其他 client 端,
可以通過這個埠口直接與啟動該 port 的程式相互溝通,
而達到資料傳輸的目的。我們都知道二進位程式 (binary program) 才是真的主機認識的程式指令,
那麼我們要啟動網路服務時,其實也就是啟動一個 program
就是了。但是網路上面如何與您的
program 互通資料呢?就是透過在網路介面上面的 port 來達成的啦。
不過,必須要注意的是 port 的溝通是雙向的, 舉例來說,當我們要使用瀏覽器連接到奇摩雅虎查閱資料時, 我們必須要使用 client 端主機的瀏覽器連接到 Yahoo 主機的 WWW 伺服器軟體上面。 由於是透過網路介面,所以我們的瀏覽器也必須要啟動一個 port 並且透過這個 port 連接到 Yahoo 主機的 WWW port 上頭去,然後透過 TCP 封包上頭各項參數的確認後, 才能夠建立連線,並進一步開始傳輸資料啊! 現在來想一想,我們的主機上面有多少網路介面的 port 可用呢? 基本上就有 65536 (216)。那我們連線到 Yahoo 時, 是連線到 Yahoo 主機的那個 port 啊?如果不知道幾號 port ,那又該如何建立起這個連線呢? 所以囉,Internet 上面已經有很多規範好的固定 port (well-known port) 在提供使用者建立伺服器時啟用的 port number 啦。這些 port number 通常小於 1024 , 且是提供給許多知名的網路服務軟體用的。在我們的 Linux 環境下, 各網路服務與 port number 的對應預設給他寫在 /etc/services 檔案內喔! 不過如果是 client 端的話,由於 client 端都是主動向 server 端要資料, 所以 client 端的 port number 就使用隨機取一個大於 1024 以上且沒有在用的 port number 來進行連線了。底下鳥哥列出幾個常見的 port number 與網路服務的對應:
另外一點比較值得注意的是,小於 1023 以下的埠口要啟動時, 啟動者的身份必須要是 root 才行!這個限制挺重要的,大家不要忘記了喔!
談過了通訊埠口後,再來聊一聊每個封包的基本內容有哪些資料呢?這就得要談論到 Socket Pair ( 成對的端口 )了! 當本機發送出封包時,主機是根據 IP 封包內的 IP 位址來判別來源與目的地的行進路線, 並且,也需要 TCP 封包內的 port number 來告知 Client 與 Server 是以哪一個埠口來進行連線的對吧! 所以呢,一個連線過程所包含的底下這些咚咚就稱為成對插槽 (socket pair) 了:
封包的傳送
OK,從前面這樣一路看下來,相信您對於 OSI 七層協定當中的 MAC 訊框與 IP 封包有一定程度的瞭解了,
也知道七層協定必須要在不同的主機之間一再地拿出來察看,因為 Internet 是用 IP 來傳遞封包資料,
而實體線路則是使用 MAC 訊框。那我們也瞭解 TCP 封包的表頭資料後,再來就是要瞭解一下,
那我如何利用 TCP 這個傳送層的協定來進行實際的封包接收呢?
當然是得要透過 TCP 表頭的 Sequence Number 來組合收集大的 TCP 封包,
也必須要透過 Code (Control Flags) 來瞭解到這個封包的特性才行。
說穿了,我們可以使用信封袋來說明,實際的內容 (data) 是在信封袋當中的,
而信封的外面的資訊就是各個封包的表頭資料啦!
那麼如何藉由 TCP 的表頭來確認這個封包有實際被對方接收,並進一部與對方主機達成連線? 我們以底下的圖示來作為說明。 圖十三、封包連接模式之三向交握 在上面的封包連接模式當中,在建立連線之前都必須要通過三個確認的動作, 所以這種連線方式也就被稱為三向交握(Three-way handshake)。 那麼我們將整個流程依據上面的 A, B, C, D 四個階段來說明一下:
在建立了連線之後,該次連線通道就可以在用戶端與伺服器端建立起一對 socket pair , 然後通過該 socket pair 進行 TCP 封包的 PSH、FIN 等資料傳輸與連線中斷等動作囉! UDP 協定
UDP 的全名是:『User Datagram Protocol, 用戶資料流協定』,UDP
與 TCP 不一樣, UDP 不提供可靠的傳輸模式,因為他不是連線導向的一個機制,這是因為在 UDP
的傳送過程中,接受端在接受到封包之後,不會回覆回應封包 ( ACK ) 給發送端,所以封包並沒有像
TCP 封包有較為嚴密的驗證機制。至於 UDP 的表頭資料如下表所示:
TCP 封包確實是比較可靠的,因為通過三向交握嘛!不過,也由於三向交握的緣故, TCP 封包的傳輸速度會較慢。 至於 UDP 封包由於不需要確認對方是否有正確的收到資料,故表頭資料較少,也因為如此所以 UDP 就可以在 Data 處填入更多的資料了。同時 UDP 比較適合需要即時反應的一些資料流,例如即時通訊軟體或者是影像即時傳送軟體等, 就可以使用這類的封包傳送說。也就是說, UDP 傳輸協定並不考慮連線要求、連線終止與流量控制等特性, 所以使用的時機是當資料的正確性不很重要時,例如上面提到的即時通訊軟體啊! 另外,很多的軟體其實是同時提供 TCP 與 UDP 的傳輸協定的,舉例來說,查詢主機名稱的 DNS 服務就同時提供了 UDP/TCP 協定。由於 UDP 較為快速,所以我們 client 端可以先使用 UDP 來與伺服器連線。 但是當使用 UDP 連線卻還是無法取得正確的資料時,便轉換為較為可靠的 TCP 傳輸協定來進行資料的傳輸囉。 這樣可以同時兼顧快速與可靠的傳輸說! ICMP 協定
ICMP 的全稱是『 Internet Control Message Protocol, 網際網路訊息控制協定 』。
基本上,ICMP 是一個錯誤偵測與回報的機制,最大的功能就是可以確保我們網路的連線狀態與連線的正確性!
同樣的,ICMP 封包也是必須要裝在 IP 封包的 Data 內才行喔!
因為在 Internet 上面有傳輸能力的就是 IP 封包啦!
ICMP 有相當多的類別可以偵測與回報,底下是比較常見的幾個 ICMP 的類別 (Type):
那麼我們是如何利用 ICMP 來檢驗網路的狀態呢?最簡單的指令就是 ping 與 traceroute 了, 這兩個指令可以透過 ICMP 封包的輔助來確認與回報網路主機的狀態。在設定防火牆的時候, 我們最容易忽略的就是這個 ICMP 的封包了,因為只會記住 TCP/UDP 而已∼事實上, ICMP 封包可以幫助連線的狀態回報,除了上述的 8 可以考慮關閉之外,基本上, ICMP 封包也不應該全部都擋掉喔! MTU 的限制
我們在本章的第一部份談到 MAC 時,不是有提到標準乙太網路封包的資訊容量大約在 1500bytes 嗎?
所以 IP 封包、TCP 封包以及其他相關的封包,如果能夠控制在 1500 bytes 內的話,
那麼 IP 封包將不需要重組成可以放進 MAC 訊框的分段了!
讓我們來想一個小案例,假設你的資料量大到 60000 bytes 好了,如果你使用的傳輸協定為 TCP 封包, 萬一你沒有考慮到 MAC 訊框的大小,而讓整筆資料放到可以容納最大 65535 bytes 的 IP 封包內, 此時 IP 封包已經建立好成為內含 60000 bytes 的資料包了,但是再往下到達資料連接層時,唉∼ 這個 IP 封包就得要進行重組,好讓 IP 封包可以放到 MAC 訊框當中!您說,這個時候不是又得讓系統多進行一段手續, 而導致網路效能的低落嗎? 此時,如果能夠規範 TCP 以及 IP 在包起來時就考慮訊框的最大容量時, 不就可以減少很多資料重組的問題囉?呵呵呵呵!沒錯啊! 那就是最大傳輸單元 (Maximum Transmission Unit, MTU) 這個設定值的重要性啊! 一般來說,我們的 Gigabit 網路卡已經可以支援 Jumbo frame ,所以 MTU 值都可以到達 9000 bytes 左右, 不過,不建議您設定 MTU 成為 9000 喔!為什麼呢?因為我們的封包總是需要在 Internet 上面跑吧? 您無法確認所有的網路媒體都是支援那麼大的 MTU 對吧! 如果您的 9000 bytes 封包通過一個不支援 Jumbo frame 的網路媒體時, 好一點的是該網路媒體 (例如 router ) 會主動的幫您重組封包而進行傳送, 差一點的可能就直接回報這個封包無效而丟棄了∼那個時候可就糗大囉∼ 所以, MTU 設定為 9000 這種事情,大概僅能在內部網路的環境作作∼ 舉例來說,很多的內部叢集系統 (cluster) 就將他們的內部網路環境 MTU 設定為 9000, 但是對外的介面卡可還是原本的標準 1500 喔! ^_^ 也就是說,不論您的網路媒體支援 MTU 到多大,您必須要考量到您的封包需要傳到目的地時, 所需要經過的所有網路媒體,然後再來決定您的 MTU 設定才行。
封包過濾的防火牆概念
由上面的說明當中,我們知道資料的傳送其實就是封包的發出與接受的動作啦!並且不同的封包上面都有不一樣的表頭
( header ),此外,封包上面通常都會具有四個基本的資訊,那就是
socket pair 裡面提到的『來源與目的 IP 以及來源與目的端的
port number』 。當然啦,如果是可靠性連線的
TCP 封包,還包含 Control Flag 裡面的 SYN/ACK 等等重要的資訊呢!好了,開始動一動腦筋,
有沒有想到『網路防火牆』的字眼啊?
網路防火牆可以抵擋掉一些可能有問題的封包,那麼在
Linux 系統上面是怎麼擋掉封包的呢?其實說來也是很簡單,既然封包的表頭上面已經有這麼多的重要資訊,
那麼我就利用一些防火牆機制與軟體來進行封包表頭的分析,並且設定分析的規則,當發現某些特定的
IP 、特定的埠口或者是特定的封包資訊(SYN/ACK等等),那麼就將該封包給他丟棄,
那就是最基本的防火牆原理了!
舉例來說,大家都知道 Telnet 這個伺服器是挺危險的,而 Telnet 使用的 port number 為 23 ,所以,當我們使用軟體去分析要送進我們主機的封包時, 只要發現該封包的目的地是我們主機的 port 23 ,就將該封包丟掉去!那就是最基本的防火牆案例啦! 更多的防火牆資訊我們會在後頭的『簡易防火牆』與 『認識網路安全』當中進行更多的說明喔! 連上 Internet 前的準備事項
講了這麼多,其實我們最需要的僅是『連接上 Internet 』啦!那麼在 Internet 上面其實使用的是 TCP/IP
這個通訊協定,所以我們就需要 Public IP 來連接上 Internet 啊!您說對吧∼
不過,您有沒有發現一件事,那就是『為啥我不知道 Yahoo 的主機 IP ,但是俺的主機卻可以連到 Yahoo 主機上?』
如果您有發現這個問題的話,哈哈!您可以準備開始設定網路囉∼ ^_^
什麼是主機名稱與 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 主機呢?呵呵!沒有關係, 那就設定 Hinet 那個最大的 DNS 主機吧! IP 是 168.95.1.1 咯!要設定好 DNS 之後,未來上網瀏覽時,才能使用主機名稱喔!不然就得一定需要使用 IP 才能上網呢!DNS 是很重要的,他的原理也頂複雜的,更詳細的原理我們在後面的 『DNS 伺服器架設』裡面進行更多更詳細的說明喔!這裡僅提個大綱! 一組可以連上 Internet 的必要網路參數
從上面的所有說明當中,我們知道一部主機要能夠使用網路,必須要有 IP ,而 IP
的設定當中,就必須要有 IP, Network, Broadcast, Netmask 等參數,此外,還需要考慮到路由裡面的
Default Gateway 才能夠正確的將非同網域的封包給他傳送出去。
此外,考慮到主機名稱與 IP 的對應,所以您還必須要給予系統一個 DNS 主機的 IP 才行∼
所以說,一組合理的網路設定需要哪些資料呢?呵呵!就是:
重點回顧:
課後練習:
請參考本章第一節的相關內容。
Media Access Control 的縮寫,為乙太網路硬體訊框的規格,乙太網路就是以 MAC 訊框進行資料的傳送。
目前 MAC 也常被用為乙太網路卡卡號的代稱。
當主機要使用網路時,必須要先進行 CSMA/CD 監聽網路,如果(1)網路使用頻繁 (2)網路間隔太大,
則可能會發生監聽時均顯示無主機使用,但發出封包後卻發生同步發送封包的情況,此時兩個封包就會產生碰撞,
造成資料損毀。
ARP 協定主要在分析 MAC 與 IP 的對應,而解析完畢後的資料會存在系統的記憶體中,
下次要傳送到相同的 IP 時,就會主動的直接以該 MAC 傳送,而不發送廣播封包詢問整個網域了。
利用 arp -n 即可
Netmask 可以用來區分網域,且 Netmask 可以有效的增加網路的效率,這是因為 Netmask
可以定義出一個網域的大小,那麼 broadcast 的時間就可以降低很多!一般來說,
我們如果要將一個大網域再細分為小網域,也需要藉由 Netmask 來進行 subnet 的切割。
因為共有 28 個 bits 是不可動的,所以 Netmask 位址的最後一個數字為 11110000,也就是 (128+64+32+16=240) ,所以:
Network:192.168.0.0 Netmask:255.255.255.240 Broadcast:192.168.0.15 IP:由 192.168.0.1 ~ 192.168.0.14 共 14 個可用 IP 喔!
因為是 29 個 bits 不可動,所以最後一個 Netmask 的位址為: 11111000 也就是 (128+64+32+16+8=248),所以:
Network:192.168.0.128 Netmask:255.255.255.248 Broadcast:192.168.0.135 IP:由 192.168.0.129 ~ 192.168.0.134 共 6 個可用的 IP 喔!
既然要分為四個網域,也就是還需要藉助 Netmask 的兩個 bits (2的2次方為4啊!),所以
Netmask 會變成 255.255.255.192 ,每個子網域會有 256/4=64 個 IP ,而必須要扣除
Network 與 Broadcast ,所以每個子網域會有 62 個可用 IP 喔!因此,四個子網域的表示方法為:
192.168.100.0/26, 192.168.100.64/26, 192.168.100.128/26, 192.168.100.192/26。
路由資訊的觀察可以下達 route 來直接察看!或者是下達 route -n 亦可
SYN 代表該封包為該系列連線的第一個封包,亦即是主動連線的意思;
ACK 則代表該封包為確認封包,亦即是回應封包!
使用 TCP 封包才會有三向交握。TCP 封包的三向交握是一個確認封包正確性的重要步驟,通過 SYN, SYN/ACK,
ACK 三個封包的確認無誤後,才能夠建立連線。至於 UDP 封包則沒有三向交握喔!
有網管者,會在 switch 內部加入其他的小型 OS,藉以控管 IP 或 MAC 的流通;
通常基礎的 switch 僅達控管 MAC ,故為 OSI 第二層(資料連接層)
因為如果是一個網域的話,那麼八個 IP 前後(Host_ID 全為 0 與 1 的條件)為 Network 及 Broadcast ,
加上一個在 ISP 處的 Gateway ,所以僅有 5 個可以用。因為有 8 個 IP ,所以其 netmask 後八 bits 為 11111000
,故為 255.255.255.248。
Network Access Layer: 涵蓋 Data-Link 及 Physical Layer
Internet Layer: 也是 Network Layer Transport Layer: 也是 Transport Layer Application Layer: 涵蓋 Application Layer, Persentatin Layer, Session Layer.
請自行參考網中人的網路基礎文章
由 IP 封包的 IP address 與 TCP 封包的 port number 達成,分別為目的端的 IP/port 與本地端的 IP/port。
568A: 白綠 綠 白橙 藍 白藍 橙 白棕 棕
568B:白橙 橙 白綠 藍 白藍 綠 白棕 棕
127.0.0.0/8, loopback
做為網路檢測之用,為第 8 類 (echo request)
為該封包的存活時間,該時間每經過一個 node 都會減少一,當 TTL 為 0 時,該封包會被路由器所丟棄。
該數據最大為 255。
/etc/services 檔案中有紀錄
利用一 hub/switch 連結所有的網路設備的一種連線方式,最大的好處是,每個『網路設備與 switch 之間』都是獨立的,
所以所以每個主機故障時均不會影響其他主機的連線。
因為 IP 協定僅定位出 IP 的所在處與路由,並沒有溝通協調的能力,
至於 TCP 封包則具有目的端、本地端程式之間溝通的能力,但無法直接傳送封包。
故 TCP/IP 常會放在一起講。
參考資料
特別感謝:
本文在 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 的功能! 2006/02/09:將舊的文章移動到 此處 2006/07/12:參考了粘教授與風信子兄的書籍,修改了很多基礎資料喔!還有重點整理,不過,練習尚未更新 2006/07/16:加入習題練習囉! 2007/10/21:圖14那個 UDP 的表頭資料中,16 bits 誤植為 16 bytes,感謝討論區 ricky.liu 的告知! 2008/04/21:經由網友 chyanlong 兄的指點,IHL 的大小單位誤植為 byte,應該是字組 (word) 才對。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||