第十二章 傳輸控制協(xié)議TCP

12.1 引言

UDP協(xié)議能夠檢測接收到的數(shù)據(jù)是否有差錯忿偷,但是不能糾正
糾正的意思是恢復(fù)接受道德錯誤數(shù)據(jù),第二就是重新發(fā)送

主要是香農(nóng)的差錯校驗碼,和更為簡單的嘗試重新發(fā)送臊泌。

12.1.1 ARQ和重傳

分組重新排序鲤桥,分組復(fù)制,分組泯滅(丟失)

構(gòu)造一個可靠的傳輸方式渠概,主要要考慮:

  • 對方是否已經(jīng)接受到分組
    接收方茶凳,接收到數(shù)據(jù)包后,發(fā)送ACK確認
  • 接收到的分組是否是所需要的
    判斷是否重復(fù)播揪,判斷分組中的數(shù)據(jù)是否有錯誤贮喧。
    所以,需要對每個分組編號猪狈,然后數(shù)據(jù)報中添加校驗和
  • 如何控制發(fā)送速率
    避免接收端丟棄數(shù)據(jù)

因此引出的問題時:

  • 發(fā)送方應(yīng)該等待一個ACK多長時間
  • ACK丟失怎么辦
    ACK本身不會被重傳
  • 分組里面有錯誤怎么辦
    直接丟失箱沦,不發(fā)送ACK,也沒有ICMP
  • 發(fā)送速率如何控制

滑動窗口協(xié)議

每次發(fā)送出多少雇庙?發(fā)送速度

是這個樣子的:
每個TCP分組到達目的主機以后谓形,目的主機發(fā)送一個ACK確認。除了ACK確認不需要再返回ACK確認外疆前,其他的TCP分組都需要這個確認寒跳。
源主機收到該ACK確認以后才繼續(xù)發(fā)送一下個分組。
這樣很慢竹椒。大部分源主機都在等待ACK冯袍。

在接收方接受速度太慢時,會強迫發(fā)送方速度慢下來碾牌。成為流量控制康愤。
有兩種方式:基于速率(發(fā)送方發(fā)送速率不超過該速率)
另一個就是基于窗口,也就是本協(xié)議舶吗。
接收方通知發(fā)送方使用多大的窗口征冷,成為窗口通知。一般和ACK由同一分組攜帶誓琼。也就是在窗口滑動的同時检激,更新窗口大小肴捉。

所以采用這樣一種方式,源主機突突突排隊發(fā)送好幾個分組叔收,然后等待ACK齿穗。同時沒有收到ACK的分組將會保存這些分組。
而收到ACK的分組副本就拋棄饺律。然后發(fā)送下一個分組窃页。

也就是永遠有那么幾個分組是被發(fā)送但是沒收到ack的。這幾個分組可以想象為在窗口中复濒,前面的分組ack收到以后脖卖,窗口向后滑動一個分組,同時進入窗口的分組被發(fā)送出去巧颈。而窗口前面的都是收到ACK的分組畦木,窗口之后的分組都是沒有發(fā)送的分組。窗口之中的分組都是已發(fā)送但是還沒有收到ACK的分組砸泛,同時分組的副本也被保存著十籍。

而這種類型的協(xié)議就是滑動窗口協(xié)議。

滑動窗口協(xié)議

12.1.3

擁塞控制涉及發(fā)送方降低速度以不至于壓垮發(fā)送方和接收方之間的網(wǎng)絡(luò)唇礁。接收方發(fā)送一個窗口通告高速發(fā)送方減慢速度妓雾。稱為明確發(fā)信。另一種方法是垒迂,發(fā)送方猜測接收方的速度械姻,然后減慢發(fā)送速度。

12.1.4 重傳超時時間

發(fā)送方重發(fā)一個分組之前要等待的時間總量為:發(fā)送分組所用時間+接收方處理時間+發(fā)送一個ACK所用時間+ACK返回到發(fā)送方的時間
協(xié)議估計這段時間的長短稱為往返時間估計RTT机断,而這個值隨著時間變化楷拳。

12.2 TCP

TCP提供一種面向連接的可靠地字節(jié)流服務(wù)。

字節(jié)流

不包含邊界數(shù)據(jù)的連續(xù)流吏奸!

TCP提供一種字節(jié)流抽象概念給應(yīng)用程序使用欢揖。這種設(shè)計方案的結(jié)果是,沒有由TCP自動插人的記錄標(biāo)志或消息邊界。一個記錄標(biāo)志對應(yīng)著一個應(yīng)用程序的寫范圍指示奋蔚。如果應(yīng)用程序在一端寫人10字節(jié),隨后寫人20字節(jié),再隨后寫人50字節(jié),那么在連接的另一端的應(yīng)用程序是不知道每次寫人的字節(jié)是多少的她混。例如,另一端可能會以每次20字節(jié)分四次讀人這80字節(jié)或以其他一些方式讀人。一端給TCP輸人字節(jié)流,同樣的字節(jié)流會出現(xiàn)在另一端泊碑。每個端點獨立選擇自己的讀和寫大小坤按。

12.2.2 TCP中的可靠性

TCP提供了可靠性:
tcp把發(fā)送的字節(jié)流轉(zhuǎn)化為一組ip可攜帶的分組,稱為組包馒过。
這些分組包含序列號臭脓,序列號代表了每個分組中第一個字節(jié),在整個字節(jié)流中的字節(jié)偏移腹忽。這允許分組在傳送中是可變大小的来累,并且允許重新組包砚作。
應(yīng)用程序發(fā)送出去的數(shù)據(jù),被協(xié)議打散成tcp認為最佳的大小塊來發(fā)送嘹锁。

TCP維持了一個強制的校驗和葫录,涉及到頭部,數(shù)據(jù)和ip頭部的所有段领猾。(也是一個偽頭部)
當(dāng)TCP發(fā)送一組報文的時候米同,設(shè)置一個重傳計時器,等待對方的確認接收瘤运。而且只設(shè)置一個計時器(upd分片的時候窍霞,每個分片設(shè)置一個)匠题,當(dāng)ACK到達的時候拯坟,計時器被重置。
接收端接收到數(shù)據(jù)的時候韭山,發(fā)送ACK郁季,TCP使用積累ACK,也就是ACK不會馬上發(fā)送钱磅,回合其他后面的一起梦裂。
如果一個ACK丟失,而后續(xù)序號大的ACK被接收端接收到盖淡,那么后續(xù)的ACK可以確認前面的報文段年柠。

TCP報文

TCP報文
  • 兩個端口號,各16bit
  • 序列號 32bit
    自己發(fā)送的數(shù)據(jù)褪迟,的偏移
  • 確認號 32bit
    用來確認對方發(fā)送數(shù)據(jù)最后一個字節(jié)+1冗恨,同時也是接收端期望收到的下一個數(shù)據(jù)包的序列號
  • 頭部長度 4bit
    這個長度不是以bit為單位,而是以4B為單位味赃,也就是這個字段中的數(shù)組掀抹,表明頭部的長度是幾個32bit(4B)
    這個字段最大2^4-1=15,所以15*4=60字節(jié)心俗。也就是TCP的頭部最大60字節(jié)
    這個字段不是多余的傲武,因為TCP頭部會包含可選字段。
  • 保留4bit
  • CWR 擁塞窗口
    接收方發(fā)送給發(fā)送方城榛,請求發(fā)送方降低發(fā)送速率
  • ECE
    在數(shù)據(jù)報途徑的路徑中揪利,某個路由器阻塞,就會設(shè)置這個位狠持。被接收方或者發(fā)送方看到土童。
  • URG 緊急
    很少使用
  • ACK
    指明這個數(shù)據(jù)包是一個ACK包。是指明這個包含ACK工坊,也可能包含數(shù)據(jù)的献汗。
  • PSH 推送
    接收方應(yīng)盡快給應(yīng)用程序傳送這個數(shù)據(jù)莉恼。
    沒有被很好的實現(xiàn)
  • RST 重置數(shù)據(jù)包
    嗯泌类,用來終止一個連接的。
  • SYN 初始畫一個連接的同步序列號
    這個位指明,這個數(shù)據(jù)報是建立連接的數(shù)據(jù)報
  • FIN
    該報文段的發(fā)送方已經(jīng)結(jié)束向?qū)Ψ桨l(fā)送數(shù)據(jù)玫锋。
  • 窗口大小
    TCP流量控制由每個端使用窗口大小來通告一個窗口大小來完成。
    這個窗口是字節(jié)數(shù)券腔,從ACK號指定窄刘,也是接收方想要接收到的那個字節(jié)開始。
    也就是ACK前面的都是連續(xù)的就谜。
  • TCP校驗和
    和CRC的校驗機制一樣怪蔑。
  • 緊急指針
    這個字段只有URG 字段被設(shè)置時才有效。
    這個指針時一個必要時加到報文段的序列號上的偏移丧荐,可以產(chǎn)生緊急數(shù)據(jù)的最后一個字節(jié)的序列號
    目的是:讓發(fā)送方給另一端提供特殊標(biāo)志數(shù)據(jù)的方式缆瓣。

選項

最常見的選項是最大段大小MSS。
連接的每個端一般在她發(fā)送的第一個報文段上指明這個選項虹统,指明發(fā)送方在希望接收到的數(shù)據(jù)段的最大值弓坞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市车荔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忧便,老刑警劉巖族吻,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件珠增,死亡現(xiàn)場離奇詭異切平,居然都是意外死亡悴品,警方通過查閱死者的電腦和手機苔严,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門届氢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來欠窒,“玉大人,你說我怎么就攤上這事♂” “怎么了型将?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荐虐。 經(jīng)常有香客問我七兜,道長,這世上最難降的妖魔是什么福扬? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任腕铸,我火速辦了婚禮,結(jié)果婚禮上铛碑,老公的妹妹穿的比我還像新娘狠裹。我一直安慰自己,他們只是感情好汽烦,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布涛菠。 她就那樣靜靜地躺著,像睡著了一般刹缝。 火紅的嫁衣襯著肌膚如雪碗暗。 梳的紋絲不亂的頭發(fā)上颈将,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天梢夯,我揣著相機與錄音,去河邊找鬼晴圾。 笑死颂砸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的死姚。 我是一名探鬼主播人乓,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼都毒!你這毒婦竟也來了色罚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤账劲,失蹤者是張志新(化名)和其女友劉穎戳护,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瀑焦,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡腌且,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了榛瓮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铺董。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖禀晓,靈堂內(nèi)的尸體忽然破棺而出精续,到底是詐尸還是另有隱情坝锰,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布重付,位于F島的核電站什黑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏堪夭。R本人自食惡果不足惜愕把,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望森爽。 院中可真熱鬧恨豁,春花似錦、人聲如沸爬迟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽付呕。三九已至计福,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間徽职,已是汗流浹背象颖。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姆钉,地道東北人说订。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像潮瓶,于是被迫代替她去往敵國和親陶冷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

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

  • 20.1 引言 在第15章我們看到TFTP使用了停止等待協(xié)議毯辅。數(shù)據(jù)發(fā)送方在發(fā)送下一個數(shù)據(jù)塊之前需要等待接收對已發(fā)送...
    張芳濤閱讀 874評論 0 2
  • 傳輸層-TCP埂伦, TCP頭部結(jié)構(gòu) ,TCP序列號和確認號詳解 TCP主要解決下面的三個問題 1.數(shù)據(jù)的可靠傳輸...
    抓兔子的貓閱讀 4,522評論 1 46
  • 個人認為思恐,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記沾谜,這雖然只是...
    貳零壹柒_fc10閱讀 5,054評論 0 8
  • 24.1 引言 TCP已經(jīng)在從1200 b/s的撥號SLIP鏈路到以太數(shù)據(jù)鏈路上運行了許多年。在80年代和90年代...
    張芳濤閱讀 1,490評論 0 3
  • 1.這篇文章不是本人原創(chuàng)的壁袄,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的类早,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,069評論 6 174