網絡協議TCP和UDP的基本原理

引入

  • TCP/IP協議族的傳輸層協議主要包括TCP和UDP
  • TCP是面向連接的可靠的傳輸層協議。它支持在並不可靠的網絡上實現面向連接的可靠的數據傳輸
  • UDP是無連接的傳輸協議,主要用於支持在較可靠的鏈路上的數據傳輸,或用於對延遲較敏感的應用

TCP/IP傳輸層的作用

  • 提供面向連接或者無連接的服務
  • 維護連接狀態
  • 對應用層數據進行分段和封裝
  • 實現多路複用
  • 可靠的傳輸數據
  • 執行流量控制

TCP的基本原理

特點

  • 三次握手->建立可靠連接
  • 確認機制->應答接收
  • 端口號->多路複用
  • 序列號->丟失檢測、亂序重排
  • 完整性校驗->差錯檢測
  • 窗口機制->流量控制

TCP封裝
在這裏插入圖片描述
TCP/UDP 端口號
在這裏插入圖片描述
TCP建立過程



建立

HostA   
  在這裏插入圖片描述
小編推薦自己的Linux、C/C++技術交流羣:【960994558】整理了一些個人覺得比較好的學習書籍、視頻資料共享在裏面(包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協程,DPDK等等.),有需要的可以自行添加哦!~
在這裏插入圖片描述


拆除

HostA
  在這裏插入圖片描述
傳輸確認
在這裏插入圖片描述
超時重傳
在這裏插入圖片描述
滑動窗口
在這裏插入圖片描述
三次握手過程說明:







  • 由客戶端發送建立TCP連接的請求報文,其中報文中包含seq序列號,是由發送端隨機生成的,並且將報文中的SYN字段置爲1,表示需要建立TCP連接。(SYN=1,seq=x,x爲隨機生成數值)

  • 由服務端回覆客戶端發送的TCP連接請求報文,其中包含seq序列號,是由回覆端隨機生成的,並且將SYN置爲1,而且會產生ACK字段,ACK字段數值是在客戶端發送過來的序列號seq的基礎上加1進行回覆,以便客戶端收到信息時,知曉自己的TCP建立請求已得到驗證。(SYN=1,ACK=x+1,seq=y,y爲隨機生成數值)這裏的ack加1可以理解爲是確認和誰建立連接。

  • 客戶端收到服務端發送的TCP建立驗證請求後,會使自己的序列號加1表示,並且再次回覆ACK驗證請求,在服務端發過來的seq上加1進行回覆。(SYN=1,ACK=y+1,seq=x+1)

四次揮手過程說明:

  • 客戶端發送斷開TCP連接請求的報文,其中報文中包含seq序列號,是由發送端隨機生成的,並且還將報文中的FIN字段置爲1,表示需要斷開TCP連接。(FIN=1,seq=x,x由客戶端隨機生成)
  • 服務端會回覆客戶端發送的TCP斷開請求報文,其包含seq序列號,是由回覆端隨機生成的,而且會產生ACK字段,ACK字段數值是在客戶端發過來的seq序列號基礎上加1進行回覆,以便客戶端收到信息時,知曉自己的TCP斷開請求已經得到驗證。(FIN=1,ACK=x+1,seq=y,y由服務端隨機生成)
  • 服務端在回覆完客戶端的TCP斷開請求後,不會馬上進行TCP連接的斷開,服務端會先確保斷開前,所有傳輸到A的數據是否已經傳輸完畢,一旦確認傳輸數據完畢,就會將回復報文的FIN字段置1,並且產生隨機seq序列號。(FIN=1,ACK=x+1,seq=z,z由服務端隨機生成)
  • 客戶端收到服務端的TCP斷開請求後,會回覆服務端的斷開請求,包含隨機生成的seq字段和ACK字段,ACK字段會在服務端的TCP斷開請求的seq基礎上加1,從而完成服務端請求的驗證回覆(FIN=1,ACK=z+1,seq=h,h爲客戶端隨機生成)

至此TCP斷開的4次揮手過程完畢

UDP的基本原理

UDP封裝
在這裏插入圖片描述
TCP和UDP的對比
在這裏插入圖片描述
總結



  • TCP和UDP通過端口號標識上層應用和服務
  • TCP通過三次握手建立可靠連接
  • TCP通過校驗和進行差錯校驗,通過序列號、確認和超時重傳機制實現可靠傳輸,通過滑動窗口實現流量控制
  • UDP實現簡單、資源佔用少,實時性強,適用於可靠性高的網絡和延遲敏感的應用

最後,如果覺得學習資料難找的話,可以添加小編的C/C++交流羣:960994558 學習資料已經共享在羣裏了,期待你的加入~
在這裏插入圖片描述

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