利用滑動窗口實(shí)現(xiàn)流量控制
發(fā)布時間:2014/9/6 21:28:40 訪問次數(shù):2674
一般說來,我們總是希望數(shù)據(jù)傳輸?shù)酶煲恍。但如果發(fā)送方把數(shù)據(jù)發(fā)送得過快,接收MSS5131-393MLC方就可能來不及接收,這就會造成數(shù)據(jù)的丟失。所謂流量控制(flow control)就是讓發(fā)送方的發(fā)送速率不要太快,要讓接收方來得及接收。
利用滑動窗口機(jī)制可以很方便地在TCP連接上實(shí)現(xiàn)對發(fā)送方的流量控制。
下面通過圖5-22的例子說明如何利用滑動窗口機(jī)制進(jìn)行流量控制。
設(shè)A向B發(fā)送數(shù)據(jù)。在連接建立時,B告訴了A:“我的接收窗口rwnd=400”(這里nⅣnd表示receiver window)。因此,發(fā)送方的發(fā)送窗口不能超過接收方給出的接收窗口的數(shù)值。請注意,TCP的窗口單位是字節(jié),不是報文段。TCP連接建立時的窗口協(xié)商過程在圖中沒有顯示出來。再設(shè)每一個報文段為100字節(jié)長,而數(shù)據(jù)報文段序號的初始值設(shè)為1(見圖中第一個箭頭上面的序號seq:1。圖中右邊的注釋可幫助理解整個的過程)。請注意,圖中箭頭上面大寫ACK表示首部中的確認(rèn)位ACK,小寫ack衷示確認(rèn)字段的值。
A發(fā)送了序號301至400,還能再發(fā)送100字市新數(shù)據(jù)
A發(fā)送了序號401至500,不能冉發(fā)送新數(shù)據(jù)了
A超時重傳舊的數(shù)據(jù),但不能發(fā)送新的數(shù)據(jù)
允許A發(fā)送序號501至600共100字符
A發(fā)送了序號501至600,不能再發(fā)送
圖5-22利用可變窗口進(jìn)行流量控制舉例
我們應(yīng)注意,接收方的主機(jī)B進(jìn)行了三次流量控制。第一次把窗口減小到rwnd=300,第二次又減到rwnd:100,最后減到rwnd=0,即不允許發(fā)送方再發(fā)送數(shù)據(jù)了a這種使發(fā)送方暫停發(fā)送的狀態(tài)將持續(xù)到主機(jī)B重新發(fā)出一個新的窗口值為止。我們還應(yīng)注意到,B向A發(fā)送的三個報文段都設(shè)置了ACK =1,只有在ACK=1時確認(rèn)號字段才有意義。
現(xiàn)在我們考慮一種情況。在圖5-22中,B向A發(fā)送了零窗口的報文段后不久,B的接收緩存又有了一些存儲空間。于是B向A發(fā)送了rwnd=400的報文段。然而這個報文段在傳送過程中丟失了。A一直等待收到B發(fā)送的非零窗口的通知,而B也一直等待A發(fā)送的
數(shù)據(jù)。如果沒有其他措施,這種互相等待的死鎖局面將一直延續(xù)下去。
為了解決這個問題,TCP為每一個連接設(shè)有一個持續(xù)計(jì)時器(persistence timer)。只要TCP連接的一方收到對方的零窗口通知,就啟動持續(xù)計(jì)時器。若持續(xù)計(jì)時器設(shè)置的時間到期,就發(fā)送一個零窗口探測報文段(僅攜帶1字節(jié)的數(shù)據(jù)),而對方就在確認(rèn)這個探測報文段時給出了現(xiàn)在的窗口值“。。如果窗口仍然是零,那么收到這個報文段的一方就重新設(shè)置持續(xù)計(jì)時器。如果窗口不是零,那么死鎖的僵局就可以打破了。
一般說來,我們總是希望數(shù)據(jù)傳輸?shù)酶煲恍5绻l(fā)送方把數(shù)據(jù)發(fā)送得過快,接收MSS5131-393MLC方就可能來不及接收,這就會造成數(shù)據(jù)的丟失。所謂流量控制(flow control)就是讓發(fā)送方的發(fā)送速率不要太快,要讓接收方來得及接收。
利用滑動窗口機(jī)制可以很方便地在TCP連接上實(shí)現(xiàn)對發(fā)送方的流量控制。
下面通過圖5-22的例子說明如何利用滑動窗口機(jī)制進(jìn)行流量控制。
設(shè)A向B發(fā)送數(shù)據(jù)。在連接建立時,B告訴了A:“我的接收窗口rwnd=400”(這里nⅣnd表示receiver window)。因此,發(fā)送方的發(fā)送窗口不能超過接收方給出的接收窗口的數(shù)值。請注意,TCP的窗口單位是字節(jié),不是報文段。TCP連接建立時的窗口協(xié)商過程在圖中沒有顯示出來。再設(shè)每一個報文段為100字節(jié)長,而數(shù)據(jù)報文段序號的初始值設(shè)為1(見圖中第一個箭頭上面的序號seq:1。圖中右邊的注釋可幫助理解整個的過程)。請注意,圖中箭頭上面大寫ACK表示首部中的確認(rèn)位ACK,小寫ack衷示確認(rèn)字段的值。
A發(fā)送了序號301至400,還能再發(fā)送100字市新數(shù)據(jù)
A發(fā)送了序號401至500,不能冉發(fā)送新數(shù)據(jù)了
A超時重傳舊的數(shù)據(jù),但不能發(fā)送新的數(shù)據(jù)
允許A發(fā)送序號501至600共100字符
A發(fā)送了序號501至600,不能再發(fā)送
圖5-22利用可變窗口進(jìn)行流量控制舉例
我們應(yīng)注意,接收方的主機(jī)B進(jìn)行了三次流量控制。第一次把窗口減小到rwnd=300,第二次又減到rwnd:100,最后減到rwnd=0,即不允許發(fā)送方再發(fā)送數(shù)據(jù)了a這種使發(fā)送方暫停發(fā)送的狀態(tài)將持續(xù)到主機(jī)B重新發(fā)出一個新的窗口值為止。我們還應(yīng)注意到,B向A發(fā)送的三個報文段都設(shè)置了ACK =1,只有在ACK=1時確認(rèn)號字段才有意義。
現(xiàn)在我們考慮一種情況。在圖5-22中,B向A發(fā)送了零窗口的報文段后不久,B的接收緩存又有了一些存儲空間。于是B向A發(fā)送了rwnd=400的報文段。然而這個報文段在傳送過程中丟失了。A一直等待收到B發(fā)送的非零窗口的通知,而B也一直等待A發(fā)送的
數(shù)據(jù)。如果沒有其他措施,這種互相等待的死鎖局面將一直延續(xù)下去。
為了解決這個問題,TCP為每一個連接設(shè)有一個持續(xù)計(jì)時器(persistence timer)。只要TCP連接的一方收到對方的零窗口通知,就啟動持續(xù)計(jì)時器。若持續(xù)計(jì)時器設(shè)置的時間到期,就發(fā)送一個零窗口探測報文段(僅攜帶1字節(jié)的數(shù)據(jù)),而對方就在確認(rèn)這個探測報文段時給出了現(xiàn)在的窗口值“。。如果窗口仍然是零,那么收到這個報文段的一方就重新設(shè)置持續(xù)計(jì)時器。如果窗口不是零,那么死鎖的僵局就可以打破了。
上一篇:使用選擇確認(rèn)SACK
上一篇:必須考慮傳輸效率
熱門點(diǎn)擊
- 網(wǎng)橋的自學(xué)習(xí)和轉(zhuǎn)發(fā)幀的一般步驟
- 為什么說UDP是面向報文的
- 以太網(wǎng)交換機(jī)有何特點(diǎn)
- 幀的開始和結(jié)束的標(biāo)記
- 利用滑動窗口實(shí)現(xiàn)流量控制
- IP地址都是32位的二進(jìn)制代碼
- RIP協(xié)議的特點(diǎn)
- 用幀首部和幀尾部封裝成幀
- 實(shí)驗(yàn)內(nèi)容及實(shí)驗(yàn)步驟
- 差錯檢測
推薦技術(shù)資料
- CV/CC InnoSwitch3-AQ 開
- URF1DxxM-60WR3系
- 1-6W URA24xxN-x
- 閉環(huán)磁通門信號調(diào)節(jié)芯片NSDRV401
- SK-RiSC-SOM-H27X-V1.1應(yīng)
- RISC技術(shù)8位微控制器參數(shù)設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究