上篇所提到的 TCP/IP,將網路通訊模型分成四層。今天來簡單聊一下這四層分別為何、在做什麼事,身為一名開發者,要如何融入這個架構裡呢?
TCP/IP 的模型共有以下四層
這樣的模型在不同層級做了什麼事呢?舉個例子來說:
假設你用 Line 傳了一則訊息出去,應用層的 Line 會把你的訊息丟給傳輸層的程式,加上「連接埠」等資訊傳到下面網際網路層的程式。在這層,資料會被加上「IP 位置」等資訊,再被傳到下面的網路存取層,加上「MAC 位置」等等,最後被轉換成訊號送走。
*TCP/IP 各層處理的資料
至於連接埠、IP 位置、MAC 位置的詳細作用為何?我們後續的文章接著聊。現在先回到 TCP/IP 的主要架構上,在不同層級會被加上 Header(標頭)的資訊,用來在傳遞訊息時標明來源及目的。
就有點像是你的訊息被丟進信封,寫上點什麼資訊、再被丟入信封,如此反覆數次。其中一層可能是寫你目的地的地址,例如:信義路一段 1 號,再往外一層寫上下一站要拿給誰。
*封裝資訊,加上標頭
剛開始你可能把信拿到某個郵筒,但是你的信封外寫著「拿給:文山郵局」。郵差不需知道你真正的寄送目的地,看到後只要拿給文山郵局就好。
接著文山郵局會把最外層的信封打開,看一下你的目的地為何,發現是送到信義路一段,於是文山郵局再套上一層信封,寫上「拿給:信義郵局」。同樣的,郵差看到這封信也不需要知道你的真正目的地為何,只要拿到信義郵局即可,再由信義郵局決定下個中繼站為何,或是真的抵達目的地了。
在 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 的七層模型,就更是這樣了,我們接著聊。