一文看懂IP、UDP和TCP三者的關係
網際網路,實際上是一套理念和協議組成的體系架構。其中,協議是一套眾所周知的規則和標準,如果各方都同意使用,那麼它們之間的通訊將變得毫無障礙。 |
網際網路,實際上是一套理念和協議組成的體系架構。其中,協議是一套眾所周知的規則和標準,如果各方都同意使用,那麼它們之間的通訊將變得毫無障礙。
資料包要在網際網路上進行傳輸,就要符合網際協議(IP)標準,網際網路上不同的線上裝置都有唯一的地址,地址只是一個數字,這和大部分家庭收件地址類似,你只需要知道一個家庭的具體地址,就可以往這個地址傳送包裹,這樣物流系統就能把物品送到目的地。
計算機的地址就稱為 IP 地址,訪問任何網站實際上只是你的計算機向另外一臺計算機請求資訊。
如果要想把一個資料主機 A 傳送給主機 B,那麼在傳輸之前,資料包上會被附加上主機 B 的 IP 地址資訊,這樣在傳輸過程中才能正確定址。額外地,資料包上還會附加上主機 A 本身的 IP 地址,有了這些資訊主機 B 才可以回覆資訊給主機 A。這些附加的資訊會被裝進一個叫 IP 頭的資料結構裡。IP 頭是 IP 資料包開頭的資訊,包含 IP 版本、源 IP 地址、目標 IP 地址、生存時間等資訊。
簡化的 UDP 網路三層傳輸模型
IP 是非常底層的協議,只負責把資料包傳送到對方電腦,但是對方電腦並不知道把資料包交給哪個程式,是交給瀏覽器還是交給王者榮耀?因此,需要基於 IP 之上開發能和應用打交道的協議,最常見的是“使用者資料包協議(User Datagram Protocol)”,簡稱UDP。
UDP 中一個最重要的資訊是埠號,埠號其實就是一個數字,每個想訪問網路的程式都需要繫結一個埠號。透過埠號 UDP 就能把指定的資料包傳送給指定的程式了,所以IP 透過 IP 地址資訊把資料包傳送給指定的電腦,而 UDP 透過埠號把資料包分發給正確的程式。和 IP 頭一樣,埠號會被裝進 UDP 頭裡面,UDP 頭再和原始資料包合併組成新的 UDP 資料包。UDP 頭中除了目的埠,還有源埠號等資訊。
簡化的 UDP 網路四層傳輸模型
UDP 不能保證資料可靠性,但是傳輸速度卻非常快,所以 UDP 會應用在一些關注速度、但不那麼嚴格要求資料完整性的領域,如線上影片、互動遊戲等。
對於瀏覽器請求,或者郵件這類要求資料傳輸可靠性(reliability)的應用,如果使用 UDP 來傳輸會存在兩個問題:
- 資料包在傳輸過程中容易丟失;
- 大檔案會被拆分成很多小的資料包來傳輸,這些小的資料包會經過不同的路由,並在不同的時間到達接收端,而 UDP 協議並不知道如何組裝這些資料包,從而把這些資料包還原成完整的檔案。
基於這兩個問題,我們引入 TCP 了。TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。相對於 UDP,TCP 有下面兩個特點:
- 對於資料包丟失的情況,TCP 提供重傳機制;
- TCP 引入了資料包排序機制,用來保證把亂序的資料包組合成一個完整的檔案。
和 UDP 頭一樣,TCP 頭除了包含了目標埠和本機埠號外,還提供了用於排序的序列號,以便接收端透過序號來重排資料包。
簡化的 TCP 網路四層傳輸模型
下面我們再看下完整的 TCP 連線過程,透過這個過程你可以明白 TCP 是如何保證重傳機制和資料包的排序功能的。
一個TCP連線的生命週期
從上圖可以看出,一個完整的 TCP 連線的生命週期包括了建立連線、傳輸資料、關閉連線三個階段。
- 首先,建立連線階段。這個階段是透過“三次握手”來建立客戶端和伺服器之間的連線。TCP 提供面向連線的通訊傳輸。面向連線是指在資料通訊開始之前先做好兩端之間的準備工作。所謂三次握手,是指在建立一個 TCP 連線時,客戶端和伺服器總共要傳送三個資料包以確認連線的建立。
- 其次,傳輸資料階段。在該階段,接收端需要對每個資料包進行確認操作,也就是接收端在接收到資料包之後,需要傳送確認資料包給傳送端。所以當傳送端傳送了一個資料包之後,在規定時間內沒有接收到接收端反饋的確認訊息,則判斷為資料包丟失,並觸發傳送端的重發機制。同樣,一個大的檔案在傳輸過程中會被拆分成很多小的資料包,這些資料包到達接收端後,接收端會按照 TCP 頭中的序號為其排序,從而保證組成完整的資料。
- 最後,斷開連線階段。資料傳輸完畢之後,就要終止連線了,涉及到最後一個階段“四次揮手”來保證雙方都能斷開連線。
TCP 為了保證資料傳輸的可靠性,犧牲了資料包的傳輸速度,因為“三次握手”和“資料包校驗機制”等把傳輸過程中的資料包的數量提高了一倍。
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2672864/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TCP/IP、UDP/IP協議TCPUDP協議
- 一文看懂FSSC與RPA的關係
- TCP 和 UDPTCPUDP
- TCP和UDPTCPUDP
- 與HTTP關係密切的協議:IP、TCP、DNSHTTP協議TCPDNS
- 系列TCP/IP協議-UDP(009)TCP協議UDP
- 一文搞懂TCP與UDP的區別TCPUDP
- tcp和udp的區別TCPUDP
- UDP和TCP的差異UDPTCP
- JVM、JDK、JRE三者的關係JVMJDK
- TCP和UDP對比TCPUDP
- UDP和TCP以及HTTPUDPTCPHTTP
- TCP和UDP比較TCPUDP
- TCP和UDP協議TCPUDP協議
- IP地址和MAC地址的關係Mac
- TCP和UDP是如何工作的TCPUDP
- python 中的UDP和TCP(1)PythonUDPTCP
- jdk、jre、jvm三者關係JDKJVM
- # uwsgi 的 processes , threads , workers 三者的關係thread
- php中TCP和UDP的區別PHPTCPUDP
- setup與data、methods三者間的關係
- 【bash】關於 /dev/(tcp|udp)/${HOST}/${PORT}devTCPUDP
- TCP 和 UDP 協議簡介TCPUDP協議
- TCP與UDPTCPUDP
- UDP與TCPUDPTCP
- TCP vs UDPTCPUDP
- OSI和TCP/IPTCP
- TCP/IP 和SocketTCP
- MQTT是TCP還是UDP?TCP與UDP區別MQQTTCPUDP
- 淺談TCP和UDP協議的區別TCPUDP協議
- TCP和UDP的優缺點及區別TCPUDP
- 一文搞懂PV、UV、VV、IP及其關係與計算
- 聊聊UDP、TCP和實現一個簡單的JAVA UDP小DemoUDPTCPJava
- 傳輸層協議 TCP 和 UDP協議TCPUDP
- [java基礎]之JVM/JRE/JDK三者的關係JavaJVMJDK
- 底層剖析 Window 、Activity、 View 三者關係View
- TCP與UDP的區別TCPUDP
- UDP與TCP的區別UDPTCP