《聖經》裡面有一個巴別塔的故事,大致是說,上帝為了阻止人類聯合起來,就讓人類說不同的語言。人類之間沒法溝通,達不成”協議”,巴別塔的計劃就失敗了。
但是千年以後,有一種叫”程序猿”的物種,敲著一種這個群體通用的語言,連接著全世界所有的人,打造這網路世界的通天塔。如今的世界,正是因為網路,才連接在一起。
電腦之間的資料交換大部分都是透過網際網路,每台電腦上獨一無二的MAC地址就是電腦的唯一地址,傳輸過程中遵循公認的協議 (TCP/IP stack) 進行編解碼,並借由MAC和IP地址一層一層的送達指定的目的。具體MAC和IP地址的詳細內容和區別可以看這一篇
為何我們常見的TCP/IP要分層呢?
因為任何複雜的程式或應用都要分層,這是大型程式設計的基本要求。例如,複雜的電商系統還會分成資料庫層、Cache層、Compose層和Controller層等等,每一層專注做本層的事情。
TCP/IP是一個公認的網路通訊協議,它是OSI七層模型的簡化版,包含五層:物理層、鏈路層、網路層、傳輸層和應用層。下面用簡短的話來分別解釋這五層的功能:
物理層 (Physical): 處理網路線、無線傳輸設備,例如光纖。
鏈路層 (Link): 負責乙太網路的傳輸,並具有資料糾錯功能,例如漢明碼。
網路層 (Internet): 確保數據的路由,如何把數據從一個MAC地址傳輸到另一個MAC地址。
傳輸層 (Transport): 包括TCP、UDP,其中TCP保證邏輯上的end-to-end可靠性。
應用層 (Application): 用於網路相關應用的交互,例如HTTP、SSH等等。
那麼,層與層之間有沒有明確的界線呢?雖然傳進來的封包都是bytes array,但是可以利用TCP/IP每一層固定的Header長度定義明確的界線。Header放在每一層數據包的最前面,如下圖所示:
所以,網路封包的傳輸過程是從應用層開始,加上Header,一直加到傳輸層,然後路由器會根據Header路由封包到目的地。到了目的地電腦,再根據Header進行逐層解析,最後回到應用層。
例如,鏈路層的Header固定長度是14 bytes,我們的作業系統在解析封包時,會先取前面14 bytes進行解析,這14 bytes包含了三項數據 - 鏈路層的protocol、起始MAC地址、目的地MAC地址。
網路應用開發人員主要需要了解第三到第五層,我們常看到的ping、traceroute、HTTP、FTP等等都是後三層的應用。之後我們會偏重解析這三層並基於這三層建構應用。
總結
- TCP/IP 分層的原因是為了將複雜的任務劃分成易於管理的小部分。
- 每層都有自己的專門功能,並通過header來明確區分每層的界線。
- 網路應用開發主要關注第三到第五層。