如果你是一個網(wǎng)絡(luò)從業(yè)者,一定學(xué)習(xí)過 OSI 7 層模型,長期以來,這一直作為我們理解和解決網(wǎng)絡(luò)問題的基石存在。
然而,2023年9月,Robert Graham 在Google文檔發(fā)表了一篇名為“OSI Deprogrammer,重新構(gòu)想網(wǎng)絡(luò)空間”的文章,并主張“OSI模型必須淘汰!”
Robert Graham曾在20世紀90年代末擔(dān)任Network General的首席架構(gòu)師,為OSI和TCP/IP編寫代碼。本文的大部分內(nèi)容來自他從不同角度看待網(wǎng)絡(luò)的經(jīng)驗,而不僅僅是OSI或TCP/IP的角度。其后也在數(shù)據(jù)中心工作了多年,解決了很多互聯(lián)網(wǎng)的核心問題,除了實踐經(jīng)驗外,他還綜合了很多學(xué)術(shù)論文的觀點。
Graham在摘要中表示,OSI模型是一個徹頭徹尾的謊言,沒有任何幫助。除了作為20世紀70年代大型機的歷史注腳外,它應(yīng)該被徹底移除。
我們普遍理解的OSI 7層模型每層都有其獨特的功能:
物理層:處理硬件,如電纜和網(wǎng)卡。
數(shù)據(jù)鏈路層:確保連接設(shè)備之間有牢固的鏈接,并處理錯誤。它定義了“幀”——物理鏈接可使用的最大單元,并標識了鏈接上的內(nèi)容。
網(wǎng)絡(luò)層:使用鏈路層的幀和鏈路層標識在不同網(wǎng)絡(luò)之間發(fā)送數(shù)據(jù)。
傳輸層:管理設(shè)備之間的數(shù)據(jù)流并修復(fù)錯誤。
會話層:使用一個或多個底層傳輸設(shè)置并維護應(yīng)用程序之間的連接。
表示層:確保數(shù)據(jù)可讀且安全。
應(yīng)用層:軟件應(yīng)用與網(wǎng)絡(luò)進行交互的地方。
Graham認為,OSI模型存在多個方面的問題:
它基于過時的、大型機時代的概念,強調(diào)跨過程調(diào)用棧的嚴格功能分離,而這些概念已不再適用。
它缺乏靈活性,實際上網(wǎng)絡(luò)中的功能可以在不同上下文之間交叉。調(diào)用可以進入傳輸層(TCP、UDP),影響網(wǎng)絡(luò)和鏈路層(IPv4或IPv6,以及以太網(wǎng)或光網(wǎng)絡(luò))在會話方面的行為。
它對網(wǎng)絡(luò)交換的哪些部分發(fā)生在本地,哪些發(fā)生端到端以及在此過程中客戶端和服務(wù)器的各自角色方面施加了限制。
本文重點選取了“誤解”一章的部分內(nèi)容,這一章中Graham揭露了諸如“分層”之類的普遍“錯誤”觀念。
01OSI 不是通用理論
OSI 被視為理論的主要原因是很多人并不知道它的含義。該模型包含很多只適用于大型機網(wǎng)絡(luò)的術(shù)語。大家不了解大型機,所以當(dāng)遇到一個本應(yīng)特定于大型機的術(shù)語時,他們反過來強行將其重新解釋,讓它來做到包含所有網(wǎng)絡(luò)通用的含義。
這一點在“會話層(session)”尤為明顯。在 OSI 命名這一層時,它與一般會話無關(guān),而是與將終端連接到大型機的非常具體的問題有關(guān)。他們甚至可以用許多同義詞來稱呼它:連接層、通道層、討論層、對話層、交互層、關(guān)聯(lián)層等等。
我們所認為的會話 (如在HTTP中)實際上在 OSI 中稱為關(guān)聯(lián)(associations),并分配給應(yīng)用層。
而OSI 的會話從來就不是指我們現(xiàn)在所認為的抽象的、理論性的概念。它從不包含HTTP會話cookie、SSL會話握手和NetBIOS會話服務(wù)等內(nèi)容。
人們往往會被自己的無知所迷惑。他們不知道OSI最初的session是什么意思,所以相信它可以是任何意思。這就導(dǎo)致了每個人的解釋都不一樣的問題。這同樣適用于幾乎所有其他OSI術(shù)語。它們都有特定的含義——對大型機而言。我們不清楚這些詞在其他語境中到底是什么意思,所以每個人都在對它們的意思做出自己的解釋。
02OSI不是一個框架
OSI 模型中的“層”有兩個用途。第一個是協(xié)議的具體設(shè)計。第二個是某種分類法、層次結(jié)構(gòu)、分類系統(tǒng)、類別、框架、時間線、位置或本體論。即使沒有協(xié)議屬于這層,也會將概念分配給層。
例如,沒有表示層協(xié)議,但盡管如此,人們還是將功能分配給該層,例如加密或壓縮。
我們現(xiàn)在將功能分配給層的方式實際上很大程度上都是用的TCP/IP 模型。今天的傳輸層幾乎從未像 OSI 那樣定義,而取決于 TCP 如何定義自身。
實際上,網(wǎng)絡(luò)的大多數(shù)功能都可以發(fā)生在任何層。
例如,我們分配給傳輸層的大多數(shù)功能,連接、分段、流量控制和重傳實際上可以在任何層發(fā)生。
我們所看到的分配給層的功能來自于重新解釋。將以太網(wǎng)和TCP/IP協(xié)議的功能分配給最近的OSI層,然后根據(jù)以太網(wǎng)和TCP/IP的功能定義OSI層。由于TCP 支持這些功能(連接、分段、流量控制、重傳),并且我們將 TCP 指定為Transport傳輸,因此我們聲稱這些是傳輸層的功能。
層中定義的真正功能實際上很小。例如,OSI 對傳輸層的真正定義是它是端到端的,其中端點被定義為在兩臺計算機上運行的進程。就這樣,沒有更多了。
所有層都是如此。OSI 幾乎沒有為任何特定層分配任何內(nèi)容,現(xiàn)在分配給特定層的大多數(shù)功能都是由多個 OSI 層處理的。
03OSI前 3 層是虛構(gòu)的,下4層也不準確
OSI 模型有 7 層。然而,在當(dāng)今的互聯(lián)網(wǎng)上,只有最后 4 個以任何合理的形式存在。這給很多人帶來了難題,他們往往選擇以下兩種策略之一:
1)忽略上面 3 層,重點關(guān)注下面 4 層。
2)制作一些東西來填充上面 3 層。
OSI 模型的上面 3 層是虛構(gòu)的,下面 4 層大致映射到以太網(wǎng) MAC+PHY 和互聯(lián)網(wǎng) TCP/IP。
這里的一個問題是,以太網(wǎng)和互聯(lián)網(wǎng)實際上并不符合這 4 層的原始定義,即 20 世紀 70 年代創(chuàng)建的定義。為了讓它變得合適,他們對 OSI 的說法以及以太網(wǎng)和互聯(lián)網(wǎng)的工作原理“撒了謊”。
最大的謊言是假裝以太網(wǎng)不是網(wǎng)絡(luò)。
以太網(wǎng)是一個成熟的網(wǎng)絡(luò),它根據(jù)目標地址逐跳轉(zhuǎn)發(fā)數(shù)據(jù)包。這就是以太網(wǎng)交換機內(nèi)部發(fā)生的情況。然而,為了能夠合理解釋這一切,他們創(chuàng)造了一些新詞,例如, 當(dāng)以太網(wǎng)執(zhí)行中繼時,將中繼稱為“橋接”,而當(dāng)互聯(lián)網(wǎng)執(zhí)行中繼時,將中繼稱為“路由”。事實上,它的功能相同,只有細微的差別。
同樣,TCP/IP 互聯(lián)網(wǎng)是一個互聯(lián)網(wǎng)絡(luò) ,而不是 OSI網(wǎng)絡(luò)層設(shè)想的網(wǎng)絡(luò),必須對它們最初的含義“撒謊”,才能夠自圓其說。
同樣的情況也發(fā)生在互聯(lián)網(wǎng)上,互聯(lián)網(wǎng)確實在以太網(wǎng)上運行,但在一個模型中一起展示細節(jié)是錯誤的抽象層。正確的抽象層是在本地網(wǎng)絡(luò)(如以太網(wǎng))上定義互聯(lián)網(wǎng)。然后我們可以展開子層,顯示每個子層如何執(zhí)行相同的功能。這樣,上2層就不會與下2層糾纏在一起。
04OSI 的“層”概念并不存在
除了列舉具體的層之外,OSI 還將分層(layering)作為一個抽象概念。
例如以下抽象,其中每一層都是根據(jù)它如何與這一端的相鄰層交互來定義的,同時與遠程端的對等層進行通信。
但實際上沒有任何層純粹以這種方式工作。
網(wǎng)絡(luò)堆棧最重要的原則是事物是分層的。但這并不意味著存在固有的層次,即某些東西屬于 某個特定的層次。
我們喜歡分層的是整個網(wǎng)絡(luò)?;ヂ?lián)網(wǎng)是一個完整的網(wǎng)絡(luò)。在ISP中,它可能位于MPLS之上,MPLS 也是整個網(wǎng)絡(luò)。MPLS本身可以在本地鏈路上分層,包括以太網(wǎng),這是一個完整的網(wǎng)絡(luò)。
分層的另一種類型是協(xié)議。它們是在彼此之上運行的,但這并不意味著它們屬于堆棧中的某個位置。
例如,MS-RPC一種重要的 Microsoft 協(xié)議,下圖是它的原理圖。它基于各種協(xié)議,而這些協(xié)議又相互疊加。
這里沒有一致的框架?!笆挛铩敝皇欠謱釉谄渌笆挛铩敝稀?/p>
有些人可能會聲稱 IPv4 和 IPv6 是同一“層”的替代“協(xié)議”,但事實并非如此。它們實際上是同一協(xié)議的兩個版本。它們與互聯(lián)網(wǎng)堆棧的其余部分(例如TCP、UDP、ICMP、DHCP、DNS等)集成度太高。唯一可以實際聲明層的地方是整個網(wǎng)絡(luò)的抽象層,例如Internet 層或以太網(wǎng)層。
層的一個重要概念是它們彼此獨立。而 OSI 并沒有能夠體現(xiàn)這一點?;ヂ?lián)網(wǎng)沒有固定的層數(shù)。當(dāng)數(shù)據(jù)包通過互聯(lián)網(wǎng)傳輸時,它們下面的層數(shù)會發(fā)生巨大變化。同樣,頂部的層數(shù)也根據(jù)應(yīng)用而變化。然后還有諸如 VPN 之類的東西,它們將互聯(lián)網(wǎng)置于自身之上。
05數(shù)據(jù)包標頭
OSI 強調(diào)數(shù)據(jù)包沿層傳遞,每層添加一個標頭。有時在數(shù)據(jù)包嗅探器中看起來是這樣,但這不是正確的抽象。相反,協(xié)議在其有效負載中封裝了其他內(nèi)容。
下面是Wireshark的圖片,它是一個數(shù)據(jù)包嗅探器,可以從本地網(wǎng)絡(luò)捕獲數(shù)據(jù)包。該顯示共有三個窗格。
頂部窗格顯示已捕獲的數(shù)據(jù)包列表。
底部窗格顯示數(shù)據(jù)包的原始十六進制轉(zhuǎn)儲。
中間窗格“解碼”十六進制轉(zhuǎn)儲,顯示原始字節(jié)的含義,例如對應(yīng)于IP 標頭的字節(jié)。
以下是與上面相同的數(shù)據(jù)包的十六進制轉(zhuǎn)儲,并對每個標頭進行了著色:以太網(wǎng)、IPv4、TCP,然后是 SSL (TLS) 記錄標頭。
OSI 通過數(shù)據(jù)包在一端沿網(wǎng)絡(luò)堆棧下行來描述這一點,每一層都添加自己的標頭。該過程在接收時相反,每一層在傳遞到上面的下一層之前剝離自己的標頭。
這種概念化的方式并不適用于所有情況,在實踐中只有偶爾才能發(fā)生。
特別是TCP 的有效負載是字節(jié)流,而不是數(shù)據(jù)包。當(dāng) TCP 有效負載較小且適合單個段時,它看起來符合上圖。但在其他情況下,單個 TCP 分段可能攜帶多個有效負載,或者有效負載可能跨越多個 TCP 分段。
下面的Wireshark 捕獲中可以看到這兩種情況都發(fā)生了。SSL (TLS) 將數(shù)據(jù)作為一系列記錄進行傳輸。我們看到單個 TCP 段可以包含多個 SSL 記錄,并且一個 SSL 記錄可以跨越多個 TCP 段。
在下面的數(shù)據(jù)包中,我們在單個 TCP/IP 數(shù)據(jù)包中看到五個 SSL 記錄。其中四個記錄完全包含在數(shù)據(jù)包中,而第五個記錄跨越該數(shù)據(jù)包的末尾和下一個數(shù)據(jù)包的開頭。
用上面的圖來畫這個,就會變成下面這樣:
這類錯誤在現(xiàn)實世界中具有重要意義。以Snort IDS為例。它嘗試通過搜索數(shù)據(jù)包中的簽名 (特定攻擊特有的字節(jié)模式)來檢測黑客活動。它將每個TCP 段視為僅包含一個SSL 記錄,并且無法檢測到不符合此條件的攻擊。
關(guān)鍵字“depth”是從數(shù)據(jù)包有效負載的開頭而不是流的開頭開始測量的。例如,以下是著名的 OpenSSL Heartbleed攻擊的簽名,與|18 03 03 00 40| 的 SSL 記錄標頭匹配。在數(shù)據(jù)包的前五個字節(jié)中。
但是,正如我們在上面看到的,SSL 記錄標頭可以出現(xiàn)在 TCP 有效負載中的任何位置,而不僅僅是數(shù)據(jù)包邊界。TCP 確實有數(shù)據(jù)包邊界的概念,這是只有我們?nèi)祟惒拍芸吹降臇|西。以下是利用Heartbleed 的數(shù)據(jù)包 ,它不會觸發(fā)上述簽名,因為它在前面插入了 7 字節(jié)的 TLS 記錄,將包含攻擊的第二條記錄推入數(shù)據(jù)包的更深處,超出了 depth:5 的 限制。
在當(dāng)今的網(wǎng)絡(luò)堆棧中,這種向數(shù)據(jù)包添加標頭的模型實際上只出現(xiàn)在兩個地方。一個是內(nèi)核添加組合的 TCP/IP 標頭,另一個是添加以太網(wǎng)標頭:
這與替代的兩層模型一致,即互聯(lián)網(wǎng)在以太網(wǎng)等本地網(wǎng)絡(luò)上運行。
盡管我們在數(shù)據(jù)包中看到一系列的標頭,但實際的層邊界并不完全落在我們看到的線上。它們是一個偶然的產(chǎn)物,而不是被設(shè)計成這樣工作的。
06僅本地可見性
OSI 模型假設(shè)所有層作為單個網(wǎng)絡(luò)一起工作,所有內(nèi)容都遵循相同的模型。
事實是,我們只能了解本地網(wǎng)絡(luò)或互聯(lián)網(wǎng)上發(fā)生的情況。我們的數(shù)據(jù)包到底發(fā)生了什么細節(jié)對我們來說是不透明的。下圖重新繪制了上面的模型,其中左側(cè)符合我們的網(wǎng)絡(luò),但網(wǎng)絡(luò)的其余部分如何未知,有時層數(shù)較少,有時層數(shù)較多。我們無法了解網(wǎng)絡(luò)的其余部分是如何構(gòu)建的。
07控制協(xié)議
大家根據(jù)數(shù)據(jù)傳輸方式來學(xué)習(xí)分層,但對于控制信息如何傳輸存在很多困惑。
我們需要DHCP 來配置IP地址。
我們需要ICMP 來控制消息。
我們需要 ARP 和NDP 來查找以太網(wǎng)上的MAC 地址 。
我們需要DNS 將名稱轉(zhuǎn)換為地址。
我們需要以太網(wǎng)中的一個子層來自動協(xié)商鏈路速度。
我們需要TCP中的SYN和FIN數(shù)據(jù)包來創(chuàng)建和銷毀連接。
我們需要完全脫離網(wǎng)絡(luò)堆棧的SSL證書管理。
WiFi 需要與接入點關(guān)聯(lián)。
在所有層,有時我們還需要身份驗證以確保安全。
所有層上都有大量的網(wǎng)絡(luò)管理正在進行,跟蹤計費和監(jiān)控等使用情況。
數(shù)據(jù)如何傳輸是容易的,但控制是困難的。
當(dāng)試圖將 OSI 模型應(yīng)用于TCP/IP時,它被徹底歪曲了。盡管像DHCP這樣功能運行在UDP 之上,但它們并不是“應(yīng)用層”的一部分。DHCP的功能是IP 協(xié)議功能的重要組成部分。這同樣適用于BGP,盡管它運行在路由器之間的 TCP 連接上,但它確實是 IP“層”的一部分。
08OSI 從不是真正的標準
Graham 一直在反復(fù)強調(diào),當(dāng)前我們所學(xué)的或者是別人教授給我們的,并不是原始的 OSI 標準,而是他們自己的非標準解釋。
OSI 從來就不是一種理論或正確的框架。人們?nèi)绱酥匾曀牟糠衷蚴且驗樗徽J定為“標準”。換句話說,如果大家都采用了這個標準,那么它就成為了理論和框架。
但 OSI 失敗了。1980 年左右的學(xué)術(shù)論文和早期教科書是錯誤的,因為沒有人真正采用該框架,OSI 最初的計劃從未完成,已被互聯(lián)網(wǎng)淘汰。盡管官方標準文件存在,但它是一個已失效的標準。這是謊言,不是真理。無論有多少標準組織堅稱這是事實,它仍然是一個謊言。
OSI 是由不懂網(wǎng)絡(luò)的人編寫的。他們專注于終端與大型機的對話,因為這是他們自己的大部分個人經(jīng)驗。OSI 就是這樣設(shè)計的。
1981 年,當(dāng) Tanenbaum 創(chuàng)建第一本計算機網(wǎng)絡(luò)大學(xué)教科書時,TCP/IP 尚未發(fā)布。這在某種程度上是正確的,因為當(dāng)時大多數(shù)學(xué)術(shù)論文都以某種方式引用了 OSI 模型。但后期的 OSI只是通過強行解釋,讓它來適配當(dāng)今互聯(lián)網(wǎng)的發(fā)展模式。
互聯(lián)網(wǎng)并不是因為它而發(fā)展的。
09爭 議
研究科學(xué)家George Michaelson表示對Graham的觀點并不完全贊同。Michaelson介紹,自己自1982年以來就一直在這個領(lǐng)域工作,曾在英國的VAX VMS系統(tǒng)上使用PL/1編寫OSI傳輸類1、2和3的早期實現(xiàn),并在1985/6年在倫敦的UCL-CS參與了由Marshall Rose監(jiān)督的項目,后來成為ISODE系統(tǒng)。其現(xiàn)在在應(yīng)用領(lǐng)域工作,涉及到X.400和X.500系統(tǒng)(電子郵件和目錄服務(wù))。
Michaelson稱QUIC協(xié)議在UDP上保持連接狀態(tài)的做法很好地符合會話層的定義。它保存的狀態(tài)使應(yīng)用程序在底層網(wǎng)絡(luò)發(fā)生變化時保持靈活。這正是OSI模型中會話層所執(zhí)行的一些功能。同樣,TLS模塊模擬了會話層行為。
Michaelson還認為物理-鏈接-網(wǎng)絡(luò)的抽象不可被摒棄,因為這些概念與我們的理解密切相關(guān)。Michaelson強調(diào),模型不僅是一本規(guī)則書,更是相互理解和進一步討論的基礎(chǔ)。
總的來說,Graham的文章推理嚴密,感興趣的朋友可以點擊閱讀原文查看完整內(nèi)容,也歡迎大家在評論區(qū)發(fā)表自己的觀點!
審核編輯:湯梓紅
-
網(wǎng)絡(luò)
+關(guān)注
關(guān)注
14文章
7568瀏覽量
88796 -
物理層
+關(guān)注
關(guān)注
1文章
150瀏覽量
34373 -
OSI
+關(guān)注
關(guān)注
0文章
82瀏覽量
15423 -
模型
+關(guān)注
關(guān)注
1文章
3244瀏覽量
48847
原文標題:是時候放棄 OSI 七層模型了嗎?
文章出處:【微信號:SDNLAB,微信公眾號:SDNLAB】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論