標籤:osi 網路通訊協定 tcpip ssl
電腦網路裡有一個模型非常有名:OSI(Open Systems Interconnection,開放系統互相連線模型)模型,幾乎所有的電腦網路教學和科研都要在OSI的基礎上進行,想要討論電腦網路中的問題也要依靠這個模型。
OSI模型是這樣的結構(從底層到最高層):
1,物理層(physical layer)
物理層負責最後將資訊編碼成電流脈衝或其它訊號用於網上傳輸。它由電腦和網路介質之間的實際介面組成,可定義電氣訊號、符號、線的狀態和時鐘要求、資料編碼和資料轉送用的連接器。有線網路訊號有電流脈衝(電纜傳輸)和電磁脈衝(光纖傳輸)兩種。物理層由物理存在的傳輸介質(例如網線)和裝置(例如網卡,路由器)組成。
2,資料連結層(data link layer)
資料連結層通過物理網路鏈路提供可靠的資料轉送。不同的資料連結層定義了不同的網路和協議特徵,其中包括物理編址、網路拓撲結構、錯誤校正、幀序列以及流控。資料連結層實際上由兩個獨立的部分組成,介質存取控制(Media Access Control,MAC)和邏輯鏈路控制層(Logical Link Control,LLC)。資料連結層負責在物理層上建立通訊鏈路(每次開啟瀏覽器連網就是建立了資料鏈路,關閉瀏覽器之後相應的資料鏈路就不存在了)。PPP(點對點通訊協定 (PPP))就在資料連結層上。
3,網路層(network layer)
網路層負責在源和終點之間建立串連,為不同主機提供邏輯通訊。它一般包括網路尋徑,還可能包括流量控制、錯誤檢查等。網路層只負責建立串連,並不保證串連的可靠性。大名鼎鼎的IP(互連網協議)就在網路層。
4,傳輸層(transport layer)
在 OSI 模型中傳輸層是負責資料通訊的最高層,是惟一負責總體數
據傳輸和控制的一層,保證串連的可靠性,直接給運行在不同主機
上的應用程式提供通訊服務。與IP齊名的TCP(傳輸控制通訊協定)和UDP(使用者資料包通訊協定)就工作在傳輸層上,SSL/TLS也工作在傳輸層上。順便說一句,加密串連幾乎都是依靠傳輸層的(不管是什麼樣的加密),加密過程也是在傳輸層上完成的。
5,會話層(session layer)
會話層在兩個節點間建立、維護和釋放面向用
戶的串連,對進行會話的兩台機器間建立對話控制,管理會話如管
理哪邊發送、何時發送、佔用多長時間等,保證會話資料可靠傳送。它還包括建立檢查點,使通訊發生中斷的時候可以返回到以前的一個狀態。
6,展示層(presentation layer)
展示層是處理所有與資料表示及傳輸有關的一層,為異種機
通訊提供一種公用語言,為上層使用者提供資料資訊的文法表示變
換,屏蔽不同電腦在資訊表示方面的差異,即用一種大家一致同
意的標準方法對資料編碼。展示層協議一般不與特殊的協議棧關聯,如QuickTime是Applet電腦的視頻和音訊標準,MPEG是ISO的視頻壓縮與編碼通訊協定。常見的圖形映像格式PCX、GIF、JPEG是不同的靜態映像壓縮和編碼通訊協定。
7,應用程式層(application layer)
OSI模型的最高層,應用程式層的功能一般包括標識通訊夥伴、定義資源的可用性和同步通訊。注意,應用程式層並非由電腦上啟動並執行實際應用軟體組成,而是由嚮應用程式提供訪問網路資源的API(Application Program Interface,應用程式介面)組成。應用程式層協議有著名的HTTP(超文字傳輸通訊協定 (HTTP),網頁傳輸就靠他),FTP(檔案傳輸通訊協定,很方便下載),SMTP(簡易郵件傳輸通訊協定,郵件他負責)等。
有些人看到這裡大概就會這麼想:原來OSI模型這麼層次分明啊,就像公司裡的上下級或者說軍隊裡的各級軍官和士兵一樣,下級要聽上級的,下級更管不了上級,只要把上級搞定了,下級怎麼努力都沒用。
大錯特錯!
OSI模型其實不僅在物理上不存在(硬體),邏輯上也不存在(軟體),這隻是一個為了簡化通訊這個大問題而用層級把大問題分成一個個小問題然後分而治之的概念性模型而已!
也就是說,實際上根本就沒有所謂的上下層存在,更沒有上下級這一說!
那麼實際上是怎樣一個情境呢?
一群擁有不同技能的人聚集在一起,他們相互之間都是好朋友。
有一天,他們接到了一個任務:將重要的資料從A地安全傳到半個地球以外的B地。
"這問題太大了,怎麼解決啊?"“(我)別急,一步步想,肯定有辦法的。”
眾物理介質(光纜,中繼器等):“我可以在物理層面把A地和B地的終端串連起來。”“(我)這是第一步,但還遠遠不夠呢!對了,你們人數眾多,一個個叫名字太麻煩了,就把你們統稱為物理層吧!”
MAC和LLC:“我可以在物理層工作的基礎上建立資料鏈路,實現直接相連的兩個裝置間的通訊”PPP:“我可以實現點對點的資料鏈路!”“(我)很好,諸位,你們一起工作吧,你們的工作室的名字就叫資料連結層!”
"(我)可是A和B之間隔了半個地球啊,這要是直接連接,訊號早就衰減的根本就無法傳輸到目的地了,怎麼辦呢?"’“不要忘了我啊,我可以實現間接串連的任意兩點之間的通訊,尋找最佳路徑以及處理可能的堵車問題的活就交給我吧!""(我)是你啊,IP!"”我可是很強大的,不過我沒有辦法保證一定能把資料送到目的地就是了,資料如果中途損壞出錯丟失了,我可無能為力,而且我無法直接給應用程式提供通訊服務。”“(我)那你也非常強大了,專門給你一個工作室吧,網路層工作室。”
”那麼保證傳輸的可靠性的活就交給我吧!還有,讓我來和那些應用程式打交道吧!““(我)你是?”“TCP!保證傳輸可靠性,我最在行了!我一定不會讓任何一個資料報文(TCP資料單元)掉隊的!”“我說TCP,你這點可是引起了相當多的視頻愛好者的不滿了,因為你,他們經常要為了一個馬賽克多緩衝數秒鐘,甚至有時路況(網路狀況)不好,有一個資料報文沒有送過來,然後你就不幹了,後面那一大堆報文你都不肯接收,非要等著那一個送過來,真是可笑!”“我說UDP,那視頻之類流媒體就交給你好了,你這個不可靠的傢伙!”“(我)行了,兩位別吵了,各有各的領域。你們的工作室,就叫傳輸層吧!”
“(我)還有兩個終端之間的會話呢,誰來負責啊?”“我來吧,我還可以提供check point,要是一不小心斷線了,也不用重新傳輸所有資料,我工作的地方叫會話層就行了!”“(我)OK!”
“(我)開始傳輸吧!等一下,A在說英文,B在說法文,根本就相互無法理解啊!怎麼辦呢?”“也就是說需要一個統一的標準,就讓我們來吧,我們來提供一種大家都能聽懂的公用語言!”“(我)啊,有好幾位呢,文字的統一編碼,視頻的統一格式,圖片的統一格式,你們一起吧,工作室叫展示層吧!”
“(我)差不多可以了吧?不行,還沒有負責通過API最終把資料遞給應用程式的人呢,還有最終的同步和通訊夥伴(應用程式)的標識呢,不能把資料包送錯了啊!”“我們可以幫這個忙!(異口同聲)”我負責網頁!“HTTP?”“下載和檔案傳輸我最拿手!”“FTP?”“郵件就交給我處理吧!”“SMTP?”“(我)那好吧,你們待的工作室就叫應用程式層吧!”
“(我)這樣就可以開始了!”“沒錯,大家一起,完成任務!我們各工作室一起處理好資料包,然後送出去!(異口同聲)”"(我)誰也離不開誰啊。好像這其中沒有上下級呢。"“哪裡需要什麼上下級?大家每個人各司其職,一起負責A與B的終端的交流,誰也不能缺席,大家都是平等的,沒有說什麼誰領導誰,誰管理誰,誰管不了誰的事!”
“(我)是啊(笑),你們這些傢伙可比像我這樣的人類要明白多了,本來就沒有誰應該騎在或被騎在誰的頭上啊。”
互連網設計時重點放在串連上,幾乎沒有考慮安全,現在的各種加密協議以及身分識別驗證機制都是後來補充上去的。
“等等,還有一個問題呢:資料轉送時是明文的!那麼傳輸過程中早就被第三方給看光了!還有,你都沒有辦法確定對方的身份!”’“(你看看我,我看看你)我們都不行。”“我來吧!”“SSL?”“我可以同時解決加密與身分識別驗證的問題。”“那你想要去哪個工作室呢?”“這就難說了,加密解密和身分識別驗證過程是需要和具體的應用程式配合完成的,但加密串連建立過程需要TCP的協助,你可以認為我在傳輸層之上應用程式層之下,也就是說我是個複合協議。”“你要和TCP協同工作?”“沒錯。我所處理的,就是TCP資料報文,我所傳遞的,就是TCP資料流。我可以保證,除了傳遞資料的兩方,其他人都無法得知資料內容,而且沒人能冒充其中任何一方。”
“那你憑什麼做出這樣的保證呢?”“說來話長了,一時半會兒也說不清楚,以後我會慢慢說明的。”
接下來的系列裡我會詳細說明HTTPS串連究竟是怎麼回事兒的,順便再介紹一下實際使用的TCP/IP架構(OSI模型過於複雜,而且各層之間的分工其實並不是很明確,實際運用中很多時候各層都是混合的,所以TCP/IP將好幾個層都合一了)。奉勸有些一知半解的半小白一句:電腦網路裡相當多的模型或者架構或者協議都沒法隨便去與真實生活類比,在胡思亂想之前還是好好找一些專業資料讀讀吧!
SSL/TLS的原理以及互連網究竟是如何工作的(1) —“每個協議生而平等”