1. 程式人生 > >TCP/UDP通訊協議基礎全集(區別,三次握手四次揮手)

TCP/UDP通訊協議基礎全集(區別,三次握手四次揮手)

在本篇部落格你將瞭解到:

  • 什麼是TCP/IP和UDP協議
  • TCP協議中的三次握手和四次揮手過程
  • 為什麼連線的時候是三次握手,關閉的時候卻是四次握手
  • 為什麼TIME_WAIT狀態需要經過2MSL(最大報文段生存時間)才能返回到CLOSE狀態
  • TCP與UDP的區別
  • 什麼時候使用TCP

一、什麼是TCP/IP和UDP協議

1、什麼是TCP/IP協議

瞭解本概念之前我覺得可以瞭解一下什麼是通訊,兩臺計算機要通過網路進行通訊,必須滿足3條件

而TCP/IP協議是世界上應用最為廣泛的協議,是以TCP和IP為為基礎的不同層次上多個協議的集合,TCP協議俗稱傳輸控制協議,是面向連線,需要三次握手建立連線,4次揮手斷開連線報頭最小長度20位元組的協議

2、什麼是UDP協議

UDP協議,使用者資料包協議,面向無連線,報頭只有8個位元組。

二、TCP協議中的三次握手和四次揮手

TCP協議通過三次握手建立連線,通過四次揮手斷開連線。首先了解一些概念

SYN:TCP/IP建立連線時使用的握手訊號,

  • 三次握手建立連線
    首先我們看一組圖嘛

這裡寫圖片描述

,下面我簡要概述一下(純屬個人理解,不喜歡勿噴)

為方便理解我把客戶端看成A伺服器B
首先A和B建立連線,要通過三次握手,首先A傳送連線請求報文SYN,B接受連線後回覆ACK報文,併為這次連線分配資源,A接收到ACK報文後也向B傳送ACK報文並分配資源,這樣實現三次握手TCP連線就建立起來了。

  • 四次揮手斷開連線

這裡寫圖片描述

整個過程Client端所經歷的狀態圖解

這裡寫圖片描述

Server端所經歷的狀態圖解

這裡寫圖片描述

注意:

在TIME_WAIT狀態中,如果TCP client端最後一次傳送的ACK丟失了,它將重新發送。TIME_WAIT狀態中所需要的時間是依賴於實現方法的。典型的值為30秒、1分鐘和2分鐘。等待之後連線正式關閉,並且所有的資源(包括埠號)都被釋放。

三、為什麼連線的時候是三次握手,關閉的時候卻是四次握手?

因為當Server端收到Client端的SYN連線請求報文後,可以直接傳送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連線時,當Server端收到FIN報文時,很可能並不會立即關閉SOCKET,所以只能先回復一個ACK報文,告訴Client端,”你發的FIN報文我收到了”。只有等到我Server端所有的報文都發送完了,我才能傳送FIN報文,因此不能一起傳送。故需要四步握手。

四、為什麼TIME_WAIT狀態需要經過2MSL(最大報文段生存時間)才能返回到CLOSE狀態?

雖然按道理,四個報文都發送完畢,我們可以直接進入CLOSE狀態了,但是我們必須假象網路是不可靠的,有可以最後一個ACK丟失。所以TIME_WAIT狀態就是用來重發可能丟失的ACK報文。

五、TCP與UDP的區別

TCP UDP 備註
面向有連結的通訊服務 —無連線—-
提供可靠的通訊傳輸 不可靠,會丟包 TCP是面向連線的,建立連線之後才傳送資料,而UDP不管對方存不存在都會發送資料,TCP有確認機制,接收端每收到一個正確包都會迴應給傳送端。超時或者資料包不完整的話傳送端會重傳。UDP沒有。因此可能丟包。
保證資料順序 不保證
資料無邊界 TCP無邊界:客戶端分多次傳送資料給伺服器,若伺服器的緩衝區夠大,那麼伺服器端會在客戶端傳送完之後一次性接收過來,所以是無邊界的,UDP有邊界:客戶端每傳送一次,伺服器端就會接收一次,即傳送多少次就會接收多少次,因此是有邊界的
速度慢 TCP需要三次握手,有流量控制,擁塞控制UDP沒有,所以UDP快
面向位元組流 面向報文
一對一 可以一對一,一對多
報頭至少20位元組 報頭8位元組
有流量控制 沒有

六、什麼時候使用TCP和UDP

1、什麼時候使用TCP

對網路通訊質量有要求的時候,比如:整個資料要準確無誤的傳遞給對方,這往往用於一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸檔案的協議,POP、SMTP等郵件傳輸的協議。 eg: 瀏覽器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ檔案傳輸

2、什麼時候使用UDP

對網路通訊質量要求不高,速度要求快時,使用。eg:QQ語音 QQ視訊 TFTP