TCP

一雷袋、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ù)流


image.png

二啤呼、TCP報(bào)文段結(jié)構(gòu)

image.png

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空閑的緩存空間


image.png

五、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


image.png

2、斷開連接4次握手


image.png

3苍匆、客戶端的生命周期
image.png

4刘急、服務(wù)器的生命周期
image.png

六、擁塞控制

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市至会,隨后出現(xiàn)的幾起案子离咐,更是在濱河造成了極大的恐慌,老刑警劉巖奉件,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宵蛀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡瓶蚂,警方通過(guò)查閱死者的電腦和手機(jī)糖埋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窃这,“玉大人,你說(shuō)我怎么就攤上這事征候『脊ィ” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵疤坝,是天一觀的道長(zhǎng)兆解。 經(jīng)常有香客問(wèn)我,道長(zhǎng)跑揉,這世上最難降的妖魔是什么锅睛? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮历谍,結(jié)果婚禮上现拒,老公的妹妹穿的比我還像新娘。我一直安慰自己望侈,他們只是感情好印蔬,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脱衙,像睡著了一般侥猬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捐韩,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天退唠,我揣著相機(jī)與錄音,去河邊找鬼荤胁。 笑死瞧预,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播松蒜,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼扔茅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了秸苗?” 一聲冷哼從身側(cè)響起召娜,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惊楼,沒(méi)想到半個(gè)月后玖瘸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡檀咙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年雅倒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弧可。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖棕诵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情校套,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布笛匙,位于F島的核電站侨把,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏妹孙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一华匾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧机隙,春花似錦蜘拉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)葱跋。三九已至源梭,卻和暖如春稍味,著一層夾襖步出監(jiān)牢的瞬間废麻,已是汗流浹背模庐。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掂碱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓沧卢,卻偏偏與公主長(zhǎng)得像醉者,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子湃交,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容