網上瀏覽視頻,聽歌,聊天,計算機是怎麼在「你」、「我」之間傳送數據?瀏覽器
首先咱們看下什麼是協議? 協議(Protocol)是爲進行網絡中的數據交換而創建的規則、標準或約定。用於不一樣系統中實體間的通訊。兩個實體要想通訊,必須有同一種語言,並且,對於通訊內容,怎樣通訊和什麼時候通訊,都必須遵照必定的規定,這些規定就是協議。服務器
在互聯網通訊中,最著名的就是TCP/IP兩個協議,可是咱們如今常說的TCP/IP協議並非單指着兩種協議,而是整個TCP/IP協議族。微信
既然有了協議,那麼協議做用的實體是什麼呢? 換言之網絡中通訊的實體各不相同,應該怎樣各司其職?答案就是把現有網絡體系抽象,劃分爲不一樣層,每一層各自遵循相應的網絡協議,完成相應的功能。網絡
就比如一個互聯網公司劃分了技術部、產品部、運營部、市場部、人力資源部等,各部門既相互協做又各司其職,更好的完成完成公司的各項任務。計算機網絡
現有計算機網絡體系結構有三種劃分形式:OSI七層協議、TCP/IP四層協議結構、五層協議結構。 cdn
OSI的七層協議體系結構概念清楚,理論也比較完整,可是它太複雜並且不實用。視頻
TCP/IP體系結構已經獲得了很是普遍使用,可是其中網際接口層與數據鏈路層、物理層並無什麼區別,因此,如今計算機網絡理論採起了折中方案,這也就是五層協議體系。 blog
到這裏,咱們已經清楚了網絡的分層結構,那麼每一層各自的職責和使用的協議是什麼呢?接口
應用層協議定義的是應用進程間通訊和交互的規則。進程就是主機上正在運行的程序。好比咱們電腦上開着的QQ、微信等。不一樣的網絡應用須要有不一樣的應用層協議,好比瀏覽器使用的HTTP協議,支持電子郵件的SMTP協議,支持文件傳送的FTP協議等等。應用層交互的數據單元成爲報文(message)。進程
運輸層的任務就是負責向兩個主機中進程之間的通訊提供通用的數據傳輸服務。應用層進程產生的報文就是使用運輸層進行傳輸。運輸層是通用的,它不針對某個特定的網絡應用。多種應用是能夠同時使用同一個運輸層。一臺電腦上能夠同時運行着多個進程,多個應用層進程能夠同時使用同一個運輸層發送數據,同時,運輸層能夠把收到的信息分別交付給上面應用層進程。 運輸層主要使用的協議是TCP和UDP:
那麼何時使用TCP,何時使用UDP呢?咱們先看下使用TCP和UDP的各類應用和應用協議:
應用 | 應用層協議 | 運輸層協議 |
---|---|---|
域名轉換 | DNS(域名系統) | UDP |
文件傳送 | FTP(文件傳送協議) | TCP |
路由選擇協議 | RIP(路由信息協議) | UDP |
IP地址配置 | DHCP(動態主機配置協議) | UDP |
網絡管理 | SNMP(簡單網絡管理協議) | UDP |
遠程網絡文件服務器 | NFS(網絡文件協議) | UDP |
流式多媒體通訊 | 專用協議 | UDP |
遠程終端接入 | TELNET(遠程終端協議) | TCP |
萬維網 | HTTP(超文本協議) | TCP |
電子郵件 | SMTP(簡單郵件傳送協議) | TCP |
UDP在傳送數據以前不須要先創建鏈接,目的主機在收到UDP報文後,不須要給出任何確認。發送數據結束時也沒有任何鏈接可釋放,所以UDP減小了開銷和發送數據以前的時延。主機間不須要維持複雜的狀態鏈接。 同時UDP對應用程序交下來的報文,不作拆分,也不作合併,應用層交下來的報文多長,UDP加上必要的控制信息後就交付下一層。UDP也沒有擁塞控制,網絡擁塞不會使源主機發送速率下降。綜合來看,UDP適合實時性要求很高的應用,好比視頻通話,語音通話等。
網絡層把運輸層產生的報文段或用戶數據報封裝成IP數據報(packet)進行傳送。同時還負責選擇合適的路由,使源主機運輸層所傳下來報文段或包能經過網絡中的路由器找到目的主機。 網絡層向上提供的是簡單靈活的、無鏈接的、不可靠數據交付。也便是說包在網絡上傳遞會有丟失、出錯、重複和順序錯亂。這也就是咱們常說的網絡丟包。
數據鏈路層把網絡交下來的IP數據報組裝成幀,而後在兩個相鄰節點的鏈路上傳送幀。一般稱爲MAC幀,由於幀在傳送時使用的源地址和目的地址都是計算機硬件地址,封裝在幀首部信息裏。
物理層將數據鏈路層交下來的的幀,按照比特流進行傳送,也便是二進制0和1形式進行傳送。
總結起來,計算機之間的數據傳輸就是數據經過各層之間的封裝與解封裝過程。就比如有一封信從最高層(源主機)向下傳,每通過一層就包上一個新的信封,信封上寫好必要的,下一層要處理的信息(首部、尾部等)。包着多個信封的信件到達目的地(目標主機)以後,從第1層起,每層拆開一個信封后(按照固定協議),交給它的上一層。傳到最高層(應用層)後,收信人(進程)讀取內容。