網上瀏覽視訊,聽歌,聊天,計算機是怎麼在“你”、“我”之間傳送資料?
一、什麼是TCP/IP協議?
首先我們看下什麼是協議? 協議(Protocol)是為進行網路中的資料交換而建立的規則、標準或約定。用於不同系統中實體間的通訊。兩個實體要想通訊,必須有同一種語言,而且,對於通訊內容,怎樣通訊和何時通訊,都必須遵守一定的規定,這些規定就是協議。
在網際網路通訊中,最著名的就是TCP/IP兩個協議,但是我們現在常說的TCP/IP協議並不是單指著兩種協議,而是整個TCP/IP協議族。
二、計算機網路體系結構
既然有了協議,那麼協議作用的實體是什麼呢? 換言之網路中通訊的實體各不相同,應該怎樣各司其職?答案就是把現有網路體系抽象,劃分為不同層,每一層各自遵循相應的網路協議,完成相應的功能。
就好比一個網際網路公司劃分了技術部、產品部、運營部、市場部、人力資源部等,各部門既相互協作又各司其職,更好的完成完成公司的各項任務。
現有計算機網路體系結構有三種劃分形式:OSI七層協議、TCP/IP四層協議結構、五層協議結構。
OSI的七層協議體系結構概念清楚,理論也比較完整,但是它太複雜而且不實用。
TCP/IP體系結構已經得到了非常廣泛使用,但是其中網際介面層與資料鏈路層、物理層並沒有什麼區別,所以,現在計算機網路理論採取了折中方案,這也就是五層協議體系。
三、每層的作用
到這裡,我們已經清楚了網路的分層結構,那麼每一層各自的職責和使用的協議是什麼呢?
1)應用層
應用層協議定義的是應用程式間通訊和互動的規則。程式就是主機上正在執行的程式。比如我們電腦上開著的QQ、微信等。不同的網路應用需要有不同的應用層協議,比如瀏覽器使用的HTTP協議,支援電子郵件的SMTP協議,支援檔案傳送的FTP協議等等。應用層互動的資料單元成為報文(message)。
2)運輸層
運輸層的任務就是負責向兩個主機中程式之間的通訊提供通用的資料傳輸服務。應用層程式產生的報文就是使用運輸層進行傳輸。運輸層是通用的,它不針對某個特定的網路應用。多種應用是可以同時使用同一個運輸層。一臺電腦上可以同時執行著多個程式,多個應用層程式可以同時使用同一個運輸層傳送資料,同時,運輸層可以把收到的資訊分別交付給上面應用層程式。 運輸層主要使用的協議是TCP和UDP:
- 傳輸控制協議TCP(Transmission Control Protocol)—提供面向連線的,可靠的資料傳輸服務,資料運輸單元是報文段
- 使用者資料包協議UDP(User Datagram Protocol)—提供無連線的、盡最大努力的資料傳輸服務,不保證資料傳輸的可靠性,數傳輸單位是使用者資料包
那麼什麼時候使用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適合實時性要求很高的應用,比如視訊通話,語音通話等。
TCP則是面向連線的,TCP建立連線時需要三次握手,斷開時需要四次揮手,TCP保證資料的可靠性,保證資料的無差錯、不丟失、不重複,按順序到達。應用層和TCP互動的是一次一個資料塊,TCP把應用程式交下來的資料塊分割成了位元組序列包裝成報文段。 運輸層還有一個重要的概念—埠(port),因為主機上的程式都是動態建立和撤銷的,把程式作為通訊的最後終點是不可行的,所以要使用埠標識一個程式來進行通訊。無論是TCP還是UDP,在它們的首部中都會有源埠和目的埠這兩個欄位。比如我們熟悉的HTTP應用使用的80埠,FTP使用的21埠,TELNET使用的23埠,SMTP使用的25埠等等。3)網路層
網路層把運輸層產生的報文段或使用者資料包封裝成IP資料包(packet)進行傳送。同時還負責選擇合適的路由,使源主機運輸層所傳下來報文段或包能通過網路中的路由器找到目的主機。 網路層向上提供的是簡單靈活的、無連線的、不可靠資料交付。也即是說包在網路上傳遞會有丟失、出錯、重複和順序錯亂。這也就是我們常說的網路丟包。
網路層使用了我們熟悉的IP協議。源主機和目的主機的IP地址被封裝到IP首部內。4)資料鏈路層
資料鏈路層把網路交下來的IP資料包組裝成幀,然後在兩個相鄰節點的鏈路上傳送幀。通常稱為MAC幀,因為幀在傳送時使用的源地址和目的地址都是計算機硬體地址,封裝在幀首部資訊裡。
5)物理層
物理層將資料鏈路層交下來的的幀,按照位元流進行傳送,也即是二進位制0和1形式進行傳送。
總結
總結起來,計算機之間的資料傳輸就是資料通過各層之間的封裝與解封裝過程。就好比有一封信從最高層(源主機)向下傳,每經過一層就包上一個新的信封,信封上寫好必要的,下一層要處理的資訊(首部、尾部等)。包著多個信封的信件到達目的地(目標主機)之後,從第1層起,每層拆開一個信封后(按照固定協議),交給它的上一層。傳到最高層(應用層)後,收信人(程式)讀取內容。