TCP協(xié)議如何保證數(shù)據(jù)可靠性

為什么TCP協(xié)議是可靠的片吊?TCP協(xié)議是怎么保證數(shù)據(jù)的可靠的?
答:能夠保證TCP協(xié)議可靠的算法有檢驗和协屡,連接管理機制俏脊,ACK應(yīng)答機制,快速重傳和超時重傳機制肤晓,滑動窗口機制爷贫,擁塞控制機制,這些機制共同保證TCP協(xié)議的可靠性材原。


檢驗和:TCP檢驗和的計算與UDP一樣沸久,在計算時要加上12byte的偽首部季眷,檢驗范圍包括TCP首部及數(shù)據(jù)部分余蟹,但是UDP的檢驗和字段為可選的,而TCP中是必須有的子刮。計算方法為:在發(fā)送方將整個報文段分為多個16位的段威酒,然后將所有段進行反碼相加窑睁,將結(jié)果存放在檢驗和字段中,接收方用相同的方法進行計算葵孤,如最終結(jié)果為檢驗字段所有位是全1則正確(UDP中為0是正確)担钮,否則存在錯誤∮热裕可以保證接收方能判斷當前報文是否屬于自己要接受的報文箫津,如果為0,那就是宰啦,不為0苏遥,則不是,丟棄此報文赡模。抽象些來說就像是取快遞田炭,你的電話姓名和快遞上的信息一致,你才能確定這是你的快遞漓柑,才會去取教硫,不會錯拿別人的快遞。


序列號:TCP 對每個報文進行編號辆布,這些編號就是序列號瞬矩。而序列號有多種作用
a:保證可靠性,當接收到的數(shù)據(jù)失序時锋玲,就能立馬知道
b:去除重復(fù)的報文丧鸯,數(shù)據(jù)傳輸過程中的確認應(yīng)答,重發(fā)控制嫩絮,重復(fù)控制等功能都要依靠序列號來實先丛肢。
c:提高效率,可以實現(xiàn)多次發(fā)送剿干,一次確認蜂怎。


ACK應(yīng)答機制:發(fā)送的每一條消息,都需要對方發(fā)送一條消息來回復(fù)消息是否被收到置尔。

主要實現(xiàn)是TCP的首部來控制杠步,當ACK =1 時ack才有效,ack等于期望下一個傳輸過來的序號榜轿,也就是上一次接收消息的序號+1幽歼。這樣就可以保證消息能被確認接收。(三次握手和四次揮手都在用這個機制)


連接管理機制:三次握手建立連接與四次揮手斷開連接谬盐,保證了TCP的全雙工工作甸私。


快重傳和超時重傳:保證了數(shù)據(jù)能夠不丟失的傳輸數(shù)據(jù)。(注意:超時重傳機制和快重傳機制飞傀,同時存在皇型。誰先檢驗到報文失序诬烹,誰就生效。)

  • 快重傳:發(fā)送方連續(xù)收到3個接收方發(fā)送的同一個ack時弃鸦,此時快速重傳ack序號以及其之后的所有數(shù)據(jù)報绞吁。


    快重傳
  • 超時重傳:當發(fā)送方發(fā)送了數(shù)據(jù)給接收方,當時超過了約定的時間(RTO)也沒有接收到確認消息唬格,此時重傳此報文家破。(Tips:RTO也就是重傳超時時間,這個時間由TCP的自適應(yīng)算法生成)


    超時重傳

滑動窗口:滑動窗口既提高了報文傳輸?shù)男使焊冢脖苊饬税l(fā)送方發(fā)送過多的數(shù)據(jù)而導(dǎo)致接收方無法正常處理的異常员舵。數(shù)據(jù)的發(fā)送方和接收方都有滑動窗口,對于發(fā)送方來說藕畔,窗口內(nèi)就是可以發(fā)送的報文马僻,當窗口的前沿緊挨的報文發(fā)送并且確認時,窗口向后移動注服。而窗口的后沿可以向前移動韭邓,當接收方處理不了那么多的報文時,就會發(fā)送消息告訴發(fā)送方溶弟,此時滑動窗口就需要縮小女淑,所以后沿前移。但是TCP非常不建議窗口后沿前移辜御。

說到滑動窗口鸭你,就不得不梳理一下消息發(fā)送的過程中的緩存機制:



發(fā)送方和接收方的滑動窗口工作流程:


發(fā)送方的滑動窗口

接收方的滑動窗口

內(nèi)部細節(jié)圖 A為發(fā)送方 B為接收方

伴隨著效率的提升,也會有問題產(chǎn)生擒权,如果消息沒被確認怎么辦如圖所示袱巨,假如31,32碳抄,33愉老,34,報文發(fā)送了剖效,32嫉入,33,34都被確認了璧尸,31沒被確認怎么辦呢咒林?這時就重新發(fā)送31,并且31之后的數(shù)據(jù)報全部重新發(fā)送爷光。


在圖中我們還會發(fā)現(xiàn)窗口的前沿和后沿會移動垫竞,窗口前沿和后沿都向后移動,意味著前沿緊挨的報文發(fā)送并被確認瞎颗,而后沿的前移意味著件甥,接收端處理那么多消息,請縮小窗口的大小哼拔。
所以解決了發(fā)送的數(shù)據(jù)過多引有,導(dǎo)致接收端無法正常接收的異常。


擁塞控制:擁塞控制使得宏觀網(wǎng)絡(luò)中的資源能夠合理的應(yīng)用倦逐。實現(xiàn)的算法有四個譬正,慢開始,擁塞避免檬姥,快速回復(fù)曾我,和快速重傳.

1.慢開始指一開始發(fā)送報文時,不清楚網(wǎng)絡(luò)中的情況健民,試探性的發(fā)送1cwnd(擁塞窗口)的數(shù)據(jù)量抒巢。

2.如果沒有到ssthresh(慢開始門限值),則以指數(shù)形式增長秉犹,一直到門限值蛉谜;

3.當?shù)竭_門限值時,此時采用擁塞避免算法讓擁塞窗口緩慢增長崇堵,即每經(jīng)過一個RTT(往返時間)就把發(fā)送方的擁塞窗口+1型诚,不能是指數(shù)性增長了,一直到發(fā)生網(wǎng)絡(luò)擁塞為止鸳劳。

4.當發(fā)生網(wǎng)絡(luò)擁塞時狰贯,把ssthresh的值設(shè)置為出現(xiàn)擁塞時發(fā)送窗口大小的一半,然后把擁塞窗口設(shè)置為1赏廓,再次執(zhí)行慢開始算法涵紊。

5.在發(fā)送方知道只是丟失了個別的報文段時,采用快恢復(fù)算法幔摸,將門限值設(shè)置成擁塞窗口大小的一半栖袋,并將擁塞窗口設(shè)置為當前門限值,并執(zhí)行擁塞避免算法抚太。

6.當發(fā)送方一連收到3個對同一個報文段的重復(fù)確認時塘幅,采用快速重傳算法,立即進行重傳尿贫,這樣就不會出現(xiàn)超時电媳,可以使整個網(wǎng)絡(luò)的吞吐量提高約20%。

————————————————
版權(quán)聲明:本文為CSDN博主「nZk丶」的原創(chuàng)文章庆亡,遵循CC 4.0 BY-SA版權(quán)協(xié)議匾乓,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_43729854/article/details/107633250

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末又谋,一起剝皮案震驚了整個濱河市拼缝,隨后出現(xiàn)的幾起案子娱局,更是在濱河造成了極大的恐慌,老刑警劉巖咧七,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衰齐,死亡現(xiàn)場離奇詭異,居然都是意外死亡继阻,警方通過查閱死者的電腦和手機耻涛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘟檩,“玉大人抹缕,你說我怎么就攤上這事∧粒” “怎么了卓研?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長睹簇。 經(jīng)常有香客問我鉴分,道長,這世上最難降的妖魔是什么带膀? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任志珍,我火速辦了婚禮,結(jié)果婚禮上垛叨,老公的妹妹穿的比我還像新娘伦糯。我一直安慰自己,他們只是感情好嗽元,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布敛纲。 她就那樣靜靜地躺著,像睡著了一般剂癌。 火紅的嫁衣襯著肌膚如雪淤翔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天佩谷,我揣著相機與錄音旁壮,去河邊找鬼。 笑死谐檀,一個胖子當著我的面吹牛抡谐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播桐猬,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼麦撵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起免胃,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤音五,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后羔沙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躺涝,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年撬碟,在試婚紗的時候發(fā)現(xiàn)自己被綠了莉撇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呢蛤。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖棍郎,靈堂內(nèi)的尸體忽然破棺而出其障,到底是詐尸還是另有隱情,我是刑警寧澤涂佃,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布励翼,位于F島的核電站,受9級特大地震影響辜荠,放射性物質(zhì)發(fā)生泄漏汽抚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一伯病、第九天 我趴在偏房一處隱蔽的房頂上張望造烁。 院中可真熱鬧,春花似錦午笛、人聲如沸惭蟋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽告组。三九已至,卻和暖如春癌佩,著一層夾襖步出監(jiān)牢的瞬間木缝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工围辙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留氨肌,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓酌畜,卻偏偏與公主長得像怎囚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

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

  • TCP協(xié)議傳輸數(shù)據(jù)的特點主要是面向字節(jié)流恳守、傳輸可靠考婴、面向連接。保證數(shù)據(jù)傳輸可靠性的方式如下: 校驗和 序列號 TC...
    杜子龍閱讀 853評論 0 1
  • [TOC] 參考 1. TCP可靠性的保證機制總結(jié)[https://blog.csdn.net/xuzhangze...
    GOGOYAO閱讀 24,132評論 2 18
  • TCP協(xié)議傳輸?shù)奶攸c主要就是面向字節(jié)流催烘、傳輸可靠沥阱、面向連接。這篇博客伊群,我們就重點討論一下TCP協(xié)議如何確保傳輸?shù)目?..
    Amor瑾年v閱讀 332評論 0 2
  • UDP&TCP UDP: (1) UDP考杉,user datagram protocol,用戶數(shù)據(jù)報協(xié)議舰始,不提供復(fù)雜...
    InnocenceYWQ閱讀 30,394評論 0 20
  • 校驗和 計算方式:在數(shù)據(jù)傳輸?shù)倪^程中崇棠,將發(fā)送的數(shù)據(jù)段都當做一個16位的整數(shù)。將這些整數(shù)加起來丸卷。并且前面的進位不能丟...
    楊帆玉閱讀 264評論 0 0