一雷袋、TCP鏈接
1吉殃、TCP被稱為面向連接的,這是因?yàn)閮蓚€(gè)應(yīng)用在發(fā)送數(shù)據(jù)之前楷怒,必須要先相互“握手”蛋勺,即雙發(fā)初始化與TCP連接相關(guān)的許多TCP狀態(tài)變量。這種TCP連接僅保留在兩個(gè)通信端系統(tǒng)的TCP程序中鸠删,中間的網(wǎng)絡(luò)層(路由器和鏈路層交換機(jī))不會(huì)維持TCP連接狀態(tài)抱完,他們只看到了數(shù)據(jù)報(bào)
2、TCP連接是點(diǎn)對(duì)點(diǎn)的刃泡,不存在1對(duì)多巧娱,或者多對(duì)多
3碉怔、通過(guò)三次握手建立連接后,客戶進(jìn)程通過(guò)socket傳遞數(shù)據(jù)流禁添,TCP接受數(shù)據(jù)并將數(shù)據(jù)放到該連接的發(fā)送緩存里(發(fā)送緩存是三次握手期間設(shè)置的)接下來(lái)TCP會(huì)不時(shí)地從發(fā)送緩存中取出一塊數(shù)據(jù)撮胧,并將數(shù)據(jù)傳遞到網(wǎng)絡(luò)層。TCP可從緩存中去取出并放到報(bào)文段中的數(shù)據(jù)數(shù)量受限于最大報(bào)文段長(zhǎng)度(Maximum Segment Size)MSS老翘,MSS指在報(bào)文段李應(yīng)用層數(shù)據(jù)的最大長(zhǎng)度芹啥,不包括首部的TCP報(bào)文段最大長(zhǎng)度
4、TCP為應(yīng)用層數(shù)據(jù)配上一個(gè)TCP首部铺峭,形成多個(gè)TCP報(bào)文段墓怀,這些報(bào)文段下發(fā)到網(wǎng)絡(luò)層,網(wǎng)絡(luò)層將其分別封裝到網(wǎng)絡(luò)層IP數(shù)據(jù)報(bào)中卫键,將IP數(shù)據(jù)報(bào)發(fā)送到網(wǎng)絡(luò)中傀履,TCP的接收端 接受到一個(gè)報(bào)文段后,該報(bào)文段的數(shù)據(jù)就放到TCP連接的接受緩存中永罚,應(yīng)用層從緩存中去讀數(shù)據(jù)流
二啤呼、TCP報(bào)文段結(jié)構(gòu)
1、源端口號(hào)和目的端口號(hào)用于多路復(fù)用/分解來(lái)自活送到上層應(yīng)用的數(shù)據(jù)呢袱,同UDP一樣官扣,TCP首部也有校驗(yàn)和字段
2、序號(hào):TCP為每個(gè)字節(jié)編號(hào)羞福,如果一個(gè)文件有500000字節(jié)惕蹄,MSS為1000字節(jié),數(shù)據(jù)流的首字節(jié)編號(hào)為0治专,第二個(gè)報(bào)文段分配序號(hào)1000卖陵,第三個(gè)2000,每個(gè)序號(hào)填到相應(yīng)TCP報(bào)文段首部的序號(hào)字段中
3张峰、確認(rèn)號(hào):TCP是雙全工的泪蔫,主機(jī)A向主機(jī)B放數(shù)據(jù)時(shí)也可接收主機(jī)B的數(shù)據(jù),主機(jī)A中的確認(rèn)號(hào)是主機(jī)A期望從主機(jī)B接收到的報(bào)文段的序號(hào)
4喘批、接受窗口:用于流量控制撩荣,指示接收方愿意接受的字節(jié)數(shù)量
5、首部長(zhǎng)度:定義了TCP首部長(zhǎng)度
6饶深、選項(xiàng)字段:用于發(fā)送方與接收方鞋廠最大報(bào)文段長(zhǎng)度(MSS)或者在高速網(wǎng)絡(luò)環(huán)境下用作窗口調(diào)節(jié)因子時(shí)使用通常該字段為空
7餐曹、標(biāo)志字段:ACK用于指示確認(rèn)字段中的值時(shí)有效的
3、TCP可靠數(shù)據(jù)傳輸概述
1敌厘、確認(rèn)合理的超時(shí)時(shí)間:大于RTT
1)RTT是變化的台猴,測(cè)試多個(gè)從段發(fā)出到收到ACK的時(shí)間,取平均值得到 EstimatedRTT
2)安全邊界:如果estimatedRTT變化大,安全邊界值設(shè)置較大饱狂,如果變化不大曹步,值設(shè)置小
3)超時(shí)時(shí)間 = EstimatedRTT + 安全邊界
2、發(fā)送方做的事件
1)從應(yīng)用層收到數(shù)據(jù)嗡官,創(chuàng)建報(bào)文段箭窜,序列號(hào)是segment的第一個(gè)字節(jié)編號(hào)毯焕;開啟計(jì)時(shí)器衍腥;設(shè)置超時(shí)時(shí)間
2)超時(shí):僅僅重傳引起超時(shí)的segment,然后重啟計(jì)時(shí)器
3)收到ACK:如果確認(rèn)此前未收到的segment纳猫,更新滑動(dòng)窗口婆咸,如果窗口中還有未被確認(rèn)的分租,重啟計(jì)時(shí)器
3芜辕、快速重傳機(jī)制
根據(jù)流水線機(jī)制尚骄,發(fā)送方會(huì)發(fā)送多個(gè)分組,如果某個(gè)分組丟失侵续,會(huì)引起接收方發(fā)送多個(gè)重復(fù)的ACK倔丈,告知發(fā)送方要發(fā)送丟失的分組
如果發(fā)送方收到同一個(gè)數(shù)據(jù)的3個(gè)ACK,則假定該數(shù)據(jù)之后的 段已經(jīng)丟失了状蜗,在定時(shí)器超時(shí)錢即進(jìn)行重傳
四需五、流量控制
1、思想:接收方的應(yīng)用層讀取緩存的數(shù)據(jù) 比 發(fā)送方發(fā)送速度慢轧坎,會(huì)導(dǎo)致接受方的TCP鏈接緩存溢出宏邮,數(shù)據(jù)丟失,所以要控制發(fā)送速度
2缸血、實(shí)現(xiàn):receiver通過(guò)segment首部接收窗口字段將空閑的緩存空間告訴sender蜜氨,sender限制已經(jīng)發(fā)送但還未收到ACK的數(shù)據(jù)不超過(guò)receiver空閑的緩存空間
五、TCP連接管理
1捎泻、在數(shù)據(jù)傳輸前建立連接 “三次握手”
目的:初始化TCP變量飒炎,創(chuàng)建緩存和流量控制信息(接收窗口)
過(guò)程:1)客戶端發(fā)送請(qǐng)求:發(fā)送一個(gè)特殊的報(bào)文段,笆豁,不包含數(shù)據(jù)郎汪,首部的標(biāo)志位SYN = 1,因此該報(bào)文段叫SYN報(bào)文段渔呵,隨機(jī)一個(gè)初始編號(hào)client_isn怒竿,將編號(hào)放到SYN報(bào)文段首部的序號(hào)中
2)服務(wù)器接收請(qǐng)求;1扩氢、分配TCP連接緩存和變量耕驰,并發(fā)送允許連接的確認(rèn)報(bào)文段, 該報(bào)文段也不包含數(shù)據(jù)录豺, 首部的SYN = 1朦肘,初始化一個(gè)服務(wù)器序號(hào)serve_isn饭弓,首部的確認(rèn)號(hào)字段=client_isn+1(MSS為單位),該允許連接的報(bào)文叫SYNACK報(bào)文段
3)客戶端確認(rèn)允許連接: 收到SYNACK報(bào)文段后媒抠,客戶端給TCP連接分配緩存和變量弟断, 給服務(wù)器發(fā)送確認(rèn)報(bào)文段;發(fā)趴生,序號(hào) = 接收方SYN報(bào)文段的確認(rèn)號(hào)client_isn + 1阀趴,確認(rèn)號(hào) = serve_isn + 1
2、斷開連接4次握手
3苍匆、客戶端的生命周期
4刘急、服務(wù)器的生命周期
六、擁塞控制
1浸踩、定義:太多發(fā)送主機(jī)發(fā)送了太多數(shù)據(jù)或者發(fā)送速度太快叔汁,以至于網(wǎng)絡(luò)無(wú)法處理
2、表現(xiàn):分組丟失(路由器緩存溢出)
分組延遲過(guò)大(在路由器緩存中排隊(duì))
3检碗、代價(jià):分租丟失需要重傳据块,重啟計(jì)時(shí)器,造成資源浪費(fèi)折剃,并且該分組上游傳輸能力全部浪費(fèi)掉另假,白傳輸了
控制方法
4、控制方法
1)微驶、端對(duì)端擁塞控制
網(wǎng)絡(luò)層不需要顯式的提供支持浪谴,端系統(tǒng)通過(guò)觀察loss,delay等
網(wǎng)絡(luò)行為判斷是否發(fā)生擁塞因苹,TCP采取這種方法
2)網(wǎng)絡(luò)輔助的擁塞控制
路由器向發(fā)送方顯式地反饋網(wǎng)絡(luò)擁塞信息苟耻,簡(jiǎn)單的擁塞指示(1bit):SNA,DECbit, TCP/IP ECN, ATM),指示發(fā)送方應(yīng)該采取何種速率
六扶檐、擁塞控制的基本原理
1凶杖、如何感知網(wǎng)絡(luò)擁塞
timeout或者3個(gè)重復(fù)ACK, 發(fā)生擁塞后款筑,客戶端降低速率
2智蝠、如何合理地調(diào)整發(fā)送速率
1)加性增,乘性減:逐漸的增加發(fā)送速率奈梳,謹(jǐn)慎探測(cè)可用帶寬杈湾,發(fā)送loss后,將速率減半
2)慢啟動(dòng):SS:初始速率很慢攘须,指數(shù)性增長(zhǎng)漆撞,
threshold變量 = 發(fā)送堵塞時(shí),堵塞窗口值得1/2
3個(gè)重復(fù)ACK:擁塞窗口減少到一半,然后線性增長(zhǎng)
timeout:擁塞窗口直接設(shè)置為1浮驳,然后指數(shù)增長(zhǎng)悍汛,達(dá)到threshold后再線性增長(zhǎng)指示發(fā)送方應(yīng)該采取何種速率
指示發(fā)送方應(yīng)該采取何種速率RTTRTT