我們在資料傳輸的時候都希望能夠大量準確的傳輸資料,但是當流量過大時,接收方就可能來不及接受,造成資料的丟失,
流量控制: 就是讓發送方的發送頻率不要太快,要讓接收方來得及接收
使用滑動視窗可以很方便的實作對發送方的流量控制,

直接看上面的圖:
首先在建立連接的時候,B把自己的視窗rwnd定義為400,這就代表一次發送的資料不能超過400,
正式發送資料:
- 第一個,第二個每次正常發送100單位的資料
- 第三次出現了發送資料丟失的問題,
- 然后就接收方向發送方回發資料,這里面有兩個重要的資料:
一個就是已經接收到的資料序號ack
二是自己接下來的接收視窗rwnd
這里因為201-300的資料丟失了,所以ack=201,awnd是根據自己的快取視窗進行改變
- 根據上一條接受方的回發訊息,自己200-300的資料丟失了,而且接收出視窗的大小從400變為了300
所以發送了兩次新數301和401
然后重新發送了丟失的201-300的資料
- 此時接收方又回傳訊息,已經接收序號是500,接收視窗是100
- 然后發送方就發送了501-600的資料
- 最后回發接收視窗是0,說明不再接收資料了,
我們再來看另一個問題
上面說了發送方向接收方發送資料如果丟失的處理方法,如果接收方向發送方回發資料丟失了呢?
這里就要用到了一個新的的東西:持續計時器,
用法:
- 只要TCP連接一方收到了對方的零視窗通知,就會啟動持續計時器,
- 如果時間到了,就會發送一個零視窗探測報文段(僅攜帶1位元組的資料)
- 而對方就在確認這個探測報文段時給出了現在的視窗值,如果是零,則重新設定持續計時器,如果不是零,這個僵局就打破了,
我在其中的兩個問題:
問題一,看上面這個圖,接收方什么回發訊息,或者跟什么有關
解釋:TCP通信是全雙工的,所以可以接收一個訊息發送一次,也可以一接收多個再回發,
eg:
- 一次發送0-500的位元組,每次發送100,然后201-300的丟失了
- 那么接收方回復201的訊息
- 發送方重傳201-300的訊息
- 接收方接收到之后,回復301-500已經接收到了,下一個從501開始發
問題二:如果發送方會發訊息丟失怎么半?
- 有時鐘過時,超時重傳計時器等做保障,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/255934.html
標籤:其他
上一篇:樹狀陣列與線段樹 學習筆記
