表示層( presentation layer)和會話層(session layer)為什麼會被棄用?
用的很少,感覺應用層很多協議都可以代替
不是棄用,而是這兩層從來沒有獨立實現過,都是和應用層在一起實現。
以TCP/IP協議五層模型的計算機網路率先出現,硬體介面實現「物理層」、「數據鏈路層」,操作系統內核里的TCP/IP協議棧實現「網路層」、「傳輸層」,所有依賴於TCP/IP協議棧的應用程序實現廣泛意義上的「應用層」,這個廣泛意義的「應用層」既實現了會話ID、心跳keepalive,又實現了諸如文字、圖片、音頻、視頻、文件的不同表示。
後來才有以TCP/IP為現實素材的OSI七層參考模型,希望將「會話層」、「表示層」從廣泛意義上的應用層里獨立出來,這樣可以讓應用程序瘦身,核心目標是:讓千千萬萬不同應用程序共享「會話層」、「表示層」軟體代碼。
很遺憾的是,迄今為止這個美好的願望依然沒有實現,究其根本原因是,不同的應用程序有大同小異的會話、表示需求,這些代碼不完全能夠抽象到獨立的會話層、表示層,或者說,現有的應用層已經比較完美實現了會話層、表示層,對於七層模型需求沒有動力。
安全層
但是,有心栽花花不成,無心插柳柳成蔭,一個提供安全加密服務層出現了,很多人都使用過,只是一直沒有人想去劃分層次結構,它的名字叫SSL/TLS,有了它的加入,我們可以將TCP/IP五層結構看成六層:
應用層
安全層(TLS)
TCP/UDP
IP層
數據鏈路層
物理層
有了安全層提供的服務,位於應用層的HTTP/SMTP/FTP,都可以在其名字後加一個S(Security),比如HTTPS,其實這個世界壓根不存在HTTPS協議,只有HTTP協議,加上S的後綴只是告訴大家HTTP使用的是六層結構,有了SSL/TLS的安全保護。
主要原因是同一個應用的客戶端和伺服器端一般都是同一個公司開發的,所以經常性的內嵌了,並不是說沒有了。這兩層的功能意義還在。
如果出現了第三方開發的應用程序,尤其是客戶端,那麼這兩層實際上是有可能存在的。比如http裡面可以看到很多隱形的OSI只是一個理論上的參考模型,也就是說實際應用中作為參考的。現行的tcp/ip協議族選用了5層架構,把會話層和表示層的功能整合在了應用層,這樣有助於給開發者更多的選擇。層次太多增加協議的複雜性也造成效率的折損。
在osi參考模型中,會話層的功能是會話控制和同步,表示層是解決兩個系統間交換信息的語法與語義問題,還有數據表示轉化(轉為主機無關編碼),加解密和壓縮與解壓縮功能。
很明顯這兩層在實際應用中很難保持統一性,應用通常會選擇不同的加解密方式,不同的語義和時序,談不上復用的東西作為協議的一部分自然是沒有意義的,所以這兩層的功能交給應用開發者作為應用層的一部分功能開發是比較合適的。
表示層、會話層的東西,更多的是做成了一種標準件,直接被拿來用,集成進了應用中。
比如說你要做一個視頻聊天
你需要會話控制,實現撥號、呼叫、通話、暫停、掛斷等,然後你拿來了sip,這就是會話層的東西
你需要視頻的編碼與壓縮,把你這採集的視頻信號傳輸到對面並播放,然後你拿來了H.264,這個就是表示層的東西
你做了一個程序,把需要的東西集成起來,又做了一個界面。大家就看到了這個應用。
當然,你如果足夠牛,有錢,有時間,有能力
你自己寫了一套會話控制的東西和一套視頻編碼的東西,也是可以的。
最近在看Andrew S. Tanenbaum David J. Wetherall的《計算機網路》,第一章談到了這個問題,放上來總結一下,還是學生,有錯請指教。
這個問題可以理解為為什麼現在大部分模型用TCP/IP(5層,也可以說4層),而不是OSI模型(7層),差異就在會話層和表示層的缺失上。
這裡說的主要是歷史原因。
1.Bad Timing
有一個關於標準制定的理論「apocalypse of the two elephants」,說的是一個新東西出現後,圍繞產生了研究活動會隨時間增加,這是第一個elephant,研究的差不多了,熱度就會下降,接下來工業界就可能會有大量資金注入,相關生產活動又多了起來,這是第二個elephant。
如果在大量研究階段就制定標準,很有可能這個標準是不夠完善的。如果在工業界已經在鼓搗它了再制定標準,那麼這個標準就很有可能不會被工業界認可,畢竟不能讓投入白白打水漂。最好的時間段就是在2個elephant之間。OSI出現的時候,學術界已經大量支持TCP/IP了。
2.Bad Technology
第二個原因是因為OSI7層模型是有缺陷的,原文說道"more political than technical",會話層和表示層幾乎空無一物,然而鏈路層和網路層卻擁堵不堪。(這裡感覺作者就有點質疑會話層和表示層是否有必要純在的意思了)
3.Bad Implementations
OSI模型和協議複雜,笨重,最初實現起來又難又慢。
原文「Everyone who tried them got burned」
隨著時間的流逝,OSI這樣壞印象留在程序員們的腦海里。(估計寫出心理陰影)
然而看看TCP/IP,最初屬於Berkeley UNIX的一部分,實現地相當不錯(並且免費),人們很快就用上,有了用戶了後形成良性循環。
4.Bad Politics
最初大量的用戶,尤其是學術界用戶認為TCP/IP是UNIX的一部分,而80年代UNIX在學術界來說簡直就是親爹親媽。而OSI最開始被認為是歐洲電信部的產物,接著以為是歐盟的,然後又以為是大美利堅的。這種以為都是「部分正確」,但是影響了TCP/IP以及OSI後來的發展。
http就是會話層
html就是表示層
web app就是應用層
在ssh、fastcgi以及http2等協議中,確實是有session的概念的。一個tcp鏈接里multiplex了多個session,每個session都可以單獨close,創建session基本沒有開銷,session就相當於輕量級鏈接。
推薦閱讀:
※為何IP地址不設計得更長,讓用戶都使用公網IP,去掉路由器交換機,讓電腦的互連就像打電話一樣方便呢?
※大多tcp應用採用長度+數據的格式傳輸數據,如何防止惡意虛報長度?
※動態ip會阻礙網警查到使用人嗎?
※如何深入學習 TCP/IP 協議,以及網路層、傳輸層、應用層各協議?
※TCP四次分手中,主動關閉方最後為什麼要等待2MSL之後才關閉連接?