運輸層
協議:
TCP(Transmission Control Protocol,傳輸控制協議)
UDP(User Datagram Protocol,用戶數據報協議)
端口:
TCP
TCP(Transmission Control Protocol,傳輸控制協議)是一種面向連接的、可靠的、基于字節流的傳輸層通信協議,其傳輸的單位是報文段。
特征:
①面向連接
②只能點對點(一對一)通信
③可靠交互
④全雙工通信
⑤面向字節流
TCP 如何保證可靠傳輸:
①確認和超時重傳
②數據合理分片和排序
③流量控制
④擁塞控制
⑤數據校驗
TCP 報文結構
TCP 首部
TCP:狀態控制碼(Code,Control Flag),占 6 比特,含義如下:
URG:緊急比特(urgent),當 URG=1 時,表明緊急指針字段有效,代表該封包為緊急封包。它告訴系統此報文段中有緊急數據,應盡快傳送(相當于高優先級的數據), 且上圖中的 Urgent Pointer 字段也會被啟用。
ACK:確認比特(Acknowledge)。只有當 ACK=1 時確認號字段才有效,代表這個封包為確認封包。當 ACK=0 時,確認號無效。
PSH:(Push function)若為 1 時,代表要求對方立即傳送緩沖區內的其他對應封包,而無需等緩沖滿了才送。
RST:復位比特(Reset),當 RST=1 時,表明 TCP 連接中出現嚴重差錯(如由于主機崩潰或其他原因),必須釋放連接,然后再重新建立運輸連接。
SYN:同步比特(Synchronous),SYN 置為 1,就表示這是一個連接請求或連接接受報文,通常帶有 SYN 標志的封包表示『主動』要連接到對方的意思。
FIN:終止比特(Final),用來釋放一個連接。當 FIN=1 時,表明此報文段的發送端的數據已發送完畢,并要求釋放運輸連接。
UDP
UDP(User Datagram Protocol,用戶數據報協議)是 OSI(Open System Interconnection 開放式系統互聯) 參考模型中一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務,其傳輸的單位是用戶數據報。
特征:
①無連接
②盡最大努力交付
③面向報文
④沒有擁塞控制
⑤支持一對一、一對多、多對一、多對多的交互通信
⑥首部開銷小
UDP 報文結構
UDP 首部
TCP 與 UDP 的區別
TCP 面向連接,UDP 是無連接的;
TCP 提供可靠的服務,也就是說,通過 TCP 連接傳送的數據,無差錯,不丟失,不重復,且按序到達;UDP 盡最大努力交付,即不保證可靠交付
TCP 的邏輯通信信道是全雙工的可靠信道;UDP 則是不可靠信道
每一條 TCP 連接只能是點到點的;UDP 支持一對一,一對多,多對一和多對多的交互通信
TCP 面向字節流(可能出現黏包問題),實際上是 TCP 把數據看成一連串無結構的字節流;UDP 是面向報文的(不會出現黏包問題)
UDP 沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如 IP 電話,實時視頻會議等)
TCP 首部開銷20字節;UDP 的首部開銷小,只有 8 個字節
TCP 黏包問題
原因
TCP 是一個基于字節流的傳輸服務(UDP 基于報文的),“流” 意味著 TCP 所傳輸的數據是沒有邊界的。所以可能會出現兩個數據包黏在一起的情況。
解決
發送定長包。如果每個消息的大小都是一樣的,那么在接收對等方只要累計接收數據,直到數據等于一個定長的數值就將它作為一個消息。
包頭加上包體長度。包頭是定長的 4 個字節,說明了包體的長度。接收對等方先接收包頭長度,依據包頭長度來接收包體。
在數據包之間設置邊界,如添加特殊符號 標記。FTP 協議正是這么做的。但問題在于如果數據正文中也含有 ,則會誤判為消息的邊界。
使用更加復雜的應用層協議。
TCP 流量控制
概念
流量控制(flow control)就是讓發送方的發送速率不要太快,要讓接收方來得及接收。
方法
利用可變窗口進行流量控制
TCP 擁塞控制
概念
擁塞控制就是防止過多的數據注入到網絡中,這樣可以使網絡中的路由器或鏈路不致過載。
方法
慢開始( slow-start )
擁塞避免( congestion avoidance )
快重傳( fast retransmit )
快恢復( fast recovery )
TCP的擁塞控制圖
今天的分享就到這里了,下期為大家分享TCP連接管理,大家要好好學C++喲~
編輯:jq
-
數據
+關注
關注
8文章
6888瀏覽量
88826 -
TCP
+關注
關注
8文章
1349瀏覽量
78985 -
UDP
+關注
關注
0文章
322瀏覽量
33876
原文標題:C++基礎語法梳理:計算機網絡丨傳輸層(TCP&UDP)
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論