TCP拥塞控制 2
解决传统TCP缺陷: 1、窗口太小,最大65535。 TCP利用了选项功能,其头部存在预留项,用于扩展等用途。窗口扩大选项增加了额外的16位来表示窗口大小,窗口的由首部的16位大小和选项的16位共同组成。 不过不是用加法组成的,而是利用 移位窗口的幂 来表示的,
解决传统TCP缺陷:
1、窗口太小,最大65535。
TCP利用了选项功能,其头部存在预留项,用于扩展等用途。窗口扩大选项增加了额外的16位来表示窗口大小,窗口的值由首部的16位大小和选项的16位值共同组成。
不过不是用加法组成的,而是利用移位窗口值的幂来表示的,也就是说如果移位窗口值为 10,那么窗口的最大值就是65535*210,这个值就比较大了,足够表示窗口的大小了。
2、数据包丢失,即认定为网络出现了拥塞
在高速网络中,这种假设是不成立的。如果笼统地认为分组丢失就是拥塞所引起的,从而降低一半的速率,这是对网络资源的极大浪费。拥塞的判断需要两个连续的分组丢失。
于是乎,就有了HSTCP和BI-TCP等一系列拥塞控制方法。
HSTCP
High-Speed TCP是由Floyd提出,基于AIMD准则的一种新的拥塞控制算法,能在高速度和大时延的网络中更有效地提高网络的吞吐率。它通过对标准TCP拥塞避免算法的增加和减少参数进行修改,从而实现了窗口的快速增长和慢速减少,但是它存在严重的RTT不公平性。
HSTCP提出的窗口增加和减小方法,先看拥塞控制中的两个公式:
cwnd = cwnd+a(cwnd)/cwnd ............................ (1)
cwnd = (1-b(cwnd)) * cwnd ............................ (2)
式 (1)是拥塞避免时的窗口增长方式,式(2)是发生了丢包后的窗口下降方式,其中a,b为两个函数,cwnd为其自变量,在标准TCP中a(cwnd)=1,b(cwnd)=0.5,也就是加法增大,乘法减小。
为了达到TCP的友好性,在窗口较低的情况下,也就是说非BDP的网络环境下,HSTCP采用的是和标准TCP相同的a和b,也就是一样的方式来保证两者之间的友好性。当BDP大时,也就是w较大时(HSTCP设定的临界值为38),采取新的a和b来达到高吞吐的要求:
根据不同的网络环境下使用不同的TCP窗口增长和降低参数,具体可以看RFC3649文档。
BIC-TCP
HSTCP,它通过简单的修改标准TCP的增长方式,从而达到了高吞吐。方法很简单,但是缺点在于,它存在严重的RTT不公平性. 公平性指共享同一网络瓶颈的多个流之间占有的网络资源相等。
BIC-TCP由North Carolina State University的网络研究实验室提出,该算法在提出不久后就成为了当时Linux内核中的TCP默认拥塞算法,使用非常广泛.(是linux采用cubic之前的默认算法)
BIC-TCP的本质:
BIC- TCP的提出者们发现了TCP拥塞窗口调整的一个本质:那就是找到最适合当前网络的一个发送窗口,为了找到这个窗口值,TCP采取的方式是(拥塞避免阶 段)每RTT加1,缓慢上升,丢包时下降一半,接着再来慢慢上升。BIC-TCP的提出者们看穿了事情的本质,其实这就是一个搜索的过程,而TCP的搜索方式类似于逐个遍历搜索方法,可以认为这个值是在1和一个比较大的数(large_window)之间,既然在这个区间内需要搜索一个最佳值,那么显然最好的方式就是二分搜索思想。
BIC- TCP就是基于这样一个二分思想的:当出现丢包的时候,说明最佳窗口值应该比这个值小,那么BIC就把此时的cwnd设置为max_win,把乘法减小后 的值设置为min_win,然后BIC就开始在这两者之间执行二分思想--每次跳到max_win和min_win的中点。
具体实现还有其他问题,比如防止传输的抖动,因而BIC-TCP选取了另外取了两个参考值Smax和Smin。BIC-TCP的具体实现可以参考内核代码/net/ipv4/tcp_bictcp.c
CUBIC
BIC-TCP的缺点:首先就是抢占性较强,它在探测阶段相当于是重新启动一个慢启动算法,而TCP在处于稳定后窗口就是一直是线性增长的,不会再次执行慢启动的过程。其次,BIC-TCP的窗口控制阶段增加了算法上的实现和性能分析复杂度。
CUBIC在设计上简化了BIC-TCP的窗口调整算法,CUBIC使用一个立方函数取代BIC-TCP的增长曲线。来看下具体细节:当某次拥塞事件发生时,Wmax设置为此时发生拥塞时的窗口值,然后把窗口进行乘法减小,乘法减小因子设为β, 当从快速恢复阶段退出然后进入到拥塞避免阶段,此时CUBIC的窗口增长开始按照“凹”式增长曲线进行增长,该过程一直持续直到窗口再次增长到Wmax, 紧接着,该函数转入“凸”式增长阶段。该方式的增长可以使得窗口一直维持在Wmax附近,从而可以达到网络带宽的高利用率和协议本身的稳定性。
鉴于CUBIC比BIC-TCP更出色的表现,在Linux2.6.18版本后,CUBIC取代了BIC-TCP,内核代码请参考/net/ipv4/tcp_Cubic.c。
TCP拥塞的优化算法还有N多多,比如
Fast TCP:从TCP vegas的思想发展而来,利用网络延时进行拥塞判断。
ECN:显式拥塞通知,该算法的思想是想借助路由器。路由器在发现有拥塞现象时在连接的TCP或者IP头里面打上拥塞的标记,让终端自己去根据标记进行处理。
UDT:UDT是一个开源的基于UDP实现的可靠传输协议,但是在UDT的拥塞算法与UDP或TCP没有关系,UDT采用的是一种带宽估计的算法。发送端的拥塞算法就是把拥塞窗口利用一个函数无限逼近于带宽值,这种思想对于传输的稳定性非常好,因为是一个无限逼近,所以永远不会超过带宽的值,而不是像TCP一样在平衡状态后继续一直往上增大窗口,从而在平衡状态能够维持比较久。
完成一个TCP的可用版本很容易,要实现一个高性能版本需要考虑的因素就多了去了。
不同环境:局域网、异构网、卫星网等等,每种网络的要求千差万别。
不同应用:有一直只发送小包(发送的包长度小于MSS)的应用,也有不停的发送大包的应用,还有两边同时发送和接收数据的应用。
传输效率,公平性,平稳性等等
参考;http://www.cnblogs.com/fll/archive/2011/11/15/2250437.html

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Win11系統無法安裝中文語言包的解決方法隨著Windows11系統的推出,許多用戶開始升級他們的作業系統以體驗新的功能和介面。然而,一些用戶在升級後發現他們無法安裝中文語言包,這給他們的使用體驗帶來了困擾。在本文中,我們將探討Win11系統無法安裝中文語言套件的原因,並提供一些解決方法,幫助使用者解決這個問題。原因分析首先,讓我們來分析一下Win11系統無法

隨著智慧型手機技術的不斷發展,手機在我們日常生活中扮演著越來越重要的角色。而作為一款專注於遊戲效能的旗艦手機,黑鯊手機備受玩家青睞。然而,有時候我們也會面臨到黑鯊手機開不了機的情況,這時候我們就需要採取一些措施來解決這個問題。接下來,就讓我們來分享五招教你解決黑鯊手機開不了機的問題:第一招:檢查電池電量首先,確保你的黑鯊手機有足夠的電量。可能是因為手機電量耗盡

大家都知道,如果電腦無法載入驅動程序,該設備可能就無法正常工作或與電腦進行正確的互動。那在電腦上彈出無法在此裝置上載入驅動程式的提示框,我們要如何解決呢?下面小編就教大家兩招輕鬆解決問題。 無法在此裝置上載入驅動程式解決方法 1、開始功能表搜尋「核心隔離」。 2、將記憶體完整性關閉,上方提示「記憶體完整性已關閉。你的裝置可能易受攻擊。」點擊後方忽略即可,不會對使用有影響。 3.重啟機器之後即可解決問題。

隨著社群媒體的不斷發展,小紅書已經成為越來越多年輕人分享生活、發現美好事物的平台。許多用戶在發布圖片時遇到了自動儲存的問題,這讓他們感到十分困擾。那麼,如何解決這個問題呢?一、小紅書發布自動儲存圖片怎麼解決? 1.清除快取首先,我們可以嘗試清除小紅書的快取資料。步驟如下:(1)開啟小紅書,點選右下角的「我的」按鈕;(2)在個人中心頁面,找到「設定」並點選;(3)向下捲動,找到「清除快取」選項,點擊確認。清除快取後,重新進入小紅書,嘗試發布圖片看是否解決了自動儲存的問題。 2.更新小紅書版本確保你的小

谷歌瀏覽器怎麼設定每次開啟都是新的視窗?狠毒用戶喜歡使用谷歌瀏覽器辦公或學習,這款瀏覽器具有安全、快速、便捷的特點,不同的用戶使用瀏覽器的喜好不同,一些用戶喜歡打開谷歌瀏覽器就是新的標窗口,方便快速搜索,那麼如何設定呢。接下來小編就帶給大家谷歌瀏覽器每次開啟都是新的視窗設定教程,有興趣的朋友來學習一下。谷歌瀏覽器每次開啟都是新的視窗設定教學1、將電腦桌面上的Google瀏覽器雙擊開啟之後,點選右上角的【三個點】的圖示位置進行點擊。 2.找到【設定】這個選項進入到頁面中(如圖)。 3.進入到谷歌瀏

Linux中文亂碼問題是使用中文字元集和編碼時常見的一個問題。出現亂碼的原因可能是檔案編碼設定不正確,系統語言環境未安裝或未設置,以及終端顯示設定錯誤等。本文將介紹幾種常見的解決方法,並提供具體的程式碼範例。一、檢查檔案編碼設定使用file指令查看檔案編碼在終端機中使用file指令,可以檢視檔案的編碼:file-ifilename如果輸出中有"charset

標題:如何解決PyCharm無法開啟的問題PyCharm是一款功能強大的Python整合開發環境,但有時候我們可能會遇到無法開啟PyCharm的問題。在本文中,我們將分享一些常見的解決方法,並提供具體的程式碼範例。希望能幫助遇到這個問題的朋友們。方法一:清除快取有時候PyCharm的快取檔案可能會導致程式無法正常打開,我們可以嘗試清除快取來解決這個問題。具

預設網關自動消失怎麼解決在現代社會中,網路已經成為人們生活中不可或缺的一部分。無論是工作還是娛樂,我們都需要穩定的網路連線來完成各種任務。而預設閘道是連接本地網路與外部網際網路的關鍵要素之一。然而,有時我們可能會遇到預設閘道自動消失的問題,導致無法上網。那麼,當預設網關消失時,我們該如何解決這個問題?首先,我們應該明確預設網關的概念。預設網關是一個網路路
