複習TCP、UDP協議(三次握手、四次揮手)

複習TCP、UDP協議(包含三次握手、四次揮手)

一、首先了解一下TCP、UDP協議

在這裏插入圖片描述

可以看出TCP、UDP協議是工作在傳輸層的協議

那麼什麼是TCP協議呢?

TCP協議:

  • 文件分段
  • 建立會話
  • 可靠傳輸
  • 流量控制
  • 擁塞控制
  • 提供全雙工通信
  • 面向字節流傳輸
  • 點對點通信

簡單來說就是:可靠的傳輸層協議

那麼什麼又是UDP協議呢?

UDP協議:

  • 一個數據包即可完成通信
  • 無需無需建立會話
  • 無需流量控制
  • 無需可靠傳輸
  • UDP盡最大努力交付,但是不保證可靠交付
  • 支持一對一、一對多、多對多通信

讓我們比較一下TCP和UDP的區別吧

TCP與UDP區別:

1、連接

  • TCP是面向連接的傳輸層協議,傳輸數據需要先建立連接
  • UDP不需要連接,即刻傳輸數據

2、服務對象

  • TCP是一對一的兩點服務
  • UDP支持一對一、一對多、多對多服務

3、可靠性

  • TCP可靠的傳輸層協議
  • UDP盡力傳輸數據,不保證數據可靠性

4、擁塞控制

  • TCP具有擁塞控制機制
  • UDP不具有擁塞控制

5、流量控制

  • TCP具有流量控制機制
  • UDP不具有流量控制

6、首部開銷

  • TCP協議首部較長,首部一般爲20字節,如果加上可選則會增大
  • UDP協議首部較短,8個字節固定不變開銷較小

瞭解一下TCP頭部格式:

在這裏插入圖片描述

20個字節固定首部:
源端口(2B)、目標端口(2B)、序號(服務器端字節流發送的第一個字節序號)、
確認號(客戶端返回讓服務器端發送字節流的第一個字節的序號)、
數據偏移(記錄TCP數據部分的起始地址)4b 一位代表4個字節、保留(目前沒用)、
標記位:
URG:當前數據包發送的優先級
ACK:確定確認號是否有效
SYN:會話同步
PSH:當前數據包就收的優先級
RST:TCP會話異常錯誤
FIN:釋放連接
可變長度(非必須)
瞭解一下UDP頭部格式:
在這裏插入圖片描述

二、詳解TCP協議

1、建立連接階段

1.1 三次握手:

瞭解一下步驟:

  • 最初雙方都處於closed狀態
  • 服務端進入監聽狀態listen
  • 客戶端發送:SYN=1,ACK=0,seq=x
    • 進入syn_sent狀態
  • 服務端響應:SYN=1,ACK=1,seq=y,ack=x+1
    • 進入syn_rcvd狀態
  • 客戶端再次確認:ACK=1,seq=x+1,ack=y+1
    • 雙方進入established狀態進行通信
      在這裏插入圖片描述
      用單身狗的方式瞭解下:
      在這裏插入圖片描述
      爲什麼需要三次握手?二次、四次不行嗎?
      原因一:三次握手可以避免資源浪費
      如果只有兩次握手,當客戶端的請求連接在網絡中阻塞,客戶端沒有接收到報文,就會重新發送,由於沒有第三次握手,服務器不清楚客戶端是否收到了自己發送的建立連接的確認信號,所以每收到一個就只能先主動建立一個連接,佔用一個端口,浪費服務器資源
      比如:客戶端A給服務器B發送一個建立連接的請求,但是網絡傳輸比較慢,一段時間A發現B沒有迴應,於是又給B發送一次請求,這次網絡比較順暢先於第一次請求到達B,B給第二次一個迴應,A收到迴應連接建立。但是過一會第一次連接也到了B,B又給一次迴應,這次A不搭理他。B就一直在等A的迴應。佔用系統資源系統資源
      原因二:三次握手可以避免歷史連接導致連接混亂問題
      客戶端A給服務器B發送一個請求,由於某種原因B沒收到,於是A又重新發送一次,然後B收到兩個請求,造成連接混亂

2、數據傳輸階段

2.1 流量控制:

先了解一下TCP協議進行數據傳輸的過程
在這裏插入圖片描述

  • 先將文件分塊放入發送方的TCP緩存中
  • 後由網絡從緩存中取出數據傳輸
  • 接收方接收數據放入緩存
  • 再從緩存中取出數據
    tips:面向字節流:將文件分塊(大小不一定)放入TCP緩存中再從緩存中將數據進行傳輸,傳輸大小與放入緩存中塊的大小不同。以某幾個字節爲一組進行傳輸(隨機)
    流量控制的方法是使用滑動窗口技術:
    在發送方和接收方緩存中設置一個相同大小的滑動窗口,根據數據傳輸中約定滑動窗口的大小實現流量控制
    在這裏插入圖片描述

2.2 擁塞控制:

擁塞控制:(這裏不做重點不過多贅述)

  • 是一個全局性的過程,涉及到所有的主機、
  • 所有的路由器以及與降低網絡傳輸性能有關的所有因素
  • 通過慢開始門限(出現擁塞的值/2)和擁塞避免算法
    快重傳:接收多個數據包才進行一個確認,發現丟包就連續發多個數據包讓服務端重傳
    快恢復:丟包後就從新門限值開始進行擁塞控制

3、斷開連接階段

3.1 四次揮手:

TCP連接的釋放,必須是一方主動釋放,另一方被動釋放。

步驟:

  • 客戶端主動關閉:發送FIN=1,seq=u
    • 客戶端進入FIN-WAIT狀態
  • 服務端被動關閉:ACK=1,seq=v,ack=u+1
    • 服務端進入CLOSE-WAIT
  • 服務端再次發送:FIN=1,ACK=1,seq=w,ack=u+1
    • 服務端進入LAST-ACK
  • 客戶端接收後發送:ACK=1,seq=u+1,ack=w+1
    • 客戶端進入TIME-WAIT
    • 服務端收到後進入CLOSE狀態
  • 客戶端等待2MSL後進入CLOSE狀態
    在這裏插入圖片描述
    單身狗的理解方式:

在這裏插入圖片描述
爲什麼握手需要三次揮手需要四次:

​ 簡而言之,建立連接時服務端同意建立連接時也已經做好準備,兩步可以合爲一步。而斷開連接時需要先同意,然後處理遺留的數據,之後再返回確認

爲什麼客戶端在TIME-WAIT階段要等2MSL:

因爲當客戶端發出最後的ACK確認報文後,服務器並不會迴應,所以客戶端不確定服務端是否收到該報文段,所以設置一個等待時間。

MSL指:一個TCP報文在傳輸過程中的最大生命週期。

2MSL即是服務器端發出FIN報文和客戶端發出ACK確認報文所能保持有效的最大時長

如果客戶端在發出ACK確認報文後的2MSL內,又收到了服務器端的FIN報文,證明服務端沒有收到客戶端的ACK確認報文,於是客戶端重新發送ACK確認報文,重新計時,如果2MSL內沒有收到服務器的FIN報文,證明服務器已經收到報文並關閉,於是客戶端也關閉

部分圖片摘自:https://baijiahao.baidu.com/s?id=1654225744653405133&wfr=spider&for=pc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章