總覽--網絡協議的角度
在一個龐大的網絡中,該從哪里去了解呢?我先細細的講一下我們訪問一個網站的全部流程,當我們的電腦連上網絡的時候,就會啟動DHCP協議,來進行IP地址,MAC地址,DNS地址的分配,拿到我們的IP地址后,使用UDP協議進行DNS服務器的查詢,DNS有什么?查詢什么?可以將DNS服務器理解成一個域名和IP的映射集合,通過域名進行IP的查找,查找到我們所需要訪問的網站的IP之后,再次通過UDP數據報返回給我們,然后我們就要面臨選擇了,如果我們需要實時性,就選擇UDP協議,需要安全性就選擇TCP協議,我先介紹TCP協議,因為UDP太簡單了。首先我們知道了各自的IP,但是還不知道MAC地址,MAC地址在全球具有唯一標識,跟IP地址相比更類似于一個物理標識,而IP更偏向于軟件。此時我們通過IP地址,在ARP協議中尋找對應的MAC地址,ARP協議包含了IP和MAC的映射集,然后我們就擁有了和我們目的服務器建立連接的基本條件--IP和MAC,然后就通過TCP三次握手建立連接,之后就可以通過HTTP協議進行數據的交換,但是為什么說TCP協議可以保證安全性呢?因為有HTTPS協議,那么HTTP和HTTPS有什么不同的呢?請記住一個等式:HTTPS=HTTP+SSL/TSL,HTTP協議中文就是超文本傳輸協議,而SSL/TSL協議就是一種非對稱加密協議,經過加密之后別人就別想看了,然后就可以使用HTTP協議進行數據交換了,但是交換的前提就是使用IP協議,IP協議最重要的兩個功能就是分組轉發和路由選擇,何為分組轉發?我們將分組(上一層的PDU)轉發到目的IP,何為路由選擇?我們不能只知道IP目的地,還得知道怎么走,而路由選擇就是告訴我們再去往目的IP的這個過程中怎么走,走哪些路由器。我們做完這些之后就可以進行數據交換了,但是數據交換的過程依舊提心吊膽,因為數據如果錯誤怎么辦?數據如果丟失怎么辦?數據如果超時怎么辦?該怎么保證數據的可靠傳輸呢?別急!!!針對這三個問題,偉大的前人已經想好了各種協議去解決,我們一個一個來:
面對數據的錯誤-首先我們可以使用差錯校驗去進行數據錯誤的判斷,具體的方法有奇偶校驗和循環冗余校驗,但是奇偶校驗會發生漏碼,就是特定情況下不能檢測出誤碼,但是循環冗余校驗則不會,如果發現誤碼,接收方就會丟掉。
面對數據的超時-首先進行數據交換的雙方非常的有禮貌,當他們收到數據的時候都會回復一個收到,而正是因為這個收到發送方才能知曉對方收到,而這個收到在他們的語言里叫做ACK,如果在規定時間里發送方沒有收到ACK,那么就會觸發發送方的超時重傳,所以無論是超時還是丟失,只要接收方沒有發送ACK,那么發送方就會重傳。
數據的可靠傳輸-我們之前所說的超時重傳依賴的就是ACK,而這種方式又叫做停止-等待協議(SW),顧名思義如果沒有接收到ACK,那就停止發送,等待至規定時間,然后觸發重傳,除此之外還有回退N幀協議(GBN)。
在進行完數據交換之后,就進行TCP四次揮手,至此連接斷開。
總覽--網絡分層的角度
我們現在換一個角度去理解計算機網絡,那就是分層協議,分層協議可以有兩種,一種就是法律意義上的OSI協議,總共有七層,依次是物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層,另一個就是在商業被廣泛使用的TCP/IP四層模型:網絡接口層,網絡層,傳輸層,應用層。一個數據會經過這些層層包裝,然后轉發,轉發,之后又會層層卸掉包裝,那為什么OSI有七層,TCPIP只有四層呢?首先要說的是OSI協議已經不被使用了,因為過于復雜,而且運行效率很低,而且成本很高,缺乏實際經驗,沒有商業驅動力,所以能夠占領市場的就是標準--TCP/IP協議,OSI的表示層,會話層被合并到了TCPIP的應用層,數據鏈路層和物理層被合并到了網絡接口層。那每一層都是干嘛的呢?我們先從繁瑣的OSI七層開始講起。
OSI七層模型概述
物理層:我們熟知的光纖電纜,這種通過物理介質傳輸的就是物理層的作用
數據鏈路層:將比特流封裝成幀,而且進行流量控制,差錯檢驗,MAC尋址
網絡層:通過IP協議進行路由選擇,分組轉發,實現主機之間的連接
傳輸層:建立端口到端口的通信,使用TCP/UDP協議
會話層:管理應用之間的對話,支持斷點續傳和同步
表示層:處理數據格式之間的轉換
應用層:直接面向用戶,提供網絡服務接口,如:HTTP,HTTPS
TCP/IP四層模型概述
網絡接口層:封裝成幀,將幀轉化為比特流,在物流層面進行傳輸
網絡層:通過IP協議,進行路由選擇和分組轉發,實現主機之間的通信
傳輸層:通過TCP或者UDP協議實現端口之間的通信,也就是應用之間的通信
應用層:OSI的會話層,表示層,應用層
通過以上的介紹,我們不難發現OSI有兩層沒有和其他層整合在一起--傳輸層和網絡層,這兩層也是所有分層中最重要的。現在我們具體介紹一下,一個數據在每一層都會發生什么,又是通過什么協議發生改變的?
數據在各個分層的狀態
首先在應用層,我們的要發送的數據位于應用層,這些數據被稱為應用層的PDU,然后這些數據到了傳輸層,傳輸層建立端口之間的鏈接,將這些數據拆分成若干個報文段,將這些報文段進行改造,改造成本層的PDU,經過哪些改造呢?對原報文段增加頭部,頭部包含源端口和目的端口。然后來到了網絡層,還是得在強調一下網絡層的作用:分組轉發和路由選擇,以此實現主機之間的通信,這個分組就是指數據報,這實在是太重要了,網絡層拿到了傳輸層的PDU,然后還要改造,也是要添加頭部,頭部里包含源IP地址和目的IP地址,這就構成了網絡層的IP數據包,然后到了數據鏈路層,數據鏈路層給IP數據報添加幀首部和幀尾部,這就是數據鏈路層的分裝成幀,幀首部包含了幀開始符,幀的源地址和目的地址,而幀尾部包含了幀結束符,到了物理層,如何識別比特流中的幀呢?就是靠幀的開始符和結束符,也就是幀定界。
從網絡分層和網絡協議兩個角度去理解計算機網絡的全過程就結束了,接下來就是逐個介紹一些很重要的協議了!!!