第二章、基礎網路概念 - 鳥哥的Linux 私房菜
文章推薦指數: 80 %
根據這樣的流程,我們就得要知道每個分層所需要瞭解的基礎知識,這樣才算學習網路基礎嘛!所以底下我們會依據TCP/IP 的鏈結層、網路層、傳送層來進行說明,應用層的 ...
🏠鳥站
基礎篇
訓練教材
伺服器篇
環工篇
討論區
第二章、基礎網路概念
people
>>回到鳥哥本站
>>回伺服器篇版本彙整
伺服器架設forCentOS6.x-目錄總覽
伺服器篇--作者序
第一章、架設伺服器前的準備工作
第二章、基礎網路概念
第三章、區域網路架構簡介
第四章、連上Internet
第五章、Linux常用網路指令
第六章、Linux網路偵錯
第七章、網路安全與主機基本防護:限制埠口,網路升級與SELinux
第八章、路由觀念與路由器設定
第九章、防火牆與NAT伺服器
第十章、申請合法的主機名稱
第十一章、遠端連線伺服器SSH/XDMCP/VNC/RDP
第十二章、網路參數控管者:DHCP伺服器
第十三章、檔案伺服器之一:NFS伺服器
第十四章、帳號控管:NIS伺服器
第十五章、時間伺服器:NTP伺服器
第十六章、檔案伺服器之二:SAMBA伺服器
第十七章、區網控制者:Proxy伺服器
第十八章、網路磁碟裝置:iSCSI伺服器
第十九章、主機名稱控制者:DNS伺服器
第二十章、WWW伺服器
第二十一章、檔案伺服器之三:FTP伺服器
第二十二章、郵件伺服器:Postfix
最近更新時間:2011/07/15
你的伺服器是放在網路網路上面來提供服務的,所以,如果沒有網路或者是網路不通,那麼你的伺服器當然是英雄無用武之地啦!
此外,伺服器上面的網路服務都是用來達成某項網際網路的通訊協定,以提供相對應的服務而已。
所以囉,
你當然得要知道這個最基礎的網路概念,否則,當伺服器的服務出現問題時,你該如何解決啊?您說對吧!
這部份最重要的是TCP/IP與OSI七層協定的相關概念了,這部份難的很~難的很~
在這一章中,鳥哥以較為口語的方式來介紹這些基礎網路架構,希望能帶給朋友們快速瞭解網路是啥。
當然,想要更瞭解網路相關功能的話,文末的參考資料可以參考看看喔!^_^
2.1網路是個什麼玩意兒
2.1.1什麼是網路
2.1.2電腦網路組成元件
2.1.3電腦網路區域範圍
2.1.4電腦網路通訊協定:OSI七層協定
2.1.5電腦網路通訊協定:TCP/IP
2.2TCP/IP的鏈結層相關協定
2.2.1廣域網路使用的設備
2.2.2區域網路使用的設備-乙太網路,速度與標準,
RJ45接頭(跳線/平行線)
2.2.3乙太網路的傳輸協定:CSMA/CD
2.2.4MAC的封裝格式
2.2.5MTU最大傳輸單位
2.2.6集線器、交換器與相關機制
2.3TCP/IP的網路層相關封包與資料
2.3.1IP封包的封裝
2.3.2IP位址的組成與分級:網域,
IP與門牌關連,分級(ClassA,B,C)
2.3.3IP的種類與取得方式:loopback,
IP的取得方式
2.3.4Netmask,子網路與CIDR(ClasslessInterdomainRouting)
2.3.5路由概念
2.3.6觀察主機路由:route
2.3.7IP與MAC:鏈結層的ARP與RARP協定:arp
2.3.8ICMP協定
2.4TCP/IP的傳輸層相關封包與資料
2.4.1可靠連線的TCP協定:通訊埠口,
特權埠口(PrivilegedPorts),
SocketPair
2.4.2TCP的三向交握
2.4.3非連接導向的UDP協定
2.4.4網路防火牆與OSI七層協定
2.5連上Internet前的準備事項
2.5.1用IP上網?主機名稱上網?DNS系統?
2.5.2一組可以連上Internet的必要網路參數
2.6重點回顧
2.7本章習題
2.8參考資料與延伸閱讀
2.9針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=25884
2.1網路是個什麼玩意兒
全世界的人種有很多,人類使用的語言種類也多的很。
那如果你想要跟外國人溝通時,除了比手劃腳之外,你要如何跟對方講話?
大概只有兩種方式囉,一種是強迫他學中文,一種則是我們學他的語言,這樣才能溝通啊。
在目前世界上的強勢語言還是屬於英語系國家,
所以囉,不管是啥人種,只要學好英文,那麼大家都講英文,彼此就能夠溝通了。
希望不久的未來,咱們的中文能夠成為強勢語言啊!
這個觀念延伸到網路上面也是行的通的,全世界的作業系統多的很,不是只有Windows/Linux而已,還有蘋果電腦自己的作業系統,
Unixlike的作業系統也非常多!那麼多的作業系統(人種)要如何進行網路溝通(語言)
呢?那就得要制訂共同遵守的標準才行了。
這個標準是由國際組織規範的,你的系統裡面只要提供可以加入該標準的程式碼,
那你就能夠透過這個標準與其他系統進行溝通!所以囉,網路是跨平台的,並不是只有Linux
才這麼做!因此,這部份的資料你學完後,是可以應用在所有作業系統上面的!觀念都相同啊!
另外,這一個章節旨在引導網路新鮮人快速進入網路的世界,所以鳥哥寫的比較淺顯一些些,基本上,
還有一堆網路硬體與通訊協定並沒有被包含在這篇短文裡頭。
如果你的求知慾已經高過本章節,
那麼請自行到書局尋找適合你自己的書籍來閱讀!當然,你也可以在網際網路上面找到你所需要的資料。
在本章最後的參考資料可以瞧一瞧吶!
2.1.1什麼是網路
我們都知道,網路就是幾部電腦主機或者是網路印表機之類的周邊設備,
透過網路線或者是無線網路的技術,將這些主機與設備連接起來,
使得資料可以透過網路媒體(網路線以及其他網路卡等硬體)來傳輸的一種方式。
請你想像一下,如果你家裡面只有電腦、印表機、傳真機等機器,卻沒有網路連接這些硬體,
那麼使用上會不會很麻煩?如果將這個場景移到需要工作的辦公室時,
電腦的資料無法使用網路連接到印表機來列印,那是否很傷腦筋呢?
對吧!光用想的就覺得很麻煩吧!不幸的是,這些麻煩事在1970年代以前,確實是存在的啊!
各自為政的『網路硬體與軟體』技術發展:Ethernet&Token-Ring
在1970年代前後,為了解決這個煩人的資料傳輸問題,各主要資訊相關的公司都在研究各自的網路連接技術,
以使自家的產品可以在辦公室的環境底下組織起來。
其中比較有名的就是全錄公司的Ethernet技術,
以及IBM研發的Token-Ring技術了。
但是這些技術有個很大的問題,那就是它們彼此不認識對方的網路技術!
也就是說,萬一你的辦公室購買了整合Ethernet技術的電腦主機,但是其他的電腦卻是使用IBM的機器時,
想要在這兩者之間進行資料的溝通,在早期來說那是不可能的。
以『軟體』技術將硬體整合:ARPANET&TCP/IP
為了解決上述的網路硬體整合功能,所以在1960年代末期美國國防部就開始研究一個可以在這些不同的網路硬體上面運作的軟體技術,
使得不同公司的電腦或資料可以透過這個軟體來達成資料溝通。
這個研究由美國國防部尖端研究企畫署
(DefenseAdvancedResearchProjectAgency,DARPA)負責,他們將該網路系統稱為ARPANET,
這個咚咚就是目前熟知的TCP/IP技術的雛形了!在1975年左右,ARPANET已可以在常見的
Ethernet與Token-Ring等硬體平台底下互通資料了。
DARPA在1980年正式推出TCP/IP技術後,
由於想要推展此項技術,因此與柏克萊(Berkeley)大學合作,將TCP/IP植入著名的BSDUnix系統內,
由於大學乃是未來人才資料庫的培養處,所以,TCP/IP這項技術便吸引越來越多使用者的投入,
而這種連接網路的技術也被稱之為Internet(註1)。
沒有任何王法的網際網路:Internet
現在我們知道Internet就是使用TCP/IP的網路連接技術所串聯起來的一個網路世界,
而這個Internet在1980年代之後由於對email的需求以及瀏覽器圖形介面的興起,因此快速的蔓延在電腦世界中。
但是,Internet有沒有人在管理啊?很不巧的是,Internet是一個管理相當鬆散的所在。
只要你能夠使用任何支援TCP/IP技術的硬體與作業系統,並且實際連接上網路後,
你就進入Internet的世界了。
在該世界當中,沒有任何王法的保護,你的實際資料如果接上Internet,
在任何時刻都需要自己保護自己,免得中了『流彈』而受傷啊!
為甚麼說Internet沒有王法呢?這是因為Internet僅是提供一個網路的連接介面,
所以你只要連接上Internet後,全世界都可以任你遨遊,不過也因為如此,『跨海』而來的攻擊就成了簡單的事件,
簡單說,台灣的法律僅適用台灣地區對吧?但是電腦怪客(cracker)可以在國外透過Internet對你的主機進行攻擊,
我們的法律可管不到國外地區啊!雖然可以透過很多國際管道來尋求協助,不過,還是很難協助你緝拿兇手的啊。
因此囉,在你的主機要連上Internet之前,請先詢問自己,真的有需要連上Internet嗎?^_^
軟硬體標準制定的成功帶來的影響:IEEE標準規範
現在我們常常聽到『你要上網啊!那你要去買網路卡喔!還得要連接到Internet才行啊!』
這個網路卡就是市面上隨處可見的一個介面卡而已,至於Internet則是去向Hinet/Seednet或
其他網路服務提供公司(InternetServiceProvider,ISP)申請的帳號密碼。
問題是,是否就只有透過網路卡與Internet才能上網啊?呵呵!當然不是!其他不同的網路硬體與軟體可多著那!
不過,最成功的卻是乙太網路(Ethernet)與Internet,這是為甚麼呢?這兩者的技術比較好嗎?
當然不是!這是因為這兩者都被『標準』所支援的緣故(註2)。
乙太網路最初是由全錄公司(XeroxPARC)所建構出來的,而後透過DEC,Intel與Xerox合作將乙太網路標準化。
再經由IEEE(InstituteofElectricalandElectronicEngineers註3)
這個國際著名的專業組織利用一個802的專案制定出標準,之後有19家公司宣佈支援IEEE所發布的802.3標準,
並且到了1989年國際標準組織ISO(InternationalOrganizationforStandard)將乙太網路編入IS88023標準,
呵呵!這表示乙太網路已經是一項公認的標準介面了,如此一來,大家都可以依據這個標準來設定與開發自己的硬體,
只要硬體符合這個標準,理論上,他就能夠加入乙太網路的世界,所以,購買乙太網路時,
僅需要查看這個乙太網路卡支援哪些標準就能夠知道這個硬體的功能有哪些,
而不必知道這個乙太網路卡是由哪家公司所製造的吶。
Tips 標準真的是個很重要的東西,真要感謝這些維護標準的專業組織。
當有公司想要開發新的硬體時,
它可以參考標準組織所發布與維護的文件資料,透過這些文件資料後,該公司就知道要製作的硬體需要符合哪些標準,
同時也知道如何設計這些硬體,讓它可以『相容』於目前的機器,讓使用者不會無所適從啊。
包括軟體也有標準,早期Linux在開發時就是透過了解POSIX這個標準來設計核心的,
也使得Linux上面可以執行大多數的標準介面軟體呢!你說,標準是否真的很重要啊!
除了硬體之外,TCP/IP這個Internet的通訊協定也是有標準的,這些標準大部分都以RFC(RequestForComments,
註4)的形式發佈標準文件。
透過這些文件的輔助,任何人只要會寫程式語言的話,就有可能發展出自己的TCP/IP軟體,
並且連接上Internet。
早期的Linux為了要連接上Internet,Linux團隊就自己撰寫出TCP/IP的程式碼,
透過的就是這些基礎文件的標準依據啊!舉例來說RFC1122(註5)
這個建議文件就指出一些可以連線到Internet的主機應該要注意的相關協定與基本需求,
讓想要撰寫連線程式的設計師可以有一個指引的標準方向。
2.1.2電腦網路組成元件
接下來,讓我們來談談那麼組成電腦網路的元件有哪些呢?這些元件的定義為何啊?我們得要先知道有哪些硬體嘛!
接下來才好理解啊。
在這裡,我們以底下這張連線示意圖來解釋好了:
圖2.1-1、電腦網路連線示意圖
在上圖中,我們主要需要注意到的硬體有哪些呢?大致有底下這些啦:
節點(node):節點主要是具有網路位址(IP)的設備之稱,
因此上面圖示中的一般PC、Linux伺服器、ADSL數據機與網路印表機等,個別都可以稱為一個node!
那中間那個集線器(hub)是不是節點呢?因為他不具有IP,因此hub不是節點。
伺服器主機(server):就網路連線的方向來說,提供資料以『回應』給用戶的主機,
都可以被稱為是一部伺服器。
舉例來說,Yahoo是個WWW伺服器,崑山的FTP(http://ftp.ksu.edu.tw/)
是個檔案伺服器等等。
工作站(workstation)或用戶端(client):任何可以在電腦網路輸入的設備都可以是工作站,
若以連線發起的方向來說,主動發起連線去『要求』資料的,就可以稱為是用戶端(client)。
舉例來說,一般PC
打開瀏覽器對Yahoo要求新聞資料,那一般PC就是用戶端。
網路卡(NetworkInterfaceCard,NIC):內建或者是外插在主機上面的一個設備,
主要提供網路連線的卡片,目前大都使用具有RJ-45接頭的乙太網路卡。
一般node上都具有一個以上的網路卡,
以達成網路連線的功能。
網路介面:利用軟體設計出來的網路介面,主要在提供網路位址(IP)的任務。
一張網卡至少可以搭配一個以上的網路介面;而每部主機內部其實也都擁有一個內部的網路介面,那就是loopback(lo)
這個迴圈測試介面!
網路形態或拓樸(topology):各個節點在網路上面的連結方式,一般講的是物理連接方式。
舉例來說,上圖中顯示的是一種被稱為星形連線(star)的方式,主要是透過一個中間連接設備,
以放射狀的方式連接各個節點的一種形態,這就是一種拓樸。
網關(route)或通訊閘(gateway):具有兩個以上的網路介面,
可以連接兩個以上不同的網段的設備,例如IP分享器就是一個常見的網關設備。
那上面的ADSL數據機算不算網關呢?
其實不太能算,因為數據機通常視為一個在主機內的網卡設備,我們可以在一般PC上面透過撥號軟體,
將數據機模擬成為一張實體網卡(ppp),因此他不太能算是網關設備啦!
網路設備其實非常多也非常複雜,不過如果以小型企業角度來看,我們能夠瞭解上述圖示內各設備的角色,那應該也足夠囉!
接下來,讓我們繼續來討論一下網路範圍的大小吧!
2.1.3電腦網路區域範圍
由於各個節點的距離不同,連線的線材與方式也有所差異,由於線材的差異也導致網路速度的不同,讓網路的應用方向也不一樣。
根據這些差異,早期我們習慣將網路的大小範圍定義如下:(註6)
區域網路(LocalAreaNetwork,LAN):
節點之間的傳輸距離較近,例如一棟大樓內,或一個學校的校區內。
可以使用較為昂貴的連線材料,
例如光纖或是高品質網路線(CAT6)等。
網路速度較快,連線品質較佳且可靠,因此可應用於科學運算的叢集式系統、
分散式系統、雲端負荷分擔系統等。
廣域網路(WideAreaNetwork,WAN):
傳輸距離較遠,例如城市與城市之間的距離,因此使用的連線媒體需要較為便宜的設備,例如經常使用的電話線就是一例。
由於線材品質較差,因此網路速度較慢且可靠性較低一些,網路應用方面大多為類似email,FTP,WWW瀏覽等功能。
除了這兩個之外,還有所謂的都會網路(MetropolitanAreaNetwork,MAN),不過近來比較少提及,因此你只要知道有LAN
及WAN即可。
這兩個名詞在很多地方你都可以看的到喔!改天你回家看看你家的ADSL數據機或IP
分享器後面的插孔看看,你就能夠看到有WAN與LAN的插孔,現在你就知道為啥有這兩個燈號與插孔了吧。
一般來說,LAN指的是區域範圍較小的環境,例如一棟大樓或一間學校,所以在我們生活周遭有著許許多多的LAN存在。
那這些LAN彼此串接在一起,全部的LAN串在一塊就是一個大型的WAN囉!簡單的說,就是這樣分。
不過,現在的環境跟以前不一樣了,舉例來說,前幾天剛剛宣布(2011/07),光纖的速度已經可以到達100Mbps/10Mbps
的下載/上傳頻寬了!再舉例來說,台灣的學術網路通通是串在一塊的,鳥哥在台南崑山連線到高雄義守大學下載CentOS
映像檔時,你猜下載的速度有多快?每秒鐘可高達100Mbps左右!這已經是一個內部區網的速度了!所以,用以前的觀點來看,
其實對目前的網路環境有點不符現象了。
因此,目前你可以使用『速度』作為一個網路區域範圍的評量。
或許現在我們可以說,整個台灣的學術網路(TANET,註7)可以視為是一個區域網路呢!
2.1.4電腦網路通訊協定:
OSI七層協定
談完了網路需要制訂的標準、網路連線的元件以及網路的範圍之後,接下來就是要講到,那麼各個節點之間是如何溝通訊息的呢?
其實就是透過標準的通訊協定啦!但是,整個網路連接的過程相當複雜,包括硬體、軟體資料封包與應用程式的互相連結等等,
如果想要寫一支將聯網全部功能都串連在一塊的程式,那麼當某個小環節出現問題時,整隻程式都需要改寫啊!真麻煩!
那怎辦?沒關係,我們可以將整個網路連接過程分成數個階層(layer),每個階層都有特別的獨立的功能,
而且每個階層的程式碼可以獨立撰寫,因為每個階層之間的功能並不會互相干擾的。
如此一來,當某個小環節出現問題時,只要將該層級的程式碼重新撰寫即可。
所以程式撰寫也容易,整個網路概念也就更清晰!
那就是目前你常聽到的OSI七層協定(OpenSystemInterconnection)的概念囉!
如果以圖示來說,那麼這七個階層的相關性有點像底下這樣:
圖2.1-2、OSI七層協定各階層的相關性
依據定義來說,越接近硬體的階層為底層(layer1),越接近應用程式的則是高層(layer7)。
不論是接收端還是發送端,每個一階層只認識對方的同一階層資料。
而整個傳送的過程就好像人們在玩整人遊戲一般,我們透過應用程式將資料放入第七層的包裹,再將第七層的包裹放到第六層的包裹內,
依序一直放到第一層的最大的包裹內,然後傳送出去給接收端。
接收端的主機就得由第一個包裹開始,依序將每個包裹拆開,
然後一個一個交給對應負責的階層來視察!這就是整人遊戲...喔!是OSI七層協定在階層定義方面需要注意的特色。
既然說是包裹,那我們都知道,包裹表面都會有個重要的資訊,這些資訊包括有來自哪裡、要去哪裡、接收者是誰等等,
而包裹裡面才是真正的資料。
同樣的,在七層協定中,每層都會有自己獨特的表頭資料(header),告知對方這裡面的資訊是什麼,
而真正的資料就附在後頭囉!我們可以使用如下的圖示來表示這七層每一層的名字,以及資料是如何放置到每一層的包裹內:
圖2.1-3、OSI七層協定資料的傳遞方式
上圖中仔細看每個資料包的部分,上層的包裹是放入下層的資料中,而資料前面則是這個資料的表頭。
其中比較特殊的是第二層,
因為第二層(資料鏈結層)主要是位於軟體封包(packet)以及硬體訊框(frame)中間的一個階層,
他必須要將軟體包裝的包裹放入到硬體能夠處理的包裹中,因此這個階層又分為兩個子層在處理相對應的資料。
因為比較特殊,所以您瞧瞧,第二層的資料格式比較不一樣喔,尾端還出現一個檢查碼哩~
每一個階層所負責的任務是什麼呢?簡單的說,每一層負責的任務如下:(註6,註8,
註9)
分層負責內容
Layer1實體層PhysicalLayer
由於網路媒體只能傳送0與1這種位元串,因此實體層必須定義所使用的媒體設備之電壓與訊號等,
同時還必須瞭解資料訊框轉成位元串的編碼方式,最後連接實體媒體並傳送/接收位元串。
Layer2資料鏈結層Data-LinkLayer
這一層是比較特殊的一個階層,因為底下是實體的定義,而上層則是軟體封裝的定義。
因此第二層又分兩個子層在進行資料的轉換動作。
在偏硬體媒體部分,主要負責的是MAC(MediaAccessControl),我們稱這個資料包裹為MAC訊框(frame),MAC
是網路媒體所能處理的主要資料包裹,這也是最終被實體層編碼成位元串的資料。
MAC必須要經由通訊協定來取得媒體的使用權,
目前最常使用的則是IEEE802.3的乙太網路協定。
詳細的MAC與乙太網路請參考下節說明。
至於偏向軟體的部分則是由邏輯連結層(logicallinkcontrol,LLC)所控制,主要在多工處理來自上層的封包資料(packet)並轉成MAC的格式,
負責的工作包括訊息交換、流量控制、失誤問題的處理等等。
Layer3網路層NetworkLayer
這一層是我們最感興趣的囉,因為我們提及的IP(InternetProtocol)就是在這一層定義的。
同時也定義出電腦之間的連線建立、終止與維持等,資料封包的傳輸路徑選擇等等,因此這個層級當中最重要的除了IP
之外,就是封包能否到達目的地的路由(route)概念了!
Layer4傳送層TransportLayer
這一個分層定義了發送端與接收端的連線技術(如TCP,UDP技術),
同時包括該技術的封包格式,資料封包的傳送、流程的控制、傳輸過程的偵測檢查與復原重新傳送等等,
以確保各個資料封包可以正確無誤的到達目的端。
Layer5會談層SessionLayer
在這個層級當中主要定義了兩個位址之間的連線通道之連接與掛斷,此外,亦可建立應用程式之對談、
提供其他加強型服務如網路管理、簽到簽退、對談之控制等等。
如果說傳送層是在判斷資料封包是否可以正確的到達目標,
那麼會談層則是在確定網路服務建立連線的確認。
Layer6表現層PresentationLayer
我們在應用程式上面所製作出來的資料格式不一定符合網路傳輸的標準編碼格式的!
所以,在這個層級當中,主要的動作就是:將來自本地端應用程式的資料格式轉換(或者是重新編碼)成為網路的標準格式,
然後再交給底下傳送層等的協定來進行處理。
所以,在這個層級上面主要定義的是網路服務(或程式)之間的資料格式的轉換,
包括資料的加解密也是在這個分層上面處理。
Layer7應用層ApplicationLayer
應用層本身並不屬於應用程式所有,而是在定義應用程式如何進入此層的溝通介面,以將資料接收或傳送給應用程式,最終展示給使用者。
事實上,OSI七層協定只是一個參考的模型(model),目前的網路社會並沒有什麼很知名的作業系統在使用OSI
七層協定的聯網程式碼。
那...講這麼多幹嘛?這是因為OSI所定義出來的七層協定在解釋網路傳輸的情況來說,
可以解釋的非常棒,因此大家都拿OSI七層協定來做為網路的教學與概念的理解。
至於實際的聯網程式碼,那就交給
TCP/IP這個玩意兒吧!
2.1.5電腦網路通訊協定:
TCP/IP
雖然OSI七層協定的架構非常嚴謹,是學習網路的好材料。
但是也就是因為太過嚴謹了,因此程式撰寫相當不容易,
所以造成它在發展上面些許的困擾。
而由ARPANET發展而來的TCP/IP又如何呢?其實TCP/IP也是使用OSI七層協定的觀念,
所以同樣具有分層的架構,只是將它簡化為四層,在結構上面比較沒有這麼嚴謹,程式撰寫會比較容易些。
後來在1990
年代由於email,WWW的流行,造成TCP/IP這個標準為大家所接受,這也造就目前我們的網路社會囉!
既然TCP/IP是由OSI七層協定簡化而來,那麼這兩者之間有沒有什麼相關性呢?它們的相關性可以圖示如下,
同時這裡也列出目前在這架構底下常見的通訊協定、封包格式與相關標準:
圖2.1-4、OSI與TCP/IP協定之相關性
從上圖中,我們可以發現TCP/IP將應用、表現、會談三層整合成一個應用層,在應用層上面可以實作的程式協定有HTTP,SMTP,DNS等等。
傳送層則沒有變,不過依據傳送的可靠性又將封包格式分為連接導向的TCP及非連接導向的UDP封包格式。
網路層也沒有變,主要內容是提供了
IP封包,並可選擇最佳路由來到達目標IP位址。
資料鏈結層與實體層則整合成為一個鏈結層,包括定義硬體訊號、
訊框轉位元串的編碼等等,因此主要與硬體(不論是區網還是廣域網路)有關。
那TCP/IP是如何運作的呢?我們就拿妳常常連上的Yahoo入口網站來做個說明好了,整個連線的狀態可以這樣看:
應用程式階段:妳打開瀏覽器,在瀏覽器上面輸入網址列,按下[Enter]。
此時網址列與相關資料會被瀏覽器包成一個資料,
並向下傳給TCP/IP的應用層;
應用層:由應用層提供的HTTP通訊協定,將來自瀏覽器的資料包起來,並給予一個應用層表頭,再向傳送層丟去;
傳送層:由於HTTP為可靠連線,因此將該資料丟入TCP封包內,並給予一個TCP封包的表頭,向網路層丟去;
網路層:將TCP包裹包進IP封包內,再給予一個IP表頭(主要就是來源與目標的IP囉),向鏈結層丟去;
鏈結層:如果使用乙太網路時,此時IP會依據CSMA/CD的標準,包裹到MAC訊框中,並給予MAC表頭,再轉成位元串後,
利用傳輸媒體傳送到遠端主機上。
等到Yahoo收到你的包裹後,在依據相反方向拆解開來,然後交給對應的層級進行分析,最後就讓Yahoo的WWW
伺服器軟體得到你所想要的資料,該伺服器軟體再根據你的要求,取得正確的資料後,又依循上述的流程,一層一層的包裝起來,
最後傳送到你的手上!就是這樣囉!
根據這樣的流程,我們就得要知道每個分層所需要瞭解的基礎知識,這樣才算學習網路基礎嘛!所以底下我們會依據TCP/IP
的鏈結層、網路層、傳送層來進行說明,應用層的協定則在後續章節中有對應的協定再來談囉!同時我們也知道,
網路媒體一次傳輸的資料量是有限的,因此如果要被傳輸的資料太大時,我們在分層的包裝中,就得要將資料先拆開放到不同的包裹中,
再給包裹一個序號,好讓目的端的主機能夠藉由這些序號再重新將資料整合回來!很有趣吧!接下來就讓我們一層一層來介紹囉!
Tips 一般來說,因為應用程式與程式設計師比較有關係,而網路層以下的資料則主要是作業系統提供的,因此,
我們又將TCP/IP當中的應用層視為使用者層,而底下的三層才是我們主要談及的網路基礎!所以這個章節主要就是介紹這三層啦!
2.2TCP/IP的鏈結層相關協定
TCP/IP最底層的鏈結層主要與硬體比較有關係,因此底下我們主要介紹一些WAN與LAN的硬體。
同時會開始介紹那重要的CSMA/CD的乙太網路協定,以及相關的硬體與MAC訊框格式等。
那就開始來聊聊囉!
2.2.1廣域網路使用的設備
在2.1.3節我們有提到過,廣域網路使用的設備價格較為低廉。
不過廣域網路使用到的設備非常的多,一般用戶通常會接觸到的主要是ADSL數據機或者是光纖到大廈,以及第四台的Cable
寬頻等。
在這裡我們先介紹一些比較常見的設備,如果以後你有機會接觸到其他設備,再請你依據需求自行查閱相關書籍吧!
傳統電話撥接:透過ppp協定
早期網路大概都只能透過數據機加上電話線以及電腦的九針序列埠(以前接滑鼠或搖桿的插孔),然後透過Point-to-Point
Protocol(PPP協定)配合撥接程式來取得網路IP參數,這樣就能夠上網了。
不過這樣的速度非常慢,而且當電話撥接後,
就不能夠講電話了!因為PPP支援TCP/IP,NetBEUI,IPX/SPX等通訊協定,所以使用度非常廣!
整合服務數位網路(IntegratedServicesDigitalNetwork,ISDN)
也是利用現有的電話線路來達成網路連線的目的,只是連線的兩端都需要有ISDN的數據機來提供連線功能。
ISDN的傳輸有多種通道可供使用,並且可以將多個通道整合應用,因此速度可以成倍成長。
基本的B通道速度約為64Kbps,
但如美國規格使用23個以上的通道來達成連線,此時速度可達1.5Mbps左右。
不過台灣這玩意兒比較少見。
非對稱數位用路回路(AsymmetricDigitalSubscriberLine,ADSL):透過pppoe
協定
也是透過電話線來撥接後取得IP的一個方法,只不過這個方式使用的是電話的高頻部分,與一般講電話的頻率不同。
因此妳可以一邊使用ADSL上網同時透過同一個電話號碼來打電話聊天。
在台灣,由於上傳/下載的頻寬不同,
因此才稱為非對稱的回路。
ADSL同樣使用數據機,只是他透過的是PPPoE(PPPoverEthernet)的方法!
將PPP模擬在乙太網路卡上,因此你的主機需要透過一張網路卡來連接到數據機,並透過撥接程式來取得新的介面(ppp0)
喔!
纜線數據機(Cablemodem)
主要透過有線電視(台灣所謂的第四台)使用的纜線作為網路訊號媒體,同樣需要具備數據機來連接到ISP,以取得網路參數來上網。
Cablemodem的頻寬主要是分享型的,所以通常具有區域性,並不是你想裝就能裝的哩!
2.2.2
區域網路使用的設備-乙太網路
在區域網路的環境中,我們最常使用的就是乙太網路。
當然啦,在某些超高速網路應用的環境中,
還可能會用到價格相當昂貴的光纖通道哩。
只是如同前面提到的,乙太網路因為已經標準化了,設備設置費用相對低廉,
所以一般你會聽到什麼網路線或者是網路媒體,幾乎都是使用乙太網路來架設的環境啦!
只是這裡還是要提醒您,整個網路世界並非僅有乙太網路這個硬體介面喔!
事實上,想瞭解整個乙太網路的發展,建議你可以直接參考風信子與張民人先生翻譯的
『Switched&Fast乙太網路』一書,該書內容相當的有趣,挺適合閱讀的吶。
底下我們僅做個簡單的介紹而已。
乙太網路的速度與標準
乙太網路的流行主要是它成為國際公認的標準所致。
早先IEEE所制訂的乙太網路標準為802.3的
IEEE10BASE5,這個標準主要的定義是:『10
代表傳輸速度為10Mbps,BASE表示採用基頻信號來進行傳輸,至於5則是指每個網路節點之間最長可達
500公尺。
』
由於網路的傳輸資訊就是0與1啊,因此,資料傳輸的單位為每秒多少bit,
亦即是Mbits/second,Mbps的意思。
那麼為何制訂成為10Mbps呢?
這是因為早期的網路線壓製的方法以及相關的製作方法,還有乙太網路卡製作的技術並不是很好,
加上當時的資料傳輸需求並沒有像現在這麼高,所以10Mbps已經可以符合大多數人的需求了。
Tips 我們看到的網路提供者(InternetServicesProvider,ISP)所宣稱他們的ADSL
傳輸速度可以達到下行/上行2Mbps/128Kbps(Kbitspersecond)時,那個Kb指的可不是bytes而是bits
喔!所以2M/128K在實際的檔案大小傳輸速度上面,最大理論的傳輸為256KBps/16
KBps(KBytespersecond),所以正常下載的速度約在每秒100~200KBytes之間吶!
同樣的道理,在網路卡或者是一些網路媒體的廣告上面,他們都會宣稱自己的產品可以自動辨識傳輸速度為
10/100Mbps(Mega-bitspersecond),呵呵!該數值還是得再除以8才是我們一般常用的檔案容量計算的單位bytes喔!
早期的網路線使用的是舊式的同軸電纜線,這種線路在現在幾乎已經看不到了。
取而代之的是類似傳統電話線的雙絞線
(TwistedPairEthernet),IEEE並將這種線路的乙太網路傳輸方法制訂成為10BASE-T
的標準。
10BASE-T使用的是10Mbps全速運作且採用無遮蔽式雙絞線(UTP)的網路線。
此外,
10BASE-T的UTP 網路線可以使用星形連線(star),
也就是以一個集線器為中心來串連各網路設備的一個方法,圖2.1-1就是星形連線的一個示意圖。
不同於早期以一條同軸電纜線連結所有的電腦的bus連線,透過星形連線的幫助,
我們可以很簡單的加裝其他的設備或者是移除其他設備,而不會受到其他裝置的影響,這對網路設備的擴充性與除錯來說,
都是一項相當棒的設計!也因此10BASE-T讓乙太網路設備的銷售額大幅提昇啊!
後來IEEE更制訂了802.3u這個支援到100Mbps傳輸速度的
100BASE-T標準,這個標準與10BASE-T差異不大,
只是雙絞線線材製作需要更精良,同時也已經支援使用了四對絞線的網路線了,
也就是目前很常見的八蕊網路線吶!這種網路線我們常稱為等級五(Category5,CAT5)的網路線。
這種傳輸速度的乙太網路就被稱為Fastethernet。
至於目前我們常常聽到的Gigabit網路速度
1000Mbps又是什麼吶?那就是Gigabitethernet哩!只是Gigabitethernet
的網路線就需要更加的精良。
名稱速度網路線等級
乙太網路(Ethernet)10Mbps-
高速乙太網路(FastEthernet)100MbpsCAT5
超高速乙太網路(GigabitEthernet)1000MbpsCAT5e/CAT6
為什麼每當傳輸速度增加時,網路線的要求就更嚴格呢?這是因為當傳輸速度增加時,線材的電磁效應相互干擾會增強,
因此在網路線的製作時就得需要特別注意線材的質料以及內部線蕊心之間的纏繞情況配置等,
以使電子流之間的電磁干擾降到最小,才能使傳輸速度提升到應有的Gigabit。
所以說,在乙太網路世界當中,如果你想要提升原有的fastethernet到gigabitethernet的話,
除了網路卡需要升級之外,主機與主機之間的網路線,
以及連接主機線路的集線器/交換器等,都必須要提升到可以支援gigabit速度等級的設備才行喔!
乙太網路的網路線接頭(跳線/平行線)
前面提到,網路的速度與線材是有一定程度的相關性的,那麼線材的接頭又是怎樣呢?
目前在乙太網路上最常見到的接頭就是RJ-45的網路接頭,共有八蕊的接頭,有點像是胖了的電話線接頭,
如下所示:
圖2.2-1、RJ-45接頭示意圖
而RJ-45接頭又因為每條蕊線的對應不同而分為568A與568B接頭,這兩款接頭內的蕊線對應如下表:
接頭名稱\蕊線順序12345678
568A白綠綠白橙藍白藍橙白棕棕
568B白橙橙白綠藍白藍綠白棕棕
事實上,雖然目前的乙太網路線有八蕊且兩兩成對,但實際使用的只有1,2,3,6蕊而已,
其他的則是某些特殊用途的場合才會使用到。
但由於主機與主機的連線以及主機與集線器的連線時,
所使用的網路線腳位定義並不相同,因此由於接頭的不同網路線又可分為兩種:
跳線:一邊為568A一邊為568B的接頭時稱為跳線,用在直接連結兩部主機的網路卡。
平行線:兩邊接頭同為568A或同為568B時稱為平行線,用在連結主機網路卡與集線器之間的線材;
2.2.3
乙太網路的傳輸協定:CSMA/CD
整個乙太網路的重心就是乙太網路卡啦!所以說,乙太網路的傳輸主要就是網路卡對網路卡之間的資料傳遞而已。
每張乙太網路卡出廠時,就會賦予一個獨一無二的卡號,那就是所謂的MAC(MediaAccessControl)啦!
理論上,網卡卡號是不能修改的,不過某些筆記型電腦的網卡卡號是能夠修改的呦!
那麼乙太網路的網卡之間資料是如何傳輸的呢?那就得要談一下IEEE802.3的標準CSMA/CD
(CarrierSenseMultipleAccesswithCollisionDetection)了!我們以下圖來作為簡介,下圖內的中心點為集線器,
各個主機都是連線到集線器,然後透過集線器的功能向所有主機發起連線的。
圖2.2-2、CSMA/CD連線示意圖,由A發送資料給D時,注意箭頭方向
集線器是一種網路共享媒體,什麼是網路共享媒體啊?想像一下上述的環境就像一個十字路口,而集線器就是那個路口!
這個路口一次只允許一輛車通過,如果兩輛車同時使用這個路口,那麼就會發生碰撞的車禍事件啊!那就是所謂的共享媒體。
也就是說,網路共享媒體在單一時間點內,僅能被一部主機所使用。
理解了共享媒體的意義後,再來,我們就得要討論,那麼乙太網路的網卡之間是如何傳輸的呢?我們以上圖中的A要發給D
網卡為例好了,簡單的說,CSMA/CD搭配上述的環境,它的傳輸情況需要有以下的流程:
監聽媒體使用情況(CarrierSense):A主機要發送網路封包前,需要先對網路媒體進行監聽,確認沒有人在使用後,
才能夠發送出訊框;
多點傳輸(MultipleAccess):A主機所送出的資料會被集線器複製一份,然後傳送給所有連接到此集線器的主機!
也就是說,A所送出的資料,B,C,D三部電腦都能夠接收的到!但由於目標是D主機,因此B與C
會將此訊框資料丟棄,而D則會抓下來處理;
碰撞偵測(CollisionDetection):該訊框資料附有檢測能力,若其他主機例如B電腦也剛好在同時間發送訊框資料時,
那麼A與B送出的資料碰撞在一塊(出車禍),此時這些訊框就是損毀,那麼A與B就會各自隨機等待一個時間,
然後重新透過第一步再傳送一次該訊框資料。
瞭解這個程序很重要嗎?我們就來談談:
網路忙碌時,集線器燈號閃個不停,但我的主機明明沒有使用網路:
透過上述的流程我們會知道,不管哪一部主機發送出訊框,所有的電腦都會接收到!因為集線器會複製一份該資料給所有電腦。
因此,雖然只有一部主機在對外連線,但是在集線器上面的所有電腦燈號就都會閃個不停!
我的電腦明明沒有被入侵,為何我的資料會被隔壁的電腦竊取:
透過上述的流程,我們只要在B電腦上面安裝一套監聽軟體,這套軟體將原本要丟棄的訊框資料捉下來分析,並且加以重組,
就能夠知道原本A所送出的訊息了。
這也是為什麼我們都建議重要資料在網際網路上面得要『加密』後再傳輸!
既然共享媒體只有一個主機可以使用,為何大家可以同時上網:
這個問題就有趣了,既然共享媒體一次只能被一個主機所使用,那麼萬一我傳輸100MB的檔案,集線器就得被我使用80秒
(以10Mbps傳輸時),在這期間其他人都不可以使用嗎?不是的,由於標準的訊框資料在網路卡與其他乙太網路媒體一次只能傳輸
1500bytes,因此我的100MB檔案就得要拆成多個小資料包,然後一個一個的傳送,每個資料包傳送前都要經過CSMA/CD的機制。
所以,這個集線器的使用權是大家搶著用的!即使只有一部主機在使用網路媒體時,那麼這部主機在發送每個封包間,
也都是需要等待一段時間的(96bittime)!
訊框要多大比較好?能不能修改訊框?:
如上所述,那麼訊框的大小能不能改變呢?因為如果訊框的容量能夠增大,那麼小資料包的數量就會減少,
那每個訊框傳送間的等待就可以減少了!是這樣沒錯,但是乙太網路標準訊框確實定義在1500bytes,
但近來的超高速乙太網路媒體有支援Jumboframe(巨型訊框,註10)的話,那麼就能夠將訊框大小改為
9000bytes哩!但不是很建議大家隨便修改啦!為什麼呢?2.2.5MTU那小節再說。
2.2.4MAC的封裝格式
上面提到的CSMA/CD傳送出去的訊框資料,其實就是MAC啦!MAC其實就是我們上面一直講到的訊框(frame)囉!
只是這個訊框上面有兩個很重要的資料,就是目標與來源的網卡卡號,因此我們又簡稱網卡卡號為MAC而已。
簡單的說,你可以把MAC想成是一個在網路線上面傳遞的包裹,而這個包裹是整個網路硬體上面傳送資料的最小單位了。
也就是說,網路線可想成是一條『一次僅可通過一個人』的獨木橋,
而MAC就是在這個獨木橋上面動的人啦!接下來,來看一看MAC這個訊框的內容吧!
圖2.2-3、乙太網路的MAC訊框
上圖中的目的位址與來源位址指的就是網卡卡號(hardwareaddress,
硬體位址),我們前面提到,每一張網卡都有一個獨一無二的卡號,
那個卡號的目的就在這個訊框的表頭資料使用到啦!硬體位址最小由00:00:00:00:00:00到FF:FF:FF:FF:FF:FF(16進位法),
這6bytes當中,前3bytes為廠商的代碼,後3bytes則是該廠商自行設定的裝置碼了。
在Linux當中,你可以使用ifconfig這個指令來查閱你的網路卡卡號喔!特別注意,在這個
MAC的傳送中,他僅在區域網路內生效,如果跨過不同的網域(這個後面
IP的部分時會介紹),那麼來源與目的的硬體位址就會跟著改變了。
這是因為變成不同網路卡之間的交流了嘛!所以卡號當然不同了!如下所示:
圖2.2-4、同一訊框在不同網域的主機間傳送時,訊框的表頭變化
例如上面的圖示,我的資料要由電腦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-1傳送到MAC-2,此時來源是MAC-1而目的地是MAC-2;
B電腦接收後,察看該訊框,發現目標其實是C電腦,而為了與C電腦溝通,
所以他會將訊框內的來源MAC改為MAC-3,而目的改為MAC-4,如此就可以直接傳送到C電腦了。
也就是說,只要透過B(就是路由器)才將封包送到另一個網域(IP部分會講)去的時候,
那麼訊框內的硬體位址就會被改變,然後才能夠在同一個網域裡面直接進行訊框的流通啊!
Tips 由於網路卡卡號是跟著網路卡走的,並不會因為重灌作業系統而改變,
所以防火牆軟體大多也能夠針對網路卡來進行抵擋的工作喔!
不過抵擋網卡僅能在區域網路內進行而已,因為MAC不能跨router嘛!!
為什麼資料量最小要46最大為1500bytes呢?
訊框內的資料內容最大可達1500bytes這我們現在知道了,那為何要規範最小資料為46bytes呢?這是由於CSMA/CD機制所算出來的!
在這個機制上面可算出若要偵測碰撞,則訊框總資料量最小得要有64bytes,那再扣除目的位址、來源位址、檢查碼(前導碼不算)後,
就可得到資料量最小得要有46bytes了!也就是說,如果妳要傳輸的資料小於46byes,那我們的系統會主動的填上一些填充碼,
以補齊至少46bytes的容量才行!
2.2.5MTU最大傳輸單位
通過上面MAC封裝的定義,現在我們知道標準乙太網路訊框所能傳送的資料量最大可以到達1500bytes,
這個數值就被我們稱為MTU(MaximumTransmissionUnit,最大傳輸單位)。
你得要注意的是,每種網路介面的MTU都不相同,因此有的時候在某些網路文章上面你會看到1492bytes的
MTU等等。
不過,在乙太網路上,標準的定義就是1500bytes。
在待會兒會介紹到的IP封包中,這個IP封包最大可以到65535bytes,比MTU還要大呢!既然禮物(IP)都比盒子
(MAC)大,那怎麼可能放的進去啊?所以囉,IP封包是可以進行拆解的,然後才能放到MAC當中啊!等到資料都傳到目的地,
再由目的地的主機將他組裝回來就是了。
所以囉,如果MTU能夠大一些的話,那麼IP封包的拆解情況就會降低,
封包與封包傳送之間的等待時間(前一小節提到的96bittime)也會減少,就能夠增加網路頻寬的使用囉!
為了這個目的,所以Gigabit的乙太網路媒體才有支援Jumboframe的嘛!這個Jumboframe一般都定義到9000bytes。
那你會說,既然如此,我們的MTU能不能改成9000bytes呢?這樣一來不就能夠減少資料封包的拆解,以增加網路使用率嗎?
是這樣沒錯,而且,你也確實可以在Linux系統上更改MTU的!但是,如果考量到整個網路,那麼我們不建議你修改這個數值。
為什麼呢?
我們的封包總是需要在Internet上面跑吧?你無法確認所有的網路媒體都是支援那麼大的MTU對吧!
如果你的9000bytes封包通過一個不支援Jumboframe的網路媒體時,好一點的是該網路媒體(例如switch/router等)
會主動的幫你重組而進行傳送,差一點的可能就直接回報這個封包無效而丟棄了~這個時候可就糗大囉~
所以,MTU設定為9000這種事情,大概僅能在內部網路的環境中作~舉例來說,很多的內部叢集系統(cluster)
就將他們的內部網路環境MTU設定為9000,但是對外的介面卡可還是原本的標準1500喔!^_^
也就是說,不論你的網路媒體支援MTU到多大,你必須要考量到你的封包需要傳到目的地時,
所需要經過的所有網路媒體,然後再來決定你的MTU設定才行。
就因為這樣,我們才不建議你修改標準乙太網路的MTU嘛!
Tips 早期某些網路媒體(例如IP分享器)支援的是802.2,802.3標準所組合成的MAC封裝,它的MTU就是1492,
而且這些設備可能不會進行封包重組,因此早期網路上面常常有朋友問說,他們連上某些網站時,總是會連線逾時而斷線。
但透過修改用戶端的MTU成為1492之後,上網就沒有問題了。
原因是什麼呢?讀完上頭的資料,您應該能理解了吧?^_^
2.2.6
集線器、交換器與相關機制
共不共享很重要,集線器還是交換器?
(註11)
剛剛我們上面提到了,當一個很忙碌的網路在運作時,集線器(hub)這個網路共享媒體就可能會發生碰撞的情況,
這是因為CSMA/CD的緣故。
那有沒有辦法避免這種莫名其妙的封包碰撞情況呢?有的,那就使用非共享媒體的交換器即可啊!
交換器(switch)等級非常多,我們這裡僅探討支援OSI第二層的交換器。
交換器與集線器最大的差異,在於交換器內有一個特別的記憶體,
這個記憶體可以記錄每個switchport與其連接的PC的MAC位址,所以,當來自
switch兩端的PC要互傳資料時,每個訊框將直接透過交換器的記憶體資料而傳送到目標主機上!
所以switch不是共享媒體,且switch的每個埠口(port)都具有獨立的頻寬喔!
舉例來說,10/100的Hub上連結5部主機,那麼整個10/100Mbps是分給這五部主機的,
所以這五部主機總共只能使用10/100Mbps而已。
那如果是switch呢?由於『每個port都具有10/100Mbps的頻寬』,
所以就看你當時的傳輸行為是如何囉!舉例來說,如果是底下的狀況時,每個連線都是10/100Mbps的。
圖2.2-5、交換器每個埠口的頻寬使用示意圖
A傳送到D與B傳送到C都獨自擁有10/100Mbps的頻寬,兩邊並不會互相影響!
不過,如果是A與D都傳給C時,由於Cport就僅有10/100Mbps,等於A與D都需要搶C節點的10/100Mbps來用的意思。
總之,你就是得要記得的是,switch已經克服了封包碰撞的問題,因為他有個switchport對應MAC的相關功能,
所以switch並非共享媒體喔!同時需要記得的是,現在的switch規格很多,
在選購的時候,千萬記得選購可以支援全雙工/半雙工,以及支援Jumboframe的為佳!
什麼是全雙工/半雙工(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才能達到全雙工喔!
自動協調速度機制(auto-negotiation):
我們都知道現在的乙太網路卡是可以向下支援的,亦即是Gigabit網路卡可以與早期的10/100Mbps
網路卡連結而不會發生問題。
但是,此時的網路速度是怎樣判定呢?
早期的switch/hub必須要手動切換速度才行,新的hub/switch因為有支援auto-negotiation又稱為N-Way
的功能,他可自動的協調出最高的傳輸速度來溝通喔!如果有Gigabit與10/100Mbps在switch上面,
則N-Way會先使用最高的速度(gigabit)測試是否能夠全部支援,如果不行的話,就降速到下一個等級亦即
100Mbps的速度來運作的!
自動分辨網路線跳線或平行線(AutoMDI/MDIX):
那麼我們是否需要自行分辨平行線與跳線呢?不需要啦!因為switch若含有autoMDI/MDIX的功能時,
會自動分辨網路線的腳位來調整連線的,所以你就不需要管你的網路線是跳線還是平行線囉!方便吧!^_^
訊號衰減造成的問題
由於電子訊號是會衰減的,所以當網路線過長導致電子訊號衰減的情況嚴重時,
就會導致連線品質的不良了。
因此,連結各個節點的網路線長度是有限制的喔!
不過,一般來說,現今的乙太網路CAT5等級的網路線大概都可以支援到100公尺的長度,
所以應該無庸擔心才是吶!
但是,造成訊號衰減的情況並非僅有網路線長度而已!如果你的網路線折得太嚴重(例如在門邊常常被門板壓,導致變形)
,或者是自行壓製網路線接頭,但是接頭部分的八蕊蕊線纏繞度不足導致電磁干擾嚴重,
或者是網路線放在戶外風吹日曬導致脆化的情況等等,都會導致電子訊號傳遞的不良而造成連線品質惡劣,
此時常常就會發現偶而可以連線、有時卻又無法連線的問題了!因此,當你需要針對企業內部來架設整體的網路時,
注意結構化佈線可是很重要的喔!
結構化佈線
所謂的結構化佈線指的是將各個網路的元件分別拆開,分別安裝與布置到企業內部,
則未來想要提升網路硬體等級或者是移動某些網路設備時,只需要更動類似配線盤的機櫃處,
以及末端的牆上預留孔與主機設備的連線就能夠達到目的了。
例如底下的圖示:
圖2.2-6、結構化佈線簡易圖示
在牆內的佈線需要很注意,因為可能一佈線完成後就使用5-10年以上喔!那你需要注意的僅有末端牆上的預留孔以及配線端部分。
事實上,光是結構化佈線所需要選擇的網路媒體與網路線的等級,還有機櫃、機架,以及美化與隱藏網路線的材料等等的挑選,
以及實際施工所需要注意的事項,還有所有硬體、施工所需要注意的標準規範等等,
已經可以寫滿厚厚一本書,而鳥哥這裡的文章旨在介紹一個中小企業內部主機數量較少的環境,
所以僅提到最簡單的以一個或兩個交換器(swtich)串接所有網路設備的小型星形連線狀態而已。
如果你有需要相關硬體結構化佈線的資訊,可以參考風信子兄翻譯的『SwtichandFast
乙太網路』一書的後半段!至於網路上的高手嗎?你可以前往酷學園請教
ZMAN(http://http://wordpress.morezman.com/)大哥喔!
2.3TCP/IP的網路層相關封包與資料
我們現在知道要有網路的話,必須要有網路相關的硬體,而目前最常見的網路硬體介面為乙太網路,包括網路線、網路卡、Hub/Switch
等等。
而乙太網路上面的傳輸使用網路卡卡號為基準的MAC訊框,配合CSMA/CD的標準來傳送訊框,這就是硬體部分。
在軟體部分,我們知道
Internet其實就是TCP/IP這個通訊協定的通稱,Internet是由InterNIC(註12)所統一管理的,
但其實他僅是負責分配Internet上面的IP以及提供相關的TCP/IP技術文件而已。
不過Internet最重要的就是IP啊!所以,
這個小節就讓我們來講講網路層的IP與路由吧!
2.3.1IP封包的封裝
目前網際網路社會的IP有兩種版本,一種是目前使用最廣泛的IPv4(InternetProtocolversion4,網際網路協定第四版),
一種則是預期未來會熱門的IPv6。
IPv4記錄的位址由於僅有32位元,預計在2020年前後就會分發完畢,如此一來,
新興國家或者是新的網路公司,將沒有網路可以使用。
為了避免這個問題發生,因此就有IPv6的產生。
IPv6的位址可以達到
128位元,可以多出2的96次方倍的網址數量,這樣的IP數量幾乎用不完啦!雖然IPv6具有前瞻性,但目前主流媒體大多還是使用
IPv4,因此本文主要談到的IP都指IPv4而言喔!(註13)
我們在前一小節談到MAC的封裝,那麼IP封包的封裝也得要來瞭解一下,才能知道IP到底是如何產生的啊!
IP封包可以達到65535bytes這麼大,在比MAC大的情況下,我們的作業系統會對IP進行拆解的動作。
至於IP
封裝的表頭資料繪製如下:(下圖第一行為每個欄位的bit數)
4bits
4bits
8bits
3bits
13bits
Version
IHL
TypeofService
TotalLength
Identification
Flags
FragmentationOffset
TimeToLive
Protocol
HeaderChecksum
SourceAddress
DestinationAddress
Options
Padding
Data
圖2.3-1、IP封包的表頭資料
在上面的圖示中有個地方要注意,那就是『每一行所佔用的位元數為32bits』,
各個表頭的內容分別介紹如下:
Version(版本)
宣告這個IP封包的版本,例如目前慣用的還是IPv4這個版本就在這裡宣告。
IHL(InternetHeaderLength,IP表頭的長度)
告知這個IP封包的表頭長度,使用的單位應該是字組(word),一個字組為4bytes大小喔。
TypeofService(服務類型)
這個項目的內容為『PPPDTRUU』,表示這個IP封包的服務類型,主要分為:
PPP:表示此IP封包的優先度,目前很少使用;
D:若為0表示一般延遲(delay),若為1表示為低延遲;
T:若為0表示為一般傳輸量(throughput),若為1表示為高傳輸量;
R:若為0表示為一般可靠度(reliability),若為1表示高可靠度。
UU:保留尚未被使用。
舉例來說,gigabit乙太網路的種種相關規格可以讓這個IP
封包加速且降低延遲,某些特殊的標誌就是在這裡說明的。
TotalLength(總長度)
指這個IP封包的總容量,包括表頭與內容(Data)部分。
最大可達65535bytes。
Identification(辨別碼)
我們前面提到IP袋子必須要放在MAC袋子當中。
不過,如果IP袋子太大的話,就得先要將IP
再重組成較小的袋子然後再放到MAC當中。
而當IP被重組時,每個來自同一個IP
的小袋子就得要有個識別碼以告知接收端這些小袋子其實是來自同一個IP封包才行。
也就是說,假如IP封包其實是65536那麼大(前一個TotalLength有規定),
那麼這個IP就得要再被分成更小的IP分段後才能塞進MAC訊框中。
那麼每個小IP
分段是否來自同一個IP資料,呵呵!那就是這個識別碼的功用啦!
Flags(特殊旗標)
這個地方的內容為『0DM』,其意義為:
D:若為0表示可以分段,若為1表示不可分段
M:若為0表示此IP為最後分段,若為1表示非最後分段。
FragmentOffset(分段偏移)
表示目前這個IP分段在原始的IP封包中所佔的位置。
就有點像是序號啦,有這個序號才能將所有的小IP
分段組合成為原本的IP封包大小嘛!透過TotalLength,Identification,Flags以及這個FragmentOffset
就能夠將小IP分段在收受端組合起來囉!
TimeToLive(TTL,存活時間)
表示這個IP封包的存活時間,範圍為0-255。
當這個IP封包通過一個路由器時,
TTL就會減一,當TTL為0時,這個封包將會被直接丟棄。
說實在的,要讓IP封包通過
255個路由器,還挺難的~^_^
ProtocolNumber(協定代碼)
來自傳輸層與網路層本身的其他資料都是放置在IP封包當中的,我們可以在IP表頭記載這個IP封包內的資料是啥,
在這個欄位就是記載每種資料封包的內容啦!在這個欄位記載的代碼與相關的封包協定名稱如下所示:
IP內的號碼封包協定名稱(全名)
1ICMP(InternetControlMessageProtocol)
2IGMP(InternetGroupManagementProtocol)
3GGP(Gateway-to-GatewayProtocol)
4IP(IPinIPencapsulation)
6TCP(TransmissionControlProtocol)
8EGP(ExteriorGatewayProtocol)
17UDP(UserDatagramProtocol)
當然啦,我們比較常見到的還是那個TCP,UDP,ICMP說!
HeaderChecksum(表頭檢查碼)
用來檢查這個IP表頭的錯誤檢驗之用。
SourceAddress
還用講嗎?當然是來源的IP位址,從這裡我們也知道IP是32位元喔!
DestinationAddress
有來源還需要有目標才能傳送,這裡就是目標的IP位址。
Options(其他參數)
這個是額外的功能,提供包括安全處理機制、路由紀錄、時間戳記、嚴格與寬鬆之來源路由等。
Padding(補齊項目)
由於Options的內容不一定有多大,但是我們知道IP每個資料都必須要是32bits,所以,若Options
的資料不足32bits時,則由padding主動補齊。
你只要知道IP表頭裡面含有:TTL,Protocol,來源位址與目標位址也就夠了!而這個IP表頭的來源與目標
IP,以及那個判斷通過多少路由器的TTL,就能瞭解到這個IP將被如何傳送到目的端吶。
後續各小節我們將介紹IP
的組成與範圍,還有IP封包如何傳送的機制(路由)等等。
2.3.2IP位址的組成與分級
現在我們知道IP(InternetProtocol)其實是一種網路封包,而這個封包的表頭最重要的就是那個32位元的來源與目標位址!
為了方便記憶,所以我們也稱這個32bits的數值為IP網路位址就是了。
因為網路是人類發明的,所以很多概念與郵務系統類似!
那這個IP其實就類似所謂的『門牌號碼』啦!那麼這個IP有哪些重要的地方需要瞭解的呢?底下我們就來談一談吧!
既然IP的組成是32bits的數值,也就是由32個0與1
組成的一連串數字!那麼當我們思考所有跟IP有關的參數時,你就應該要將該參數想成是32位元的資料喔!
不過,因為人類對於二進位實在是不怎麼熟悉,所以為了順應人們對於十進位的依賴性,因此,就將
32bits的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哩!但在這一串數字中,其實還可以分為兩個部分喔!
主要分為Net_ID(網域號碼)與Host_ID(主機號碼)兩部份。
我們先以192.168.0.0~192.168.0.255這個ClassC
的網域當作例子來說明好了:
192.168.0.0~192.168.0.255這個ClassC的說明:
11000000.10101000.00000000.00000000
11000000.10101000.00000000.11111111
|----------Net_ID---------|-host--|
在上面的範例當中,前面三組數字(192.168.0)就是網域號碼,最後面一組數字則稱為主機號碼。
至於同一個網域的定義是『在同一個物理網段內,主機的IP具有相同的
Net_ID,並且具有獨特的Host_ID』,那麼這些IP群就是同一個網域內的IP網段啦!
Tips 什麼是物理網段呢?當所有的主機都是使用同一個網路媒體串在一起,
這個時候這些主機在實體裝置上面其實是連線在一起的,那麼就可以稱為這些主機在同一個物理網段內了!
同時並請注意,同一個物理網段之內,可以依據不同的
IP的設定,而設定成多個『IP網段』喔!
上面例子當中的192.168.0.0,192.168.0.1,192.168.0.2,....,192.168.0.255(共256個)這些IP就是同一個網域內的
IP群(同一個網域也稱為同一個網段!),請注意,同一個Net_ID內,不能具有相同的Host_ID,否則就會發生IP
衝突,可能會造成兩部主機都沒有辦法使用網路的問題!
IP在同一網域的意義
那麼同一個網域該怎麼設定,與將IP設定在同一個網域之內有什麼好處呢?
Net_ID與Host_ID的限制:
在同一個網段內,Net_ID是不變的,而Host_ID則是不可重複,此外,Host_ID在二進位的表示法當中,不可同時為0
也不可同時為1,因為全為0表示整個網段的位址(NetworkIP),而全為1則表示為廣播的位址(Broadcast
IP)。
例如上面的例子當中,192.168.0.0(Host_ID全部為0)以及192.168.0.255(Host_ID全部為1)
不可用來作為網段內主機的IP設定,也就是說,這個網段內可用來設定主機的
IP是由192.168.0.1到192.168.0.254;
在區網內透過IP廣播傳遞資料
在同物理網段的主機如果設定相同的網域IP範圍(不可重複),則這些主機都可以透過CSMA/CD
的功能直接在區網內用廣播進行網路的連線,亦即可以直接網卡對網卡傳遞資料(透過MAC訊框);
設定不同區網在同物理網段的情況
在同一個物理網段之內,如果兩部主機設定成不同的IP網段,則由於廣播位址的不同,導致無法透過廣播的方式來進行連線。
此時得要透過路由器(router)來進行溝通才能將兩個網域連結在一起。
網域的大小
當Host_ID所佔用的位元越大,亦即Host_ID數量越多時,表示同一個網域內可用以設定主機的IP
數量越多。
所以說,貴單位公司內的電腦群,或者是你宿舍或家裡面的所有電腦,當然都設定在同一個網域內是最方便的,
因為如此一來每一部電腦都可以直接透過MAC來進行資料的交流,而不必經由
Router(路由器)來進行封包的轉遞呢!(Router
這部份在第八章才會提及)。
IP與門牌號碼的聯想
剛接觸到IP組成的朋友都很困擾,又分啥網域號碼與主機號碼,煩死了!其實,你不用煩惱啊!使用門牌號碼的概念來想即可。
既然IP是門牌,那拿我們崑山科技大學的門牌來說好了,我們的門牌是:『台南市永康區大灣路949號』,
假設整個大灣路是同一個巷弄,那麼我們這個門牌的網域號碼『台南市永康區大灣路』而我的主機號碼就是『949號』,
那麼整條大灣路上面只要是開頭為『台南市永康區大灣路』的,就是跟我們同一個網域囉!當然啦,門牌號碼不可能有第二個
949號啊!這樣理解否?
另外,Host_ID全為0與全為1(二進位的概念)時,代表整條巷子的第一個與最後一個門牌,而第一個門牌我們讓他代表整條巷子,
所以又稱為NetworkIP,就是巷子口那個XXX巷的立牌啦!至於最後一個IP,則代表巷子尾,亦即本條巷子的最後一個門牌,
那就是我們在巷子內廣播時的最後一個IP,又稱為BroadcastIP的囉。
在我們這個巷子內,我們可以透過大聲公用廣播的方式跟大家溝通訊息,例如前幾年很熱門的張君雅小妹妹的泡麵廣告,
在巷子內透過廣播告訴張君雅小妹妹,你阿嬤將泡麵煮好了,趕快回家吃麵去!那如果不是張君雅小妹妹呢?就將該訊息略過啊!
這樣有沒有聯想到CSMA/CD的概念呢?
那如果你的資料不是要給本巷子內的門牌呢?此時你就得要將資料拿給巷子內的郵局(路由器),由郵局幫你傳送,
你只要知道巷子內的那間郵局在哪裡即可,其他的就讓郵局自己幫你把信件傳出去即可啊!這就是整個區網與門牌對應的想法!
這樣有沒有比較清晰啊?
IP的分級
你應該要想到一個問題,那就是我的總門牌『台南市永康區大灣路949號』中,到哪裡是巷子而到哪裡是門牌?
如果到『台南市』是巷子,那麼我的門牌將有好多鄉鎮的組成,如果巷子號碼到『台南市永康區』時,
那麼我們的門牌就又少了點。
所以說,這個『巷子』的大小,將會影響到我們主機號碼的數量!
為了解決這個問題,以及為了IP管理與發放註冊的方便性,InterNIC將整個IP網段分為五種等級,
每種等級的範圍主要與IP那32bits數值的前面幾個位元有關,基本定義如下:
以二進位說明Network第一個數字的定義:
ClassA:0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx==>NetI_D的開頭是0
|--net--|---------host------------|
ClassB:10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx==>NetI_D的開頭是10
|------net-------|------host------|
ClassC:110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx==>NetI_D的開頭是110
|-----------net-----------|-host--|
ClassD:1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx==>NetI_D的開頭是1110
ClassE:1111xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx==>NetI_D的開頭是1111
五種分級在十進位的表示:
ClassA:0.xx.xx.xx~127.xx.xx.xx
ClassB:128.xx.xx.xx~191.xx.xx.xx
ClassC:192.xx.xx.xx~223.xx.xx.xx
ClassD:224.xx.xx.xx~239.xx.xx.xx
ClassE:240.xx.xx.xx~255.xx.xx.xx
根據上表的說明,我們可以知道,你只要知道IP的第一個十進位數字,就能夠約略瞭解到該IP屬於哪一個等級,
以及同網域IP數量有多少。
這也是為啥我們上頭選了192.168.0.0這一IP網段來說明時,會將巷子定義到第三個數字之故。
不過,上表中你只要記憶三種等級,亦即是ClassA,B,C即可,因為ClassD
是用來作為群播(multicast)的特殊功能之用(最常用在大批電腦的網路還原),至於ClassE
則是保留沒有使用的網段。
因此,能夠用來設定在一般系統上面的,就只有ClassA,B,C三種等級的IP囉!
2.3.3IP的種類與取得方式
接下來要跟大家談一談也是很容易造成大家困擾的一個部分,那就是IP的種類!很多朋友常常聽到什麼『真實IP,
實體IP,虛擬IP,假的IP....』煩都煩死了~其實不要太緊張啦!實際上,在IPv4裡面就只有兩種IP的類別,分別是:
PublicIP:公共IP,經由INTERNIC所統一規劃的IP,有這種IP
才可以連上Internet;
PrivateIP:私有IP或保留IP,不能直接連上Internet的IP,
主要用於區域網路內的主機連線規劃。
早在IPv4規劃的時候就擔心IP會有不足的情況,而且為了應付某些企業內部的網路設定,於是就有了私有
IP(PrivateIP)的產生了。
私有IP也分別在A,B,C三個Class當中各保留一段作為私有IP網段,那就是:
ClassA:10.0.0.0 -10.255.255.255
ClassB:172.16.0.0 -172.31.255.255
ClassC:192.168.0.0-192.168.255.255
由於這三段Class的IP是預留使用的,所以並不能直接作為
Internet上面的連接之用,不然的話,到處就都有相同的
IP囉!那怎麼行!網路豈不混亂?所以囉,這三個IP網段就只做為內部私有網域的
IP溝通之用。
簡單的說,他有底下的幾個限制:
私有IP的路由資訊不能對外散播(只能存在內部網路);
使用私有IP作為來源或目的地址的封包,不能透過Internet來轉送(不然網路會混亂);
關於私有IP的參考紀錄(如DNS),只能限於內部網路使用(一樣的原理啦)
這個私有IP有什麼好處呢?由於他的私有路由不能對外直接提供資訊,所以,你的內部網路將不會直接被Internet
上面的Cracker所攻擊!但是,你也就無法以私有IP來『直接上網』囉!因此相當適合一些尚未具有
PublicIP的企業內部用來規劃其網路之設定!否則當你隨便指定一些可能是
PublicIP的網段來規劃你企業內部的網路設定時,萬一哪一天真的連上
Internet了,那麼豈不是可能會造成跟Internet上面的PublicIP相同了嗎?
此外,在沒有可用的公開網路情況下,如果你想要跟同學玩連線遊戲怎辦?也就是說,在區網內自己玩自己的連線遊戲,
此時你只要規範好所有同學在同一段私有IP網段中,就能夠順利的玩你的網路啦!就這麼簡單呢!
那麼萬一你又要將這些私有IP送上Internet呢?這個簡單,設定一個簡單的防火牆加上NAT(Network
AddressTransfer)服務,你就可以透過IP偽裝(不要急,這個在後面也會提到)來使你的私有
IP的電腦也可以連上Internet囉!
特殊的loopbackIP網段
好了,那麼除了這個預留的IP網段的問題之外,還有沒有什麼其他的怪東西呢?當然是有啦!不然鳥哥幹嘛花時間來唬XX
呢?沒錯,還有一個奇怪的ClassA的網域,那就是lo這個奇怪的網域啦(注意:是小寫的o而不是零喔)!這個lo
的網路是當初被用來作為測試作業系統內部迴圈所用的一個網域,同時也能夠提供給系統內部原本就需要使用網路介面的服務
(daemon)所使用。
簡單的說,如果你沒有安裝網路卡在的機器上面,
但是你又希望可以測試一下在你的機器上面設定的伺服器環境到底可不可以順利運作,這個時候怎麼辦,
嘿嘿!就是利用這個所謂的內部迴圈網路啦!這個網段在
127.0.0.0/8這個ClassA,而且預設的主機(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與相關網域的設定方式主要有:
直接手動設定(static):
你可以直接向你的網管詢問可用的IP相關參數,然後直接編輯設定檔(或使用某些軟體功能)來設定你的網路。
常見於校園網路的環境中,以及向ISP申請固定IP的連線環境;
透過撥接取得:
向你的ISP申請註冊,取得帳號密碼後,直接撥接到ISP,你的ISP會透過他們自己的設定,讓你的作業系統取得正確的網路參數。
此時你並不需要手動去編輯與設定相關的網路參數啦。
目前台灣的ADSL撥接、光纖到大樓、光纖到府等,大部分都是使用撥接的方式。
為因應用戶的需求,某些ISP也提供很多不同的IP分配機制。
包括hinet,seednet等等都有提供ADSL撥接後取得固定IP的方式喔!
詳情請向你的ISP洽詢。
自動取得網路參數(DHCP):
在區域網路內會有一部主機負責管理所有電腦的網路參數,你的網路啟動時就會主動向該伺服器要求IP參數,
若取得網路相關參數後,你的主機就能夠自行設定好所有伺服器給你的網路參數了。
最常使用於企業內部、IP分享器後端、
校園網路與宿舍環境,及纜線寬頻等連線方式。
不管是使用上面哪種方式取得的IP,你的IP都只有所謂的『Public與PrivateIP』而已!而其他什麼浮動式、固定制、
動態式等等有的沒有的,就只是告訴你這個IP取得的方式而已。
舉例來說,台灣地區ADSL撥接後取得的IP通常是publicIP,
但是鳥哥曾接到香港網友的來信,他們ADSL撥接後,取得的IP是Private,所以導致無法架設網站喔!
2.3.4
Netmask,子網路與CIDR(ClasslessInterdomainRouting)
我們前面談到IP是有等級的,而設定在一般電腦系統上面的則是ClassA,B,C。
現在我們來想一想,如果我們設定一個區網,
使用的是ClassA,那麼我們很容易就會想到,哪有這麼多電腦可以設定在同一個ClassA的區段內(256x256x256-2=16777214)?
而且,假設真有這麼多電腦好了,回想一下CSMA/CD吧,你的網路恐怕會一直非常停頓,因為妳得要接到一千多萬台電腦對你的廣播...
光是想到一千多萬台的廣播,你的網路還能使用嗎?真沒效率!
此外,分為Class的IP等級,是為了管理方面的考量,事實上,我們不可能將一個ClassA僅劃定為一個區網。
舉例來說,
我們崑山取得的PublicIP是120.xxx開頭的,但是其實我們只有120.114.xxx.xxx而已,並沒有取得整個ClassA喔!
因為我們學校也用不了這麼多嘛!這個時候,我們就得要理解一下囉,就是,怎麼將ClassA的網段變小?換句話說,
我們如何將網域切的更細呢?這樣不就可以分出更多段的區網給大家設定了?
前面我們提到IP這個32位元的數值中分為網域號碼與主機號碼,其中ClassC的網域號碼佔了
24位元,而其實我們還可以將這樣的網域切的更細,就是讓第一個
Host_ID被拿來作為Net_ID,所以,整個Net_ID就有25bits,至於Host_ID
則減少為7bits。
在這樣的情況下,原來的一個ClassC
的網域就可以被切分為兩個子網域,而每個子網域就有『
256/2-2=126』個可用的IP
了!這樣一來,就能夠將原本的一個網域切為兩個較細小的網域,方便分門別類的設計喔。
Netmask,或稱為Subnetmask(子網路遮罩)
那到底是什麼參數來達成子網路的切分呢?那就是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這個CClass的Netmask說明
第一個IP:11000000.10101000.00000000.00000000
最後一個:11000000.10101000.00000000.11111111
|----------Net_ID---------|-host--|
Netmask:11111111.11111111.11111111.00000000<==Netmask二進位
:255.255.255.0<==Netmask十進位
特別注意喔,netmask也是32位元,在數值上,位於Net_ID的為1而Host_ID為0
將他轉成十進位的話,就成為『255.255.255.0』啦!
這樣記憶簡單多了吧!照這樣的記憶方法,那麼A,B,CClass的Netmask表示就成為這樣:
ClassA,B,C三個等級的Netmask表示方式:
ClassA:11111111.00000000.00000000.00000000==>255.0.0.0
ClassB:11111111.11111111.00000000.00000000==>255.255.0.0
ClassC:11111111.11111111.11111111.00000000==>255.255.255.0
所以說,192.168.0.0~192.168.0.255這個ClassC的網域中,他的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
子網路切分
好了,剛剛提到ClassC還可以繼續進行子網域(Subnet)的切分啊,以192.168.0.0~192.168.0.255
這個情況為例,他要如何再細分為兩個子網域呢?我們已經知道
Host_ID可以拿來當作Net_ID,那麼Net_ID使用了25bits時,就會如下所示:
原本的CClass的Net_ID與Host_ID的分別
11000000.10101000.00000000.00000000Network:192.168.0.0
11000000.10101000.00000000.11111111Broadcast:192.168.0.255
|----------Net_ID---------|-host--|
切成兩個子網路之後的Net_ID與Host_ID為何?
11000000.10101000.00000000.00000000多了一個Net_ID了,為0(第一個子網)
11000000.10101000.00000000.10000000多了一個Net_ID了,為1(第二個子網)
|----------Net_ID-----------|-host--|
第一個子網路
Network:11000000.10101000.00000000.00000000192.168.0.0
Broadcast:11000000.10101000.00000000.01111111192.168.0.127
|----------Net_ID-----------|-host-|
Netmask:11111111.11111111.11111111.10000000255.255.255.128
第二個子網路
Network:11000000.10101000.00000000.10000000192.168.0.128
Broadcast:11000000.10101000.00000000.11111111192.168.0.255
|----------Net_ID-----------|-host-|
Netmask:11111111.11111111.11111111.10000000255.255.255.128
所以說,當再細分下去時,就會得到兩個子網域,而兩個子網域還可以再細分下去喔
(Net_ID用掉26bits....)。
呵呵!如果你真的能夠理解IP,Network,Broadcast,
Netmask的話,恭喜你,未來的伺服器學習之路已經順暢了一半啦!^_^
例題:
試著計算出172.16.0.0,但Net_ID佔用23個位元時,這個網域的Netmask,Network,Broadcast等參數
答:
由於172.16.xxx.xxx是在ClassB的等級當中,亦即Net_ID是16位元才對。
不過題目給的Net_ID佔用了23個位元喔!
等於是向Host_ID借了(23-16)7個位元用在Net_ID當中。
所以整個IP
的位址會變成這樣:預設:172.16.00000000.00000000
|----Net_ID--------------|--Host---|
Network:172.16.00000000.00000000172.16.0.0
Broadcast:172.16.00000001.11111111172.16.1.255
Netmask:11111111.11111111.11111110.00000000255.255.254.0
鳥哥在這裡有偷懶,因為這個IP段的前16個位元不會被改變,所以並沒有計算成二進位(172.16),
真是不好意思啊~至於粗體部分則是代表host_ID啊!
其實子網路的計算是有偷吃步的,我們知道IP是二進位,每個位元就是2的次方。
又由於IP數量都是平均分配到每個子網路去,
所以,如果我們以192.168.0.0~192.168.0.255這個網段來說,要是給予Net_ID是26位元時,總共分為幾段呢?
因為26-24=2,所以總共用掉兩個位元,因此有2的2次方,得到4個網段。
再將256個IP平均分配到4個網段去,
那我們就可以知道這四個網段分別是:
192.168.0.0~192.168.0.63
192.168.0.64~192.168.0.127
192.168.0.128~192.168.0.191
192.168.0.192~192.168.0.255
有沒有變簡單的感覺啊?那你再想想,如果同樣一個網段,那Net_ID變成27個位元時,又該如何計算呢?自己算算看吧!
無層級IP:CIDR(ClasslessInterdomainRouting)
一般來說,如果我們知道了Network以及Netmask之後,就可以定義出該網域的所有IP了!因為由Netmask就可以推算出來
Broadcast的IP啊!因此,我們常常會以Network以及Netmask來表示一個網域,例如這樣的寫法:
Network/Netmask
192.168.0.0/255.255.255.0
192.168.0.0/24<==因為Net_ID共有24個bits
另外,既然Netmask裡面的Net_ID都是1,那麼ClassC共有24bits
的Net_ID,所以啦,就有類似上面192.168.0.0/24這樣的寫法囉!這就是一般網域的表示方法。
同理可證,在上述的偷吃步計算網域方法中,四個網段的寫法就可以寫成:
192.168.0.0/26
192.168.0.64/26
192.168.0.128/26
192.168.0.192/26
事實上,由於網路細分的情況太嚴重,為了擔心路由資訊過於龐大導致網路效能不佳,因此,某些特殊情況下,
我們反而是將Net_ID借用來作為Host_ID的情況!這樣就能夠將多個網域寫成一個啦!舉例來說,我們將256個ClassC
的私有IP(192.168.0.0~192.168.255.255)寫成一個路由資訊的話,那麼這個網段的寫法就會變成:
192.168.0.0/16,反而將192開頭的ClassC變成classB的樣子了!
這種打破原本IP代表等級的方式(透過Netmask的規範)就被稱為無等級網域間路由(CIDR)囉!
(註14)
老實說,你無須理會啥是無等級網域間路由啦!只要知道,那個Network/Netmask的寫法,通常就是CIDR的寫法!
然後,你也要知道如何透過Netmask去計算出Network,Broadcast及可用的IP等,那你的IP概念就相當完整了!^_^
2.3.5路由概念
我們知道在同一個區網裡面,可以透過IP廣播的方式來達到資料傳遞的目的。
但如果是非區網內的資料呢?
這時就得要透過那個所謂的郵局(路由器)的幫忙了!這也是網路層非常重要的概念喔!先來看看什麼是區網吧!
例題:
請問192.168.10.100/25與192.168.10.200/25是否在同一個網域內?
答:
如果經過計算,會發現192.168.10.100的Network為192.168.10.0,但是192.168.10.200的
Network卻是192.168.10.128,由於Net_ID不相同,所以當然不在同一個網段內!
關於Network與Netmask的算法則請參考上一小節。
如上題所述,那麼這兩個網段的資料無法透過廣播來達到資料的傳遞啊,那怎辦?
此時就得要經過IP的路徑選擇(routing)功能啦!我們以下面圖示的例子來做說明。
下列圖示當中共有兩個不同的網段,分別是NetworkA與NetworkB,這兩個網段是經由一部路由器
(ServerA)來進行資料轉遞的,好了,那麼當PC01這部主機想要傳送資料到PC11時,
他的IP封包該如何傳輸呢?
圖2.3-2、簡易的路由示意圖
我們知道NetworkA(192.168.0.0/24)與NetworkB(192.168.1.0/24)是不同網段,所以PC01與PC11
是不能直接互通資料的。
不過,PC01與PC11是如何知道他們兩個不在同一個網段內?這當然是透過Net_ID
來發現的!那麼當主機想要傳送資料時,他主要的參考是啥?
很簡單!是『路由表(routetable)』,每部主機都有自己的路由表』,
讓我們來看一看預設的情況下,PC01要如何將資料傳送到PC02呢?
查詢IP封包的目標IP位址:
當PC01有IP封包需要傳送時,主機會查閱IP封包表頭的目標IP位址;
查詢是否位於本機所在的網域之路由設定:
PC01主機會分析自己的路由表,當發現目標IP與本機IP的Net_ID相同時(同一網域),則PC01
會直接透過區網功能,將資料直接傳送給目的地主機。
查詢預設路由(defaultgateway):
但在本案例中,PC01與PC11並非同一網域,因此PC01會分析路由表當中是否有其他相符合的路由設定,
如果沒有的話,就直接將該IP封包送到預設路由器(defaultgateway)上頭去,在本案例當中defaultgateway
則是ServerA這一部。
送出封包至gateway後,不理會封包流向:
當IP由PC01送給ServerA之後,PC01就不理會接下來的工作。
而ServerA接收到這個封包後,
會依據上述的流程,也分析自己的路由資訊,然後向後繼續傳輸到正確的目的地主機上頭。
Tips Gateway/Router:網關/路由器的功能就是在負責不同網域之間的封包轉遞
(IPForwarding),由於路由器具有IPForwarding的功能,並且具有管理路由的能力,
所以可以將來自不同網域之間的封包進行轉遞的功能。
此外,你的主機與你主機設定的
Gateway必定是在同一個網段內喔!
大致的情況就是這樣,所以每一部主機裡面都會存在著一個路由表(Route
table),資料的傳遞將依據這個路由表進行傳送!而一旦封包已經經由路由表的規則傳送出去後,
那麼主機本身就已經不再管封包的流向了,因為該封包的流向將是下一個主機
(也就是那部Router)來進行傳送,而Router在傳送時,也是依據Router
自己的路由表來判斷該封包應該經由哪裡傳送出去的!整體來說,資料傳送有點像這樣:
圖2.3-3、路由的概念
PC01要將資料送到ServerBingo去,則依據自己的路由表,將該封包送到
ServerA去,ServerA再繼續送到ServerB,然後在一個一個的接力給他送下去,最後總是可以到達
ServerBingo的。
上面的案例是一個很簡單的路由概念,事實上,Internet上面的路由協定與變化是相當複雜的,因為
Internet上面的路由並不是靜態的,他可以隨時因為環境的變化而修訂每個封包的傳送方向。
舉例來說,數年前在新竹因為土木施工導致台灣西部整個網路纜線的中斷。
不過南北的網路竟然還是能通,為什麼呢?因為路由已經判斷出西部纜線的終止,
因此他自動的導向台灣東部的花蓮路線,雖然如此一來繞了一大圈,而且造成網路的大塞車,
不過封包還是能通就是了!這個例子僅是想告訴大家,我們上面提的路由僅是一個很簡單的靜態路由情況,
如果想要更深入的瞭解route,請自行參考相關書籍喔!^_^。
此外,在屬於Public的Internet環境中,由於最早時的IP分配都已經配置妥當,
所以各單位的路由一經設定妥當後,上層的路由則無須擔心啊!IP的分配可以參考底下的網頁:
台灣地區IP核發情況:http://rms.twnic.net.tw/twnic/User/Member/Search/main7.jsp?Order=inet_aton(Startip)
2.3.6觀察主機路由:
route
既然路由是這麼的重要,而且『路由一旦設定錯誤,
將會造成某些封包完全無法正確的送出去!』
所以我們當然需要好好的來觀察一下我們主機的路由表啦!還是請再注意一下,
每一部主機都有自己的路由表喔!觀察路由表的指令很簡單,就是
route,這個指令挺難的,我們在後面章節再繼續的介紹,這裡僅說明一些比較簡單的用法:
[root@www~]#route[-n]
選項與參數:
-n:將主機名稱以IP的方式顯示
[root@www~]#route
KernelIProutingtable
DestinationGatewayGenmaskFlagsMetricRefUseIface
192.168.0.0*255.255.255.0U000eth0
127.0.0.0*255.0.0.0U000lo
default192.168.0.2540.0.0.0UG000eth0
[root@www~]#route-n
KernelIProutingtable
DestinationGatewayGenmaskFlagsMetricRefUseIface
192.168.0.00.0.0.0255.255.255.0U000eth0
127.0.0.00.0.0.0255.0.0.0U000lo
0.0.0.0192.168.0.2540.0.0.0UG000eth0
#上面輸出的資料共有八個欄位,你需要注意的有幾個地方:
#Destination:其實就是Network的意思;
#Gateway:就是該介面的Gateway那個IP啦!若為0.0.0.0表示不需要額外的IP;
#Genmask:就是Netmask啦!與Destination組合成為一部主機或網域;
#Flags:共有多個旗標可以來表示該網域或主機代表的意義:
#U:代表該路由可用;
#G:代表該網域需要經由Gateway來幫忙轉遞;
#H:代表該行路由為一部主機,而非一整個網域;
#Iface:就是Interface(介面)的意思。
在上面的例子當中,鳥哥是以PC01這部主機的路由狀態來進行說明。
由於PC01為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喔!所以,幾乎每一部主機都會有一個
defaultgateway來幫他們負責所有非網域內的封包轉遞!這是很重要的概念喔!^_^!
關於更多的路由功能與設定方法,我們在第八章當中會再次的提及呢!
2.3.7IP與MAC:鏈結層的
ARP與RARP協定
現在我們知道Internet上面最重要的就是那個IP了,也會計算所謂的區域網路與路由。
但是,事實上用在傳遞資料的明明就是乙太網路啊!乙太網路主要是用網卡卡號(MAC)的嘛!這就有問題啦!那這兩者(IP
與MAC)勢必有一個關連性存在吧?沒錯!那就是我們要談到的ARP(Address
ResolutionProtocol,網路位址解析)協定,以及RARP(ReversARP,反向網路位址解析)
當我們想要瞭解某個IP其實是設定於某張乙太網路卡上頭時,我們的主機會對整個區網發送出ARP封包,
對方收到ARP封包後就會回傳他的MAC給我們,我們的主機就會知道對方所在的網卡,那接下來就能夠開始傳遞資料囉。
如果每次要傳送都得要重新來一遍這個ARP協定那不是很煩?因此,當使用ARP協定取得目標IP與他網卡卡號後,
就會將該筆記錄寫入我們主機的ARPtable中(記憶體內的資料)記錄20分鐘(註14)。
例題:
如何取得自己本機的網卡卡號(MAC)
答:
在Linux環境下
[root@www~]#ifconfigeth0
eth0Linkencap:EthernetHWaddr00:01:03:43:E5:34
inetaddr:192.168.1.100Bcast:192.168.1.255Mask:255.255.255.0
inet6addr:fe80::201:3ff:fe43:e534/64Scope:Link
UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1
.....
在Windows環境下
C:\DocumentsandSettings\admin..>ipconfig/all
....
PhysicalAddress.........:00-01-03-43-E5-34
....
那如何取得本機的ARP表格內的IP/MAC對應資料呢?就透過arp這個指令吧!
[root@www~]#arp-[nd]hostname
[root@www~]#arp-shostname(IP)Hardware_address
選項與參數:
-n:將主機名稱以IP的型態顯示
-d:將hostname的hardware_address由ARPtable當中刪除掉
-s:設定某個IP或hostname的MAC到ARPtable當中
範例一:列出目前主機上面記載的IP/MAC對應的ARP表格
[root@www~]#arp-n
AddressHWtypeHWaddressFlagsMaskIface
192.168.1.100ether00:01:03:01:02:03Ceth0
192.168.1.240ether00:01:03:01:DE:0ACeth0
192.168.1.254ether00:01:03:55:74:ABCeth0
範例二:將192.168.1.100那部主機的網卡卡號直接寫入ARP表格中
[root@www~]#arp-s192.168.1.10001:00:2D:23:A1:0E
#這個指令的目的在建立靜態ARP
如同上面提到的,當你發送ARP封包取得的IP/MAC對應,這個記錄的ARPtable
是動態的資訊(一般保留20分鐘),他會隨時隨著你的網域裡面電腦的IP更動而變化,所以,即使你常常更動你的電腦
IP,不要擔心,因為ARPtable會自動的重新對應IP與MAC的表格內容!但如果你有特殊需求的話,
也可以利用『arp-s』這個選項來定義靜態的ARP對應喔!
2.3.8ICMP協定
ICMP的全名是『InternetControlMessageProtocol,網際網路訊息控制協定』。
基本上,ICMP是一個錯誤偵測與回報的機制,最大的功能就是可以確保我們網路的連線狀態與連線的正確性!
ICMP也是網路層的重要封包之一,不過,這個封包並非獨立存在,而是納入到IP的封包中!也就是說,
ICMP同樣是透過IP封包來進行資料傳送的啦!因為在Internet上面有傳輸能力的就是IP封包啊!
ICMP有相當多的類別可以偵測與回報,底下是比較常見的幾個ICMP的類別(Type):
類別代號類別名稱與意義
0EchoReply(代表一個回應信息)
3DestinationUnreachable(表示目的地不可到達)
4SourceQuench(當router的負載過高時,此類別碼可用來讓發送端停止發送訊息)
5Redirect(用來重新導向路由路徑的資訊)
8EchoRequest(請求回應訊息)
11TimeExceededforaDatagram(當資料封包在某些路由傳送的現象中造成逾時狀態,此類別碼可告知來源該封包已被忽略的訊息)
12ParameterProblemonaDatagram(當一個ICMP封包重複之前的錯誤時,會回覆來源主機關於參數錯誤的訊息)
13TimestampRequest(要求對方送出時間訊息,用以計算路由時間的差異,以滿足同步性協定的要求)
14TimestampReply(此訊息純粹是回應TimestampRequest用的)
15InformationRequest(在RARP協定應用之前,此訊息是用來在開機時取得網路信息)
16InformationReply(用以回應InfromationRequest訊息)
17AddressMaskRequest(這訊息是用來查詢子網路mask設定信息)
18AddressMaskReply(回應子網路mask查詢訊息的)
那麼我們是如何利用ICMP來檢驗網路的狀態呢?最簡單的指令就是ping與traceroute了,
這兩個指令可以透過ICMP封包的輔助來確認與回報網路主機的狀態。
在設定防火牆的時候,
我們最容易忽略的就是這個ICMP的封包了,因為只會記住TCP/UDP而已~事實上,
ICMP封包可以幫助連線的狀態回報,除了上述的8可以考慮關閉之外,基本上,ICMP封包也不應該全部都擋掉喔!
2.4TCP/IP的傳輸層相關封包與資料
網路層的IP封包只負責將資料送到正確的目標主機去,但這個封包到底會不會被接受,或者是有沒有被正確的接收,
那就不是IP的任務啦!那是傳送層的任務之一。
從圖2.1-4我們可以看到傳送層有兩個重點,
一個是連接導向的TCP封包,一個是非連接導向的UDP封包,這兩個封包很重要啊!資料能不能正確的被送達目的,
與這兩個封包有關喔!
2.4.1可靠連線的TCP協定
在前面的OSI七層協定當中,在網路層的IP之上則是傳送層,而傳送層的資料打包成什麼?
最常見的就是TCP封包了。
這個TCP封包資料必須要能夠放到IP的資料袋當中才行喔!
所以,我們將圖2.1-4簡化一下,將MAC,IP與TCP的封包資料這樣看:
圖2.4-1、各封包之間的相關性
想當然爾,TCP也有表頭資料來記錄該封包的相關資訊囉?沒錯啦~TCP封包的表頭是長這個樣子的:
4bits
6bits
6bits
8bits
8bits
SourcePort
DestinationPort
SequenceNumber
AcknowledgeNumber
DataOffset
Reserved
Code
Window
Checksum
UrgentPointer
Options
Padding
Data
圖2.4-2、TCP封包的表頭資料
上圖就是一個TCP封包的表頭資料,各個項目以SourcePort,DestinationPort及Code
算是比較重要的項目,底下我們就分別來談一談各個表頭資料的內容吧!
SourcePort&DestinationPort(來源埠口&目標埠口)
什麼是埠口(port)?我們知道IP封包的傳送主要是藉由IP位址連接兩端,
但是到底這個連線的通道是連接到哪裡去呢?沒錯!就是連接到port上頭啦!
舉例來說,鳥哥的網站有開放WWW伺服器,這表示鳥站的主機必須要啟動一個可以讓client
端連接的端口,這個端口就是port(中文翻譯成為埠口)。
同樣的,用戶端想要連接到鳥哥的鳥站時,就必須要在client
主機上面啟動一個port,這樣這兩個主機才能夠利用這條『通道』來傳遞封包資料喔!這個目標與來源port
的紀錄,可以說是TCP封包上最重要的參數了!
SequenceNumber(封包序號)
由於TCP封包必須要帶入IP封包當中,所以如果TCP資料太大時(大於IP封包的容許程度),
就得要進行分段。
這個SequenceNumber就是記錄每個封包的序號,可以讓收受端重新將TCP的資料組合起來。
AcknowledgeNumber(回應序號)
為了確認主機端確實有收到我們client端所送出的封包資料,我們client
端當然希望能夠收到主機方面的回應,那就是這個AcknowledgeNumber的用途了。
當client端收到這個確認碼時,就能夠確定之前傳遞的封包已經被正確的收下了。
DataOffset(資料補償)
在圖2.4-2倒數第二行有個Options欄位對吧!那個Options的欄位長度是非固定的,而為了要確認整個TCP
封包的大小,就需要這個標誌來說明整個封包區段的起始位置。
Reserved(保留)
未使用的保留欄位。
Code(ControlFlag,控制標誌碼)
當我們在進行網路連線的時候,必須要說明這個連線的狀態,好讓接收端瞭解這個封包的主要動作。
這可是一個非常重要的控制碼喔!這個欄位共有6個bits,分別代表
6個控制碼,若為1則為啟動。
分別說明如下:
URG(Urgent):若為1則代表該封包為緊急封包,
接收端應該要緊急處理,且圖2.4-1當中的UrgentPointer欄位也會被啟用。
ACK(Acknowledge):若為1代表這個封包為回應封包,
則與上面提到的AcknowledgeNumber有關。
PSH(Pushfunction):若為1時,代表要求對方立即傳送緩衝區內的其他對應封包,而無須等待緩衝區滿了才送。
RST(Reset):如果RST為1的時候,表示連線會被馬上結束,而無需等待終止確認手續。
這也就是說,
這是個強制結束的連線,且發送端已斷線。
SYN(Synchronous):若為1,表示發送端希望雙方建立同步處理,
也就是要求建立連線。
通常帶有SYN標誌的封包表示『主動』要連接到對方的意思。
FIN(Finish):若為1,表示傳送結束,所以通知對方資料傳畢,
是否同意斷線,只是發送者還在等待對方的回應而已。
其實每個項目都很重要,不過我們這裡僅對ACK/SYN有興趣而已,這樣未來在談到防火牆的時候,你才會比較清楚為啥每個
TCP封包都有所謂的『狀態』條件!那就是因為連線方向的不同所致啊!底下我們會進一步討論喔!
至於其他的資料,就得請您自行查詢網路相關書籍了!
Window(滑動視窗)
主要是用來控制封包的流量的,可以告知對方目前本身有的緩衝器容量(ReceiveBuffer)
還可以接收封包。
當Window=0時,代表緩衝器已經額滿,所以應該要暫停傳輸資料。
Window的單位是byte。
Checksum(確認檢查碼)
當資料要由發送端送出前,會進行一個檢驗的動作,並將該動作的檢驗值標注在這個欄位上;
而接收者收到這個封包之後,會再次的對封包進行驗證,並且比對原發送的Checksum
值是否相符,如果相符就接受,若不符就會假設該封包已經損毀,進而要求對方重新發送此封包!
UrgentPointer(緊急資料)
這個欄位是在Code欄位內的URG=1時才會產生作用。
可以告知緊急資料所在的位置。
Options(任意資料)
目前此欄位僅應用於表示接收端可以接收的最大資料區段容量,若此欄位不使用,
表示可以使用任意資料區段的大小。
這個欄位較少使用。
Padding(補足欄位)
如同IP封包需要有固定的32bits表頭一樣,Options由於欄位為非固定,
所以也需要Padding欄位來加以補齊才行。
同樣也是32bits的整數。
談完了TCP表頭資料後,再來讓我們瞭解一下這個表頭裡面最重要的埠口資訊吧!
通訊埠口
在上圖的TCP表頭資料中,最重要的就屬那16位元的兩個咚咚,亦即來源與目標的埠口。
由於是16
位元,因此目標與來源埠口最大可達65535號(2的16次方)!
那這個埠口有什麼用途呢?上面稍微提到過,網路是雙向的,伺服器與用戶端要達成連線的話,
兩邊應該要有一個對應的埠口來達成連線通道,好讓資料可以透過這個通道來進行溝通。
那麼這個埠口怎麼打開呢?就是透過程式的執行!舉例來說,鳥哥的網站上,必須要啟動一個WWW伺服器軟體,
這個伺服器軟體會主動的喚起port80來等待用戶端的連線。
你想要看我網站上的資料,就得要利用瀏覽器,
填入網址,然後瀏覽器也會啟動一個埠口,並將TCP的表頭填寫目標埠口為80,而來源埠口是你主機隨機啟動的一個埠口,
然後將TCP封包封裝到IP後,送出到網路上。
等鳥站主機接收到你這個封包後,再依據你的埠口給予回應。
這麼說你或許不好理解,我們換個說法好了。
假如IP是網路世界的門牌,那麼這個埠口就是那個門牌號碼上建築物的樓層!
每個建築物都有1~65535層樓,你需要什麼網路服務,就得要去該對應的樓層取得正確的資料。
但那個樓層裡面有沒有人在服務你呢?
這就得要看有沒有程式真的在執行啦。
所以,IP是門牌,TCP是樓層,真正提供服務的,
是在該樓層的那個人(程式)!
Tips 曾經有一個朋友問過我說:『一部主機上面這麼多服務,那我們跟這部主機進行連線時,該主機怎麼知道我們要的資料是
WWW還是FTP啊?』就是透過埠口啊!因為每種Client軟體他們所需要的資料都不相同,例如上面提到的瀏覽器所需要的資料是
WWW,所以該軟體預設就會向伺服器的port80索求資料;而如果你是使用filezilla來進行與伺服器的FTP
資料索求時,filezilla當然預設就是向伺服器的FTP相關埠口(預設就是port21)
進行連接的動作啦!所以當然就可以正確無誤的取得Client端所需要的資料了
再舉個例子來說,一部主機就好像是一間多功能銀行,該銀行內的每個負責不同業務的窗口就好像是通訊埠口,
而我們民眾就好像是Client端來的封包。
當你進入銀行想要繳納信用卡帳單時,
一到門口服務人員就會指示你直接到該窗口去繳納,當然,如果你是要領錢,服務人員就會請你到領錢的窗口去填寫資料,
你是不會跑錯的對吧!^_^。
萬一跑錯了怎麼辦?呵呵!當然該窗口就會告訴你『我不負責這個業務,你請回去!』,
呵呵!所以該次的連線就會『無法成功』咯!
特權埠口(PrivilegedPorts)
你現在瞭解了埠口的意義後,再來想想,網路既然是雙向的,一定有一個發起端。
問題是,到底要連線到伺服器取得啥玩意兒?
也就是說,哪支程式應該在哪個埠口執行,以讓大家都知道該埠口就是提供哪個服務,如此一來,才不會造成廣大用戶的困擾嘛!
所以囉,Internet上面已經有很多規範好的固定port(well-knownport),
這些portnumber通常小於1024,且是提供給許多知名的網路服務軟體用的。
在我們的Linux環境下,各網路服務與portnumber的對應預設給他寫在
/etc/services檔案內喔!
底下鳥哥列出幾個常見的portnumber與網路服務的對應:
連接埠口服務名稱與內容
20FTP-data,檔案傳輸協定所使用的主動資料傳輸埠口
21FTP,檔案傳輸協定的命令通道
22SSH,較為安全的遠端連線伺服器
23Telnet,早期的遠端連線伺服器軟體
25SMTP,簡單郵件傳遞協定,用在作為mailserver的埠口
53DNS,用在作為名稱解析的領域名稱伺服器
80WWW,這個重要吧!就是全球資訊網伺服器
110POP3,郵件收信協定,辦公室用的收信軟體都是透過他
443https,有安全加密機制的WWW伺服器
另外一點比較值得注意的是,小於1024以下的埠口要啟動時,
啟動者的身份必須要是root才行,所以才叫做特權埠口嘛!這個限制挺重要的,大家不要忘記了喔!
不過如果是client端的話,由於client端都是主動向server端要資料,
所以client端的portnumber就使用隨機取一個大於1024以上且沒有在用的portnumber。
SocketPair
由於網路是雙向的,要達成連線的話得要伺服器與用戶端均提供了IP與埠口才行。
因此,我們常常將這個成對的資料稱之為SocketPair了!
來源IP+來源埠口(SourceAddress+SourcePort)
目的IP+目的埠口(DestinationAddress+DestinationPort)
由於IP與埠口常常連在一起說明,因此網路定址常常使用『IP:port』來說明,例如想要連上鳥哥的網站時,
正確的鳥哥網站寫法應該是:『linux.vbird.org:80』才對!
2.4.2TCP的三向交握
TCP被稱為可靠的連線封包,主要是透過許多機制來達成的,其中最重要的就是三向交握的功能。
當然,TCP傳送資料的機制非常複雜,有興趣的朋友請自行參考相關網路書籍。
OK,那麼如何藉由TCP的表頭來確認這個封包有實際被對方接收,並進一步與對方主機達成連線?
我們以底下的圖示來作為說明。
圖2.4-3、三向交握之封包連接模式
在上面的封包連接模式當中,在建立連線之前都必須要通過三個確認的動作,
所以這種連線方式也就被稱為三向交握(Three-wayhandshake)。
那麼我們將整個流程依據上面的A,B,C,D四個階段來說明一下:
A:封包發起
當用戶端想要對伺服器端連線時,就必須要送出一個要求連線的封包,此時用戶端必須隨機取用一個大於1024
以上的埠口來做為程式溝通的介面。
然後在TCP的表頭當中,必須要帶有SYN
的主動連線(SYN=1),並且記下發送出連線封包給伺服器端的序號(Sequencenumber=10001)。
B:封包接收與確認封包傳送
當伺服器接到這個封包,並且確定要接收這個封包後,就會開始製作一個同時帶有SYN=1,ACK=1的封包,
其中那個acknowledge的號碼是要給client端確認用的,所以該數字會比(A步驟)裡面的
Sequence號碼多一號(ack=10001+1=10002),
那我們伺服器也必須要確認用戶端確實可以接收我們的封包才行,所以也會發送出一個Sequence(seq=20001)
給用戶端,並且開始等待用戶端給我們伺服器端的回應喔!
C:回送確認封包
當用戶端收到來自伺服器端的ACK數字後(10002)就能夠確認之前那個要求封包被正確的收受了,
接下來如果用戶端也同意與伺服器端建立連線時,就會再次的發送一個確認封包(ACK=1)
給伺服器,亦即是acknowledge=20001+1=20002囉。
D:取得最後確認
若一切都順利,在伺服器端收到帶有ACK=1且ack=20002序號的封包後,就能夠建立起這次的連線了。
也就是說,你必須要瞭解『網路是雙向的』這個事實!
所以不論是伺服器端還是用戶端,都必須要透過一次SYN與ACK來建立連線,所以總共會進行三次的交談!
在設定防火牆或者是追蹤網路連線的問題時,這個『雙向』的概念最容易被忽略,
而常常導致無法連線成功的問題啊!切記切記!
Tips 鳥哥上課談到TCP最常做的事就是,叫一個同學起來,實際表演三向交握給大家看!
1.鳥哥說:A同學你在不在?2.A同學說:我在!那鳥哥你在不在?3.鳥哥說:我也在
此時兩個人就確認彼此都可以聽到對方在講啥,這就是可靠連線啦!^_^
2.4.3非連接導向的UDP協定
UDP的全名是:『UserDatagramProtocol,用戶資料流協定』,UDP
與TCP不一樣,UDP不提供可靠的傳輸模式,因為他不是連線導向的一個機制,這是因為在UDP
的傳送過程中,接受端在接受到封包之後,不會回覆回應封包(ACK)給發送端,所以封包並沒有像
TCP封包有較為嚴密的檢查機制。
至於UDP的表頭資料如下表所示:
16bits
16bits
SourcePort
DestinationPort
MessageLength
Checksum
Data
圖2.4-4、UDP封包的表頭資料
TCP封包確實是比較可靠的,因為通過三向交握嘛!不過,也由於三向交握的緣故,TCP封包的傳輸速度會較慢。
至於UDP封包由於不需要確認對方是否有正確的收到資料,故表頭資料較少,所以UDP就可以在Data
處填入更多的資料了。
同時UDP比較適合需要即時反應的一些資料流,例如影像即時傳送軟體等,
就可以使用這類的封包傳送。
也就是說,UDP傳輸協定並不考慮連線要求、連線終止與流量控制等特性,
所以使用的時機是當資料的正確性不很重要的情況,例如網路攝影機!
另外,很多的軟體其實是同時提供TCP與UDP的傳輸協定的,舉例來說,查詢主機名稱的DNS
服務就同時提供了UDP/TCP協定。
由於UDP較為快速,所以我們client端可以先使用UDP來與伺服器連線。
但是當使用UDP連線卻還是無法取得正確的資料時,便轉換為較為可靠的TCP傳輸協定來進行資料的傳輸囉。
這樣可以同時兼顧快速與可靠的傳輸說!
Tips 那麼上課時怎麼介紹UDP呢?很簡單喔!鳥哥就會說:『現在老師就是在進行UDP的傳送,因為老師一直講一直講,
俺也沒有注意到你有沒有聽到,也不需要等待你的回應封包!就這樣一直講!當然,你沒有聽到鳥哥講啥,我也不會知道...』
2.4.4網路防火牆與
OSI七層協定
由上面的說明當中,我們知道資料的傳送其實就是封包的發出與接受的動作啦!並且不同的封包上面都有不一樣的表頭
(header),此外,封包上面通常都會具有四個基本的資訊,那就是socketpair裡面提到的『來源與目的IP以及來源與目的端的
portnumber』。
當然啦,如果是可靠性連線的TCP封包,還包含ControlFlag裡面的SYN/ACK
等等重要的資訊呢!好了,開始動一動腦筋,有沒有想到『網路防火牆』的字眼啊?
封包過濾式的網路防火牆可以抵擋掉一些可能有問題的封包,
Linux系統上面是怎麼擋掉封包的呢?其實說來也是很簡單,既然封包的表頭上面已經有這麼多的重要資訊,
那麼我就利用一些防火牆機制與軟體來進行封包表頭的分析,並且設定分析的規則,當發現某些特定的
IP、特定的埠口或者是特定的封包資訊(SYN/ACK等等),那麼就將該封包給他丟棄,
那就是最基本的防火牆原理了!
舉例來說,大家都知道Telnet這個伺服器是挺危險的,而Telnet使用的
portnumber為23,所以,當我們使用軟體去分析要送進我們主機的封包時,
只要發現該封包的目的地是我們主機的port23,就將該封包丟掉去!那就是最基本的防火牆案例啦!
如果以OSI七層協定來說,每一層可以抵擋的資料有:
第二層:可以針對來源與目標的MAC進行抵擋;
第三層:主要針對來源與目標的IP,以及ICMP的類別(type)進行抵擋;
第四層:針對TCP/UDP的埠口進行抵擋,也可以針對TCP的狀態(code)來處理。
更多的防火牆資訊我們會在第九章防火牆與第七章認識網路安全當中進行更多的說明喔!
2.5連上Internet前的準備事項
講了這麼多,其實我們最需要的僅是『連接上Internet』啦!那麼在Internet上面其實使用的是TCP/IP
這個通訊協定,所以我們就需要PublicIP來連接上Internet啊!你說對吧~
不過,你有沒有發現一件事,那就是『為啥我不知道Yahoo的主機IP,但是俺的主機卻可以連到Yahoo主機上?』
如果你有發現這個問題的話,哈哈!你可以準備開始設定網路囉~^_^
2.5.1用IP
上網?主機名稱上網?DNS系統?
講完了上頭的基本資料,現在你知道要連上Internet就得要有TCP/IP才行!尤其是那重要的IP啊!
問題是,電腦網路是依據人類的需要來建立的,不過人類對於IP這一類的數字並不具有敏感性,即使
IP已經被簡化為十進位了,但是人類就是對數字沒有辦法啊!怎麼辦?沒關係,反正電腦都有主機名稱嘛!
那麼我就將主機名稱與他的IP對應起來,未來要連接上該電腦時,只要知道該電腦的主機名稱就好了,因為
IP已經對應到主機名稱了嘛!所以人類也容易記憶文字類的主機名稱,電腦也可以藉由對應來找到他必須要知道的
IP,啊!真是皆大歡喜啊!
這個主機名稱(Hostname)對應IP的系統,就是鼎鼎有名的DomainNameSystem
(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伺服器裡面進行更多更詳細的說明喔!這裡僅提個大綱!
2.5.2一組可以連上
Internet的必要網路參數
從上面的所有說明當中,我們知道一部主機要能夠使用網路,必須要有IP,而IP
的設定當中,就必須要有IP,Network,Broadcast,Netmask等參數,此外,還需要考慮到路由裡面的
DefaultGateway才能夠正確的將非同網域的封包給他傳送出去。
另外,考慮到主機名稱與IP的對應,所以你還必須要給予系統一個DNS伺服器的IP才行~
所以說,一組合理的網路設定需要哪些資料呢?呵呵!就是:
IP
Netmask
Network
Broadcast
Gateway
DNS
其中,由於Network與Broadcast可以經由IP/Netmask的計算而得到,因此需要設定於你PC端的網路參數,
主要就是IP,Netmask,DefaultGateway,DNS這四個就是了!
沒錯!就是這些資料!如果你是使用ADSL撥接來上網的話,上面這些資料都是由
ISP直接給你的,那你只要使用撥接程式進行撥接到ISP的工作之後,
這些資料就自動的在你的主機上面設定完成了!但是如果是固定制
(如學術網路)的話,那麼就得自行使用上面的參數來設定你的主機囉!缺一不可呢!以
192.168.1.0/24這個ClassC為例的話,那麼你就必須要在你的主機上面設定好底下的參數:
IP:由192.168.1.1~192.168.1.254
Netmask:255.255.255.0
Network:192.168.1.0
Broadcast:192.168.1.255
Gateway:每個環境都不同,請自行詢問網路管理員
DNS:也可以直接設定成168.95.1.1
2.6重點回顧:
雖然目前的網路媒體多以乙太網路為標準,但網路媒體不只有乙太網路而已;
Internet主要是由InternetNetworkInformationCenter(INTERNIC)所維護;
乙太網路的RJ-45網路線,由於568A/568B接頭的不同而又分為平行線與跳線;
乙太網路上最重要的傳輸資料為CarrierSenseMultipleAccesswithCollisionDetect(CSMA/CD)技術,
至於傳輸過程當中,最重要的MAC訊框內以硬體位址(hardwareaddress)資料最為重要;
透過八蕊的網路線(Cat5以上等級),現在的乙太網路可以支援全雙工模式;
OSI七層協定為一個網路模型(model),並非硬性規定。
這七層協定可以協助軟硬體開發有一個基本的準則,
且每一分層各自獨立,方便使用者開發;
現今的網路基礎是架構在TCP/IP這個通訊協定上面;
資料鏈結層裡重要的資訊為MAC(MediaAccessControl),亦可稱為硬體位址,而
ARPTable可以用來對應MAC與軟體位址(IP);
在網路媒體方面,Hub為共享媒體,因此可能會有封包碰撞的問題,至於
Switch由於加入了switchport與MAC的對應,因此已經克服了封包碰撞的問題,也就是說,Switch
並不是共享媒體;
IP為32bits所組成的,為了適應人類的記憶,因此轉成四組十進位的數據;
IP主要分為NetID與HostID兩部份,加上Netmask
這個參數後,可以設定『網域』的概念;
根據IP網域的大小,可將IP的等級分為A,B,C三種常見的等級;
Loopback這個網段在127.0.0.0/8,用在每個作業系統內部的迴圈測試中。
網域可繼續分成更小的網域(subnetwork),主要是透過將Host_ID借位成為Net_ID的技術;
IP只有兩種,就是PublicIP與PrivateIP,中文應該翻譯為
公共IP與私有(或保留)IP,私有IP與私有路由不可以直接連接到Internet上;
每一部主機都有自己的路由表,這個路由表規定了封包的傳送途徑,在路由表當中,最重要者為預設的通訊閘
(Gateway/Router);
TCP協定的表頭資料當中,那個Code(controlflags)所帶有的ACK,SYN,FIN等為常見的旗標,
可以控制封包的連線成功與否;
TCP與IP的IPaddress/Port可以組成一對socketpair
網路連線都是雙向的,在TCP的連線當中,需要進行用戶端與伺服器端兩次的SYN/ACK封包發送與確認,
所以一次TCP連線確認時,需要進行三向交握的流程;
UDP通訊協定由於不需要連線確認,因此適用於快速即時傳輸且不需要資料可靠的軟體中,例如即時通訊;
ICMP封包最主要的功能在回報網路的偵測狀況,故不要使用防火牆將他完全擋掉;
一般來說,一部主機裡面的網路參數應該具備有:IP,Netmask,
Network,Broadcast,Gateway,DNS等;
在主機的port當中,只有root可以啟用小於1024以下的port;
DNS主要的目的在於進行Hostname對應IP的功能;
2.7本章習題
在ISP提供的網路服務中,他們提到傳輸速度為1.5M/382K,請問這個數據的單位為何?
數據單位為bits/second,與慣用的bytes差8倍。
什麼是MAC(MediaAccessControl),MAC主要的功能是什麼?
MediaAccessControl的縮寫,為乙太網路硬體訊框的規格,乙太網路就是以MAC訊框進行資料的傳送。
目前MAC也常被用為乙太網路卡卡號的代稱。
什麼是封包碰撞?為什麼會發生封包碰撞?
當主機要使用網路時,必須要先進行CSMA/CD監聽網路,如果(1)網路使用頻繁(2)網路間隔太大,
則可能會發生監聽時均顯示無主機使用,但發出封包後卻發生同步發送封包的情況,此時兩個封包就會產生碰撞,
造成資料損毀。
ARPTable的作用為何?如何在我的Linux察看我的ARP表格?
ARP協定主要在分析MAC與IP的對應,而解析完畢後的資料會存在系統的記憶體中,
下次要傳送到相同的IP時,就會主動的直接以該MAC傳送,而不發送廣播封包詢問整個網域了。
利用arp-n即可
簡略說明Netmask的作用與優點;
Netmask可以用來區分網域,且Netmask可以有效的增加網路的效率,這是因為Netmask
可以定義出一個網域的大小,那麼broadcast的時間就可以降低很多!一般來說,
我們如果要將一個大網域再細分為小網域,也需要藉由Netmask來進行subnet的切割。
我有一組網域為:192.168.0.0/28,請問這個網域的Network,Netmask,Broadcast
各為多少?而可以使用的IP數量與範圍各是多少?
因為共有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喔!
承上題,如果網域是192.168.0.128/29呢?
因為是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喔!
我要將192.168.100.0/24這個ClassC的網域分為4個子網域,請問這四個子網域要如何表示?
既然要分為四個網域,也就是還需要藉助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。
如何觀察Linux主機上面的路由資訊(routetable)?
路由資訊的觀察可以下達route來直接察看!或者是下達route-n亦可
TCP封包上面的SYN與ACK標誌代表的意義為何?
SYN代表該封包為該系列連線的第一個封包,亦即是主動連線的意思;
ACK則代表該封包為確認封包,亦即是回應封包!
什麼是三向交握?在哪一種封包格式上面才會有三向交握?
使用TCP封包才會有三向交握。
TCP封包的三向交握是一個確認封包正確性的重要步驟,通過SYN,SYN/ACK,
ACK三個封包的確認無誤後,才能夠建立連線。
至於UDP封包則沒有三向交握喔!
試說明何謂有網管?無網管的switch?此外,這些switch的硬體應算在OSI七層協定的第幾層?
有網管者,會在switch內部加入其他的小型OS,藉以控管IP或MAC的流通;
通常基礎的switch僅達控管MAC,故為OSI第二層(資料鏈結層)
為何ISP有時候會談到『申請固定8個IP,其中只有5個可以用』,你覺得問題出在哪裡?
如果以網域的觀念來看,他的netmask會是多少?
因為如果是一個網域的話,那麼八個IP前後(Host_ID全為0與1的條件)為Network及Broadcast,
加上一個在ISP處的Gateway,所以僅有5個可以用。
因為有8個IP,所以其netmask後八bits為11111000
,故為255.255.255.248。
Internet協定中共包含"NetworkAccessLayer","InternetLayer","TransportLayer","ApplicationLayer",
請將這四層與OSI七層協定的內容進行連結(自行上網查詢相關文章說明);
NetworkAccessLayer:涵蓋Data-Link及PhysicalLayer
InternetLayer:也是NetworkLayer
TransportLayer:也是TransportLayer
ApplicationLayer:涵蓋ApplicationLayer,PersentatinLayer,SessionLayer.
請自行上網查詢關於NetBIOS這個通訊協定的相關理論基礎,並請說明NetBIOS是否可以跨路由?
請自行參考網中人的網路基礎文章
什麼是Socketpair?包含哪些基本資料?
由IP封包的IPaddress與TCP封包的portnumber達成,分別為目的端的IP/port與本地端的IP/port。
IP有一段AClass的網段分給系統做為測試用,請問該網段為?設定的名稱為?
127.0.0.0/8,loopback
ICMP這個協定最主要的目的為?同時做為『回應』的類別為第幾類?
做為網路檢測之用,為第8類(echorequest)
IP封包表頭有個TTL的標誌,請問該標誌的基本說明為何?其數據有何特性?
為該封包的存活時間,該時間每經過一個node都會減少一,當TTL為0時,該封包會被路由器所丟棄。
該數據最大為255。
在Linux當中,如何查詢每個portnumber對於服務的對應(filename)
/etc/services檔案中有紀錄
什麼是星形連線?優點為何?
利用一hub/switch連結所有的網路設備的一種連線方式,最大的好處是,每個『網路設備與switch之間』都是獨立的,
所以所以每個主機故障時均不會影響其他主機的連線。
請說明CSMA/CD的運作原理?
發送流程
主機欲使用網路時,會先監聽網路,若網路沒有被使用時,才會準備傳送,否則繼續監聽;
當資料傳送鐘,發現有碰撞情況時,則會重新監聽網路,並且重新發送一次該封包;
若重複發生碰撞16次,則網路會癱瘓;
接收流程
主機如果沒有在傳送資料,則會監聽網路,並且主動在接收的狀態下;
若接收到一個封包,並且該表頭所載MAC為本身的網卡卡號,則開始接收該封包,否則將該封包丟棄;
接收過程當中如果發生封包碰撞,則會通知原發送主機碰撞的資料;
封包接收完畢後,會以MAC表頭所載長度同時分析本封包長度,若發生問題,則會通知對方重新傳送。
2.8參考資料與延伸閱讀
特別感謝:
本文在2002/07發出之後,收到相當多朋友的關心,也從而發現了自己誤會的一些基礎的網路理論,真的是感謝好朋友
Netman兄與ZMAN兄的指導!這篇短文在第二版時(2003/08/03)做了相當大幅度的修訂,與原來的文章
(上次更新日期2002/09)已經有一定程度的差異了,第三版又針對整個內容與閱讀順序進行調整
(2010/08),希望網友們如果有時間的話,能夠再次的閱讀,以釐清一些基本概念喔!
註1:粘添壽著,『Internet網路原理與實務』,旗標出版社。
註2:RobertBreyer&SeanRiley著,風信子,張民人譯,『Switched&Fast乙太網路』,旗標出版社
註3:IEEE標準的網站連結:http://standards.ieee.org/
註4:RequestForComment(RFC)技術文件:http://www.rfc-editor.org/
註5:RFC-1122標準的文件資料:ftp://ftp.rfc-editor.org/in-notes/rfc1122.txt
註6:粘添壽老師官網:http://www.tsnien.idv.tw/,
網際網路相關課程:http://120.118.165.46/tsnien/network/index.html(強烈建議前往參閱)
註7:台灣學術網路簡介(TANET):http://www.edu.tw/moecc/content.aspx?site_content_sn=1707
註8:StudyArea之網路基礎:http://www.study-area.org/network/network.htm
註9:維基百科對OSI協定的說明:http://en.wikipedia.org/wiki/OSI_model
註10:PhilDykstra,GigabitEthernetJumboFrames:
http://sd.wareonearth.com/~phil/jumbo.html
註11:Hub與Switch的迷思:http://www.study-area.org/tips/hub_switch.htm
註12:管理IP的單位與相關說明:http://www.internic.org/,
http://www.icann.org/,
http://www.iana.org/,
http://en.wikipedia.org/wiki/IPv4
註13:管理IP的單位:http://www.iana.org/,
台灣地區IP核發情況:http://rms.twnic.net.tw/twnic/User/Member/Search/main7.jsp?Order=inet_aton(Startip)
註14:相關參考資料『TCP/IPIllustrated,Volume1-TheProtocols』,W.Richard
Stevens,資策會中文化部門譯;http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing
PPPoEhttp://en.wikipedia.org/wiki/Point-to-Point_Protocol_over_Ethernet
修改歷史:
2002/07/18:第一次完成日期!
2002/09/26:修改了部分可能引起誤解的文章部分!
2003/08/03:重新編排版面,並且重新檢視文章內容,修訂文章!
2003/08/20:增加重點回顧與課後練習
2003/09/06:加入參考用解答
2004/03/16:修訂N-Way的錯誤,訂正為AutoMDI/MDIX的功能!
2006/02/09:將舊的文章移動到此處
2006/07/12:參考了粘教授與風信子兄的書籍,修改了很多基礎資料喔!還有重點整理,不過,練習尚未更新
2006/07/16:加入習題練習囉!
2007/10/21:圖14那個UDP的表頭資料中,16bits誤植為16bytes,感謝討論區ricky.liu的告知!
2008/04/21:經由網友chyanlong兄的指點,IHL的大小單位誤植為byte,應該是字組(word)才對。
2010/07/22:將基於CentOS4.x所寫的資料放置於此處
2010/08/15:將章節依據TCP/IP相關的層級分別介紹,更改的幅度不小喔!
2011/07/15:將基於CentOS5.x所撰寫的文章移動到此處
2002/07/18以來統計人數
基礎學習篇文件
各版本彙整說明
CentOS7.x
CentOS5.x
FedoraCore4
Mandrake9
RedHat6.1
其他舊文件
基礎訓練篇文件
各版本彙整說明
CentOS8.x-基礎訓練
CentOS7.x-基礎訓練
伺服器篇文件
各版本彙整說明
RockyLinux8.x
CentOS6.x
CentOS5.x
CentOS4.x
RedHat9
RedHat6.1
其他舊文件
其他連結
環境工程模式篇
鳥園討論區
鳥哥舊站
今日
昨日
本月
上月
延伸文章資訊
- 1100 個網路基礎知識看完成半個網路高手– jashliao部落格
有7 個OSI 層:實體層,資料連結層,網路層,傳輸層,工作階段層,展示層和應用層。 3)什麼是骨幹網? 骨幹網路是集中的基礎設施,旨在將不同的路由和 ...
- 2MIS 一定要懂的82 個網路技術知識 - 博客來
從【TCP/IP、區域網路】基本概念, 到【建構網路系統】、【維護網路安全】重要知識, 雙頁圖文對照, 讓你一看就懂! 社群軟體、郵件、網站、聊天軟體、線上遊戲、 ...
- 3[網際網路] 網路基礎知識| PJCHENder 未整理筆記
[網際網路] 網路基礎知識 ... 藉由一定的概念或架構來建立網路的做法,就稱作 網路架構(Network Architecture) ,例如OSI 模型、TCP/IP 模型。
- 4網路基礎知識 - 痞客邦
網路基礎知識連線設備─ 網路卡:目前市面上常見的,皆以乙太網路(Ethernet) 之CSMA/CD (Carrier Sense Multiple Access With Coll.
- 5網路基本概念
網路基本概念(一) 網路種類 (二) 網路協定 (三) IP Address (四) 主機名稱(Host Name)及領域名稱(Domain Name) (五) 網路設備 ...