计算机网络 --- 传输层TCP协议
TCP協(xié)議的特點(diǎn)?
- TCP是面向連接(虛連接)的傳輸層協(xié)議。
- 每一條TCP連接只能有兩個(gè)端點(diǎn),每一條TCP連接只能是點(diǎn)對(duì)點(diǎn)的。
- TCP提供可靠交付的服務(wù),無(wú)差錯(cuò)、不丟失、不重復(fù)、按序到達(dá)??煽坑行?#xff0c;不丟不重。
- TCP提供全雙工通信。
因?yàn)門CP提供全雙工通信,所以發(fā)送接收方分別要準(zhǔn)備發(fā)送緩存和接收緩存。發(fā)送緩存里面為準(zhǔn)備發(fā)送的數(shù)據(jù) & 已發(fā)送但尚未收到確認(rèn)的數(shù)據(jù),接收緩存里面為按序到達(dá)但尚未被接受應(yīng)用程序讀取的數(shù)據(jù) & 不按序到達(dá)的數(shù)據(jù)。
- TCP面向字節(jié)流(流:流入到進(jìn)程或從進(jìn)程流出的字節(jié)序列,注意不是比特序列):TCP把應(yīng)用程序交下來(lái)的數(shù)據(jù)堪稱僅僅是一連串的無(wú)結(jié)構(gòu)字節(jié)流。?
TCP報(bào)文段的首部格式
注意填充字段的意義在于TCP報(bào)文段的首部長(zhǎng)度必須是4B的整數(shù)倍
- 序號(hào):在一個(gè)TCP連接中傳送的字節(jié)流中的每一個(gè)字節(jié)都按順序編號(hào),本字段表示本報(bào)文段所發(fā)送數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)。
- 確認(rèn)號(hào):期望收到對(duì)方下一個(gè)報(bào)文段的第一個(gè)數(shù)據(jù)字節(jié)的序號(hào)。若確認(rèn)號(hào)為N,則證明到序號(hào)N - 1為止的所有數(shù)據(jù)都已正確收到。
- 數(shù)據(jù)偏移(首部長(zhǎng)度):TCP報(bào)文段的數(shù)據(jù)起始處距離TCP報(bào)文段的起始處有多遠(yuǎn),以4B為單位。
- 控制位 --- 緊急位URG:URG = 1時(shí),標(biāo)明此報(bào)文段中有緊急數(shù)據(jù),是高優(yōu)先級(jí)的數(shù)據(jù),應(yīng)盡快傳送,不用在緩存里排隊(duì),配合緊急指針字段使用。
- 控制位 --- 確認(rèn)位ACK: ACK = 1時(shí)確認(rèn)號(hào)有效,在連接建立后所有傳送的報(bào)文段都必須把ACK置為1.
- 控制位 --- 推送位PSH:PSH = 1時(shí),接收方盡快交付接收應(yīng)用進(jìn)程,不再等到緩存填滿再向上交付。
- 控制位 --- 復(fù)位RST:RST = 1時(shí),表明TCP連接中出現(xiàn)嚴(yán)重差錯(cuò),必須釋放連接,然后再重新建立傳輸連接。
- 控制位 --- 同步位SYN:SYN = 1時(shí),表明是一個(gè)連接請(qǐng)求/連接接受報(bào)文。
- 控制位 --- 終止位FIN:FIN = 1時(shí),表明此報(bào)文段發(fā)送方數(shù)據(jù)已發(fā)完,要求釋放連接。
- 窗口:指的是發(fā)送本報(bào)文段的一方的接收窗口,即現(xiàn)在允許對(duì)方發(fā)送的數(shù)據(jù)量。
- 檢驗(yàn)和:檢驗(yàn)首部 + 數(shù)據(jù),檢驗(yàn)時(shí)要加上12B偽首部,第四個(gè)字段為6(UDP為17).
- 緊急指針:URG = 1時(shí)才有意義,指出本報(bào)文段中緊急數(shù)據(jù)的字節(jié)數(shù)。
- 選項(xiàng):最大報(bào)文段長(zhǎng)度MSS、窗口擴(kuò)大、時(shí)間戳、選擇確認(rèn)
TCP連接管理
TCP連接傳輸三個(gè)階段
TCP連接的建立采用客戶服務(wù)器方式,主動(dòng)發(fā)起連接建立的應(yīng)用進(jìn)程叫做客戶,而被動(dòng)等待連接建立的應(yīng)用進(jìn)程叫服務(wù)器.
TCP連接建立
假設(shè)運(yùn)行再一臺(tái)主機(jī)(客戶)上的一個(gè)進(jìn)程想與另一臺(tái)主機(jī)(服務(wù)器)上的一個(gè)進(jìn)程建立一條連接,客戶應(yīng)用進(jìn)程首先通知客戶TCP,他想建立一個(gè)與服務(wù)器上某個(gè)進(jìn)程的連接,客戶TCP會(huì)用以下步驟與服務(wù)器中的TCP建立一條TCP連接:
SYN洪泛攻擊:
SYN洪泛攻擊發(fā)生在OSI第四層,這種方式利用TCP協(xié)議的特性,就是三次握手。攻擊者發(fā)送TCP SYN,SYN是TCP三次握手中的第一個(gè)數(shù)據(jù)報(bào),而當(dāng)服務(wù)器返回ACK后,該攻擊者就不對(duì)其進(jìn)行再確認(rèn),那這個(gè)TCP連接就處于掛起狀態(tài),也就是所謂的半連接狀態(tài),服務(wù)器收不到再確認(rèn)的話,還會(huì)重復(fù)發(fā)送ACK給攻擊者。這樣更加會(huì)浪費(fèi)服務(wù)器的資源。攻擊者就對(duì)服務(wù)器發(fā)送非常大量的這種TCP連接,由于每一個(gè)都沒法完成三次握手,所以在服務(wù)器上,這些TCP連接會(huì)因?yàn)閽炱馉顟B(tài)而小號(hào)CPU和內(nèi)存,最后服務(wù)器可能死機(jī),就無(wú)法為正常用戶提供服務(wù)了。
TCP連接釋放
參與一條TCP連接的兩個(gè)進(jìn)程中的任何一個(gè)都能終止該連接,連接結(jié)束后,主機(jī)中的“資源”(緩存和變量)將被釋放。
TCP可靠傳輸
傳輸層:使用TCP實(shí)現(xiàn)可靠傳輸
網(wǎng)絡(luò)層:提供盡最大努力交付,不可靠傳輸
可靠:保證接收方進(jìn)程從緩存區(qū)讀出的字節(jié)流與發(fā)送方發(fā)出的字節(jié)流是完全一樣的。
TCP實(shí)現(xiàn)可靠傳輸?shù)臋C(jī)制:
- 校驗(yàn):與UDP校驗(yàn)一樣,增加偽首部。
- 序號(hào)
- 確認(rèn):TCP默認(rèn)使用累計(jì)確認(rèn)。
- 重傳:確認(rèn)重傳不分家,TCP的發(fā)送方在規(guī)定的時(shí)間內(nèi)沒有收到確認(rèn)就要重傳已發(fā)送的報(bào)文段。超時(shí)重傳。TCP采用自適應(yīng)算法,動(dòng)態(tài)改變重傳RTTs(加權(quán)平均往返時(shí)間)。
冗余ACK(冗余確認(rèn))
每當(dāng)比期望序號(hào)大的失序報(bào)文段到達(dá)時(shí),發(fā)送一個(gè)冗余ACK,指明下一個(gè)期待字節(jié)的序號(hào)。
舉例:
發(fā)送方已發(fā)送1,2,3,4,5報(bào)文段
接收方收到1,返回給1的確認(rèn)(確認(rèn)號(hào)為2的第一個(gè)字節(jié))
接收方收到3,仍返回給1的確認(rèn)(確認(rèn)號(hào)為2的第一個(gè)字節(jié))
接收方收到4,仍返回給1的確認(rèn)(確認(rèn)號(hào)為2的第一個(gè)字節(jié))
接收方收到5,仍返回給1的確認(rèn)(確認(rèn)號(hào)為2的第一個(gè)字節(jié))
發(fā)送方收到3個(gè)對(duì)于報(bào)文段1的冗余ACK,認(rèn)為2報(bào)文段丟失,重傳2號(hào)報(bào)文段(快速重傳)
TCP流量控制
流量控制:
讓發(fā)送方慢點(diǎn),要讓接收方來(lái)得及接收。
TCP利用滑動(dòng)窗口機(jī)制實(shí)現(xiàn)流量控制。
在通信過程中,接收方根據(jù)自己接收緩存的大小,動(dòng)態(tài)地調(diào)整發(fā)送方的發(fā)送窗口大小,即接收窗口rwnd(接收方設(shè)置確認(rèn)報(bào)文段的窗口字段來(lái)將rwnd通知給發(fā)送方),發(fā)送方的發(fā)送窗口取接收窗口rwnd和擁塞窗口cwnd的最小值。
TCP為每一個(gè)連接設(shè)有一個(gè)持續(xù)計(jì)時(shí)器,只要TCP連接一方收到對(duì)方的零窗口通知,就啟動(dòng)持續(xù)計(jì)時(shí)器。
若持續(xù)計(jì)時(shí)器設(shè)置的時(shí)間到期,就發(fā)送一個(gè)零窗口探測(cè)報(bào)文段。接收方收到探測(cè)報(bào)文段時(shí)給出現(xiàn)在的窗口值。
若窗口仍然是0,那么發(fā)送方就重新設(shè)置持續(xù)計(jì)時(shí)器。
TCP擁塞控制
出現(xiàn)擁塞的條件:
對(duì)資源需求的總和 > 可用資源
網(wǎng)絡(luò)中有許多資源同時(shí)呈現(xiàn)供應(yīng)不足 -> 網(wǎng)絡(luò)性能變壞 -> 網(wǎng)絡(luò)吞吐量將隨輸入負(fù)荷增大而下降
擁塞控制:
防止過多的數(shù)據(jù)注入到網(wǎng)絡(luò)中。(全局性)
擁塞控制 & 流量控制:
擁塞控制四種算法
- 慢開始
- 擁塞避免
- 快重傳
- 快恢復(fù)
假定:
- 數(shù)據(jù)單方向傳送,而另一個(gè)方向只傳送確認(rèn)
- 接收方總是有足夠大的緩存空間,因而發(fā)送窗口大小取決于擁塞程度
發(fā)送窗口 = Min{接收窗口rwnd,擁塞窗口cwnd}
接收窗口:接收方根據(jù)接收緩存設(shè)置的值,并告知給發(fā)送方,反映接收方容量。
擁塞窗口:發(fā)送方根據(jù)自己估算的網(wǎng)絡(luò)擁塞程度而設(shè)置的窗口值,反映網(wǎng)絡(luò)當(dāng)前容量。
慢開始和擁塞避免
一個(gè)傳輸輪次:
發(fā)送了一批報(bào)文段并收到它們的確認(rèn)的時(shí)間。
一個(gè)往返時(shí)延RTT。
開始發(fā)送一批擁塞窗口內(nèi)的報(bào)文段到開始發(fā)送下一批擁塞窗口內(nèi)的報(bào)文段的時(shí)間。
ssthresh(slow start shreshold)的初始值:
慢開始門限,到達(dá)初始值之后就要減速。在網(wǎng)絡(luò)擁塞之后,新門限值定義為出現(xiàn)網(wǎng)絡(luò)擁塞時(shí)的擁塞窗口的一半。
快重傳和快恢復(fù)
收到多個(gè)冗余ACK后立刻進(jìn)行快重傳。快重傳直接回到新的ssthresh(不像慢重傳回到1),直接進(jìn)行線性擁塞避免。
總結(jié)
以上是生活随笔為你收集整理的计算机网络 --- 传输层TCP协议的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: net应用程序中发生了未经处理的异常怎么
- 下一篇: ipv6+ssh+java_IPv6的本