tcp和udp的區別

zhengbiyu發表於2024-03-06

在我們的OSI七層模型或者是四層模型中,我們的傳輸層始終保持不變,傳輸層負責定義兩臺主機程序之間的通訊,提供資料傳輸服務,提供端到端的可靠傳輸,所以我們需要用到的兩個主要的協議是:

TCP協議:傳輸控制協議,提供面向連線、可靠的資料傳輸服務,主要提供完整性服務
UDP協議:使用者資料協議,提供無連線、盡最大努力互動的服務,不保證資料的可靠性,主要提供及時性服務

TCP協議

TCP協議首部組成:

源埠和目的埠(4個位元組

源埠是傳送端,目的埠是接收方,各自佔2個位元組

序號(4個位元組)

傳送的資料的資料流中每一個位元組都擁有自己的序號,序號表示本報文段所傳送的資料的第一個位元組的序號,代表每次資料傳送的位置,每傳送一次就累加一次該資料位元組數的大小,序號是計算機生成的隨機數。

確認號(4個位元組)

期望收到對方的下一個報文段資料的第一個位元組的序號

資料偏移(4位)

表示資料部分距離報文首部的偏移量,“資料偏移”的計算單位是4個位元組,資料偏移量是佔四位,那麼最大表示為1111,最大1111表示15 x 4= 60個位元組,即表示TCP首部最大長度為60個位元組,因此“選項”部分最多40個位元組。

保留欄位(4位)

一般設定為0

標誌位(8位)

  • 緊急(URG):URG=1表示緊急指標有效,需要儘快傳送,不需要排隊直接優先傳輸
  • 確認(ACK):對已接受資料的確認,預設為0,建立連線後,所以傳送的報文都必須將ACK置為1,當ACK=1表示確認號欄位有效
  • 同步(SYN):在連結建立時使用,SYN=1,ACK=0表示是一個連結請求,若對方同意建立連線,則響應報文段為SYN=1,ACK=1
  • 推送(PSH):接收 TCP 收到 PSH = 1 的報文段,就儘快地交付接收應用程序,而不再等到整個快取都填滿了後再向上交付。
  • 復位(RST):當 RST = 1 時,表明 TCP 連線中出現嚴重差錯(如由於主機崩潰或其他原因),必須釋放連線,然後再重新建立運輸連線。
  • 終止(FIN):FIN = 1 表明此報文段的傳送端的資料已傳送完畢,並要求釋放運輸連線。

視窗

視窗值作為接受方讓傳送方設定其傳送視窗的依據,單位為位元組(限制是因為接受方的資料快取空間是有限的)

檢驗和(佔 2 位元組)

檢驗和欄位檢驗的範圍包括首部和資料這兩部分。在計算檢驗和時,要在 TCP 報文段的前面加上 12 位元組的偽首部。

緊急指標(佔 16 位)

指出在本報文段中緊急資料共有多少個位元組(緊急資料放在本報文段資料的最前面)。

TCP三次握手和四次揮手

三次握手

第一次握手(SYN=1, seq=x)

客戶端向服務端傳送了一個TCP 的 SYN 標誌位置1的包,指明客戶端打算連線的伺服器的埠,以及初始序號 X,儲存在包頭的序列號(Sequence Number)欄位裡。
傳送完畢後,客戶端進入 SYN_SEND 狀態。

第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1)

服務端收到了使用者端的請求,同意建立連線,然後伺服器發回確認包(ACK)應答。即 SYN 標誌位和 ACK 標誌位均為1。伺服器端選擇自己 ISN 序列號,放到 Seq 域裡,同時將確認序號(Acknowledgement Number)設定為客戶的 ISN 加1,即X+1。 傳送完畢後,伺服器端進入 SYN_RCVD 狀態。

第三次握手(ACK=1,ACKnum=y+1)

客戶端收到了服務端同意連線的確認後,再次傳送確認包(ACK),SYN 標誌位為0,ACK 標誌位為1,並且把伺服器發來 ACK 的序號欄位+1,放在確定欄位中傳送給對方,並且在資料段放寫ISN的+1

傳送完畢後,客戶端進入 ESTABLISHED 狀態,當伺服器端接收到這個包時,也進入 ESTABLISHED 狀態,TCP 握手結束。

四次揮手

第一次揮手(FIN=1,seq=x)

客戶端向服務端傳送一個 FIN 標誌位置為1的包,表示自己已經沒有資料可以傳送了,客戶端主動釋放客戶端到服務端的TCP連線。

第二次揮手(ACK=1,ACKnum=x+1)

服務端收到了客戶端的請求釋放報文,給客戶端傳送確認報文。從客戶端到服務端這個方向上的連線就釋放了,TCP連線處於半關閉狀態。此時客戶端無法傳送資料給服務端,但是服務端還可以傳送資料給客戶端,客戶端仍可以接收。

伺服器端進入 CLOSE_WAIT 狀態,客戶端接收到這個確認包之後,進入 FIN_WAIT_2 狀態,等待伺服器端關閉連線。

第三次揮手(FIN=1,seq=y)

服務端沒有資料再發給客戶端資料,其應用程序就通知TCP釋放連線,並向客戶端傳送確認報文。伺服器釋放伺服器到客戶端的TCP連線,伺服器端進入 LAST_ACK 狀態,等待來自客戶端的最後一個ACK。

第四次揮手(ACK=1,ACKnum=y+1)

客戶端接收到來自伺服器端的關閉請求,傳送一個確認包,並進入 TIME_WAIT狀態,等待可能出現的要求重傳的 ACK 包。
伺服器端接收到這個確認包之後,關閉連線,進入 CLOSED 狀態。
客戶端等待了某個固定時間(兩個最大段生命週期,2MSL,2 Maximum Segment Lifetime)之後,沒有收到伺服器端的 ACK ,認為伺服器端已經正常關閉連線,於是自己也關閉連線,進入 CLOSED 狀態。

UDP協議

UDP特點

  • 使用者資料包協議UDP(User Datagram Protocol) 是傳輸層的協議,無連線(即傳送資料之前不需要建立連線)。
  • UDP 面向報文傳輸,不保證可靠交付,同時也不使用擁塞控制,適合多媒體通訊的要求。
  • UDP 支援一對一、一對多、多對一和多對多的互動通訊。
  • UDP 的首部開銷小,只有 8 個位元組

首部格式

  • UDP的首部沒有“序號”欄位,因為UDP協議只需要傳輸一個資料包,所以不需要序號。
  • 使用者資料包 UDP 有兩個欄位:資料欄位和首部欄位。首部欄位有 8 個位元組,由 4 個欄位組成,每個欄位都是兩個位元組。

TCP和UDP的區別

面向連線:TCP協議需要建立連線,僅支援一對一通訊;UDP協議無需建立連線,支援一對一、一對多、多對一和多對多的互動通訊。
可靠傳輸:TCP協議透過確認應答、連線管理、流量控制、擁塞控制來確保可靠性傳輸;UDP不保證可靠性傳輸。
效能效率:TCP協議傳輸效率慢,需要較多的資源開銷。UDP協議傳輸效率快,需要較少的資源開銷。
首部格式:TCP協議的首部需要20-60個位元組,UDP協議需要8個位元組。
應用場景:TCP要求通訊資料可靠(比如檔案傳輸、郵件傳輸等),UDP適用於喲求通訊速度快(如音訊、影片等)

相關文章