溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

linux滑動(dòng)窗口有什么用

發(fā)布時(shí)間:2021-12-17 10:19:30 來源:億速云 閱讀:235 作者:iii 欄目:大數(shù)據(jù)

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

1. 滑動(dòng)窗口

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

  • 保證TCP的可靠性;

  • 提供TCP的流控特性;

1.1 滑動(dòng)窗口保證可靠性

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

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

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

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

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

1.2 滑動(dòng)窗口進(jìn)行流控

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

1.2.1 流量控制

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

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

1.2.2 傳輸效率

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

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

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

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

2. 擁塞控制

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

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

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

2.1 慢開始和擁塞避免

發(fā)送方維持一個(gè)叫做擁塞窗口的狀態(tài)變化,擁塞窗口的大小取決于網(wǎng)絡(luò)的擁塞程度,并且動(dòng)態(tài)的在變化,而發(fā)送方的發(fā)送窗口可能等于擁塞窗口,也可能因?yàn)榻邮辗降慕邮站彺娌粔?,那么發(fā)送窗口就會(huì)小于擁塞窗口。

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

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

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

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

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

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

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

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

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

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

3. 斷線重連

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

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

有兩種情況:

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

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

3.2 讓客戶設(shè)置

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

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

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

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI