TCP 擁塞機(jī)制擎宝、如何保證包的有序傳輸

TCP擁塞機(jī)制

明確作用

TCP的擁塞機(jī)制解決的是網(wǎng)絡(luò)延時(shí)突然增加,觸發(fā)大量的數(shù)據(jù)重傳涡上,導(dǎo)致網(wǎng)絡(luò)負(fù)擔(dān)加重問(wèn)題

如何實(shí)現(xiàn)

擁塞窗口(cwnd)

TCP的擁塞控制主要依賴于一個(gè) 擁塞窗口(cwnd) 來(lái)控制

窗口值的大小代表著能夠發(fā)送出去的但還沒(méi)有收到ACK(Acknowledgement確認(rèn)字符)的最大數(shù)據(jù)報(bào)文段趾断,顯然窗口越大那么數(shù)據(jù)發(fā)送的速度也就越快,但是也越可能使得網(wǎng)絡(luò)出現(xiàn)擁塞

四個(gè)核心算法

1吩愧、慢啟動(dòng)

image.png

當(dāng)新建連接時(shí)芋酌,cwnd 初始化為1個(gè)最大 報(bào)文段(MSS) 大小,發(fā)送端開(kāi)始按照擁塞窗口大小發(fā)送數(shù)據(jù)雁佳,每當(dāng)有一個(gè)報(bào)文段被確認(rèn)脐帝,cwnd 就增加1個(gè)MSS大小。這樣 cwnd 的值就隨著網(wǎng)絡(luò)往返時(shí)間(Round Trip Time,RTT)呈指數(shù)級(jí)增長(zhǎng)糖权。
開(kāi)始 ---> cwnd = 1

經(jīng)過(guò)1個(gè)RTT后 ---> cwnd = 2*1 = 2

經(jīng)過(guò)2個(gè)RTT后 ---> cwnd = 2*2= 4

經(jīng)過(guò)3個(gè)RTT后 ---> cwnd = 4*2 = 8


2堵腹、擁塞避免

TCP是如何避免網(wǎng)絡(luò)擁塞的呢?

當(dāng) 擁塞窗口cwnd 達(dá)到一個(gè)閾值(慢啟動(dòng)門(mén)限(ssthresh))時(shí)星澳,窗口大小不再呈指數(shù)上升疚顷,而是以線性上升。

此時(shí)當(dāng)窗口中所有的報(bào)文段都被確認(rèn)時(shí)募判,cwnd的大小加1荡含,cwnd的值就隨著RTT(往返時(shí)延) 開(kāi)始線性增加咒唆,這樣就可以避免增長(zhǎng)過(guò)快導(dǎo)致網(wǎng)絡(luò)擁塞。并由此慢慢地增加調(diào)整到網(wǎng)絡(luò)的最佳值

TCP認(rèn)為網(wǎng)絡(luò)擁塞的主要依據(jù)是它重傳了一個(gè)報(bào)文段


3释液、快速重傳

image.png

當(dāng)發(fā)送方收到3個(gè)duplicate ACK(冗余ACK)時(shí)就開(kāi)啟重傳全释,而不用等到 RTO(重傳定時(shí)器) 超時(shí),具體重傳操作如下:

  • 把 ssthresh 設(shè)置為 cwnd 的一半
  • 把 cwnd 再設(shè)置為 ssthresh 的值
  • 重新進(jìn)入擁塞避免階段

實(shí)際上误债,當(dāng) 重傳定時(shí)器(RTO) 超時(shí)浸船,且還沒(méi)有得到數(shù)據(jù)確認(rèn),TCP就會(huì)對(duì)該報(bào)文段進(jìn)行重傳寝蹈,具體重傳操作如下:

  • ssthresh 降低為 cwnd 值的一半
  • cwnd 重新設(shè)置為1
  • 重新進(jìn)入慢啟動(dòng)過(guò)程

4李命、快速恢復(fù)

當(dāng)發(fā)送方至少收到了3個(gè)Duplicated Acks,TCP認(rèn)為網(wǎng)絡(luò)也不那么糟糕箫老,可以快速恢復(fù)封字。

  • 首先,TCP會(huì)把擁塞窗口的大小設(shè)置為 慢啟動(dòng)門(mén)限閥值 + 3個(gè)報(bào)文段大小耍鬓。即 cwnd = sshthresh + 3 * MSS(3的意思是確認(rèn)有3個(gè)冗余數(shù)據(jù)包被收到)
  • 如果再收到 duplicated Acks阔籽,那么 cwnd = cwnd +1
  • 如果收到了新的Ack,那么牲蜀,cwnd = sshthresh
  • 進(jìn)入了擁塞避免的算法

以上就是TCP擁塞機(jī)制整體核心內(nèi)容

TCP如何保證包的順序傳輸

發(fā)送主機(jī)每次發(fā)送數(shù)據(jù)時(shí)笆制,TCP就給每個(gè)數(shù)據(jù)包分配一個(gè)序列號(hào)并且在一個(gè)特定的時(shí)間內(nèi)等待接收主機(jī)對(duì)分配的這個(gè)序列號(hào)進(jìn)行確認(rèn),

如果發(fā)送主機(jī)在一個(gè)特定時(shí)間內(nèi)沒(méi)有收到接收主機(jī)的確認(rèn)涣达,則發(fā)送主機(jī)會(huì)重傳此數(shù)據(jù)包在辆。

接收主機(jī)利用序列號(hào)對(duì)接收的數(shù)據(jù)進(jìn)行確認(rèn),以便檢測(cè)對(duì)方發(fā)送的數(shù)據(jù)是否有丟失或者亂序等度苔,接收主機(jī)一旦收到已經(jīng)順序化的數(shù)據(jù)匆篓,它就將這些數(shù)據(jù)按正確的順序重組成數(shù)據(jù)流并傳遞到高層進(jìn)行處理。

核心算法

  • 為了保證數(shù)據(jù)包的可靠傳遞林螃,發(fā)送方必須把已發(fā)送的數(shù)據(jù)包保留在緩沖區(qū)
  • 同時(shí)為每個(gè)已發(fā)送的數(shù)據(jù)包啟動(dòng)一個(gè)超時(shí)定時(shí)器(重傳定時(shí)器RTO)
  • 如在定時(shí)器超時(shí)之前收到了對(duì)方發(fā)來(lái)的應(yīng)答信息(可能是對(duì)本包的應(yīng)答奕删,也可以是對(duì)本包后續(xù)包的應(yīng)答)俺泣,則釋放該數(shù)據(jù)包占用的緩沖區(qū)
  • 否則疗认,重傳該數(shù)據(jù)包,直到收到應(yīng)答或重傳次數(shù)超過(guò)規(guī)定的最大次數(shù)為止伏钠。
  • 接收方收到數(shù)據(jù)包后横漏,先進(jìn)行CRC校驗(yàn),如果正確則把數(shù)據(jù)交給上層協(xié)議熟掂,然后給發(fā)送方發(fā)送一個(gè)累計(jì)應(yīng)答包缎浇,表明該數(shù)據(jù)已收到,如果接收方正好也有數(shù)據(jù)要發(fā)給發(fā)送方赴肚,應(yīng)答包也可放在數(shù)據(jù)包中捎帶過(guò)去素跺。

上面就是今天要跟大家分享的內(nèi)容二蓝,有什么問(wèn)題歡迎大家在后臺(tái)給大叔留言,關(guān)注大叔說(shuō)碼指厌,我們下期見(jiàn)~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末刊愚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子踩验,更是在濱河造成了極大的恐慌鸥诽,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箕憾,死亡現(xiàn)場(chǎng)離奇詭異牡借,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)袭异,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)钠龙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人御铃,你說(shuō)我怎么就攤上這事俊鱼。” “怎么了畅买?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵并闲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我谷羞,道長(zhǎng)帝火,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任湃缎,我火速辦了婚禮犀填,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗓违。我一直安慰自己九巡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布蹂季。 她就那樣靜靜地躺著冕广,像睡著了一般。 火紅的嫁衣襯著肌膚如雪偿洁。 梳的紋絲不亂的頭發(fā)上撒汉,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音涕滋,去河邊找鬼睬辐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的溯饵。 我是一名探鬼主播侵俗,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼丰刊!你這毒婦竟也來(lái)了坡慌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤藻三,失蹤者是張志新(化名)和其女友劉穎洪橘,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體棵帽,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熄求,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逗概。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弟晚。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖逾苫,靈堂內(nèi)的尸體忽然破棺而出卿城,到底是詐尸還是另有隱情,我是刑警寧澤铅搓,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布瑟押,位于F島的核電站,受9級(jí)特大地震影響星掰,放射性物質(zhì)發(fā)生泄漏多望。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一氢烘、第九天 我趴在偏房一處隱蔽的房頂上張望怀偷。 院中可真熱鬧,春花似錦播玖、人聲如沸椎工。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)维蒙。三九已至,卻和暖如春脓斩,著一層夾襖步出監(jiān)牢的瞬間木西,已是汗流浹背畴栖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工随静, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓燎猛,卻偏偏與公主長(zhǎng)得像恋捆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子重绷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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