TCP基础知识 复习
前言
說來慚愧,大二時候?qū)W的計算機網(wǎng)絡(luò)好多都不太記得了,不過還好有認(rèn)真學(xué)過,撿起來也挺快的,就是對于現(xiàn)在業(yè)界中使用的網(wǎng)絡(luò)算法的不是很懂;
1 TCP報文段結(jié)構(gòu)
1.1 序號和確認(rèn)號
序號,是報文段首字節(jié)的字節(jié)流編號;
確認(rèn)號,是發(fā)送端期望從接收端收到的下一個字節(jié)的序號;
TCP只接受數(shù)據(jù)流中國至第一個丟失字節(jié)為止的字節(jié),所以TCP被稱為累積確認(rèn);
2 可靠數(shù)據(jù)傳輸
怎么樣才能算是對數(shù)據(jù)進行可靠傳輸呢?這就要求確保一個進程從其接收緩存中讀出 非損壞的、無間隔的、非冗余的、按序的數(shù)據(jù)流;
2.1 重傳
如果發(fā)生超時的現(xiàn)象,則TCP通過重傳引起超時的報文段來響應(yīng)超時事件,再重啟定時器,每次重傳都會將下一次的超時間隔設(shè)為先前值的兩倍;
因為發(fā)送方經(jīng)常連續(xù)發(fā)送大量的報文段,所以如果一個報文段丟失,就很可能引起許多一個接著一個的冗余ACK,如果TCP發(fā)送方接收到相同數(shù)據(jù)的3個冗余ACK,TCP就執(zhí)行快速重傳,即在報文段的定時器過期之前重傳丟失的報文段;
2.2 選擇確認(rèn)
- TCP接收方有選擇的確認(rèn)失序報文段(會將正確接收但失序的報文段緩存起來),而不是累計的確認(rèn)最后一個正確接收的有序的報文段;
3 流量控制
流量控制服務(wù)是為了消除發(fā)送方使接受方緩存溢出的可能性,因為有可能應(yīng)用程序讀取數(shù)據(jù)時相當(dāng)緩慢,而發(fā)送方發(fā)送數(shù)據(jù)太多、太快,會很容易造成該連接的接受緩存溢出;
3.1 滑動窗口
接收窗口用于告訴發(fā)送方,該接受方還有多少可用的緩存空間;因為TCP是全雙工通信,在連接兩端的發(fā)送方都各自維護一個接受窗口;
例子1:
窗口大小為6,窗口向右移動;
例子2:
設(shè)A向B發(fā)送數(shù)據(jù)。在連接建立時,B告訴了A:“我的接收窗口是 rwnd = 400 ”(這里的 rwnd 表示 receiver window) 。假設(shè)每一個報文段為100字節(jié)長,而數(shù)據(jù)報文段序號的初始值設(shè)為1。大寫ACK表示首部中的確認(rèn)位ACK,小寫ack表示確認(rèn)字段的值ack。
上面的圖中經(jīng)歷了三次流量控制;
- 發(fā)送方的發(fā)送窗口不能超過接收方給出的接收窗口的數(shù)值(TCP的窗口單位是字節(jié),不是報文段)
- 只要TCP連接的一方收到對方的零窗口通知,就啟動持續(xù)計時器,若持續(xù)計時器設(shè)置的時間到期,就周期性的發(fā)送一個零窗口探測報文段(僅僅攜帶1個字節(jié)的數(shù)據(jù)),而對方就在確認(rèn)這個探測報文段時給出了現(xiàn)在的窗口值;
- 持續(xù)計時器的出現(xiàn)是為了解決這么一種特殊的情況:接收方若沒有緩存足夠使用,就會發(fā)送零窗口大小的報文,此時發(fā)送放將發(fā)送窗口設(shè)置為0,停止發(fā)送數(shù)據(jù)。之后接收方有足夠的緩存,發(fā)送了非零窗口大小的報文,但是這個報文在中途丟失的,那么發(fā)送方的發(fā)送窗口就一直為零導(dǎo)致死鎖。
4 連接管理
略
4.1 三次握手
4.2 四次揮手
5 擁塞控制
擁塞發(fā)生的主要原因是因為網(wǎng)絡(luò)能夠提供的資源不足以滿足用戶的需求,這些資源包括緩存空間、鏈路帶寬容量和中間節(jié)點的處理能力。
TCP的擁塞退避由4個核心的算法組成:慢啟動、擁塞避免、快速重傳和快速恢復(fù);
5.1 慢啟動
從小到大逐漸指數(shù)增加擁塞窗口的大小;
5.2 擁塞避免
如果超過某個閥值后,慢啟動則結(jié)束,進入到擁塞避免階段;擁塞避免的思想就是將指數(shù)增加轉(zhuǎn)變?yōu)榫€性增加,這樣就可以避免增長過快而導(dǎo)致網(wǎng)絡(luò)阻塞,慢慢的增加調(diào)整到網(wǎng)絡(luò)的最佳值;
如果當(dāng)前的cwnd達到慢啟動的閾值,則試探性的發(fā)送一個segment,如果服務(wù)器沒有響應(yīng),TCP認(rèn)為網(wǎng)絡(luò)能力下降,必須降低慢啟動閾值,同時為了避免形式繼續(xù)惡化,有可能將窗口降低為1
5.3 快速重傳
快速重傳算法規(guī)定,發(fā)送方只要一連收到三個重復(fù)確認(rèn)就應(yīng)當(dāng)立即重傳對方尚未收到的報文段,而不必繼續(xù)等待設(shè)置重傳計時器時間到期。
除了經(jīng)典的三次ACK,還包括ER、FACK,以及最新的基于時間序的RACK的包丟失快速重傳算法,做出了很多改良。
5.4 快速恢復(fù)
在經(jīng)歷過快速重傳后,如果依然接收到重復(fù)的ACK,說明網(wǎng)絡(luò)沒有阻塞,這里并不會進入到慢啟動的狀態(tài),而是直接進入到擁塞避免的狀態(tài);
5.5 其它
- 基于丟包反饋:通過ACK所帶回來的丟包信息來調(diào)整源端的擁塞窗口;
- 基于路徑延時反饋:RTT相對于丟包信息反應(yīng)更加靈敏,更能及時反映出一般網(wǎng)絡(luò)的擁塞情況,適用于小緩存的中間節(jié)點,效率較理想。但是對于路由器經(jīng)常緩存數(shù)據(jù)促使RTT延長調(diào)節(jié)擁塞窗口,實際上沒有發(fā)生擁塞情況。
- 基于顯示擁塞反饋:典型的ECN利用中間節(jié)點自己檢測本身的擁塞狀態(tài),如路由器的反饋狀態(tài),直接反饋給TCP源端,以此調(diào)節(jié)源端的窗口值和發(fā)送速率。
參考文章:
TCP協(xié)議擁塞控制算法(Reno、HSTCP、BIC、Vegas、Westwood)
轉(zhuǎn)載于:https://www.cnblogs.com/George1994/p/6699899.html
總結(jié)
以上是生活随笔為你收集整理的TCP基础知识 复习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab colorbar采用对数,
- 下一篇: iconfont-阿里巴巴矢量图标库的使