IT修煉內功鼻祖“OSI通訊協議”


一、OSI的來源及定義


我們平常所說的7層通訊協議指的就是OSI參考模型。是上個世紀80年代,爲了更好的讓以太網推廣和爲了更好使網絡應用更爲普及,國際標準化組織在1985年研究提出了一套網絡互聯模型——即OSI(Open System Interconnect),開放式系統互聯模型,一般都叫OSI參考模型。其含義就是推薦所有公司使用這個規範來控制網絡。這樣所有公司都用相同的規範,大家就能互聯互通了。

它從低到高分別是:物理層數據鏈路層網絡層傳輸層會話層表示層應用層。各層具體的解釋和含義如下:


二、OSI標準下網絡通訊的流程


光看各層的書面定義其實是很難理解在網絡信息傳遞過程中,各個層所起的作用的。下面就個人理解OSI時假想的場景給大家舉個例子:有兩個集團軍的司令私交不錯,但由於軍事演習的時候個人的通訊設備全都被禁用了,A集團軍的司令想通知B集團軍的司令演習後請他喫飯,只能通過軍隊的通訊系統(7層通訊)進行信息傳遞。

第一層,A集團軍司令(“應用層”)自己寫好要傳遞的話,即原始通訊內容:“演習過後你用空嗎?有空的話我想請你喫飯”。把這句話交給自己的通訊兵。

第二層,A集團軍通訊兵(“表示層”),通訊兵一看,這是司令傳遞的內容,肯定得嚴格保證安全,於是將原始通訊內容,轉化成了軍隊內部的傳遞信息的數據格式,並對數據進行了加密。

具體轉化分兩步:

1、將文字轉成拼“yanxiguohouniyoukongma?youkongdehuawoxiangqingnichifan”,

也就是規定數據格式

2、將這段拼音的各個字母改成拼音版的數字標記法展示,如字母y表示成拼音表第四行第四個字母。於是將這串字母變成了一張張如下的卡片(即規定加密方式)

第三層,A集團軍通訊兵(“表示層”)將整理好的卡片交給A集團軍的通訊部門(“會話層”)。通訊部門收到卡片後瞭解到是需要發往集團軍B高層的緊急軍事信息,立馬着手安排與集團軍B建立聯繫。

第四層,A集團軍通訊部門指定具體負責本次軍事信息傳遞的小張(“傳輸層”),將這些卡片按順序排好後,打包到一個包裹裏(即“報文”)。然後通知傳遞部門,這是要發往B集團軍的緊急軍事信息,請安排傳遞。

第五層,傳遞部門(“網絡層”),找到了B集團軍所在的位置和自己去往B集團軍的最短可行路線。但發現去往B集團軍的路都是山路只能依靠馬隊傳遞,一次沒法攜帶這麼多卡片,每次傳遞兵只能攜帶4個卡片,於是就將整個包裹(“報文”)拆分成了多份(即“幀”)並標記好開頭結尾和順序。

第六層,傳遞兵(“數據鏈路層”),拆分好每次傳遞的小份包裹(“幀”),開始往走山路的馬隊上裝小份包裹。

第七層,走山路的馬隊(“物理層”)將包裹傳遞到B集團軍。

 

上面講的是A集團軍司令信息傳遞的過程,B集團軍司令信息接收的過程,正好與之相反,但也同樣走的是軍隊規定的7層通訊。

第七層,接到走山路的馬隊(“物理層”),運送過來的包裹;

第六層,B集團軍通訊部門的傳遞兵(“數據鏈路層”),將一份份的小包裹(“幀”)都接收好,並對每份小包裹進行確認簽收。

第五層,傳遞兵將小包裹全都扛回傳遞部門,傳遞部門再將包裹按標記的開頭和結尾以及順序進行組裝,組裝成最終的本次通訊的整體大包裹(“報文”)

第四層,B集團軍通訊部門(“傳輸層”),指定B集團軍通訊部門的小李負責本次重要軍事信息的傳遞與反饋接收(“會話層”)

第三層,B集團軍通訊部門的小李(“會話層”),將整個包裹(“報文”)轉交給B集團軍司令的通訊兵。

第二層,B集團軍司令的通訊兵(“表示層”),按軍隊加密協議和傳輸格式,將卡片先轉化成的拼音,再轉爲文字,並將最終翻譯出的原始通訊內容轉交給司令;

第一層,B集團軍司令(“應用層”)接到原始通訊內容,想着老戰友還惦記請我喫飯,心裏特別開心。隨即決定要回復……


三、技術角度回顧


上面一個完整的通過這7層的網絡通訊順利完成。接下來我將用技術術語再描述一遍這7層協議。服務器A的應用進程1想要傳遞信息到服務器B的應用進程2:


(1)應用層:它是爲應用程序提供通信服務的。比如我們熟知的:http、ftp、smtp、amqp等都是應用層協議。“應用層”的作用就是把應用進程的原始通訊內容轉交給“表示層”。

    (2)表示層:這一層的主要功能是定義數據格式及加密。例如,ftp允許你選擇以二進制或asii格式傳輸。如果選擇二進制,那麼發送方和接收方不改變文件的內容。如果選擇asii格式,發送方將把文本從發送方的字符集轉換成標準的asii後再通知“會話層”建立會話發送數據。

    (3)會話層:其主要功能是按照在應用進程之間的約定,按照正確的順序收發數據,和按照約定的通訊形式進行對話的開始、控制和結束。通訊形式可以按照半雙工、單工和全雙工的方式建立會話。

注:會話層把一次通訊分成多個連接,會話層保證一次通訊的完整性

    (4)傳輸層:傳輸層的作用是向高層(會話層)屏蔽它之下層數據通信的細節。它會把高層要傳遞的信息封裝成報文,也會把下層接收到的信息轉化成報文展現給高層。傳輸層負責提供兩節點之間數據的可靠傳送,當兩節點的聯繫確定之後,傳輸層則負責監督工作。該層常見的協議:TCP/IP中的TCP協議和UDP協議。

注:傳輸層保證一次連接的完整,也就是說本次會話你願意建立連接多少次我不管,那是會話層管的,我傳輸層只保證每次連接傳遞數據的可靠和完整性。

    (5)網絡層:通過路由選擇算法,爲報文通過通信子網選擇最適當的路徑。他定義了能夠標識所有結點的邏輯地址,還定義了路由實現的方式和學習的方式。爲了適應最大傳輸單元長度小於包長度的傳輸介質,網絡層還定義瞭如何將一個包分解成更小的包(幀)的分段方法。這一層定義的是IP地址,通過IP地址尋址。

    (6)數據鏈路層:數據鏈路層的功能就是實現系統實體間(設備之間)信息塊的正確傳輸,通過進行必要的同步控制、差錯控制、流量控制,爲網絡層提供可靠、無錯誤的數據信息。它在發送時把數據變成幀(接收時把幀變成數據)

     (7)物理層:物理層負責連接計算機與設備或者計算機與計算機,比如網卡與通訊電路的連接,它描述了設備的機械標準,比如接口類型、每一條線的電氣特性、以什麼速率、帶寬發送。它傳輸的是比特流。物理層常用多個規範完成對所有細節的定義。示例:rj45,802.3等。

 

以上僅是技術理論上的兩個計算機應用進程間的通訊,實際的通訊中並不是從計算機A直接到計算機B,而是需要通過中間的很多中繼節點,這些中繼節點僅承擔信息的傳遞,因此他們相當於現實中的“驛站”,並不對貨物(通訊內容)進行解析。具體如下圖:


四、附錄補充


1、“單工、半雙工和全雙工”通訊方式的普及

 

單工數據傳輸只支持數據在一個方向上傳輸;發送方只能發送信息,接收方只能接收信息,不能實現雙向通信,舉例:電視,廣播。

半雙工數據傳輸允許數據在兩個方向上傳輸,但是,在某一時刻,只允許數據在一個方向上傳輸,它實際上是一種切換方向的單工通信;在同一時間只可以有一方接收或發送信息,可以實現雙向通信。舉例:對講機。

全雙工數據通信允許數據同時在兩個方向上傳輸,因此,全雙工通信是兩個單工通信方式的結合,它要求發送設備和接收設備都有獨立的接收和發送能力;在同一時間可以同時接收和發送信息,實現雙向通信,舉例:電話通信。


2、常見誤區“Socket是哪層協議”


Socket不是哪一層的一個協議,而是一個通信模型,它涉及多個層。Socket最初是伯克利加州分校軟件研究所,簡稱BSD發明的,主要用來一臺電腦的兩個進程間通信,然後把它用到了兩臺電腦的進程間通信。所以,可以把它簡單理解爲進程間通信,不是什麼高級的東西。主要做的事情就是:


A發包:發請求包給某個已經綁定的端口(182.13.15.16:1235,1235就是端口);收到B的允許;然後正式發送;發送完了,告訴B要斷開鏈接;收到斷開允許,馬上斷開,然後發送已經斷開信息給B。

 

B收包:綁定端口和IP;然後在這個端口監聽;接收到A的請求,發允許給A,並做好接收準備,主要就是清理緩存等待接收新數據;然後正式接收;接收到斷開請求,允許斷開;確認斷開後,繼續監聽其它請求。

 

可見,Socket其實就是I/O操作。Socket並不僅限於網絡通信。在網絡通信中,它涵蓋了網絡層、傳輸層、會話層、表示層、應用層等多層,因爲Socket通信時候用到了IP和端口,僅這兩個就表明了它用到了網絡層和傳輸層;而且它無視多臺電腦通信的系統差別,所以它涉及了表示層;一般Socket都是基於一個應用程序的,所以會涉及到會話層和應用層。


如需轉載請私信後臺留言發現文章有錯誤、對內容有疑問,都可以通過關注宜信技術學院微信公衆號(CE_TECH),在後臺留言給我們。

注:文章封面原圖素材來源於網絡,若有侵權請留言刪除。




本文分享自微信公衆號 - 宜信技術學院(CE_TECH)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章