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