日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

TCP滑动窗口控制

發(fā)布時(shí)間:2024/2/28 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TCP滑动窗口控制 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

TCP滑動(dòng)窗口控制流量的原理

TCP的滑動(dòng)窗口機(jī)制?
? ? ? TCP這個(gè)協(xié)議是網(wǎng)絡(luò)中使用的比較廣泛,他是一個(gè)面向連接的可靠的傳輸協(xié)議。既然是一個(gè)可靠的傳輸協(xié)議就需要對(duì)數(shù)據(jù)進(jìn)行確認(rèn)。TCP協(xié)議里窗口機(jī)制有2種:一種是固定的窗口大小;一種是滑動(dòng)的窗口。這個(gè)窗口大小就是我們一次傳輸幾個(gè)數(shù)據(jù)。對(duì)所有數(shù)據(jù)幀按順序賦予編號(hào),發(fā)送方在發(fā)送過(guò)程中始終保持著一個(gè)發(fā)送窗口,只有落在發(fā)送窗口內(nèi)的幀才允許被發(fā)送;同時(shí)接收方也維持著一個(gè)接收窗口,只有落在接收窗口內(nèi)的幀才允許接收。這樣通過(guò)調(diào)整發(fā)送方窗口和接收方窗口的大小可以實(shí)現(xiàn)流量控制。

?? ? ?TCP滑動(dòng)窗口技術(shù)通過(guò)動(dòng)態(tài)改變窗口大小來(lái)調(diào)節(jié)兩臺(tái)主機(jī)間數(shù)據(jù)傳輸。每個(gè)TCP/IP主機(jī)支持全雙工數(shù)據(jù)傳輸,因此TCP有兩個(gè)滑動(dòng)窗口:一個(gè)用于接收數(shù)據(jù),另一個(gè)用于發(fā)送數(shù)據(jù)。TCP使用肯定確認(rèn)技術(shù),其確認(rèn)號(hào)指的是下一個(gè)所期待的字節(jié)。?假定發(fā)送方設(shè)備以每一次三個(gè)數(shù)據(jù)包的方式發(fā)送數(shù)據(jù),也就是說(shuō),窗口大小為3。發(fā)送方發(fā)送序列號(hào)為1、2、3的三個(gè)數(shù)據(jù)包,接收方設(shè)備成功接收數(shù)據(jù)包,用序列號(hào)4確認(rèn)。發(fā)送方設(shè)備收到確認(rèn),繼續(xù)以窗口大小3發(fā)送數(shù)據(jù)。當(dāng)接收方設(shè)備要求降低或者增大網(wǎng)絡(luò)流量時(shí),可以對(duì)窗口大小進(jìn)行減小或者增加,本例降低窗口大小為2,每一次發(fā)送兩個(gè)數(shù)據(jù)包。當(dāng)接收方設(shè)備要求窗口大小為0,表明接收方已經(jīng)接收了全部數(shù)據(jù),或者接收方應(yīng)用程序沒(méi)有時(shí)間讀取數(shù)據(jù),要求暫停發(fā)送。發(fā)送方接收到攜帶窗口號(hào)為0的確認(rèn),停止這一方向的數(shù)據(jù)傳輸。


我們可以看下面一張圖來(lái)分析一下固定窗口大小有什么問(wèn)題。?
?
這里我們可以看到假設(shè)窗口的大小是1,也是就每次只能發(fā)送一個(gè)數(shù)據(jù)只有接受方對(duì)這個(gè)數(shù)據(jù)進(jìn)行確認(rèn)了以后才能發(fā)送第2個(gè)數(shù)據(jù)。我們可以看到發(fā)送方每發(fā)送一個(gè)數(shù)據(jù)接受方就要給發(fā)送方一個(gè)ACK對(duì)這個(gè)數(shù)據(jù)進(jìn)行確認(rèn)。只有接受到了這個(gè)確認(rèn)數(shù)據(jù)以后發(fā)送方才能傳輸下個(gè)數(shù)據(jù)。?這樣我們考慮一下如果說(shuō)窗口過(guò)小,那么當(dāng)傳輸比較大的數(shù)據(jù)的時(shí)候需要不停的對(duì)數(shù)據(jù)進(jìn)行確認(rèn),這個(gè)時(shí)候就會(huì)造成很大的延遲。如果說(shuō)窗口的大小定義的過(guò)大。我們假設(shè)發(fā)送方一次發(fā)送100個(gè)數(shù)據(jù)。但是接收方只能處理50個(gè)數(shù)據(jù)。這樣每次都會(huì)只對(duì)這50個(gè)數(shù)據(jù)進(jìn)行確認(rèn)。發(fā)送方下一次還是發(fā)送100個(gè)數(shù)據(jù),但是接受方還是只能處理50個(gè)數(shù)據(jù)。這樣就避免了不必要的數(shù)據(jù)來(lái)?yè)砣覀兊逆溌贰K晕覀兙鸵肓嘶瑒?dòng)窗口機(jī)制,窗口的大小并不是固定的而是根據(jù)我們之間的鏈路的帶寬的大小,這個(gè)時(shí)候鏈路是否擁護(hù)塞。接受方是否能處理這么多數(shù)據(jù)了。??
我們看看滑動(dòng)窗口是如何工作的。我們看下面幾張圖。?

?

?
首先是第一次發(fā)送數(shù)據(jù)這個(gè)時(shí)候的窗口大小是根據(jù)鏈路帶寬的大小來(lái)決定的。我們假設(shè)這個(gè)時(shí)候窗口的大小是3。這個(gè)時(shí)候接受方收到數(shù)據(jù)以后會(huì)對(duì)數(shù)據(jù)進(jìn)行確認(rèn)告訴發(fā)送方我下次希望手到的是數(shù)據(jù)是多少。這里我們看到接收方發(fā)送的ACK=3(這是發(fā)送方發(fā)送序列2的回答確認(rèn),下一次接收方期望接收到的是3序列信號(hào))。這個(gè)時(shí)候發(fā)送方收到這個(gè)數(shù)據(jù)以后就知道我第一次發(fā)送的3個(gè)數(shù)據(jù)對(duì)方只收到了2個(gè)。就知道第3個(gè)數(shù)據(jù)對(duì)方?jīng)]有收到。下次在發(fā)送的時(shí)候就從第3個(gè)數(shù)據(jù)開(kāi)始發(fā)。這個(gè)時(shí)候窗口大小就變成了2?。?
?

這個(gè)時(shí)候發(fā)送方發(fā)送2個(gè)數(shù)據(jù)。?

?
看到接收方發(fā)送的ACK是5就表示他下一次希望收到的數(shù)據(jù)是5,發(fā)送方就知道我剛才發(fā)送的2個(gè)數(shù)據(jù)對(duì)方收了這個(gè)時(shí)候開(kāi)始發(fā)送第5個(gè)數(shù)據(jù)。?
這就是滑動(dòng)窗口的工作機(jī)制,當(dāng)鏈路變好了或者變差了這個(gè)窗口還會(huì)發(fā)生變?cè)?#xff0c;并不是第一次協(xié)商好了以后就永遠(yuǎn)不變了。?????????????????
滑動(dòng)窗口協(xié)議?
滑動(dòng)窗口協(xié)議,是TCP使用的一種流量控制方法。該協(xié)議允許發(fā)送方在停止并等待確認(rèn)前可以連續(xù)發(fā)送多個(gè)分組。由于發(fā)送方不必每發(fā)一個(gè)分組就停下來(lái)等待確認(rèn),因此該協(xié)議可以加速數(shù)據(jù)的傳輸。?
只有在接收窗口向前滑動(dòng)時(shí)(與此同時(shí)也發(fā)送了確認(rèn)),發(fā)送窗口才有可能向前滑動(dòng)。????
收發(fā)兩端的窗口按照以上規(guī)律不斷地向前滑動(dòng),因此這種協(xié)議又稱為滑動(dòng)窗口協(xié)議。

總結(jié)

以上是生活随笔為你收集整理的TCP滑动窗口控制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。