TCP報(bào)頭里的那個(gè)窗口大小到底是指什么
TCP通過(guò)滑動(dòng)窗口的概念來(lái)進(jìn)行流量控制,
TCP報(bào)頭里的那個(gè)窗口大小到底是指什么
。設(shè)想在發(fā)送端發(fā)送數(shù)據(jù)的速度很快而接收端接收速度卻很慢的情況下,為了保證數(shù)據(jù)不丟失,顯然需要進(jìn)行流量控制, 協(xié)調(diào)好通信雙方的工作節(jié)奏。所謂滑動(dòng)窗口,可以理解成接收端所能提供的緩沖區(qū)大小。TCP利用一個(gè)滑動(dòng)的窗口來(lái)告訴發(fā)送端對(duì)它所發(fā)送的數(shù)據(jù)能提供多大的緩 沖區(qū)。由于窗口由16位bit所定義,所以接收端TCP 能最大提供65535個(gè)字節(jié)的緩沖。由此,可以利用窗口大小和第一個(gè)數(shù)據(jù)的序列號(hào)計(jì)算出最大可接收的數(shù)據(jù)序列號(hào)。滑動(dòng)窗口本質(zhì)上是描述接受方的TCP數(shù)據(jù)報(bào)緩沖區(qū)大小的數(shù)據(jù),發(fā)送方根據(jù)這個(gè)數(shù)據(jù)來(lái)計(jì)算自己最多能發(fā)送多長(zhǎng)的數(shù)據(jù)。如果發(fā)送方收到接受方的窗口大小為0的TCP數(shù)據(jù)報(bào),那么發(fā)送方將停止發(fā)送數(shù)據(jù),等到接受方發(fā)送窗口大小不為0的數(shù)據(jù)報(bào)的到來(lái)。
關(guān)于滑動(dòng)窗口協(xié)議,還有三個(gè)術(shù)語(yǔ),分別是:
窗口合攏:當(dāng)窗口從左邊向右邊靠近的時(shí)候,這種現(xiàn)象發(fā)生在數(shù)據(jù)被發(fā)送和確認(rèn)的時(shí)候。
窗口張開(kāi):當(dāng)窗口的右邊沿向右邊移動(dòng)的時(shí)候,這種現(xiàn)象發(fā)生在接受端處理了數(shù)據(jù)以后。
窗口收縮:當(dāng)窗口的右邊沿向左邊移動(dòng)的時(shí)候,這種現(xiàn)象不常發(fā)生,
電腦資料
《TCP報(bào)頭里的那個(gè)窗口大小到底是指什么》(http://www.lotusphilosophies.com)。TCP就是用這個(gè)窗口,慢慢的從數(shù)據(jù)的左邊移動(dòng)到右邊,把處于窗口范圍內(nèi)的數(shù)據(jù)發(fā)送出去(但不用發(fā)送所有,只是處于窗口內(nèi)的數(shù)據(jù)可以發(fā)送。)。這就是窗口 的意義。窗口的大小是可以通過(guò)socket來(lái)制定的,4096并不是最理想的窗口大小,而16384則可以使吞吐量大大的增加。
A—————C—————B
如上圖,A與B之間建立TCP連接,滑動(dòng)窗口實(shí)現(xiàn)有兩個(gè)作用:
由于對(duì)稱(chēng)性,只考慮A端發(fā)送窗口和B端接收窗口,有如下兩個(gè)作用
1。B端來(lái)不及處理接收數(shù)據(jù)(控制不同速率主機(jī)間的同步),這時(shí),A通過(guò)B端通知的接收窗口而減緩數(shù)據(jù)的發(fā)送。
2。B端來(lái)得及處理接收數(shù)據(jù),但是在A與B之間某處如C,使得AB之間的整體帶寬性能較差,此時(shí),A端根據(jù)擁塞處理策略(慢啟動(dòng),加倍遞減和緩慢增加)來(lái)更新窗口,以決定數(shù)據(jù)的發(fā)送。
與固定大小的滑窗協(xié)議相比,TCP采用可變大小的滑窗協(xié)議是為了取得更好的性能。
TCP是一個(gè)廣域網(wǎng)協(xié)議,而廣域網(wǎng)環(huán)境下的路由器和主機(jī),各自有著不同的性能和處理能力,在這種情況下,采用固定窗口大小的滑窗協(xié)議會(huì)引起性能上的損失。TCP規(guī)定窗口的大小是由接收方通告的,通過(guò)采取慢啟動(dòng)和擁塞避免算法等機(jī)制來(lái)使帶寬和性能取得最佳。