linux滑動窗口有什么用

本篇內(nèi)容介紹了“l(fā)inux滑動窗口有什么用”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),雨湖企業(yè)網(wǎng)站建設(shè),雨湖品牌網(wǎng)站建設(shè),網(wǎng)站定制,雨湖網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,雨湖網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

1. 滑動窗口

我們都知道TCP是可靠的協(xié)議,而可靠性很多時候就是來自于TCP的確認重傳機制,在確認重傳的基礎(chǔ)上,就實現(xiàn)了滑動窗口協(xié)議,滑動窗口主要有兩個作用:

  • 保證TCP的可靠性;

  • 提供TCP的流控特性;

1.1 滑動窗口保證可靠性

所謂窗口其實就是表示一段存放在發(fā)送緩沖區(qū)中的、可以被發(fā)送者發(fā)送的字節(jié)序列,它連續(xù)的一個范圍,我們就稱為窗口。而滑動則是隨著數(shù)據(jù)不斷的被發(fā)送,那么窗口就會在緩沖區(qū)中向前移動。 比如:

  • TCP建立連接后,B告訴A自己的接收窗口大小,比如是20;

  • 然后A發(fā)送了11個字節(jié),發(fā)送窗口位置不變,B接收到了亂序數(shù)據(jù);

  • 只有當(dāng)A成功發(fā)送了數(shù)據(jù),并且接收到了B返回來的確認之后,才會按順序向前移動發(fā)送窗口,這樣就避免了超時后數(shù)據(jù)的重復(fù)發(fā)送;

注意:若是B未在規(guī)定時間返回確認,那么A端會進行重復(fù)發(fā)送

1.2 滑動窗口進行流控

流量控制方面主要有兩個要點需要掌握。一是TCP利用滑動窗口實現(xiàn)流量控制的機制;二是如何考慮流量控制中的傳輸效率。

1.2.1 流量控制

所謂流量控制,主要是接收方傳遞信息給發(fā)送方,使其不要發(fā)送數(shù)據(jù)太快,是一種端到端的控制。主要的方式就是返回的ACK中會包含自己的接收窗口的大小,并且利用大小來控制發(fā)送方的數(shù)據(jù)發(fā)送。

這里面涉及到一種情況,如果B已經(jīng)告訴A自己的緩沖區(qū)已滿,于是A停止發(fā)送數(shù)據(jù);等待一段時間后,B的緩沖區(qū)出現(xiàn)了富余,于是給A發(fā)送報文告訴A我的rwnd大小為400,但是這個報文不幸丟失了,于是就出現(xiàn)A等待B的通知||B等待A發(fā)送數(shù)據(jù)的死鎖狀態(tài)。為了處理這種問題,TCP引入了持續(xù)計時器(Persistence timer),當(dāng)A收到對方的零窗口通知時,就啟用該計時器,時間到則發(fā)送一個1字節(jié)的探測報文,對方會在此時回應(yīng)自身的接收窗口大小,如果結(jié)果仍未0,則重設(shè)持續(xù)計時器,繼續(xù)等待。

1.2.2 傳輸效率

一個顯而易見的問題是:單個發(fā)送字節(jié)單個確認,和窗口有一個空余即通知發(fā)送方發(fā)送一個字節(jié),無疑增加了網(wǎng)絡(luò)中的許多不必要的報文,所以我們的原則是盡可能一次多發(fā)送幾個字節(jié),或者窗口空余較多的時候通知發(fā)送方一次發(fā)送多個字節(jié)。對于前者我們廣泛使用Nagle算法,即:

  • 若發(fā)送應(yīng)用進程要把發(fā)送的數(shù)據(jù)逐個字節(jié)地送到TCP的發(fā)送緩存,則發(fā)送方就把第一個數(shù)據(jù)字節(jié)先發(fā)送出去,把后面的字節(jié)先緩存起來;

  • 當(dāng)發(fā)送方收到第一個字節(jié)的確認后(也得到了網(wǎng)絡(luò)情況和對方的接收窗口大?。?,再把緩沖區(qū)的剩余字節(jié)組成合適大小的報文發(fā)送出去;

  • 當(dāng)?shù)竭_的數(shù)據(jù)已達到發(fā)送窗口大小的一半或以達到報文段的最大長度時,就立即發(fā)送一個報文段; 對于后者我們往往的做法是讓接收方等待一段時間,或者接收方獲得足夠的空間容納一個報文段或者等到接收緩存有一半空閑的時候,再通知發(fā)送方發(fā)送數(shù)據(jù)。

2. 擁塞控制

計算機網(wǎng)絡(luò)中的帶寬、交換結(jié)點中的緩存、路由器等等都是網(wǎng)絡(luò)的資源,他們所能提供的可用資源都是有限的,如果某一時間,對網(wǎng)絡(luò)中某一資源的需求超過了它的可用部分,網(wǎng)絡(luò)的性能就會變壞,就像堵車一樣,車的數(shù)量過多超過了路段的負荷,就是出現(xiàn)擁堵,類比到網(wǎng)絡(luò),就是擁塞控制。

注意:擁塞控制是一個全局性的過程,而滑動窗口中的流量控制則是點到點通信量的控制,他們是有本質(zhì)區(qū)別的。

TCP的擁塞控制由四個核心算法組成:慢開始、擁塞避免、快重傳、快恢復(fù)。

2.1 慢開始和擁塞避免

發(fā)送方維持一個叫做擁塞窗口的狀態(tài)變化,擁塞窗口的大小取決于網(wǎng)絡(luò)的擁塞程度,并且動態(tài)的在變化,而發(fā)送方的發(fā)送窗口可能等于擁塞窗口,也可能因為接收方的接收緩存不夠,那么發(fā)送窗口就會小于擁塞窗口。

慢開始算法的思路是說,一開始先不發(fā)送大量的數(shù)據(jù),需要先探測一下網(wǎng)絡(luò)的擁塞程度,由小變大的逐漸增加擁塞窗口的大小。

擁塞避免,則是在擁塞控制中還有個慢開始門限ssthresh狀態(tài)變量,假設(shè)擁塞窗口大小為cwind,那么有如下幾種情況:

  • 當(dāng)cwind < ssthresh時,即執(zhí)行慢開始算法,當(dāng)使用當(dāng)前擁塞窗口發(fā)送數(shù)據(jù),收到多次確認以后,將cwind加倍,繼續(xù)發(fā)送;

  • 當(dāng)cwind > ssthresh時,執(zhí)行擁塞避免算法,將cwind+1,然后繼續(xù)發(fā)送數(shù)據(jù);

  • 當(dāng)網(wǎng)絡(luò)發(fā)送擁塞時,把ssthresh更新為擁塞前ssthresh值的一半,cwind重新設(shè)置為1,按照以上兩種情況繼續(xù)執(zhí)行;

2.2 快重傳和快恢復(fù)

快重傳算法,其實就是要求發(fā)送方只要一連收到3個重復(fù)確認就立即重傳對方尚未收到的報文段,而不必繼續(xù)等待設(shè)置的重傳計時器時間到。 快重傳配合使用的就是快恢復(fù),有以下兩種情況:

  • 當(dāng)發(fā)送方連續(xù)收到三個重復(fù)確認后,就執(zhí)行乘法減小算法,把ssthresh減半,但并不執(zhí)行慢開始算法;

  • 另一種情況是,考慮到如果網(wǎng)絡(luò)出現(xiàn)擁塞的話,發(fā)送方可能收不到三個連續(xù)的重復(fù)確認,就會認為網(wǎng)絡(luò)沒有出現(xiàn)擁塞,所以此時也不執(zhí)行慢開始算法,而是將cwind大小設(shè)置為ssthresh,執(zhí)行擁塞避免算法;

從全局來講,TCP擁塞控制其實較好的保證了數(shù)據(jù)流之間的公平性,因為一旦出現(xiàn)丟包,就立即減半退避,可以給其他新建的數(shù)據(jù)流留有足夠的空間,從而保證整個的公平性。

3. 斷線重連

顧名思義,就是網(wǎng)絡(luò)斷了以后要進行重連,在網(wǎng)絡(luò)編程中,斷線重連機制是必須要有的,那么怎么設(shè)計一個斷線重連機制呢?

3.1 程序設(shè)置固定重連時間

有兩種情況:

  • 一是發(fā)現(xiàn)斷線后立馬重連一次,然后間隔2秒后重連,然后是4秒、6秒、8秒等;

  • 二是2秒,4秒,6秒,8秒這樣去重連;

3.2 讓客戶設(shè)置

就是在斷線后,在界面上彈出窗口讓客戶自己設(shè)置重連間隔,這一點在許多桌面客戶端和移動app上都有體現(xiàn)。

3.3 監(jiān)控網(wǎng)絡(luò)狀態(tài)

我們可以獲得網(wǎng)絡(luò)情況,如果是網(wǎng)絡(luò)斷開了,那么我們肯定不會去重連,但如果網(wǎng)絡(luò)一旦好了,我們就要立馬重連。

“l(fā)inux滑動窗口有什么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

當(dāng)前標(biāo)題:linux滑動窗口有什么用
網(wǎng)站地址:http://muchs.cn/article48/gjgchp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、手機網(wǎng)站建設(shè)網(wǎng)站內(nèi)鏈、服務(wù)器托管、自適應(yīng)網(wǎng)站云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司