osi參考模型

轉:osi參考模型

OSI參考模型是計算機網路體系結構發展的產物,它的基本內容是開放系統通信功能的分層結構。

該模型基於國際標準化組織(ISO)的建議作爲各種層上使用的協議國際標準化的第一步而發展起來的。

這一模型被稱作ISO OSI開放系統互聯參考模型(open system interconnection refertence model),因爲它是關於如何把開放式系統(即爲了與其他系統通信而相互開放的系統)連接起來的,所以我們常簡稱它爲OSI模型。

下圖即爲OSI模型參考圖,共分爲7層,以及標有每層常見的協議:

2016.09.17 OSI七層模型

注:該圖省略了物理介質,物理介質是位於物理層下面,進行真實的物理傳輸。

物理層(Physical Layer)

==該層涉及通信在信道上傳輸的原始比特流==。設計上必須保證一方發出二進制「1」時,另一方收到的也是「1」而不是「0」。

這裏的典型問題有如下幾個:

  1. 是用多少伏特電壓表示「1」,多少伏特電壓表示「0」
  2. 一個比特持續多少微秒
  3. 傳輸是否在兩個方向上同時進行
  4. 最初的連接如何建立和完成通信後連接如何終止
  5. 網絡接插件有多少針以及各針的用途。

這裏的設計主要是處理機械的、電氣的和過程的接口,以及物理層下的物理傳輸介質等問題。

數據鏈路層(Data Link Layer)

該層的主要任務是加強物理層傳輸原始比特的功能,使之對網絡層顯現爲一條無錯線路。

發送方把輸入數據分裝在數據幀(data frame)裏(典型的幀爲幾百字節或幾千字節),按順序傳送各幀,並處理接收方回送的確認幀(acknowledge-ment frame)。因爲物理層僅僅接收和傳送比特流,並不關心它的意義和結構,所以能依賴各鏈路層來產生和識別幀邊界。 
可以通過在幀的前面和後面附加上特殊的二進制編碼模式來達到這一目的。如果這些二進制編碼偶然在數據中出現,則必須採取特殊措施 以避免混淆。

傳輸線路上突發的噪聲干擾可能把幀完全破壞掉。在這種情況下,發送方機器上的數據鏈路軟件必須重傳該幀。然而,相同幀的多次重傳也可能使接收方收到重複幀,比如接收方給發送方的確認丟失以後,就可能收到重複幀。數據鏈路層要解決由於幀的破壞、丟失和重複所出現的問題。數據鏈路層可能向網絡層提供幾類不同的服務,每一類都有不同的服務質量和價格。

數據鏈路層要解決的另一個問題(在大多數層上也存在)是防止高速的發送方的數據把低速的接收方「淹沒」。==因此需要有某種流量調節機制,使發送方知道當前接收方還有多少緩存空間==。通常流量調節和出錯處理同時完成。

如果線路能用於雙向傳輸數據,數據鏈路軟件還必須解決新的麻煩,即從A到B數據幀的確認幀將同從B到A的數據幀一同競爭線路的使用權。借道(piggybacking)就是一種巧妙的方法。

廣播式網絡在數據鏈路層還要處理新的問題,==即如何控制對共享信道的訪問。數據鏈路層的一個特殊的子層 - 介質訪問子層,就是專門處理這個問題的。==

網絡層(Network Layer)

該層關係到子網的運行控制,其中一個關鍵問題是確定分組從源端到目的端如何選擇路由。路由既可以選用網絡中固定的靜態路由表,幾乎保持不變,也可以在每一次會話開始時決定(例如通過終端對話決定),還可以根據當前網絡的負載狀況,高度靈活地爲每一個分組決定路由。

如果在子網中同時出現過多的分組,它們將相互阻塞通路,形成瓶頸。此類擁塞控制也屬於網絡層的範圍。

因爲擁有子網的人總是希望他們提供的子網服務能得到報酬,所以網絡層常常設有記賬功能。最低限度,軟件必須對每一個顧客究竟發送了多少分組、多少字符或多少比特進行記數,以便於生成賬單。當分組跨越國界時,由於雙方稅率可能不同,記賬則更如複雜。

當分組不得不跨越一個網絡以到達目的地時,新的問題又會產生。第二個網絡的尋址方法可能和第一個網絡完全不同;第二個網絡可能由於分組太長而無法接收;兩個網絡使用的協議也可能不同等。網絡層必須解決這些問題,以便異種網絡能夠互聯。

在廣播網絡中,選擇路由問題很簡單,因此網絡層很弱,甚至不存在。

傳輸層(Transport Layer)

該層的基本功能是從會話層接收數據,並且在必要時把它分成較小的單元,傳遞給網絡層,並確保到達對方的各段信息正確無誤,而且,這些任務都必須高效率地完成。從某種意義上講,==傳輸層使會話層不受硬件技術變化的影響==。

通常,會話層每請求建立一個傳輸連接,傳輸層就爲其創建一個獨立的網絡連接。如果傳輸連接需要較高的信息吞吐量,傳輸層也可以爲之創建多個網絡連接,讓數據在這些網絡連接上分流,以提高吞吐量。

另一方面,如果創建或維持一個網絡連接不合算,傳輸層可以將幾個傳輸連接複用到一個網絡連接上,以降低費用。在任何情況下,都要求傳輸層能使多路複用對會話層透明。

傳輸層也要決定最終向會話層、向網絡用戶提供什麼樣的服務。最流行的傳輸連接是一條無錯的、按發送順序傳輸報文或字節的點到點的信道。但是,還有的傳輸服務是不能保證傳輸次序的獨立報文傳輸和多目標報文廣播。採用哪種服務是在建立連接時確定的。

==傳輸層是真正的從源到目標「端到端」的層==。也就是說,源端機上的某程序,利用報文頭和控制報文與目標機上的類似程序進行對話。在傳輸層以下的各層中,協議是每臺機器和它直接相鄰的機器間的協議,而不是最終的源端機與目標機之間的協議,在它們中間可能還有多個路由器。

很多主機有多道程序在運行,這意味着這些主機有多條連接進出,因此需要有某種方式來區別報文屬於哪條連接。識別這些連接的信息可以放人傳輸層的報文頭中。

除了將幾個報文流多路複用到一條通道上,傳輸層還必須解決跨網絡連接的建立和拆除。這需要某種命名機制,使機器內的進程可以講明它希望與誰會話。另外,還需要一種機制以調節通信量,使高速主機不會發生過快地向低速主機傳輸數據的現象。這樣的機制稱爲流量控制(flow control),它在傳輸層(同樣在其他層)中扮演着關鍵角色。主機之間的流量控制和路由器之間的流量控制不同,儘管稍後我們將看到類似的原理對二者都適用。

會話層(Session Layer)

該層允許不同機器上的用戶建立會話(session)關係。會話層允許進行類似傳輸層的普通數據的傳輸,並提供了對某些應用有用的增強服務會話,也可被用於遠程登錄到分時系統或在兩臺機器間傳遞文件。

會話層服務之一是管理對話。會話層允許信息同時雙向傳輸,或任一時刻只能單向傳輸。若屬於後者,則類似於單線鏈路,會話層將記錄此時該輪到哪一方了。

一種與會活有關的服務是令牌管理(token management)。有些協議保證雙方不能同時進行同樣的操作,這一點很重要。爲了管理這些活動,會話層提供了令牌。令牌可以在會活雙方之間交換,==只有持有令牌的一方可以執行某種關鍵操作。==

另一種會話服務是同步(synchronization)。如果網絡平均每小時出現一次大故障,而兩臺計算機之間要進行長達兩小時的文件傳輸時該怎麼辦呢?每一次傳輸中途失敗後,都不得不重新傳輸這個文件。而當網絡再次出現故障時,又可能半途而廢了。爲了解決這個問題,會話層提供了一種方法,即在數據流中插入檢查點。每次網絡崩潰後,僅需要重傳最後一個檢查點以後的數據。

表示層(Presentaltion Layer)

該層完成某些特定的功能,由於這些功能常被請求,因此人們希望找到通用的解決辦法,而不是讓每個用戶來實現。值得一提的是,==表示層以下的各層只關心可靠地傳輸比特流,而表示層關心的是所傳輸的信息的語法和語義。==

表示層服務的一個典型例子是用一種大家一致同意的標準方法對數據編碼。大多數用戶程序之間並不是交換隨機的比特流,而是諸如人名、日期、貨幣數量和發票之類的信息。這些對象是用字符串、整型、浮點數的形式,以及由幾種簡單類型組成的數據結構來表示的。不同的機器有不同的代碼來表示字符串(如ASCII和Unicode)、整型(如二進制反碼和二進制補碼)等。爲了讓採用不同表示法的計算機之間能進行通信,交換中使用的數據結構可以用抽象的方式來定義,並且使用標準的編碼方式。表示層管理這些抽象數據結構,並且在計算機內部表示法和網絡的標準表示法之間進行轉換。

應用層(OppIication Layer)

該層包含大量人們普遍需要的協議。例如,世界上有成百種不兼容的終端型號。如果希望一個全屏幕編輯程序能工作在網絡中許多不同的終端類型上,每個終端都有不同的屏幕格式、插入和刪除文本的換碼序列、光標移動等,其困難可想而知。

解決這一問題的方法之一是定義一個抽象的網絡虛擬終端(network virtual terminal),編輯程序和其他所有程序都面向該虛擬終端。而對每一種終端類型,都寫一段軟件來把網絡虛擬終端映射到實際的終端。

例如,當把虛擬終端的光標移到屏幕左上角時,該軟件必須發出適當的命令使真正終端的光標移動到同一位置。所有虛擬終端軟件都位於應用層。

另一個應用層功能是文件傳輸。不同的文件系統有不同的文件命名原則,文本行有不同的表示方式等。不同的系統之間傳輸文件所需處理的各種不兼容問題,也同樣屬於應用層的工作。此外還有電子郵件、遠程作業輸入、名錄查詢和其他各種通用和專用的功能。