TCP/IP vs OSI,網際網路中的協議模型
接下來的幾篇,我們來看看網路中的協議到底規範了哪些東西,為什麼要有這些規則?又有何優缺點?
首先來看看 TCP/IP 和 OSI 這兩種 Model 吧!第一個問題,Model 用來幹嘛?
從物理到抽象的規範模型
我們將要談到的 TCP/IP 和 OSI 都是一種模型(Model),規範模型的其中一個原因是為了方便不同領域的人一起建造網路的基礎架構。
要從 Alice 家傳送一個訊息到 Bob 家,會經過很複雜的過程。
例如,從 Alice 送出訊息開始,如果訊息量大的話可能需要切割成數個封包、把封包轉成不同形式的訊號,走光纖的的被轉換成光訊號、走 Wi-Fi 的則調變成無線電波。
途中經過的節點,也不是隨便走走而已,需要判斷哪條路走不通、哪個路徑比較快;如果中途資料掉了怎麼辦,要重新送還是乾脆放棄?
每個問題都是巨大的工程,都會需要各方面的專家在不同的技術上追求進步。訊號傳遞上要找到更好的傳遞材料、路徑選擇上要設計出更好的演算法、應用面也需要開發更方便的工具給使用者。
因此在規範模型時,切出不同的「層級(Layer)」就是很重要的事,只要協議好層級間的溝通方式(例如封包的格式談好,處理訊息的層級把訊息包成封包,丟給傳送封包的層級),大家就散會各自努力。
TCP/IP vs OSI
所謂 TCP/IP 和 OSI 就是眾多網路架構模型中的其中兩種。其中 TCP/IP 由兩位圖靈獎獲得者 Vint Cert 及 Robert Kahn 所開發,取名自 TCP(傳輸控制協定)及 IP(網際網路協定),是 Internet Protocol Suite(網際網路協議套組)的簡稱,因為 TCP 和 IP 是此套組中最早的兩個,就得此簡稱了。
而 OSI Model(Open System Interconnection Model 開放式系統互聯模型)則是由 ISO(國際標準化組織)提出。
在上世紀 90 年代左右開始,TCP/IP 和 OSI 兩種模型都已相應推出,TCP/IP 將模型分成四層,而 OSI 則將模型細分成七層。
但協議提出,就像是語言一樣,也要有人使用才能蓬勃發展。在 TCP/IP 較為實務的架構下,各層級支援的協定大多使用了 TCP/IP 的架構去建立,而 OSI 模型由於多為定義及抽象的標準,在十幾年後幾乎只在教科書上有出現,現實生活中支援 OSI 的其它協定則幾乎消聲匿跡。
TCP/IP 四層架構
TCP/IP 的模型共有以下四層
- Application Layer(應用層)
- Transport Layer(傳輸層)
- Internet Layer(網際網路層、網路層)
- Network Access Layer(網路存取層)
這樣的模型在不同層級做了什麼事呢?舉個例子來說:
假設你用 Line 傳了一則訊息出去,應用層的 Line 會把你的訊息丟給傳輸層的程式,加上「連接埠」等資訊傳到下面網際網路層的程式。在這層,資料會被加上「IP 位置」等資訊,再被傳到下面的網路存取層,加上「MAC 位置」等等,最後被轉換成訊號送走。
至於連接埠、IP 位置、MAC 位置的詳細作用為何?我們後續的文章接著聊。現在先回到 TCP/IP 的主要架構上,在不同層級會被加上 Header(標頭)的資訊,用來在傳遞訊息時標明來源及目的。
就有點像是你的訊息被丟進信封,寫上點什麼資訊、再被丟入信封,如此反覆數次。其中一層可能是寫你目的地的地址,例如:信義路一段 1 號,再往外一層寫上下一站要拿給誰。
剛開始你可能把信拿到某個郵筒,但是你的信封外寫著「拿給:文山郵局」。郵差不需知道你真正的寄送目的地,看到後只要拿給文山郵局就好。
接著文山郵局會把最外層的信封打開,看一下你的目的地為何,發現是送到信義路一段,於是文山郵局再套上一層信封,寫上「拿給:信義郵局」。同樣的,郵差看到這封信也不需要知道你的真正目的地為何,只要拿到信義郵局即可,再由信義郵局決定下個中繼站為何,或是真的抵達目的地了。
加入 TCP/IP 家族
在 TCP/IP 的架構下,你可以挑一個層級加入,符合其規範開發就能順利的和其它層級的程式相容。例如瀏覽網站的協定 HTTP 就是屬於應用層的範疇,HTTP 規範了瀏覽網站的方方面面,像是傳輸內容的格式、快取、錯誤處理等等,但不需要去管這個網站內容傳輸時要走哪條路,掉封包了怎麼辦。
這類的問題要交給下面幾層的協定來做,像是傳輸層的 TCP 就是專門處理連線的穩定性,例如重送的機制是如何做的:要每隔 0.1 ms 還是多久重送一次?要等接收端回覆收到,要等多久?諸如此類的問題。傳輸層的協定基本上現今已經算是相當完善的了,但仍有演算法優化的空間,或是更適用物聯網架構的協定也有可能推陳出新。
而在網路層的 IP(Internet Protocol)則負責把訊息定義網路上的地址,也就是大家熟悉的 IP Address。又或是 OSPF(Open Shortest Path First),專門決定訊息走哪條路徑比較好。
最後在網路存取層有 MAC(Media Access Control),網路卡中的 MAC Address 就是基於這個協定的;也有 ARP(Address Resolution Protocol),透過網路層的 IP Address 來找 MAC Address。
但實務上也不見得某個程式、服務就得完全屬於某一層,TCP/IP 的這個模型也只是盡可能的把抽象和實際的應用之間做一個連接,有些應用不見得可以很明確的歸類在某一層。
而 OSI 的七層模型,就更是這樣了,我們接著聊。
OSI 七層
OSI 的模型共有以下七層
- Application Layer(應用層)
- Presentation Layer(表達層)
- Session Layer(會議層)
- Transport Layer(傳輸層)
- Network Layer(網路層)
- Data Link Layer(資料連結層)
- Physical Layer(實體層)
和 TCP/IP 模型不同的是,OSI 模型提出更全面和詳細的分層架構,若兩者做比較的話,可以說 OSI 的應用、表達及會議層算是 TCP/IP 的應用層,而資料連結層和實體層對應到 TCP/IP 的網路存取層。
其中表達層,規範數據的傳送與接收格式,例如使用 ASCII 還是 UTF-8 來編碼;會議層則規範一次會議(兩者間的連線)的機制,例如做身分認證、會議的重新連線等等。
至於實體層,規範了通訊設備間的通訊規格,例如電壓、傳輸媒介(線材、連接方式)等等。
OSI Model 的優缺點
由於在每個細節都有詳細的規範,就算它並沒有提出實做的方法,OSI 依舊可說是在計算機通訊教科書中必定提到的模型。從閱讀 OSI 的規範中可以更全面的學習到現今網路架構的概念,在制訂新標準時也是很值得參考的一個模型。
然而 OSI Model 最大的缺點,當然也就是缺乏和實際 Protocol 的連結。在實務上要開發一個 Protocol 的服務,更難真的對應的某一層,例如 HTTP 這個協定就包含了應用、表達和會議層這三層級的實做。加上其並未定義實際的 Protocol,最後也只能當作參考使用。
小結
從 TCP/IP 和 OSI 崛起、競爭到一方稱霸,可以看到 TCP/IP 的架構雖然不完美,但先把可以應用的服務做出來,讓大家可以基於現有服務再堆疊更多服務,先佔據市場,最終獲得市場。
就像是看 Microsoft、Android 的崛起類似,就算一個更完善的理論和框架出現,也很難比一個先進入市場,並找到更多人入坑的框架來的容易建立生態系。