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