from http://www.pcnet.idv.tw/pcnet/network/network_ip_model.htm
介紹 OSI 模型
我們已經知道 TCP/IP 能夠應用在不同的網路﹐這就必須要有一套大家都遵守的的標準才能保證彼此能夠溝通。因為數據通訊領域的專用屬於和技術實在太廣泛了﹐沒有任何一位電腦專家能夠熟悉全部的內容。因此必須有一套公認而且通用的參考架構以供釐清各項標準。在我們了解 TCP/IP 協定之前﹐有一個公認的網路模型我們必須要先了解的﹐它就是由 International Standardization Organisation (ISO) 於1978年開始開發的一套標準架構﹕Reference Model for Open System Interconnection (OSI) 模型。OSI 常被引用來說明數據通訊協定的結構及功能﹐成為討論通訊時代共同依據﹐已經被通訊界廣泛實用且有一致的認知了。
OSI 把數據通訊的各種功能分為七個層級﹐各司其職﹐但有相互依存﹑合作。但在功能上﹐它們又可以被劃分為兩組﹕
- 網路群組﹕由實體層﹑資料連接層﹑和網路層組成。
- 使用者群組﹕由傳送層﹑會談層﹑表現層﹑和應用層組成。
您可以從下圖看各個協定層的排列關係﹕
應用層 (Application) |
表現層 (Presentation) |
會談層 (Session) |
傳送層 (Transport) |
網路層 (Network) |
資料連接層 (Data Link) |
實體層 (Physical) |
OSI 參考模型
OSI 提供了一個很有用的模式去解釋各個不同層面的網路協定﹐這些協定就像堆積木一樣﹐層層疊上去﹐因此此一架構常被稱為堆疊(stack)﹐或是協定堆疊。每一個協定都只和與之對應的協定溝通﹐然後將結構向相鄰的協定解釋。彼此之間如何傳送資料都有必然的協定﹐而且層層相扣﹐共同協力完成任務。各層無需知道其他層是如何工作的﹐只關心相同層級的協定就行﹔但層與層之間卻有一套既定協議相互交換處理結果。這樣有一個很明顯的好處是﹕這留給各層都有自己的設計與發展空間﹐當某一層要進行協定更新﹐其他層無需同時被修改。
下面分別對各個曾經做一個簡單的描述﹕
- 實體層(Physical Layer)
- 在這層裡面您必須作出一些機械和電子方面的決定﹐也就是要定義出在終端和網絡之間要使用的設備。同時﹐採用何種佈線也要在這裡決定出來>這層實際是定義了應用在網路傳輸中的各種設備規格﹐以及如何將硬體所攜載的信號轉換成電腦可以理解的電子信號( 0 和 1 )﹐這通常都是設備上面之韌體(Firmware)的功能。這些規格一般是由硬體的生產廠商制定的﹐比如﹕數據線的接腳﹑電壓﹑波長﹑相位﹑等等。
例如網線﹑網路卡﹑電話線﹐等等﹐都是屬於實體層的範疇﹐也就是用來連接兩台電腦的可以攜帶數據的媒體﹕可以是銅線﹑也可以是紅外線﹑也可以是光學纖維。我們常見的實體層是用來連接辦公室網路的 Ethernet 和 Token Ring 線路﹐或者是連接 modem 的電話線。而機器上的網路卡﹐或是連接遠端的 modem ﹐都能夠將物理媒體上面的電子脈沖轉換成電腦所能讀得懂的 0 和 1。 - 資料連接層(Data Link Layer)
- 在這層指定了要採用的信息單元 (message unit﹐通常在 LAN上面的信息單元被稱為 frame﹐翻譯為“訊框”或“框包”)﹐還有它們的格式﹑以及如何通過網絡。每一個 frame 都會被賦予一個 MAC 位址碼和偵錯監測值(checksum)。
Ethernet 的 Data Link Layer Frame 看起來如下圖﹕
序言
(Preamble)目的地
位址
(Destination)來源位址
(Source)信息類型
(Message Type)數據
(Data)封包監測資料
(Frame check sequence)8 bytes 6 bytes 6 bytes 2 bytes 46-1500 bytes 4 bytes
Data Link Layer Frame 結構
數據在實體層是以bit為單位來傳輸的﹐資料連接層要制定不同網路形態的資料框包格式﹐確保數據能夠在不同的網路實體(比如﹕同軸電纜﹑雙絞線﹑光纖﹑電話數據線﹑等等)上進行資料傳送。有一個 Binary Synchronous Communications 協定﹐會判定出一個框包如果在丟失的情況下﹐要等待多久會被重新發送﹐以及如何處理重發的框包和封包確認。這個協定也是在這層裡面定義。我們通常用來撥接上網的 PPP 協定就是在這層裡面定義的﹔同時﹐一般給 Mainframe 使用的 xDLC 協定也屬於這裡的範圍。
資料連接層通常會管轄以下的功能﹕
- 網路卡的實體位址(Physical Address)﹐也被稱為MAC(Media Access Control) Address
- 虛擬電路(Virtual Circuit)連接和邏輯連結(Logical Link)的建立和結束
- 控制框包的傳送和錯誤檢測方式
- 框包的傳送及接收順序和傳遞方式
- 判定框包的建立及重組分界
- 檢測框包的確認﹐以及在得不到回應或重複發送的情形下進行修復的程序
- 處理實體層的轉換和管理
- 對接收框包進行檢錯和確認
- 檢查發送框包的實體位址以確保資料能正確的被送抵目的地之網路層
在 IEEE802 標準裡面﹐還將資料連接層再劃分為兩層﹕Media Access Control 和 Logical Link Control ﹐請參閱下表﹕
OSI
模式IEEE 802
模式IEEE 802 標準資料
連接層Logical Link Control802.2其它802標準Media Access ControlCSMA/CDToken BusToken Ring實體層Physical802.3802.4802.5
IEEE 802 / 803.x 標準
總體來說﹐這層的工作就是保證一個無錯誤的物理上的數據傳輸。 - 網路層(Network Layer)
- 這層就好比是一個中間人界乎於網絡功能和使用者功能之間。它會定義出封包在網路中移動的路由和其處理過程﹐這層還決定了網路是如何進行管理功能的﹐比如﹐發送狀態信息給接點和規範封包的流動等。
網路層的主要功能是讓封包(packet)在不同的網路之間成功地進行傳遞。它規定了網路的定址方式﹐及處理資料在不同網路之間的傳遞方式﹑處理子網路之間的傳遞﹑決定路由路徑﹑網路環境﹑資料處理順序﹑等等工作。
發送端電腦在封包被傳送出去之前﹐都會先為其建立 header ﹐作為在網路或子網間進行路由的依據。網路層在辨認和處理資料的時候﹐會忽略由高層協定制定的定義﹐只負責為數據在一個或多個網路間建立﹑維護﹑和終止連接。
網路層通常都有如下的這些功能﹕
- 如果封包不是屬於同一個網路的時候﹐會將之交由 router 處理
- 控制數據流量﹐當 router 的緩衝區飽和的時候﹐會通知數據傳輸設備使用其它路徑或暫停發送封包
- 當封包體積超過 router 的 MTU (Maximum Transmission Unit) 數值的時候﹐允許 router 對封包進行重組後再進行傳送。(一些所謂的增加 modem上網速度的軟體﹐就是因為可以對電腦的 MTU 數值進行最佳化﹐儘量減少 router 的封包重組﹐以達到最高的數據傳輸效率。)
- 負責 MAC 位址和網路位址(如 IP 位址﹑IPX 位址)之間的解釋和轉換
一個有趣的事情是﹐網路層還能將底層協定(網路功能)對上層協定(使用者功能)躲起來。這樣﹐在網路的使用者就可以使用不同種類的硬體了。這是非常好的事情﹐假如您用來建網的材料都不盡相同的話。 - 傳送層(Transport Layer)
- 在這層﹐將會設定如何控制節點之間的資料傳遞﹐還有錯誤檢測和修正的方法。
由於大多數網路﹐如 Ethernet 和 Token Ring等﹐由於物理上面的限制﹐一次所通過的數據流通常只有數千 byte 而已(IP 封包最大體積為 65536 bytes)﹐然而許多需要在網路中傳輸的資料都會超過這個數值。傳送層的主要功能是確保電腦資料正確的傳送到目的地。它的工作就是“打包”﹐也就是將電腦資料變成封包的形態﹐再賦以一定的檢測手段﹐將資料正確的傳到目的電腦﹐然後再將封包重組回資料。封包如果殘缺則進行重發﹐也能夠將重複的封包剔除。
傳送層可以等資料收集到足夠大的數量的時候才發送出去,並非應用程式每次產生一個數據就進行一次傳送,也就能減少了不必要的傳輸次數﹐以保證高效率的傳輸﹔反之,當應用程式產生大資料量數據時,則將之分拆成較小的封包再進行傳送。
傳送層的主要功能有﹕
- 接管由上層協定傳來的資料﹐並進行“分拆”和“打包”等工作。
- 利用點對點的方式進行資料傳送和回應的確認。
- 在得到接收端之資料緩衝區飽和信息之後﹐暫時停止資料發送。
- 能在單一位址上處理不同的程式協定(如ftp﹑http﹑telnet等)﹐並分別進行追蹤及轉換。
- 會談層(Session Layer)
- 這層定義了如何連接和掛斷連接﹐和在網路上面的數據如何交換。
這層所負責的是建立和管理電腦與電腦之間的溝通模式﹐也就是在資料真正進行傳送之前設定並建立好連線。這裡定義了連線的請求和結束﹑傳送和接收狀態的設定﹑等等動作。
當節點 A 要建立和節點 B 的連線的時候﹐ 會先發出“連線請求”訊息, 若對方接受連線,則回應“建立請求”訊息﹐然後雙方就建立好一個會談了﹔當會談結束的時候﹐也是先由節點 A 送出一個“結束請求”信息﹐等對方確認這個請求之後﹐那麼會談也就真正結束了。
會談層的功能主要有這些﹕
- 允許程式以電腦名稱註冊成為網路上唯一的位址。
- 在電腦之間建立﹑監測﹑和結束虛擬電路(Virtual Circuit)。
- 負責電腦之間的信息同步﹐監測資料溝通狀態﹐並對錯誤信息做出處理。
會談層為不同的程式以及與之對應的位於另一台電腦的程式﹐提供了可靠的溝通渠道。在某些溝通渠道中使用的是 half-duplex(半雙工﹐即單向) 的模式﹐有些則使用 full-duplex(全雙工﹐即雙向) 的模式﹐為程式之間協定好共同認可的模式﹐並進行同步和管理等責任﹐都是會談層所肩負起的。 - 表現層(Presentation Layer)
- 在這層﹐定義了數據的語法(syntax)﹑變更﹑和格式。當應用程式的語法和格式都不同的時候﹐這層還將定義了如何翻譯這些不同。
如果您想將您的 PC 通過網路連接 mainframe 電腦﹐那您就必須使用合適的 mainframe 文字串﹐通常會是 EBCDIS(External Binary Coded Decimal for Interchange Code)﹐然而您的 PC 使用的卻是 ASCII 碼(American Standard Code for Information Interchange)﹐這兩種編碼格式是截然不同的。表現層則是主要負責在不同機器之間進行編碼轉換。當應用程式產生資料要進行傳送的時候﹐表現層會將之換成網路的標準編碼格式再交由下層協定處理﹔然後當資料抵達目的地﹐表現層也會將網路的編碼換成對方應用程式所需的格式。
表現層的主要功能如下﹕
- 字元碼轉換﹐例如﹕ASCII 碼和 EDCDIC 碼之間的轉換。
- 資料形態轉換﹐例如﹕CR 碼和 CR-LF 碼﹑整數和浮點數之間的轉換。
- 對資料進行壓縮和加密﹐以提高速度和增加安全性。
- 應用層(Application Layer)
- 剛才談到的表現層是負責將傳入來的資料種類轉換成 PC 的資料種類﹐不過﹐應用層則只轉換應用程式相關的檔案格式。表現層的轉換與應用層的轉換之間﹐最大的分別是﹕表現層是針對特定的主機的 CPU 類型﹐而應用層則針對特定應用程式。
在 TCP/IP 協定家族中,應用層所定義的還有一些應用程式功能﹐例如 FTP﹐HTTP﹐TELNET 等﹐主要負責客戶端和伺服端的連接。相信您對這些程式或多或少接觸過﹐比如您要從網上下載資料﹐可以通過 FTP 客戶程式﹐也可以通過流覽器將資料拿到。但在您的機器和在網路上面的伺服器﹐都必須使用相應的應用程式功能才可以做到﹐這在 TCP/IP 的網路環境裡面﹐通常都會是以不同的 port 號碼來讓不同的程式進行溝通。Port 號碼可以隨你喜歡來定﹐只要你知道號碼是多少就可以用相對的程式來進行交談了﹐不過﹐為了不至於太混亂﹐讓大家有規可尋﹐TCP/IP 也指定了一些常用的 port 來給常用的程式使用﹐例如﹐HTTP 使用 80﹑FTP使用 21﹑TELNET使用 23﹑諸如此類... 不過﹐需要知道的是﹕在 TCP/IP 協定中,進行 port 連接的功能卻應該是傳送層的事情。對應用程式而言,它是與 socket 作溝通,一個 socket 就是一個羅輯位址和 port 了。
應用層是整個 OSI 模型的最後一層﹐它定義了應用程式是如何進入 OSI 模式,但它自己並不屬於應用程式。
以上所列舉的協定層並非是他們的詳細定義﹐只是一個框架而已。您可以把OSI的協定模式當成是人體的骨架﹐當您套上這個框架之後﹐您就差不多可以描繪出大致形狀了﹐雖然外表會有所不同﹐但骨子裡還是一樣的。比方說﹐TCP/IP 和 Microsoft 網路也有其對應的協定層﹐我們可以從下面列表中看看它們的比較﹕
Open System Interconnection | Internet Protocol Suite | Microsoft Network |
應用層 (Application) | 應用層 (Application) | 應用界面層 (Application Interface) |
表現層 (Presentation) | ||
會談層 (Session) | ||
傳送層 (Transport) | 傳送層 (Transport) | 傳送設備界面層 (Transport Device Interface) |
網路層 (Network) | 網路層 (Network) | |
資料連接層 (Data Link) | 實體層 (Physical) | 網路驅動界面層 (Network Driver Interface) |
實體層 (Physical) | 實體網路層 (Physical Network Layer) |
網路協定層級裡面﹐每一層都可以說是作為其連接的上下層的界面。這樣﹐在和網路另端的節點溝通的時候﹐只需和相同層級溝通就可以了﹐而無需理會其它層級使用的是什麼協定。在發送端機器上﹐各個層級對會對數據封包加上自己的header﹐然後再傳給下一級協定﹔當封包抵達接收端﹐各層級也只關心相對應的header﹐並根據協定對封包進行處理﹐完畢之後則將header除去﹐然後傳給上級協定則可。
封裝的概念 ( Encapsulation )
我們要知道,OSI 只是一個模形,其主要功能是定議了網路傳輸方面的參考模式。在其分層的結構中,可以從下圖看出 OSI 層級的資料流情況﹕
當您有一份報價單( data )要寄給海外的客戶﹐將之交給秘書之後﹐秘書會幫你把信封( header1 )打好﹐然後貼好郵票投進郵筒﹐然後郵局將信件分好類﹐再把相同地區的郵件放進更大的郵包( header2 )附運﹐然後航空公司也會把郵件和其它貨物一起用飛機貨櫃( hearder3 )運達目的機場﹔好了﹐目的地機場只接管不同飛機所運來的貨物﹐然後把郵包( header2 )交給對方郵局﹐郵局把郵件分好類之後﹐把信封( header1 )遞送到客戶那裡﹐然後客戶打開信封就可以看到報價單( data )了。
由此可見﹐網路的層級分工﹐其實跟我們日常的生活模式也有許多相似的功能﹕
- 上例子中的飛機好比是“實體層”﹐我們當然也可以選擇使用輪船或汽車等運輸工具﹔
- 我們也可以把機場管理局﹐或碼頭﹑車站的管理機構看成是“資料連接層”﹐他們會規定了不同的交通工具使用的不同規則﹐例如﹕班次﹑泊位﹑進場/出場時間間隔﹑接管/分發貨物﹑等等﹔
- 郵局可以說是“網路層”﹐到底使用那個機場﹑港口﹑車站﹐或是貨物經由哪條路徑傳遞最迅速﹐這些都由郵局來管好了﹔
- 要是您寄的資料有一本書那麼厚﹐但郵局一次最多只能幫你寄十頁﹐那麼您就得將資料拆開﹐編好序號﹐分裝在好幾個信封裡﹐再進行郵寄﹐這和“傳送層”的“打包”功能差不多。如果您同時還和好幾個客戶洽談好幾樣事務﹐您也得分辨出哪些資料是屬於哪個客戶的﹐“傳送層”也有類似的追蹤功能﹔
- “會談層”相信也不難理解﹐先假設您和客戶之間的溝通都必須使用郵件(沒有電話﹐傳真﹐更沒有email)﹐您總不會茂茂然的就先把報價單寄出去吧﹖您會先征詢對方的同意﹐才會開始寄出去﹐然後您可以告訴對方報價單全部寄送完畢﹐那麼得到對方確認之後﹐就可以說完成一次“會談”了﹔
- 如果您的秘書聰明能幹﹐還能夠幫您翻譯各國語言和文件格式﹐那您以經有了“表現層”了﹔
- “應用層”更不用多說了﹐您和您的客戶不會只收發報價單吧﹖還有很多合同啦﹑預算啦﹑策略啦﹑邀請啦﹑等一大堆東西﹐可能除了生意上的﹐間或還會聊聊男人和女人呢!
這裡我們不難看出﹕每一個上層封包對下層來說﹐都是下層封包的數據﹔下層協定無需理會上層如何進行封裝﹐一律照單全收﹐然後加以自己的封裝﹐再把整個加封後的封包傳給更下一層。
OSI 協定模型可以說是網路通訊的基石﹐尤其是層級與層級之間﹑上層和下層的關係﹐更是網路學習中的關鍵概念。對 OSI 模型的理解程度﹐將直接影響日後整個網路管理生涯﹐這包括軟硬體的選擇以及通訊服務程式的開發和日常的網路管理。
分層協定的缺點
從前面的說明中﹐我們可以體會到分層協定設計的一個基本構思﹕讓協定設計者將複雜的問題分成數個子問題﹐然後再分別處理。然而﹐所付出的代價是﹕會令到分層的軟體變得非常低效。比方說﹕應用程式將一串位元組交到傳送層﹐經過封包切割之後﹐再傳到網路上。在此一過程中﹐傳送層會選擇最大的封包體積﹐以達到傳輸的最佳化﹐以配合訊框在實體網路中傳送的最佳化。倘若軟體的分層過嚴的話﹐傳送層就無法知道底層的路由狀況﹐也不知道與之直接相連的網路有哪些。更甚者﹐傳送層也不可能知道訊框的格式﹐也就不能知道如何界定封包體積的大小。所以﹐分層過嚴反而會成為傳送最佳化的障礙
因此﹐協定設計者在設計協定軟體時﹐通常會略為放寬限制﹐以允許路由選擇、MTU 之類的訊息廣播。同時在分配緩衝區的時候﹐會預先留下標頭空間讓低層填充資訊﹐或在高層協定傳送訊框時保留標頭資訊。如此設計便能在最佳化與分層結構中取得平衡。
Internet Protocol Suit 模型
在上面提到的七層協定﹐在實作應用中﹐某些層級常常會被整合在一起。但您要記住的一點是﹕無論程式設計者如何定義這些協定﹐(例如﹐把它們分為兩層或四層)﹐這些層級在實際上都會被執行的。下面所介紹的 Internet Protocol Suit 模型﹐就是這樣的一個例子。 事實上﹐國際間並沒有一套公認的層級模型來描述 TCP/IP﹐但許多技術文件都把 OSI 的七層架構精簡為三到五層不等。我們這裡所描述的將採用四層架構模型﹐如下圖﹕
應用層 (Application Layer) |
傳送層 (Transport Layer) |
網際網路層 (Internet Layer) |
網路存取層 (Network Access Layer) |
TCP/IP 層級模型
各層的定義如下﹕
- 應用層
- 這層是 TCP/IP 模型與應用程式之間的界面﹐向使用者提供應用程式服務所需的連接﹐然後透過其下的傳送層來發送和接收資料。應用程式根據傳送層所需的形態來選用資料格式﹐例如一串獨立的資料﹐或是一連續位元的組流。
TCP/IP 協定家族中,本身就定義了眾多的應用工具與協定,例如:HTTP、TELNET、NFS、等等。不同的協定使用不同的穿送層協定。
- 傳送層
- 傳送層的主要目的向應用程式之間提供點對點的通訊。它規劃了資料流量﹐也提供一可靠傳輸以確保資料能正確的抵達目的地。傳送層必須能夠提供一套機制來控制和檢測資料傳送的正確性﹐例如安排接收端傳回確認信息﹑重發遺失資料﹑以及剔除重複資料﹑等等。
傳送層軟體會將應用程式送下來的資料切割分包﹐以符合下層傳輸要求的一定體積﹐交由網際網路層處理。傳送層協定會在每一個資料包上面加上一個標頭 (header)﹐記錄一些資訊﹐用來辨識該資料包屬於哪個個程式和由哪個程式來接收。再配以檢測和供接收機器來檢測資料是否完整。
TCP/IP 的傳送層協定主要分為 TCP 與 UDP 兩種,前者為可靠性傳輸、後者為非可靠性傳輸。
- 網際網路層
- 這裡處理的是機器之間的通訊﹐為每一個傳送層交下來的封包加上 IP 標頭。網際網路層協定會根據傳送層的位址資料﹐使用路由演算法進行路由判斷﹐然後在 IP 標頭上填上路由資訊﹐以及其它相關的傳送選項資訊﹔再把封包交由下層處理。
這層協定的處理關鍵是路由﹐假如資料包的目的地是本機﹐則將標頭去除﹐將剩下部份交給合適的傳送協定處理﹔否則﹐就要判斷封包是直接傳送到本地網路節點﹐還是要傳送給路由器。如有需要﹐還會送出 ICMP 錯誤和控制訊息﹐同時也要處理接收到的 ICMP 訊。
- 網路存取層
- 本層的主要功能是把資料直接送給網路裝置。它定義了如何用網路來傳送 IP 資料段﹐它必須知道底層網路的細節。相對於 OSI 模型﹐TCP/IP 模型的網路存取層整合了 OSI 的實體層﹑資料連接層﹑和網路層的功能。但大部份底層標準是有廠商或 IEEE 制定的。
針對不同的網路實體標準﹐網路存取層有許多不同種類的協定與之對應。正如我們從前面的 OSI 學到的層級觀念來理解﹐就算其中某些協定得到更新﹐但對於上層協定來說﹐是沒影響的。因為TCP/IP 的設計刻意隱藏了較底層的功能。
網路存取層的功能﹐除了把 IP 資料段封裝到網路傳送的實體訊框(frame)之外﹐它還同時負責把 IP 對應到網路設備的實體位址。這樣才能讓以 IP 位址為傳送依據的資料﹐能透過底層網路傳送。
與 OSI 模型一樣﹐TCP/IP 的資料流也是逐層傳遞的﹐請參考下圖﹕
事實上 TCP/IP 模型和 OSI 模式的原理和概念都是一樣的﹐只是在定義上和細節處理上的不同而已。關於 TCP/IP 分層協定的資料﹐可以參考 RFC-791 和 RFC-817。
TCP/IP 層級資料流
0 意見:
張貼留言