如何生動形象、切中要點地講解 OSI 七層模型和兩主機傳輸過程?

osi老師講著忘著,並且對各層只有概念沒有深入理解作用。希望可以有個通俗但不淺薄的講解


我們來打個比方,假設A公司老總要寄文件給B公司的老總。

老闆會喊他秘書過來,說把這玩意寄給B公司的老總。

秘書拿到快遞後,首先選取了「倪豐快遞」,並且查到了B公司的地址,把文件裝到了快遞信封里,填好快遞單,就交給了快遞小哥了。

而倪豐快遞則是把近期收到的快遞裝成了一個集裝箱,找到了某卡車司機,說,把這箱子運到 B 市的集散中心去。

然後這封快遞送到了 B 公司的老總秘書那裡去,秘書拆開快遞,把文件遞給了 B 公司老總。

縱觀整個過程,我們發現,

1. 老總在把快遞交給秘書時,他並不關心秘書是怎麼打包的,也不關心秘書找了什麼法子寄出去的,他只期待對方老總能收到即可;

2. 秘書則既不關心「倪豐快遞」是如何具體用什麼運輸方式運到 B 市的,又不關心這份文件的內容,只期待這封快遞能夠被送達對方的公司地址;

3. 「倪豐快遞」則只關心裝著快遞的集裝箱能夠被司機運往 B 市集散中心,卻不關心司機究竟走了什麼路線,開了什麼牌子的貨車,也不關心這封快遞信封里裝了什麼東西;

4. 司機只關心怎麼把集裝箱運到目的地,而不會關心集裝箱裡面裝的是什麼。

OSI 7 層模型則與之類似,都是下層為上層提供傳輸服務,不關心上層傳輸的內容,而上層也不關心下層傳輸的手段,只期望能將信息最終發到通信對端的相應層次上。

再補充一句,雖然設計上是下層和上層是服務和被服務的關係,互相不關心實現細節,實際上出於這樣或那樣的原因,多少還會有一些相關性,並不完全獨立,但是層次結構還是明確的。


OSI參考模型

OSI,是英文Open System Interconnect的縮寫,中文翻譯開放系統互聯,一個抽象七層模型,但其核心思想一點也不抽象,非常具體,其核心思想:

1) 通信兩端的主機能夠理解對方的語言

這是要求主機使用相同協議格式來發送數據

2) 希望通信系統模塊化,每個模塊提供標準介面

每個模塊給和直接耦合的模塊提供標準化的流程介面,每個模塊內部無論怎樣實現沒有硬性規定,但外在的介面一定是標準件,這樣耦合的模塊可以無縫對接起來。

這樣做的好處有:

(1) 由於使用標準介面,每個通信模塊可以獨立開發,增加自由度,提高生產效率

(2) 增加代碼的重複利用率,由於通信模塊的標準化的外在介面,應用程序可以直接使用現成的通信模塊,而無需重新編碼,這大大減輕了開發者的負擔,間接地提供了生產效率。

以上的種種好處對於初學者,如雲里霧裡。人類的學習有個特點,當遇到難以理解的抽象問題,總是希望在現實生活里找到可以類比的事物,咱們先來談談汽車產業的標準化。

最早美國的汽車生產商、如福特、通用,各自在自己的小作坊里生產,產量很低,輪胎尺寸也沒有約束,自己生產多大的輪胎,就用多大的輪胎。

福特改進了汽車流水線,經過一個若干道工序,

1)沖床壓制框架外殼 2)車體倒轉焊接 3)除毛邊 4)裝配大梁、防震、引擎 5)內部裝潢 6)加裝散熱器、油壓系統 7)安裝輪胎

一輛小汽車就誕生了,隨著產業規模越來越大,產業分工越來越精細化,有了汽車零部件供應商,比如輪胎,如果汽車生產商對輪胎尺寸規格大相徑庭,那無疑會增加供應商的成本,而採用標準化的輪胎尺寸,供應商只需生產幾種標準尺寸的就可以了,無論哪家汽車廠商都可以使用,規模經濟成本自然會下降,所以標準化是雙贏,以上就是汽車產業的標準化。

計算機網路遵循著同樣標準化的演進之路,眾所周知,最早的計算機網路是美國人搭起來的,名字是ARPA網,ARPA是英文Advanced Research Projects Agency的縮寫,中文是美國國防部高級研究計劃署,ARPA網使用了TCP/IP作為計算機網路互聯協議,在基於BSD操作系統里實現了這些協議,TCP/IP的流行引起了業界的關注,於是以TCP/IP為框架模型,國際標準化組織(ISO)和國際電報電話諮詢委員會(CCITT)聯合提出並制定了這個七層的OSI參考模型:

1)應用層 2)表示層 3)會話層 4)傳輸層 5)網路層 6)鏈路層 7)物理層

用戶數據經過以上七道工序的流水線,一串0、1組成的二進位流誕生了,根據物理層是光纖、電纜、還是空氣,二進位流轉化為光信號、電信號、電磁波信號在物理介質(物理層)里傳輸,經過若干個中繼交換機(鏈路層)的交換、經過若干個中繼路由器(網路層)的轉發,最終到達數據的終點。

以上七道工序最終產生了二進位流,除了物理層之外,每道工序都會在原始數據前添加一串屬於自己的協議頭,每個協議頭有源主機的每層工序產生,自然有理解這些協議頭的對端,舉例來說:

鏈路層協議頭,這個協議頭只有源主機、端接路由器可以理解,只會存活在源主機與其端接的中繼路由器,換句話說,其生命周期只限於一根鏈路,只要端接路由器能順利接收,其使命就算完成了,那路由器會將其從二進位流剝離掉,剩下打頭陣的就是網路層的協議頭。

網路層協議頭,其中包含了目的地網路地址,用於指示沿途的路由器,這一串二進位流的目的地是哪裡,路由器查詢自己的網路地址表,決定再發給更靠近目的地的下一跳路由器。假如找到了一個出介面與下一跳路由器直連,則又要考慮如何添加鏈路層的協議頭了,依據不同的介面類型,添加了適合此鏈路的鏈路層協議頭,然後再依據物理層介質的不同,物理層將其以光、電、電磁波的信號發送出去。

依照上面類似的步驟,一串二進位流每經過沿途一跳路由器,變換一次鏈路特有的協議頭,但網路層協議頭一直不會變,最終這一串二進位流到達了終點。

至此,網路層協議頭也完成了其使命,剝離掉網路層協議頭,剝離掉之前,先讀出網路層協議頭的傳輸層協議代碼,把這一串二進位流發給傳輸層,剩下打頭陣的就是傳輸層的協議頭。

傳輸層協議,依據傳輸層協議頭裡會話層協議代碼,先剝離掉傳輸層協議頭,把這一串二進位流發給會話層,剩下打頭陣的就是會話層協議頭。

會話層協議,依據會話層議頭裡表示層協議代碼,先剝離掉會話層協議頭,把這一串二進位流發給表示層,剩下的頭陣的就是表示層協議頭。

表示層協議,依據表示層議頭裡應用層協議代碼,先剝離掉表示層協議頭,把這一串二進位流發給應用層,剩下的頭陣的就是應用層協議頭。

應用層協議,經過以上一跳一跳路由器的中繼、終點主機的一層層協議頭的剝離,源主機發給終點主機的數據終於到達終點了,至於數據是文字、圖片、音頻、視頻,則由應用層協議來最終解釋。


記得一本書上對OSI模型中,是用互聯網早期廣泛使用的電子郵件來描述的,我這邊淺談一下,如有不足或者錯誤的地方。請多多指正。不過在我的潛意識裡,OSI七層參考模型已經被TCP/IP模型所取代了,所以這邊我們做個了解就好了唄~

在7層OSI參考模型中,數據是如何進行傳輸的呢?就拿電子郵件來說,發送端A想給接收端B發送一封電子郵件,如圖所示,主機A從上至下傳輸數據,而主機B從下至上依次接收數據。而這一過程在OSI參考模型中又經歷了哪些步驟呢?

1.會話層以上的處理

  • 應用層

電子郵件使用到的協議,如SMTP協議等均為應用層協議,主機A新建了一封電子郵件,點擊發送的一剎那,應用層協議就開始進行處理,該協議會在首索要傳送的數據前端加一個首部標籤,註明了郵件內容以及收件人B,當信息傳輸到B的時候,主機B會使用本機軟體分析其數據首部和正文,接收內容。

而主機A與主機B通過各自應用層之間的通信,實現郵件的傳輸。

  • 表示層(對於我來說比較模糊的一個層。。)

表示層的表示,有表現和演示的意思。因此更關注數據的具體表現形式。 一封電子郵件被打開的同時,他的內容就顯現了出來,但內容又是如何出現在屏幕上變為人類可識別的語言呢?表示層會進行統一的網路數據格式與莫一台計算機或某一款軟體特有的數據格式之間進行相互轉換的分層。比如電子郵件的內容,一段簡單的文字流,也可以有很多種編碼格式。為了使顯示的內容不是亂碼,就需要使用特定的格式進行編碼。

而表示層與表示層之間為了識別編碼格式也會附加首部新戲,從而完成詩句的傳輸。

  • 會話層

決定採用什麼連接方法是會話層的主要責任。假定主機A發送多封電子郵件,這多封電子郵件就有了很多種發送方式,是選擇建立連接後一次性發送?還是建立多次一封一封的發送?甚至還可以建立多個連接同時發送。這就是會話層的主要責任。

2. 傳輸層以下的處理

7層說了兩層,而網路上實際傳輸數據的任務,是在傳輸層以及一下的幾層中。

  • 傳輸層

主機A和主機B之間準備進行通訊了,這一過程就叫做建立連接的過程。有了這個通信連接,就可以將主機A所發送的內容傳送到主機B當中。當通信結束後,連接有必要斷開。

因此,建立連接或斷開連接的處理,便是由傳輸層所決定的。而當數據傳輸錯誤時,傳輸層也會負責數據的重發重傳。

PS:會話層決定建立連接和斷開連接的時機,傳輸層會進行實際的建立連接和斷開連接的處理。

  • 網路層

網路層的作用是在網路中,將數據由主機A發送到主機B。在實際發送數據的過程中,我們需要知道目的地址(IP地址)。基於這個地址,數據才可以在眾多計算機中選擇一個進行數據傳輸。

  • 數據鏈路層與物理層

通信的傳輸是一定在傳輸介質上進行的,就像人們互相交流,傳輸介質就是空氣,如果沒有了空氣,就不要談交談了。數據鏈路層的作用就是在通過傳輸介質互聯的設備之間進行數據處理。

而物理層中,將數據0/1轉換為電壓和脈衝光傳輸給傳輸的物理介質,而相連的設備使用MAC地址進行傳輸。

3.主機B接收過程

接收端主機處理流程就是將發送端A的處理流程反過來,逐層處理。

額,可算瞎扯扯完了,在這舉電子郵件這個例子不知道到底合適不合適,我理解的早期的電子郵件系統是點對點的,而不像現在是使用電子郵件伺服器的,恐怕對於棄用的OSI參考模型,使用這種方法解釋可能也不失為一種好辦法吧!

而OSI參考模型為什麼棄用呢,我認為他的分層過於細緻,以至於使網路的體系結構變得複雜臃腫,有使用重疊的嫌疑。這和現在使用的TCP/IP協議相比,也就一目了然了。

寫到最後了,想到一個更好的例子,簡單的區域網,內網基於QQ互相發送文件的過程。就是一個點對點的,不經過騰訊伺服器的例子。。又突然想起來車總有個亞當和夏娃的故事,回頭去收藏夾找找看看能不能找到。貼上來分享給大家。

其實我都是瞎掰的。。還請各位大牛斧正。。各位小牛共同學習進步。。

20171030補圖:自頂向下的的方法學習計算機網路真是太好了。


感謝知乎一路給我帶來的知識,很慚愧自己一直潛水,於是決定竭盡所能地回答這個問題。(才疏學淺,如有紕漏,請海涵。)

自己入門的時候也看了很多書籍、google及baidu,但是要不就是答主自己都沒有弄懂主胡亂粘貼別處的答案,要不就是技術大拿不屑討論這種問題,結果答非所問,沒能夠解決自己的疑問。

此處希望能夠略盡綿力為樓主解惑,廢話不多說,開始答題:

------------------------------------------------------------------------------------------------------------------------------------------

先回顧一下OSI七層模型有些啥內容:

(OSI模型與TCP/IP模型類似,這裡只針對OSI模型展開)

撇開複雜與晦澀難懂的術語不說,個人理解七個層次通俗來說主要實現以下內容:

應用層:就是應用軟體使用的協議,如郵箱使用的POP3,SMTP、遠程登錄使用的Telnet、獲取IP地址的DHCP、域名解析的DNS、網頁瀏覽的http協議等;這部分協議主要是規定應用軟體如何去進行通信的。

(應用層此部分有修改,感謝@小張指正。)

表示層:決定數據的展現(編碼)形式,如同一部電影可以採樣、量化、編碼為RMVB、AVI,一張圖片能夠是JPEG、BMP、PNG等。

會話層:為兩端通信實體建立連接(會話),中間有認證鑒權以及檢查點記錄(供會話意外中斷的時候可以繼續,類似斷點續傳)。

傳輸層:將一個數據/文件斬件分成很多小段,標記順序以被對端接收後可以按順序重組數據,另外標記該應用程序使用的埠號及提供QOS。(不同的應用程序使用不同計算機的埠號,同樣的應用程序需要使用一樣的埠號才能正常通信)

網路層:路由選路,選擇本次通信使用的協議(http、ftp等),指定路由策略及訪問控制策略。(IP地址在這一層)

數據鏈路層:根據埠與MAC地址,做分組(VLAN)隔離、埠安全、訪問控制。(MAC地址在這一層)處理VLAN內的數據幀轉發,跨VLAN間的訪問,需要上升到網路層。

物理層:將數據最終編碼為用0、1標識的比特流,然後傳輸。(例如將題主頭像的圖片,變為一串01100111100這樣的數字來表示)。

基礎理論說完,接著回答題主的主題:

兩主機通信的過程,從發送者(以下簡稱A)到接收者(以下簡稱B),屬於從7層(應用層)-&>1層(物理層)封裝,然後傳輸到遠端,再從1層(物理層)-&>7層(應用層)解封裝的過程。

1、 當A打開了QQ這個軟體,相當就到達應用層了;因為軟體會根據你的操作調動機器底層的硬體工作了。

2、 當A往QQ這個軟體的聊天窗口裡面輸入信息,發出後,QQ會將這個信息保存在本地聊天記錄文件MSGEX.db(一般就保存在QQ目錄下以你的QQ號碼為文件夾里)。以某種格式編碼/保存某種信息,這可以理解為表示層了。

3、 當A打開與B的聊天窗口,輸入信息,按下「輸入」按鈕,用戶的操作就完結了,剩下都是機器自己的操作了。實際傳輸之前QQ會先建立A與B的會話連接,才真正開始傳輸信息/數據(你可以理解借傳輸文件理解:你發送文件給對方,要等待對方按下接收,才算建立了會話,然後才開始傳輸。)這算會話層了。

4、 會話建立後,會將A發的信息斬件,如A發送「你吃了飯沒有」?傳輸層將這句話斬成「你」「吃」「了」「飯」「沒」「有」6個數據段,標記號使用的埠號,然後準備發出去。

5、 接上一層,信息還未發出去,這時候在網路層做路由選路,可以理解為,從A家出去,可以分別經「聯通」「電信」「移動」3個網路中的一個再到B家。

網路層根據路由協議負責選路(根據鏈路質量、帶寬、開銷等方法論)。假設最後選了2條,可能就A-&>聯通-&>B發送「你」「吃」「了」3個數據段,A-&>電信-&>B發送「飯」「沒」「有」3個數據段。

選路後,這一層要標記IP包頭,包頭主要內容是源IP地址,目的IP地址,使用什麼協議。其中源、目的IP相當於你寄信的時候的收發的地址與郵政編碼,標記出發送者與接收者。而協議相當於這封信到底用什麼語言書寫。(只有保證2端使用同種語言,才能確保通信起來,否則你用英文寫信給大媽,大媽怎麼看得懂呢?)

6、 然後再到數據鏈路層,數據鏈路層主要是負責同一個子網內的通信的。例如A、B連接在同一台二層交換機,就屬於同一個子網,那麼數據幀的通信室是不需要通過網路層的(即三層交換機或者路由器),直接在這台二層交換機就過去了。這一層打的是MAC地址的幀頭,對於上述通信過程來說,就是為數據幀打上A的機器的MAC與A的網關的MAC。這一層的工作就完成了。

7、 最後一層了,經過上述斬件、打完各層標籤後的6個數據幀,物理層將他們翻譯文6段0、1表示的比特流,然後通過光纖、銅纜進行傳輸。

8、 當比特流傳輸到了遠端,接著B的機器按照上述的1~7的步驟反方向運行一次即可(即有物理層到應用層)。就是一層層讀取標籤,傳輸給標籤標記著的相應對象,然後摘除標籤,再讀取上一層標籤,直到最後B的應用程序能夠讀到A往應用程序輸入的數據為止。

--------------------------------------------------------------------------------------------------------------------------------------------

對於題主的評論,補充2個圖;

2個主機之間的通信,對於2台主機來說,肯定是都需要跨越7層的,而平常說的只需要去到2層或者3層,其實是對於中間系統而言的,就是說中間的交換機、路由器而言;

例如圖1的假設兩端的通信實體在一個區域網內,其實傳輸的數據包去到交換機時,交換機拆開二層幀頭,再查自身的MAC地址表,發現表裡面有對應的MAC地址,然後對應的對口是哪個,接著就把幀發送到該埠轉發出去,它的任務就完成了。根本不需要到達網路層的意思是,根本都不需要拆卡3層的IP包頭來讀取裡面的信息。

通過轉發,最好到達B主機,然後從1層拆到7層,B用戶的主機最終就讀取到信息了。

對於圖2,由於A、B兩通信實體跨域廣域網,所以光靠MAC地址表,肯定是查不到的,這時候路由器會把IP包頭也拆開,讀取目的IP地址,再查路由表,就知道往哪個埠發出去了。然後層層轉發,就可以達到目的地了,接下來就和圖1的一樣了。


題主的問題是對各層只有概念但沒有深入理解作用,恰恰是因為這個問題很複雜,導致題主在各個概念之間來回切換已經累崩潰了,別說深入理解,更別說靈活運用了。

在我看來,理解網路分層結構最重要的一點就是理解網路究竟想幹嘛?

一句話概括,就是用最少的資源,準確快速的把信息傳送到對端去。

那麼這裡面就有很多問題要解決了:怎樣充分利用資源?用資源怎麼發信息?怎樣找到對端?怎樣做到準確?怎樣快速?怎樣保證對端完整收到信息?………

如果題主是學計算機的,這個時候應該就能想到,這麼多問題,不可能一次性解決,需要分解,分模塊來解決,OSI也是這麼想的,所以就有了分層模型。

首先是怎樣充分利用資源,用什麼物質傳又省錢又好用?這就是物理層要解決的問題了,這裡展開來就是無線銅線光纖損耗等等的問題。很好理解。

然後知道介質了,怎樣把信息傳給設備?這就是數據鏈路層要解決的問題了。這裡需要解決信息的封裝問題,信息傳送機制問題。所以這一層的所有協議設計都是圍繞著怎麼傳信息展開。

理論上到這裡就結束了,但隨著入網設備越來越多,就需要被管理了,所以網路層就來解決網路管理的問題。IP層是整個網路分層里承上啟下的核心,他主要解決兩個問題,一個是編號,一個是找人。網路太大,人太多,認識不過來,所以要用ip地址給人編號。編完號找人,幾十億人一個個問也不可行,也是要講方法的,所以這裡就有了路由技術。網路層的關鍵是路由技術,路由技術解決怎樣快速準確找到對端的問題。

找到對端後,怎樣保證對端完整收到信息?這就是傳輸層要解決的問題了,這裡就有傳送速度的調節,傳送信息的驗證,傳完信息的確認等等問題,對應的TCP和UDP也是兩種不同的實現思路。

來到這裡,關於網路的問題基本上就結束了,因為終端已經拿到了別人發過來的信息了,至於怎麼處理信息,就是會話層,表示層,應用層的問題了。相對好理解很多,由於手機碼字好累,我也就不贅述了。


愛立信有個動畫,生動形象的描述了這個過程。

動畫演示TCP/IP協議_土豆_高清視頻在線觀看

當然這個是tcp/ip的。不過OSI那個叫參考模型,參考懂伐?

建議你搞懂這個!


好好研究TCP/IP模型,OSI模型就應付下考試和應屆生的面試得了。如果社招有人問OSI可以直接拒絕了。


對於樓主這個問題,剛好翻書看到了這麼一段話,抄摘自韓立剛老師的《計算機網路原理-創新教程》:OSI參考模型是一種概念上的藍圖,描述了通信是怎麼進行的。它解決了實現有效通信所需要的所有過程,並將這些過程劃分為邏輯上的層。層可以簡單地理解成數據通信需要的步驟。下面就以日常從淘寶購物後,貨物從廠家到顧客的運輸過程為例來說明。

貨物運輸過程分為以下幾個步驟:

1.顧客打電話通知廠家已經在淘寶下訂單,購買傢具。

2.廠家聯繫打包工人,將傢具拆卸裝箱,並且附上安裝圖紙。

3.打包後聯繫快遞公司,快遞員A負責將每個箱子寫上寄件人姓名,收貨人姓名以及地址聯繫方式,將箱子交給物流公司,將箱子裝車。

4.貨運員A負責將貨物通過汽車運輸到火車站。

5.通過鐵路運輸,將裝有傢具的箱子運送到顧客所在的城市。

6.貨運員B負責將箱子運輸到快遞公司,快遞員B將箱子送到顧客家中。

7.組裝工人將收到的箱子拆箱,按圖紙進行組裝,最後顧客收到了完整的傢具。

從上述可以看出各自對應關係,以及類比OSI模型!總之記住,通信通信,不是電腦需要通信,亦不是手機需要通信,也不是我們人需要通信,而是應用程序與應用程序之間需要通信!!!


我不生產知識,我只是知識的搬運工

這本講解透徹,無論是網路小白還是網路入門或是想再重新溫習TCP/IP的大佬,此書都是不可多得的好物


推薦閱讀:

traceroute能保證每個分組都是走一樣路由路徑嗎?
svchost一直不停下載!怎麼才能讓它停止下載?
IC卡的錢是裝在卡里還是裝在伺服器里?
誰能用通俗的語言簡單介紹下什麼是雲技術?
組裝家用伺服器和家用台式機有什麼不同?如何選購?

TAG:計算機 | 計算機網路 | 計算機科學 | 網路協議 | 通信協議 |