网络基础 - OSI / IP

OSI 七層協定

目前我們的主機只要能夠取得正確的 IP 與相關參數設定時,你就可以連上 Internet 了, 根本不管你的網路硬體是乙太網路還是光纖網路。而且,你主機的作業系統是啥, Internet 也是不管的! 這是為什麼呢?因為網路的傳輸是有分層架構的,每個分層 (layer) 是可以獨立的。 同時每個分層都有獨自的標準可供依循,例如在網路媒體的硬體部分就可以參考 IEEE 的 802.3 的標準! 如此一來,大家都可以在自己的分層當中找到相關的標準來設定自己的資料,如此網路連結就變的更容易了。 關於網路的分層我們最喜歡拿 OSI (Open system Interconnection) 七層協定來說明喔! 事實上, OSI 七層協定只是一個參考的模型 (model),不過,由於 OSI 所定義出來的七層協定相當良好, 所以拿來當作網路連線解釋真是太棒了!底下就來說說吧!

分層 負責內容
Layer 1
實體層
Physical Layer, PHY
在這個層級當中主要定義了最基礎的網路硬體標準,包括各種網路線、各種無線連線方式,各種設備規範、 以及各種接頭的規則,還有傳輸訊號的電壓等等,反正與硬體有關的標準大多都在這個層級當中定義的!
Layer 2
資料連接層
Data-Link Layer
由於傳送資料的網路媒體是以電子訊號進行傳送,所以我們的資料要使用這樣的訊號傳送時, 就需要制訂各種網路型態的訊框 (frame) 了,才能確保資料可以在不同的網路媒體進行傳送的動作。 所以,在這一層當中就制訂了 frame 的格式以及通過網路的方式。 包括訊框的資料格式、錯誤控制、流量控制、檢查資料傳輸錯誤的方法等等,都在這裡控制。 既然與訊框有關,當然這個層級就與前面提到的 MAC 有很強烈的相關性囉!

但我們知道事實上目前的 Internet 使用的其實是 IP 來進行連線的啊!但硬體資料卻是由訊框所傳送的。 為了要將兩者對應 (MAC 與 IP 的對應),就必須要經由 Address Resolution Protocol (ARP) 這個協定來幫忙解析出對應才行!
Layer 3
網路層
Network Layer
這一層是我們最感興趣的囉~因為我們提及的 IP (Internet Protocol) 就是在這一層定義的, 同時也定義出電腦之間的連線建立、終止與維持等,資料封包 (packet) 的傳輸路徑選擇等等, 因此這個層級當中最重要的除了 IP 之外,就是封包能否到達目的地的路由 (route) 概念了! 此外,這一個網路層可以涵蓋實體層與資料連結層,通常我們不需要設定硬體與相關 MAC 的資料, 就是因為網路層已經 (有點類似) 隱藏了底下兩層,讓我們只要設定好 IP 就能夠上網吶! IP 與 route 的部分我們會在下一小節加以介紹的。
Layer 4
傳送層
Transport Layer
這一個分層定義了發送端與接收端的連線技術(如 TCP 技術), 同時包括該技術的封包格式,資料封包的傳送、流程的控制、傳輸過程的偵測檢查與復原重新傳送等等, 以確保各個資料封包可以正確無誤的到達目的端。
Layer 5
會談層
Session Layer
在這個層級當中主要定義了兩個位址之間的連線通道之連接與掛斷,此外,亦可建立應用程式之對談、 提供其他加強型服務如網路管理、簽到簽退、對談之控制等等。如果說傳送層是在判斷資料封包是否可以正確的到達目標, 那麼會談層則是在確定網路服務建立連線的確認,例如三向交握。這部分我們會在底下的 TCP 技術當中做個說明。
Layer 6
表現層
Presentation Layer
我們在應用程式上面所製作出來的資料格式不一定符合網路傳輸的標準編碼格式的! 所以,在這個層級當中,主要的動作就是:將來自本地端應用程式的資料格式轉換(或者是重新編碼)成為網路的標準格式, 然後再交給底下傳送層等的協定來進行處理。所以,在這個層級上面主要定義的是網路服務(或程式)之間的資料格式的轉換, 包括資料的加解密也是在這個分層上面處理。
Layer 7
應用層
Application Layer
完全與程式有關的囉,包括定義出檔案的讀取、複製、開啟、關閉等等, 常見的程式包括有瀏覽器、資料庫處理系統與電子郵件系統等等。

事實上,在上述的七層協定當中,前兩層(實體與資料連接層)主要就是由一些硬體標準所規範出來的, 像我們前一小節提到的乙太網路之 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 訊框的袋子內。
  • 所以,由於最後被傳送的袋子(實體層)的限制,我必須要將 10Mbytes 的檔案先切成數個小包, 然後將這些小包給他包到 TCP 的袋子內,這個袋子記載了我的資料內容。
  • 然後這個袋子還要裝到 IP 這個袋子內,IP 這個袋子會記錄我的住址以及要傳送到的目的地的住址,
  • 最後再將這個 IP 的袋子裝到 MAC 的訊框袋子內, 這個袋子就記錄了可以在同一區域內傳遞袋子的網卡卡號了。
之後這個 MAC 的大袋子就會被帶到下個傳遞點去, 當然啦, MAC 這個袋子的傳遞是需要符合 CSMA/CD 以及乙太網路的相關定義的喔! 當傳到目的地後,對方會一個袋子一個袋子的解開,最後拿到他們的資料。不過,由於我的 10Mbytes 已經被分成多個小袋子了,所以每個小袋子內需要有序號,這樣當所有的小袋子都到達目的地後, 對方才可以依照這些序號將所有小袋子內的資料給他整合成為原來的資料啊!
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 的表示式:
00000000.00000000.00000000.00000000   ==> 0.0.0.0
11111111.11111111.11111111.11111111   ==> 255.255.255.255
所以 IP 最小可以由 0.0.0.0 一直到 255.255.255.255 哩!事實上, IP 的組成當中,除了以 32 bits 的組成方式來說明外,還具有所謂的『網域』的概念存在。底下就來談一談什麼是網域吧!
事實上在 IP 的 32 bits 資料中,主要分為 HOST_ID 與 Net_ID 兩部份,我們先以 192.168.0.0 ~ 192.168.0.255 這個 C Class 的網域當作例子來說明好了:
192.168.0.0~192.168.0.255 這個 C Class 的說明:
11000000.10101000.00000000.00000000
11000000.10101000.00000000.11111111
|----------Net_ID---------|-host--|
在 C Class 的範例當中,前面三組數字 (192.168.0) 稱為網域號碼 (Net_ID) ,最後面一組數字則稱為 主機號碼 (Host_ID)。同一個網域當中的定義是『 在同一個物理網段內,主機的 IP 具有相同的 Net_ID ,並且具有獨特的 Host_ID』,那麼這些 IP 群就是同一個網域內的 IP 網段啦!
Tips:
什麼是物理網段呢?當所有的主機都是使用同一個網路媒體串在一起, 這個時候這些主機在實體裝置上面其實是連線在一起的,那麼就可以稱為這些主機在同一個物理網段內了! 同時並請注意,同一個物理網段之內,可以依據不同的 IP 的設定,而設定成多個『IP 網段』喔!
上面例子當中的 192.168.0.1, 192.168.0.2, ...., 192.168.0.255 這些 IP 就是同一個網域內的 IP 群(同一個網域也稱為同一個網段!),請注意,同一個 Net_ID 內,不能具有相同的 Host_ID ,否則就會發生 IP 衝突,可能會造成兩部主機都沒有辦法使用網路的問題! 那麼同一個網域該怎麼設定,與將 IP 設定在同一個網域之內有什麼好處呢?
  • 在同一個網段內,Net_ID 是不變的,而 Host_ID 則是不可重複,此外, Host_ID 在二進位的表示法當中,不可同時為 0 也不可同時為 1 ,例如上面的例子當中, 192.168.0.0 ( Host_ID 全部為 0 )以及 192.168.0.255 ( Host_ID 全部為 1 ) 不可用來作為網段內主機的 IP 設定,也就是說,這個網段內可用來設定主機的 IP 是由 192.168.0.1 到 192.168.0.254;
  • 在同一個網域之內,每一部主機都可以透過 MAC 訊框的格式傳遞資料, 並透過 ARP 協定與廣播封包 (broadcast) 取得 MAC 與 IP 的對應後,直接利用 MAC 訊框傳遞資料。
  • 在同一個物理網段之內,如果兩部主機設定成不同的 IP 網段,則兩部主機無法直接以 MAC 訊框格式進行資料的傳遞,因為廣播封包無法查詢到 MAC 與 IP 的對應。
  • 當 Host_ID 所佔用的位元越大,亦即 Host_ID 數量越多時,表示同一個網域內可用以設定主機的 IP 數量越多。
所以說,貴單位公司內的電腦群,或者是您宿舍或家裡面的所有電腦,當然都設定在同一個網域內是最方便的, 因為如此一來每一部電腦都可以直接透過 MAC 來進行資料的交流,而不必經由 Router ( 路由器 ) 來進行封包的轉遞呢!( Router 這部份在後續才會提及! )。

IP 的分級
好了,現在我們知道 Net_ID 越大時,表示 Host_ID 越少,亦即網域內可以分配的 IP 數量就越少了! 咦!這表示 Net_ID 是有分級的喔!是啊!沒錯~剛剛上面那個 192.168.0.0~192.168.0.255 稱為 Class C, 那還有哪些等級啊?目前 Internet 將 IP 簡單的分類成為三種常見的等級,亦即所謂的 A, B, C class, 他們代表的意義如下:
以二進位說明 Network 第一個數字的定義:
A Class : 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的開頭是 0 |--net--|---------host------------|
B Class : 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的開頭是 10 |------net-------|------host------|
C Class : 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的開頭是 110 |-----------net-----------|-host--|

三種分級在十進位的表示:
A Class :  0.xx.xx.xx ~ 126.xx.xx.xx
B Class : 128.xx.xx.xx ~ 191.xx.xx.xx
C Class : 192.xx.xx.xx ~ 223.xx.xx.xx
在上表中,可能您會覺得很奇怪,咦!那個 127.xx.xx.xx 怎麼不見了?!他應該也是 A Class 的一段吧?!沒錯,是不見了, 因為這個網段被拿去給作業系統做為 內部迴圈網路 ( loopback ) 之用了!在各個作業系統當中,不管該主機的硬體有沒有網路卡, 為了讓作業確認自己的網路沒有問題,所以將 127.xx.xx.xx 這個 A Class 的網段拿到作業系統當中,來做為內部的回路測試!所以啦,這個 127.0.0.1 就不可以用來做為其他網路卡的網路網域之設定喔。

小標題的圖示 Netmask 的用途與子網路的切分
在上一小節當中提到的 A, B, C 三個層級的網域是由 IP 協定預設分配的,在這樣的層級當中,我們可以發現 A Class 可以用於設定電腦主機的 IP 數量 ( Host ) 真的是很多,在同一個 A Class 的網域內,主機的數量可以達到『 256 X 256 X 256 - 2(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 的表示就成為:
 
192.168.0.0~192.168.0.255 這個 C Class 的 Netmask 說明
11000000.10101000.00000000.00000000
11000000.10101000.00000000.11111111
|----------Net_ID---------|-host--| 11111111.11111111.11111111.00000000 <== Netmask 二進位 255 . 255 . 255 . 0 <== Netmask 十進位
將他轉成十進位的話,就成為『 255.255.255.0』啦! 這樣記憶簡單多了吧!照這樣的記憶方法,那麼 A, B, C Class 的 Netmask 表示就成為這樣:
Class A, B, C 三個等級的 Netmask 表示方式:
A Class : 11111111.00000000.00000000.00000000 ==> 255.  0.  0.  0
B Class : 11111111.11111111.00000000.00000000 ==> 255.255.  0.  0
C Class : 11111111.11111111.11111111.00000000 ==> 255.255.255.  0

 

所以說, 192.168.0.0~192.168.0.255 這個 C Class 的網域中,他的 Netmask 就是 255.255.255.0 了!再來,我們剛剛提到了當 Host_ID 全部為 0 以及全部為 1 的時後該 IP 是不可以使用的,因為 Host_ID 全部為 0 的時後,表示 IP 是該網段的 Network ,至於全部為 1 的時後就表示該網段最後一個 IP ,也稱為 Broadcast ,所以說,在 192.168.0.0 ~ 192.168.0.255 這個 IP 網段裡面的相關網路參數就有:

Netmask:   255.255.255.0   <==網域定義中,最重要的參數
Network:   192.168.0.0     <==第一個 IP
Broadcast: 192.168.0.255   <==最後一個 IP
可用以設定成為主機的 IP 數:
192.168.0.1 ~ 192.168.0.254
一般來說,如果我們知道了 Network 以及 Netmask 之後,就可以定義出該網域的所有 IP 了!因為由 Netmask 就可以推算出來 Broadcast 的 IP 啊!因此,我們常常會以 Network 以及 Netmask 來表示一個網域,例如這樣的寫法:

Network/Netmask 192.168.0.0/255.255.255.0 192.168.0.0/24    <==因為 Net_ID 共有 24 個 bits
另外,既然 Netmask 裡面的 Net_ID 都是 1 ,那麼 C Class 共有 24 bits 的 Net_ID ,所以啦,就有類似上面 192.168.0.0/24 這樣的寫法囉!這就是一般網域的表示方法。好了,剛剛提到 C Class 還可以繼續進行子網域 ( Subnet ) 的切分啊,以 192.168.0.0/24 這個情況為例,他要如何再細分為兩個子網域呢?我們已經知道 Host_ID 可以拿來當作 Net_ID,那麼 Net_ID 使用了 25 bits 時,就會如下所示:

原本的 C Class 的 Net_ID 與 Host_ID 的分別
11000000.10101000.00000000.00000000      Network: 192.168.0.0
11000000.10101000.00000000.11111111      Broadcast: 192.168.0.255
|----------Net_ID---------|-host--|

切成兩個子網路之後的 Net_ID 與 Host_ID 為何?
11000000.10101000.00000000.0 0000000  多了一個 Net_ID 了, 為0
11000000.10101000.00000000.1 0000000  多了一個 Net_ID 了, 為1 |----------Net_ID-----------|-host--|

第一個子網路
Network:   11000000.10101000.00000000.0 0000000   192.168.0.0
Broadcast: 11000000.10101000.00000000.0 1111111   192.168.0.127
           |----------Net_ID-----------|-host-|
Netmask:   11111111.11111111.11111111.1 0000000   255.255.255.128
所有 IP 與網域表示式:
192.168.0.0/25 或 192.168.0.0/255.255.255.128

第二個子網路
Network:   11000000.10101000.00000000.1 0000000   192.168.0.128
Broadcast: 11000000.10101000.00000000.1 1111111   192.168.0.255
           |----------Net_ID-----------|-host-|
Netmask:   11111111.11111111.11111111.1 0000000   255.255.255.128
所有 IP 與網域表示式:
192.168.0.128/25 或 192.168.0.128/255.255.255.128

所以說,當再細分下去時,就會得到兩個子網域,而兩個子網域還可以再細分下去喔 (Net_ID 用掉 26 bits ....)。呵呵!如果您真的能夠理解 IP, Network, Broadcast, Netmask 的話,恭喜您,未來的伺服器學習之路已經順暢了一半啦! ^_^

例題二:請試著計算出 172.16.0.0/23 這個網域的 Netmask, Network, Broadcast 等參數

答:
    由於 172.16.xxx.xxx 是在 Class B 的等級當中,亦即 172.16.0.0/16 才對。不過題目中詢問的是 172.16.0.0/23,等於是向 Host_ID 借了 7 個 bits 用在 Net_ID 當中。所以整個 IP 的位址會變成這樣:
    預設:       172  .  16    .0000000 0.00000000
              |----Net_ID--------------|--Host---|
    Network:     172  .  16    .0000000 0.00000000   172.16.0.0
    Broadcast:   172  .  16    .0000000 1.11111111   172.16.1.255
    Netmask:  11111111.11111111.1111111 0.00000000   255.255.254.0
    鳥哥在這裡有偷懶,因為這個 IP 段的前 16 個 bits 不會被改變,所以並沒有計算成二進位( 172.16 ),真是不好意思啊~至於粗體部分則是代表 host_ID 啊!

本文出自 http://linux.vbird.org/linux_server/0110network_basic.php

你可能感兴趣的:(网络基础 - OSI / IP)