協(xié)議概述:
1.點(diǎn)對(duì)點(diǎn)(只有一個(gè)發(fā)送方一個(gè)接收方)
2.可靠的畸肆,按序的字節(jié)流
3.流水線機(jī)制:
通過tcp擁塞控制和流量控制機(jī)制動(dòng)態(tài)設(shè)置窗口尺寸
4.發(fā)送方接收方都有緩存機(jī)制
5.全雙工(full—duplex)同一連接中能夠傳輸雙向的數(shù)據(jù)流
6,面向連接:
通信雙方在發(fā)送數(shù)據(jù)之前必須建立連接救斑,連接狀態(tài)只在連接的兩端中維護(hù)皂林,在沿途節(jié)點(diǎn)中并不維護(hù)狀態(tài)蜈七,tcp連接包括:兩臺(tái)主機(jī)上的緩存,連接狀態(tài)變量婿脸,socket等
7.流量控制機(jī)制
TCP段結(jié)構(gòu):
RTT(Round Trip Time,一個(gè)連接的往返時(shí)間)和超時(shí):
如何設(shè)置定時(shí)器的超時(shí)時(shí)間粱胜?
RTT過長(zhǎng)對(duì)段丟失時(shí)間反應(yīng)慢,過短造成不必要的重傳
如何估計(jì)RTT:
SampleRTT:測(cè)量從段發(fā)出去到收到ACK的時(shí)間(忽略重傳)
SampleRTT變換:測(cè)量多個(gè)SampleRTT求平均值
定時(shí)器超時(shí)時(shí)間設(shè)置:
EstimatedRTT+安全邊界
EstimatedRTT變化大->較大的邊界
測(cè)量RTT的變化值:SampleRTT和EstimatedRTT的差值
TCP發(fā)送方事件:
1.從應(yīng)用層收到數(shù)據(jù):
創(chuàng)建Segment
序列號(hào)是Segment第一個(gè)字節(jié)的編號(hào)
開啟計(jì)時(shí)器
設(shè)置超時(shí)時(shí)間:TimeOutInterval
2.超時(shí):
重傳引起超時(shí)的Segment
重啟定時(shí)器
3.收到ACK:
如果確認(rèn)此前未確認(rèn)的Segment:
更新SendBase
如果窗口中還有未被確認(rèn)的分組盖淡,重新啟動(dòng)定時(shí)器
快速重傳機(jī)制:
TCP實(shí)現(xiàn)中年柠,如果發(fā)生超時(shí),超時(shí)時(shí)間間隔將重新設(shè)置,即將超時(shí)時(shí)間間隔加倍冗恨,導(dǎo)致其很大答憔。
重發(fā)丟失的分組之前要等待更長(zhǎng)的時(shí)間。
通過重復(fù)的ack檢測(cè)分組的丟失掀抹。
如果sender收到對(duì)同一數(shù)據(jù)的3個(gè)ack虐拓,則假定該數(shù)據(jù)之后的段已經(jīng)丟失
快速重傳:在定時(shí)器超時(shí)之前即進(jìn)行重傳。
TCP流量控制(速度匹配機(jī)制):
接收方為TCP連接分配bufer
上層應(yīng)用可能處理buffer中數(shù)據(jù)的速度較慢傲武,則發(fā)送方不會(huì)傳輸?shù)奶嗳鼐裕煲灾劣谘蜎]接收方(buffer溢出)
RecWindow=0時(shí)發(fā)送方也會(huì)發(fā)送一小段數(shù)據(jù) 來獲取更新的緩沖大小,防止發(fā)生死鎖現(xiàn)象
TCP連接管理(建立):
TCP sender和receiver在傳輸數(shù)據(jù)前需要建立連接
初始化TCP變量:
初始序列號(hào)揪利,buffer 和流量控制信息等
Client:連接的發(fā)起者
Server:等待客戶連接請(qǐng)求:
三次握手:
1.客戶端主機(jī)向服務(wù)器發(fā)送一個(gè)SYN段(帶著初始序列號(hào)态兴,SYN標(biāo)志位置為1,不包含任何數(shù)據(jù))
2.服務(wù)器主機(jī)收到SYN段疟位,如果同意訪問瞻润,會(huì)返回一個(gè)SYNACK 段(為該連接分配緩存,返回自己的初始序列號(hào))
3.客戶機(jī)收到SYNACK 后返回ACK報(bào)文段(SYN置0甜刻,可能會(huì)包含數(shù)據(jù))
TCP連接管理(關(guān)閉):
客戶機(jī)關(guān)閉連接clientSocket.close()
1.客戶機(jī)向服務(wù)器發(fā)送TCP FIN 控制報(bào)文端(FIN置1)
2服務(wù)器收到FIN 绍撞,回復(fù)ACK,數(shù)據(jù)傳輸完畢后得院,關(guān)閉連接發(fā)送FIN
3.客戶機(jī)收到FIN回復(fù)ACK
進(jìn)入等待傻铣,如果收到FIN會(huì)重新發(fā)送ACK(防止丟包)
4.服務(wù)器收到ACK,連接關(guān)閉