引入
- 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 學習資料已經共享在群里了,期待你的加入~

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/239088.html
標籤:其他
上一篇:《每日論文》Problem Solving with Algorithms and Data Structures using Python.
下一篇:Java中高級核心知識全面決議——Redis(分布式鎖【簡介、實作】、Redlock分布式鎖、HyperLoglog【簡介、原理、實作、使用】)中
