目錄算法
協議就是兩個或多個對象之間爲了某個或多個需求而設置的約定,即在什麼時間,遇到什麼狀況該作什麼。編程
舉例: 小強和小明約定週末一塊兒去玩小霸王遊戲機,可是若是趕上停電就去掏鳥窩。瀏覽器
TCP/IP 協議就是爲了知足世界上成千上萬的網絡設備的各類通訊需求而設計的一套約定。安全
舉例: 你要從某網站下載一部電影,如何實現呢?服務器
首先網站服務器和你的電腦互相識別,須要 IP協議;
網絡
爲了跨越幾千千米的互聯網找到一條通往你電腦的路徑,須要路由協議;
數據結構
爲了片子數據傳輸不丟失亂序重複,須要 TCP協議;
socket
另外你能夠用FTP協議接收電影。單個協議就是單個約定,以TCP爲例,tcp
約定了通訊時超時怎麼辦?學習
數據丟失怎麼辦?
亂序怎麼辦?
網絡擁塞了怎麼辦? 等等。
不是協議多,而是需求多,每一個協議都是從具體的實際需求中產生的。需求多了,問題就多,爲了解決一個個的問題,而出現了一個個的協議。
舉例:支付頁面通常是https,由於安全需求;
組播協議出現是由於網絡點播需求;
IP over AOS 出現是由於宇航員方便上網的需求等等。
「分層」的思想能夠應用到不少領域,它是複雜問題簡單化的有效方法。
協議分層好處: 協議只需關注本層問題,直接利用下層提供的服務,同時向上層提供服務,而且每層的更改不會影響其餘層。
舉例:
經典四層模型: 應用層—>傳輸層—>網絡層—>物理層(鏈路層)
要點1:
謹記「網絡協議因需求而產生,以解決實際問題爲目的」,所以學習某個協議必定要了解它的應用場景和提出目的。
要點2:
選一本好的入門教程。本人極力推薦謝希仁教授的《計算機網絡》,本書概念清晰,思路明確,既不膚淺又不是很深刻且面面俱到,如今已經出到第六版,本書閱讀不得低於3遍。
要點3:
針對某個協議,深刻理解其報文格式是學習的關鍵。協議程序化後就是「數據結構+算法」,報文格式就是「數據結構」。
要點4:
必定要動手實驗,這能夠加深對協議理解。好比能夠用網絡抓包(如wireshark)學習某個協議的算法,如ARP的發現過程,TCP的握手協議,TFTP的文件傳輸原理。還能夠網絡編程,如簡單的網絡攻擊軟件製做等。
在瀏覽器發送信息到服務的時候,在通訊協議的過程當中,會分爲四層:
首先,是應用層(http協議),封裝一些要傳遞的信息。
其次,到傳輸層(tcp協議), tcp協議對應用層數據進行打包。
而後,到網絡層(ip協議),經過ip找到對應的服務器。
最後,到鏈路層(經過物理的介質傳輸數據)。
每一層都會對上一層進行打包。
客戶端(瀏覽器) —> 應用層 (http,https,DNS)—> 傳輸層(TCP, UDP) —> 網絡層 (IP)—>物理層—> 服務器
—> 物理層—>網絡層 —> 傳輸層 —> 應用層 —>具體的應用處理
你先在瀏覽器裏面輸入 https://www.kaola.com ,這是一個URL。瀏覽器只知道名字
是「www.kaola.com」,接着它打開地址簿去查找(DNS),查找到對應的 IP(106.114.138.24) 地址,
知道了具體的 IP 地址後,瀏覽器開始打包請求(HTTP):
通過應用層封裝後,瀏覽器會將應用層的包交給下一層去完成,經過 socket 編程來實現。下一層是傳輸層(TCP, UDP),TCP 協議裏面會有兩個端口,一個是瀏覽器監聽的端口,一個是電商的服務器監聽的端口。操做系統每每經過端口來判斷,它獲得的包應該給哪一個進程。
傳輸層封裝完畢後,瀏覽器會將包交給操做系統的網絡層。網絡層的協議是 IP 協議。在 IP 協議
裏面會有源 IP 地址,即瀏覽器所在機器的 IP 地址和目標 IP 地址,也即電商網站所在服務器的
IP 地址。
因而操做系統將 IP 包交給了下一層,也就是MAC 層。網卡再將包發出去。因爲這個包裏面是
有 MAC 地址的,於是它可以到達網關。
網關收到包以後,會根據本身的知識,判斷下一步應該怎麼走。網關每每是一個路由器,到某個
IP 地址應該怎麼走,這個叫做路由表。
走到最後一個網關後,經過 IP 找到具體的機器,經過端口找到對應的應用進行處理該筆請求。
參考資料:
①書籍《圖解HTTP》
②極客時間|趣談網絡協議 --劉超