TCP與UDP

網路層中IP數據包首部有一個欄位用來標識網路層的上一層,也就是傳輸層採用的是哪一種傳輸協議,根據這個欄位,可以識別是TCP傳輸還是UDP傳輸;同樣,傳輸層的TCP 和UDP為了識別自己的數據應該發送給哪一個應用程序,也設定了這樣一個欄位標識,這個欄位標識就是埠號。(數據是從一個主機的應用程序發送給另一個主機的應用程序, 通過IP可以找到目標主機的位置,通過埠號可以確定數據應該給目標主機上的哪一個應用程序去使用。)

通信識別,TCP/IP,UDP/IP通信中通過五個信息來識別一個通信,「源IP地址」,「目標IP地址」,「源埠號」,「目標埠號」,「傳輸協議(TCP/UDP)」。這五個只要有一個不同, 就可認為是兩個不同的通信。

一、UDP

UDP傳輸不提供複雜的控制機制,它利用IP提供面向無連接的通信服務。UDP報文沒有可靠性保證,順序保證,和流量控制,可靠性比較差,傳輸過程中即使出現包丟失也不會重發。 也正是因為這些,它的資源消耗小,傳輸速度快,通常音頻,視頻在傳送時用UDP傳輸較多。

二、TCP

TCP是一種面向有連接的傳輸協議,只有確認通信對端存在時,才會發送數據,從而可以控制通信流量的浪費。同時,TCP還充分實現數據傳輸過程中的各種控制,可以再數據丟包 的時候重發,還可以對次序亂掉的分包進行順序控制。

三、TCP的特點

此處介紹TCP並沒有詳細介紹TCP的一些特性及傳輸實現過程,主要是大致瞭解TCP傳輸的一個過程,具體實現並沒有深入瞭解。

3.1、連接管理

UDP是一種面向無連接的傳輸協議,不檢查對端是否存在就直接把數據發送出去;TCP是面向有連接的傳輸協議,在進行數據傳輸之前,會先建立通信兩端的連接。

客戶端通過TCP首部發送一個SYN包作為建立連接的請求,等待服務端確認應答,如果對端發送確認應答,則認為可以進行通信,如果客戶端沒有收到服務端的確認應答,則不會進行通信。在通信結束後,客戶端還會發送FIN包做斷開連接的處理,一個連接的建立與斷開,正常需要來回發送七個包才能完成。

建立連接:

  • 客戶端發送SYN包到服務端,此時客戶端進入SYN_SEND狀態,等待服務端確認。
  • 服務端收到客戶端發送過來的SYN包,必須確認客戶端的SYN包,同時自己也發送一個SYN包給客戶端,即ACK+SYN,這時候服務端進入SYN_RECEIVED狀態。
  • 客戶端接收到服務端的ACK+SYN包之後,向服務端發送確認應答包ACK,此包發送完畢,客戶端與服務端進入ESTABLISHED狀態,完成三次握手

斷開連接

  • 客戶端發送一個FIN包給服務端,用來關閉客戶端到服務端數據傳送。
  • 服務端收到這個FIN包,就發送一個ACK確認應答給客戶端。
  • 服務端關閉與客戶端之間的連接,發送FIN包給客戶端。
  • 客戶端收到後,發送一個ACK應答給服務端,此時連接斷開。

3.2、通過序列號與確認應答提高傳輸可靠性

TCP傳輸協議,兩臺主機建立好連接之後,開始進行數據傳輸,當發送端的數據到達接收端,接收端會返回一個收到消息的應答,這個消息叫做確認應答ACK。 TCP通過確認應答ACK實現可靠的數據傳輸。

發送端將數據發送之後,會等待對方的確認應答,如果有確認應答,說明數據已經成功到達對端,反之,發送端在一定時間內沒有收到ACK應答,就認為數據丟失,會重新 進行發送。

序列號是按照順序給發送數據的每一個位元組都標上號碼的編號,接受端通過數據包首部中的序列號和數據長度,將自己下一次應該接收的數據的序列號作為確認應答發送給 發送端,這樣,通過序列號和確認應答號,TCP可以實現可靠傳輸。

推薦閱讀:

查看原文 >>
相關文章