最近在看《圖解HTTP》和《HTTP權威指南》,對TCP/IP大緻過了一下。
TCP/IP 不僅僅是TCP 和 IP
TCP/IP 是協定族,與之相對的事IEEE等标準組織設定的OSI七層。這裡面涉及到的協定有:
TCP 傳輸控制協定 傳輸層。
IP 網際協定 網絡層。
ARP 位址解析協定 資料鍊路層協定。
UDP 使用者資料報協定 傳輸層。
DNS 域名系統 為ip綁定邏輯名稱。
HTTP 超文本傳輸協定 應用層。
作為一名java web工程師,可以說90%涉及的工作是HTTP協定,如果做IM或者雲存儲可能會涉及到TCP+UDP。是以,HTTP和TCP,是基本功。
為什麼要分層,要能了解,每一層的意義所在
作為分隔兩地的計算機系統上不同應用程式,他們之間如果需要通信,首先要知道對方是誰。
傳輸層是怎麼區分不同對象的,ip:端口。
然後我要傳輸資料,資料按照什麼方式打包送過去呢?
封包 Message,封包是什麼,是使用者自定義長度(相對于底層協定來說)的二進制資料。然後在Message前加上傳輸層封包。
傳輸層的資料到網絡層,然後網絡層是怎麼區分不同對象的,ip。
封包 Package,是我網絡層無差别地對你傳輸層大資料報進行切割的小機關。然後在package前加上網絡層封包。
網絡層到資料鍊路層,怎麼辦,這個時候,已經沒有ip了,有的是什麼,mac,真實實體世界的身份證。
分組 frame, 進一步進行切割的機關。然後在frame前加上鍊路層封包。
可以看到,這三層的行為模式很相近。那為什麼要分為三層。 因為,資料傳輸要解決的問題太多了。通過對問題進行歸類,不同層次來專門解決不同問題。有點工業2.0,福特生産線的味道。 傳輸層,要解決的事,兩個應用程式間傳輸資料。其實問題很抽象,因為層次高。是以,隻設定兩個應用程式的位址(ip+端口)就好了。 網絡層,要解決在跨越多個網絡,長距離的情況下,我怎麼找到另外一個主機,其實核心就是路由尋址。 然後,就進入了“最後半公裡”,将ip轉換為mac,在鍊路層傳輸分組。 分層,也是大型軟體設計的工程學思想。
還有,每到下面一層時,一般都會進行資料切片分割?
因為需要複用。複用的場景是不同的。比如在資料鍊路層,有很多編碼方式,還有什麼頻分複用、碼分複用、時分複用等等,通過不同的編碼方式來進行複用。
在網絡層也是,通過分片,我可以走多個通路。并行的思想。
在傳輸層,有一個概念叫帶寬,就算我能一下把所有資料給你送過去,你機器的記憶體難道不會撐爆嗎。
本文轉自二郎三郎部落格園部落格,原文連結:http://www.cnblogs.com/haore147/p/5510462.html,如需轉載請自行聯系原作者